From: <Saved by Windows Internet Explorer 7>
Subject: AusTender: Current ATM View - NLA REOI 07/087
Date: Wed, 22 Aug 2007 08:40:34 +1000
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C7E498.1B00FD00"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/?event=public.advert.show&AdvertUUID=8738646D-B0C9-173B-DE64528B40190F69

=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><HEAD><TITLE>AusTender: Current ATM View - NLA REOI 07/087</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dutf-8"><LINK media=3Dall=20
href=3D"https://www.tenders.gov.au/styles/styles_frontend_main.css" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK media=3Dprint=20
href=3D"https://www.tenders.gov.au/styles/styles_frontend_print.css" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK media=3Dall=20
href=3D"https://www.tenders.gov.au/styles/styles_reports.css" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK media=3Dall=20
href=3D"https://www.tenders.gov.au/styles/calendar-atii.css" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK href=3D"/favicon.ico" rel=3D"shortcut icon">
<SCRIPT =
src=3D"https://www.tenders.gov.au/lib/jscalendar-0.9.6/calendar.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"https://www.tenders.gov.au/lib/jscalendar-0.9.6/lang/calendar-en.j=
s"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"https://www.tenders.gov.au/lib/jscalendar-0.9.6/calendar-setup.js"=
=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"https://www.tenders.gov.au/lib/prototype-1.5.0_rc1/prototype.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"https://www.tenders.gov.au/lib/scriptaculous-js-1.6.4/scriptaculou=
s.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"https://www.tenders.gov.au/lib/cfajax.1.3/core/suggest.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/cfajax.1.3/core/engine.js" =

type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/cfajax.1.3/core/util.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"https://www.tenders.gov.au/lib/cfajax.1.3/core/settings.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/model/Response.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/model/ATM.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/helpBoxes.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/locationSelector.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/organisationSelector.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"https://www.tenders.gov.au/lib/search.js"=20
type=3Dtext/javascript></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16414" name=3DGENERATOR></HEAD>
<BODY>
<DIV id=3Dheader><A href=3D"https://www.tenders.gov.au/"><IMG=20
alt=3D"AusTender - The Australian Government Tender System"=20
src=3D"https://www.tenders.gov.au/images/header_logo.gif"></A> </DIV>
<FORM id=3Dheader-tools action=3D./ method=3Dget><INPUT id=3Dform-event =
type=3Dhidden=20
value=3Dpublic.advancedsearch.keyword name=3Devent> <A id=3Dhome-link=20
href=3D"https://www.tenders.gov.au/">Home</A> <INPUT id=3Dsearch-text =
name=3Dkeyword> <INPUT id=3Dsearch-submit type=3Dsubmit value=3DSearch> =
<A=20
href=3D"https://www.tenders.gov.au/?event=3Dpublic.advancedsearch.home">A=
dvanced=20
Search</A> </FORM>
<DIV id=3Dleft-col-wrapper>
<DIV id=3Dleft-col>
<DIV class=3Dpad>
<FORM id=3Dlogin-form action=3D?event=3Dpublic.login method=3Dpost=20
encType=3Dmultipart/form-data><LABEL =
for=3Dlogin-username>Username</LABEL> (email)=20
<BR><INPUT id=3Dlogin-username name=3Dpub-auth-username> <LABEL=20
for=3Dlogin-password>Password</LABEL> <BR><INPUT id=3Dlogin-password =
type=3Dpassword=20
name=3Dpub-auth-password> <INPUT id=3Dlogin-submit type=3Dsubmit =
value=3DLogin>=20
<P>=C2=BB <A=20
href=3D"https://www.tenders.gov.au/?event=3Dpublic.registereduser.forgotP=
assFormStep1">Forgotten=20
password?</A> <BR>=C2=BB <A=20
href=3D"https://www.tenders.gov.au/?event=3Dpublic.registereduser.new">Ne=
w user=20
registration</A> </P></FORM>
<H2>View</H2>
<UL>
  <LI><A=20
  =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.atmproposed.list">Prop=
osed=20
  ATMs</A>=20
  <LI class=3Dselected><A=20
  href=3D"https://www.tenders.gov.au/?event=3Dpublic.ATM.list">Current =
ATMs</A>=20
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.ATM.closed">Closed=20
  ATMs</A>=20
  <LI><A=20
  =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.contractsReported">Con=
tracts=20
  Reported</A>=20
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.MUL.list">Multi-Use=20
  Lists</A>=20
  <LI><A=20
  =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.annualProcPlan.list">P=
rocurement=20
  Plans</A> </LI></UL>
<H2>Info &amp; Links</H2>
<UL>
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.agency.list">Agency=20
  Addresses</A>=20
  <LI><A=20
  =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.relatedlink.list">Rela=
ted=20
  Links</A>=20
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.help.list">Help</A>=20
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.contactus.show">Contac=
t=20
  Us</A> </LI></UL>
<H2>Policies</H2>
<UL>
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.policydocs.list">Polic=
y=20
  Documents</A>=20
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.termsOfUse">Terms of=20
  Use</A>=20
  <LI><A=20
  =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.privacyStatement">Priv=
acy=20
  Statement</A> </LI></UL></DIV></DIV></DIV>
<DIV id=3Dmain-content>
<DIV class=3Dpad>
<OL id=3Dbread-crumbs>
  <LI class=3Dfirst-item><A=20
  href=3D"https://www.tenders.gov.au/?event=3Dpublic.ATM.list">Current =
ATM List</A>=20
  </LI>
  <LI><A=20
  =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.advancedsearch.home&am=
p;type=3DatmEvent&amp;atmType=3Dpublished">Advanced=20
  Search</A> </LI>
  <LI><A =
href=3D"https://www.tenders.gov.au/?event=3Dpublic.ATM.list">Current ATM =

  List</A> </LI>
  <LI>Current ATM View - NLA REOI 07/087 </LI></OL>
<H1>Current ATM View - NLA REOI 07/087</H1>
<H2 class=3Dhighlight>Design Consultants for Treasures Gallery &amp; New =

Exhibition Gallery</H2>
<TABLE class=3Dmedium-th>
  <TBODY>
  <TR>
    <TH>ATM ID</TH>
    <TD>NLA REOI 07/087</TD></TR>
  <TR>
    <TH>Agency</TH>
    <TD>National Library of Australia</TD></TR>
  <TR>
    <TH>Category</TH>
    <TD>81101508 - Architectural engineering</TD></TR>
  <TR>
    <TH>Close Date &amp; Time</TH>
    <TD>20-Sep-2007 2:00 pm <SPAN class=3Dsmall>(ACT Local =
time)</SPAN><BR><A=20
      onclick=3D"javascript:showTimeZones('20-Sep-2007', =
'14:00','public');"=20
      href=3D"javascript:void(0)">Show close time for other time =
zones</A>=20
      <DIV class=3DhelpBoxContainer>
      <DIV id=3DtimeZones></DIV></DIV></TD></TR>
  <TR>
    <TH>Publish Date</TH>
    <TD>21-Aug-2007 </TD></TR>
  <TR>
    <TH>Location</TH>
    <TD>
      <P>ACT</P>
      <P>Canberra</P></TD></TR>
  <TR>
    <TH>ATM Type</TH>
    <TD>Expression of Interest</TD></TR>
  <TR>
    <TD colSpan=3D2>
      <HR>
    </TD></TR>
  <TR>
    <TH>Description</TH>
    <TD>
      <P>Description of Requirement <BR>The National Library of =
Australia is=20
      developing a state-of-the-art Treasures Gallery and new Exhibition =
Gallery=20
      to open in 2009. The current Exhibition Gallery area on the ground =
floor=20
      will be expanded, redesigned and refurbished to include the two =
gallery=20
      spaces. The Treasures Gallery will be a gift to the nation from =
the=20
      National Library and from a group of generous Australian =
individuals,=20
      foundations and businesses. Both the Treasures Gallery and =
Exhibition=20
      Gallery are to be of a very high standard in terms of the display=20
      environment and exhibition design, and in the interpretation of =
the items=20
      on view. In order to achieve a truly innovative, exciting and =
world-class=20
      set of gallery spaces, the National Library wishes to obtain the =
services=20
      of an experienced Design Consultant for this major building works =
project.=20
      </P>
      <P>It is proposed that the requirement be divided into two =
components to=20
      ensure that the best solution and skill mix are provided to the=20
      Library.</P>
      <P>The Library is seeking both:</P>
      <P>=E2=80=94 an Exhibition Design Consultant =E2=80=93 who will be =
responsible for the=20
      exhibition pre-conceptual and conceptual interior design and =
fit-out=20
      aspects of the project, including, but not limited to, furniture,=20
      lighting, and signage design and documentation; and</P>
      <P>=E2=80=94 a Principal Design Consultant =E2=80=93 who will be =
responsible for, but not=20
      limited to, project scope documentation, procurement assistance,=20
      superintendent for construction and project completion.</P>
      <P>The Library reserves the right should we proceed to a formal =
Request=20
      for Tender, to separate the two design components.</P>
      <P>Comments from Respondents on this approach are welcome.</P>
      <P>The Library=E2=80=99s proposed development project will include =
the following=20
      spaces (see floorplans attached at Appendix A):<BR>-&nbsp;the =
Treasures=20
      Gallery estimated at approximately 350 square metres<BR>-&nbsp;the =

      Exhibition Gallery of approximately 420 square =
metres<BR>-&nbsp;the=20
      Gallery foyer display area of approximately 30 lineal =
metres<BR>-&nbsp;an=20
      entry/exit foyer to the galleries of approximately 35 square=20
      metres<BR>-&nbsp;a multipurpose shared area adjacent to the =
galleries and=20
      Main Reading Room for visitors and groups.</P></TD></TR>
  <TR>
    <TH>Conditions for Participation</TH>
    <TD>NATIONAL CODE OF PRACTICE FOR THE BUILDING AND CONSTRUCTION =
INDUSTRY=20
      <BR></TD></TR>
  <TR>
    <TH>Timeframe for Delivery</TH>
    <TD>January 2008</TD></TR>
  <TR>
    <TH>Address for Lodgement</TH>
    <TD>Tender Box <BR>Lower Ground Floor 2 Security Room <BR>National =
Library=20
      of Australia <BR>CANBERRA ACT 2600</TD></TR>
  <TR>
    <TD colSpan=3D2>
      <HR>
    </TD></TR>
  <TR>
    <TH>Contact Person</TH>
    <TD>Alan Freemantle</TD></TR>
  <TR>
    <TH>Phone Number</TH>
    <TD>(02) 6262 1320</TD></TR>
  <TR>
    <TH>Fax Number</TH>
    <TD>(02) 6273 4535</TD></TR>
  <TR>
    <TH>Email Address</TH>
    <TD><A =
href=3D"mailto:afreeman@nla.gov.au">afreeman@nla.gov.au</A></TD></TR>
  <TR>
    <TH>Document(s) Contact Name</TH>
    <TD>Alan Freemantle</TD></TR>
  <TR>
    <TH>Document(s) Contact Phone</TH>
    <TD>(02) 6262 1320</TD></TR>
  <TR>
    <TH>Document(s) Contact Email</TH>
    <TD><A =
href=3D"mailto:afreeman@nla.gov.au">afreeman@nla.gov.au</A></TD></TR>
  <TR>
    <TH>Web Address</TH>
    <TD><A=20
      =
href=3D"http://www.nla.gov.au/tenders">http://www.nla.gov.au/tenders</A><=
/TD></TR></TBODY></TABLE></DIV></DIV></BODY></HTML>

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: https://www.tenders.gov.au/images/header_logo.gif

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
/wbwABfwASfwAjfwA0fwBPfvgAAAOw==

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/styles/styles_frontend_main.css

* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
BODY {
	FONT-SIZE: 0.75em; BACKGROUND: white; COLOR: black; LINE-HEIGHT: =
1.25em; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif
}
H1 {
	CLEAR: both; FONT-WEIGHT: normal; FONT-SIZE: 2em; MARGIN-BOTTOM: 0.6em; =
PADDING-BOTTOM: 8px; COLOR: #003366; LINE-HEIGHT: 1em; BORDER-BOTTOM: =
#dddddd 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif
}
H2 {
	FONT-SIZE: 1.1em; MARGIN-BOTTOM: 1em; COLOR: #003366
}
H2 A {
	COLOR: white! important; TEXT-DECORATION: none! important
}
H2 A:hover {
	COLOR: #ffff99! important
}
H2 A:hover:visited {
	COLOR: #ffff99! important
}
H2 A:visited {
	COLOR: #993300! important
}
H3 {
	FONT-SIZE: 1em; MARGIN-BOTTOM: 0px
}
H4 {
	FONT-SIZE: 1em; MARGIN-BOTTOM: 0px; COLOR: #555555
}
P {
	MARGIN-BOTTOM: 1em
}
OL {
	MARGIN: 0px 0px 1em 2em
}
OL LI {
	MARGIN-BOTTOM: 0.5em
}
UL {
	MARGIN-BOTTOM: 1em; MARGIN-LEFT: 2em
}
#related-links LI {
	PADDING-BOTTOM: 7px; PADDING-TOP: 7px
}
#policy-documents LI {
	PADDING-BOTTOM: 7px; PADDING-TOP: 7px
}
#policy-documents LI {
	FONT-WEIGHT: bolder
}
#policy-documents LI A {
	FONT-WEIGHT: normal
}
UL LI {
	MARGIN-BOTTOM: 0.5em
}
FIELDSET {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
LEGEND {
	FONT-WEIGHT: bold; FONT-SIZE: 1.1em; MARGIN-BOTTOM: 1em; COLOR: #003366
}
INPUT {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; WIDTH: =
20em; PADDING-TOP: 2px
}
INPUT {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
FONT-SIZE: 1em; BACKGROUND: url(../images/input_bg2.gif) white repeat-x =
0px 0px; BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px =
solid; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif
}
TEXTAREA {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
FONT-SIZE: 1em; BACKGROUND: url(../images/input_bg2.gif) white repeat-x =
0px 0px; BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px =
solid; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif
}
SELECT {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
FONT-SIZE: 1em; BACKGROUND: url(../images/input_bg2.gif) white repeat-x =
0px 0px; BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px =
solid; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif
}
INPUT:focus {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; =
BACKGROUND-IMAGE: none; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: =
black 1px solid
}
TEXTAREA:focus {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; =
BACKGROUND-IMAGE: none; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: =
black 1px solid
}
SELECT:focus {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; =
BACKGROUND-IMAGE: none; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: =
black 1px solid
}
TEXTAREA {
	WIDTH: 400px
}
SELECT {
	MARGIN-BOTTOM: 1px
}
* HTML SELECT {
	MARGIN: 0px
}
SELECT OPTION {
	PADDING-RIGHT: 1px; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
INPUT.radio {
	BORDER-TOP-WIDTH: 0px; MARGIN-TOP: 2px; BORDER-LEFT-WIDTH: 0px; =
BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; MARGIN-BOTTOM: 2px; =
VERTICAL-ALIGN: middle; WIDTH: auto; BACKGROUND-COLOR: transparent; =
BORDER-RIGHT-WIDTH: 0px
}
INPUT.checkbox {
	BORDER-TOP-WIDTH: 0px; MARGIN-TOP: 2px; BORDER-LEFT-WIDTH: 0px; =
BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; MARGIN-BOTTOM: 2px; =
VERTICAL-ALIGN: middle; WIDTH: auto; BACKGROUND-COLOR: transparent; =
BORDER-RIGHT-WIDTH: 0px
}
A:link {
	COLOR: #2b5f99; TEXT-DECORATION: underline
}
A:visited {
	COLOR: #2b5f99; TEXT-DECORATION: underline
}
A:active {
	COLOR: #2b5f99; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #2b5f99; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #000033
}
A IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
TABLE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1em; MARGIN-BOTTOM: =
1em; PADDING-BOTTOM: 0px; WIDTH: 100%; PADDING-TOP: 0px; =
BORDER-COLLAPSE: collapse
}
* HTML TABLE {
	WIDTH: 100%
}
TD {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 0.5em; =
VERTICAL-ALIGN: top; PADDING-TOP: 3px
}
TH {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; =
VERTICAL-ALIGN: top; WIDTH: 20%; PADDING-TOP: 3px; TEXT-ALIGN: left
}
HR {
	CLEAR: both; PADDING-RIGHT: 0px; BORDER-TOP: #dddddd 1px solid; =
PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 1em 0px; PADDING-TOP: 0px; HEIGHT: 0px; =
BORDER-RIGHT-WIDTH: 0px
}
* HTML HR {
	MARGIN-TOP: 0px
}
BLOCKQUOTE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0px 1em; PADDING-TOP: 0px; FONT-STYLE: =
italic; TEXT-ALIGN: center
}
.calendar {
	VERTICAL-ALIGN: top
}
* HTML .calendar {
	MARGIN-TOP: 1px
}
#header {
	BACKGROUND: url(../images/header_bg_tile.gif) white repeat-x 0px 100%
}
#header IMG {
	DISPLAY: block
}
#header IMG.init-logo {
	RIGHT: 0px; POSITION: absolute; TOP: 0px
}
#header-tools {
	PADDING-RIGHT: 14px; PADDING-LEFT: 14px; BACKGROUND: =
url(../images/header_tools_bg_tile.gif) #999863 repeat-x 0px 0px; =
PADDING-BOTTOM: 6px; PADDING-TOP: 6px; BORDER-BOTTOM: #84845a 1px solid; =
TEXT-ALIGN: right
}
* HTML #header-tools {
	PADDING-TOP: 5px
}
#header-tools A {
	FONT-WEIGHT: bold; COLOR: white
}
#header-tools A:hover {
	COLOR: black
}
#header-tools #home-link {
	FLOAT: left; LINE-HEIGHT: 1.5em
}
* HTML #header-tools #home-link {
	LINE-HEIGHT: 1.8em
}
#header-tools INPUT#search-text {
	BORDER-RIGHT: #84845a 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#84845a 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; BORDER-LEFT: #84845a 1px solid; WIDTH: 16em; =
PADDING-TOP: 2px; BORDER-BOTTOM: #84845a 1px solid; HEIGHT: 1.4em
}
#header-tools INPUT#search-submit {
	BORDER-RIGHT: #656547 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: =
#656547 1px solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; =
BACKGROUND-IMAGE: none; PADDING-BOTTOM: 2px; VERTICAL-ALIGN: middle; =
BORDER-LEFT: #656547 1px solid; WIDTH: auto; COLOR: white; MARGIN-RIGHT: =
8px; PADDING-TOP: 0px; BORDER-BOTTOM: #656547 1px solid; HEIGHT: 1.75em; =
BACKGROUND-COLOR: #84845a
}
#header-tools INPUT#search-submit:hover {
	COLOR: black
}
* HTML #header-tools INPUT#search-submit {
	PADDING-RIGHT: 0px; MARGIN-TOP: 1px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; LINE-HEIGHT: 1.08em; PADDING-TOP: 0px; HEIGHT: 1.75em
}
#left-col-wrapper {
	POSITION: relative
}
#left-col {
	BORDER-RIGHT: #e2e2e2 2px dotted; FONT-SIZE: 1em; BACKGROUND: =
url(../images/main_body_bg.gif) repeat-x 0px 0px; LEFT: 0px; WIDTH: =
200px; POSITION: absolute
}
#left-col DIV.pad {
	PADDING-RIGHT: 14px; PADDING-LEFT: 14px; PADDING-BOTTOM: 6px; =
PADDING-TOP: 14px
}
#left-col H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; FONT-SIZE: =
1em; BACKGROUND: url(../images/nav_item_bg2.gif) #f08800 repeat-x 0px =
0px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: white; PADDING-TOP: 2px
}
#left-col UL {
	CLEAR: both; FONT-SIZE: 0.9em; MARGIN: 0px 0px 1.5em; LIST-STYLE-TYPE: =
none
}
#left-col UL LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; BORDER-BOTTOM: #dddddd 1px solid; =
LIST-STYLE-TYPE: none
}
#left-col UL LI.selected A {
	FONT-WEIGHT: bold; BACKGROUND-COLOR: #dddddd
}
#left-col UL LI A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 16px; BACKGROUND: =
url(../images/nav_bullet.gif) no-repeat 6px 9px; PADDING-BOTTOM: 4px; =
COLOR: black; PADDING-TOP: 4px; TEXT-DECORATION: none
}
#left-col UL LI A:hover {
	BACKGROUND-COLOR: #dddddd
}
#login-form {
	BORDER-RIGHT: #84845a 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#84845a 1px solid; PADDING-LEFT: 10px; FONT-SIZE: 0.9em; BACKGROUND: =
url(../images/login_bg.gif) #b8b772 repeat-x 0px 100%; MARGIN-BOTTOM: =
1.5em; PADDING-BOTTOM: 0px; BORDER-LEFT: #84845a 1px solid; WIDTH: =
150px; COLOR: white; PADDING-TOP: 10px; BORDER-BOTTOM: #84845a 1px solid
}
#login-form INPUT#login-username {
	BORDER-RIGHT: #84845a 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#84845a 1px solid; PADDING-LEFT: 2px; MARGIN-BOTTOM: 0.5em; =
PADDING-BOTTOM: 2px; BORDER-LEFT: #84845a 1px solid; WIDTH: 146px; =
PADDING-TOP: 2px; BORDER-BOTTOM: #84845a 1px solid
}
#login-form INPUT#login-password {
	BORDER-RIGHT: #84845a 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#84845a 1px solid; PADDING-LEFT: 2px; MARGIN-BOTTOM: 0.5em; =
PADDING-BOTTOM: 2px; BORDER-LEFT: #84845a 1px solid; WIDTH: 146px; =
PADDING-TOP: 2px; BORDER-BOTTOM: #84845a 1px solid
}
#login-form #login-submit {
	BORDER-RIGHT: #656547 1px solid; BORDER-TOP: #656547 1px solid; =
FONT-WEIGHT: bold; FONT-SIZE: 1.1em; BACKGROUND-IMAGE: none; =
MARGIN-BOTTOM: 4px; BORDER-LEFT: #656547 1px solid; WIDTH: auto; COLOR: =
white; BORDER-BOTTOM: #656547 1px solid; BACKGROUND-COLOR: #84845a
}
#login-form #login-submit:hover {
	COLOR: black
}
#login-form LABEL {
	FONT-WEIGHT: bold; FONT-SIZE: 1.1em; COLOR: white
}
#login-form A {
	COLOR: white
}
#login-form A:hover {
	COLOR: black
}
#main-content {
	MARGIN-LEFT: 200px
}
.has-rightcol#main-content {
	MARGIN-RIGHT: 16em
}
#main-content DIV.pad {
	PADDING-RIGHT: 14px; PADDING-LEFT: 14px; PADDING-BOTTOM: 14px; =
PADDING-TOP: 10px
}
.horiz {
	WIDTH: 100%
}
.horiz THEAD TH.title {
	WIDTH: 40%
}
SPAN.alpha {
	PADDING-RIGHT: 2em; FONT-WEIGHT: bold
}
SPAN.num {
	PADDING-RIGHT: 2em; FONT-WEIGHT: bold
}
SPAN.showAll {
	PADDING-RIGHT: 2em; FONT-WEIGHT: bold
}
#step-box {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; RIGHT: 14px; BACKGROUND: white; =
PADDING-BOTTOM: 0.5em; WIDTH: 15em; PADDING-TOP: 0px; POSITION: =
absolute; TOP: 190px
}
#step-box UL {
	MARGIN: 0px; LIST-STYLE-TYPE: none
}
#step-box LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 26px; BACKGROUND: =
url(../images/checkbox_off.gif) no-repeat 4px 2px; PADDING-BOTTOM: 6px; =
MARGIN: 0px; PADDING-TOP: 6px
}
* HTML #step-box LI {
	BACKGROUND-POSITION: 4px 3px
}
#step-box LI.completed-step {
	BACKGROUND-IMAGE: url(../images/checkbox_on.gif)
}
#step-box LI.current-step {
	FONT-WEIGHT: bold
}
UL.amendments {
	MARGIN-LEFT: 2.5em
}
#error-message {
	BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: red 1px =
solid; PADDING-LEFT: 10px; MARGIN-BOTTOM: 1em; PADDING-BOTTOM: 4px; =
BORDER-LEFT: red 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px =
solid; BACKGROUND-COLOR: #f9e1e1
}
#filename-message {
	BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: red 1px =
solid; PADDING-LEFT: 10px; MARGIN-BOTTOM: 1em; PADDING-BOTTOM: 4px; =
BORDER-LEFT: red 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px =
solid; BACKGROUND-COLOR: #f9e1e1
}
#duplicate-message {
	BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: red 1px =
solid; PADDING-LEFT: 10px; MARGIN-BOTTOM: 1em; PADDING-BOTTOM: 4px; =
BORDER-LEFT: red 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px =
solid; BACKGROUND-COLOR: #f9e1e1
}
#error-message H2 {
	COLOR: red
}
#filename-message {
	DISPLAY: none
}
#duplicate-message {
	DISPLAY: none
}
#response-message {
	BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: red 1px =
solid; PADDING-LEFT: 10px; BACKGROUND: #ffffff; MARGIN-BOTTOM: 1em; =
PADDING-BOTTOM: 10px; BORDER-LEFT: red 1px solid; PADDING-TOP: 10px; =
BORDER-BOTTOM: red 1px solid
}
#response-message IMG {
	PADDING-RIGHT: 6px; FLOAT: left
}
#response-message H3 {
	FONT-SIZE: 1.3em; MARGIN: 4px 0px; COLOR: red
}
#response-message P {
	FONT-WEIGHT: bold; FONT-SIZE: 1.1em; MARGIN: 6px 0px; COLOR: red
}
#system-notice-display {
	BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: red 1px =
solid; PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 1.2em; =
BACKGROUND: #ffffff; MARGIN-BOTTOM: 1em; PADDING-BOTTOM: 10px; =
BORDER-LEFT: red 1px solid; COLOR: red; PADDING-TOP: 10px; =
BORDER-BOTTOM: red 1px solid
}
#bread-crumbs {
	DISPLAY: block; FONT-SIZE: 0.9em; MARGIN-BOTTOM: 1em; MARGIN-LEFT: 0px; =
LIST-STYLE-TYPE: none; HEIGHT: 1.9em
}
#bread-crumbs LI {
	PADDING-LEFT: 14px; BACKGROUND: url(../images/bullet_breadcrumb.gif) =
no-repeat 0px 60%; FLOAT: left; MARGIN-RIGHT: 10px
}
* HTML #bread-crumbs LI {
	BACKGROUND-POSITION: 0px 70%
}
#bread-crumbs LI.first-item {
	PADDING-LEFT: 0px; BACKGROUND-IMAGE: none
}
#footer {
	PADDING-RIGHT: 0px; BORDER-TOP: #dddddd 1px solid; PADDING-LEFT: 0px; =
FONT-SIZE: 0.85em; MIN-HEIGHT: 2em; PADDING-BOTTOM: 6px; MARGIN: 0px =
14px 0px 214px; COLOR: #888888; PADDING-TOP: 6px
}
* HTML #footer {
	HEIGHT: 1%
}
#footer P {
	FLOAT: right
}
#footer UL {
	MARGIN: 0px; LIST-STYLE-TYPE: none
}
#footer LI {
	BORDER-RIGHT: #888888 1px solid; PADDING-RIGHT: 6px; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px 6px 0px 0px; LINE-HEIGHT: =
1.1em; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#footer LI.last-item {
	BORDER-RIGHT-WIDTH: 0px
}
.listStyle {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.listItemStyle {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 2px; BORDER-LEFT: #666666 1px solid; WIDTH: 460px; =
CURSOR: pointer; PADDING-TOP: 2px; BORDER-BOTTOM: #666666 1px solid
}
.listItemKey {
	PADDING-LEFT: 3px; FONT-WEIGHT: bold; TEXT-ALIGN: left
}
.listItemValue {
	PADDING-LEFT: 2px; TEXT-ALIGN: right
}
.fldcategoryLookup {
	WIDTH: 456px
}
.criteria {
	COLOR: #ff0000
}
.clear-hidden {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 1px; PADDING-TOP: 0px
}
.clear-width {
	WIDTH: auto! important
}
.clear-both {
	CLEAR: both
}
.display-block {
	CLEAR: both; DISPLAY: block
}
.no-border {
	BORDER-TOP-WIDTH: 0px! important; BORDER-LEFT-WIDTH: 0px! important; =
BORDER-BOTTOM-WIDTH: 0px! important; BORDER-RIGHT-WIDTH: 0px! important
}
.float-right {
	FLOAT: right
}
.error {
	COLOR: #d21c1c
}
INPUT.error {
	BORDER-RIGHT: red 1px solid; BORDER-TOP: red 1px solid; =
BACKGROUND-IMAGE: none; BORDER-LEFT: red 1px solid; COLOR: black; =
BORDER-BOTTOM: red 1px solid; BACKGROUND-COLOR: #f9e1e1
}
SELECT.error {
	BORDER-RIGHT: red 1px solid; BORDER-TOP: red 1px solid; =
BACKGROUND-IMAGE: none; BORDER-LEFT: red 1px solid; COLOR: black; =
BORDER-BOTTOM: red 1px solid; BACKGROUND-COLOR: #f9e1e1
}
.alert {
	COLOR: #ff1c1c
}
.no-margin {
	MARGIN: 0px
}
.no-bg {
	BACKGROUND-IMAGE: none! important
}
.highlight {
	COLOR: #802330
}
.clear-hr {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1px; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0px 15px; LINE-HEIGHT: 1px; =
PADDING-TOP: 12px; BORDER-BOTTOM: #dddddd 1px solid
}
.feature-images {
	MARGIN-BOTTOM: 16px
}
.text-align-center {
	TEXT-ALIGN: center
}
.text-align-right {
	TEXT-ALIGN: right
}
H2.highlight {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; BACKGROUND: =
url(../images/nav_item_bg2.gif) #f08800 repeat-x 0px 0px; MARGIN-BOTTOM: =
4px; PADDING-BOTTOM: 3px; COLOR: white; PADDING-TOP: 3px
}
H2.highlight SPAN.searchTerm {
	COLOR: black
}
.small {
	FONT-SIZE: 0.8em
}
TH SPAN.small {
	FONT-WEIGHT: normal
}
.has-amendments {
	POSITION: relative
}
.has-steps {
	MARGIN-RIGHT: 200px
}
TABLE.narrow {
	WIDTH: 50%
}
TABLE.medium-narrow {
	WIDTH: 45%
}
TABLE.extra-narrow {
	WIDTH: 40%
}
TABLE.download-chart TH {
	BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; =
WIDTH: 10%; BORDER-BOTTOM: 1px solid
}
TABLE.download-chart TD {
	BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; =
WIDTH: 10%; BORDER-BOTTOM: 1px solid
}
TABLE.download-chart TD {
	TEXT-ALIGN: center
}
TABLE.download-chart {
	WIDTH: 70%
}
TABLE.four-col TH {
	WIDTH: 20%; WHITE-SPACE: nowrap
}
TABLE.four-col TD {
	WIDTH: 30%
}
IMG.icon {
	VERTICAL-ALIGN: middle
}
.last-updated {
	FONT-SIZE: 0.9em; FLOAT: right; COLOR: #666666
}
INPUT.submit {
	BORDER-RIGHT: #666666 2px outset; PADDING-RIGHT: 4px; BORDER-TOP: =
#666666 2px outset; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; BORDER-LEFT: =
#666666 2px outset; WIDTH: auto; PADDING-TOP: 0px; BORDER-BOTTOM: =
#666666 2px outset
}
INPUT.action-button.submit {
	MARGIN-TOP: 25px; MARGIN-BOTTOM: 15px
}
* HTML INPUT.submit {
	BORDER-LEFT-COLOR: #ddd; BORDER-BOTTOM-COLOR: #ddd; BORDER-TOP-COLOR: =
#ddd; BORDER-RIGHT-COLOR: #ddd
}
INPUT.submit:hover {
	COLOR: black
}
INPUT.short-input {
	WIDTH: 8em
}
INPUT.date-selector {
	WIDTH: 7em
}
INPUT.file {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
FONT-SIZE: 1em; BACKGROUND-IMAGE: none; BORDER-LEFT: #666666 1px solid; =
BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: Verdana, Geneva, Arial, =
Helvetica, sans-serif
}
HR.print-only {
	DISPLAY: none
}
DIV.pad-left {
	MARGIN-LEFT: 4em
}
LABEL.fixed-width {
	DISPLAY: block; FLOAT: left; WIDTH: 10em
}
LABEL.fixed-width-wide {
	DISPLAY: block; FLOAT: left; WIDTH: 14em
}
.label-caption {
	FONT-WEIGHT: normal
}
.required {
	FLOAT: right
}
#stickynote {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 5px; RIGHT: 5px; BACKGROUND: #ffffe7; =
PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; WIDTH: 200px; =
PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; POSITION: absolute; =
TOP: 5px
}
#stickynote LI {
	MARGIN-LEFT: 15px
}
DIV#intro {
	PADDING-BOTTOM: 1em
}
.categorySelector {
	WIDTH: 450px
}
.hide {
	VISIBILITY: hidden
}
.unhide {
	VISIBILITY: visible
}
.helpBoxContainer {
	POSITION: relative; TEXT-ALIGN: left
}
.link-with-help {
	FLOAT: right
}
.fieldName {
	COLOR: #4a70bc; FONT-FAMILY: 'Courier New'
}
#logout-form DIV.helpBoxContainer {
	DISPLAY: inline
}
.helpBox {
	FONT-SIZE: 0.8em; Z-INDEX: 1000
}
.helpBoxJS {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 10px; RIGHT: 30px; BACKGROUND: #e5f0ff; =
PADDING-BOTTOM: 10px; BORDER-LEFT: black 1px solid; WIDTH: 350px; =
CURSOR: pointer; PADDING-TOP: 10px; BORDER-BOTTOM: black 1px solid; =
POSITION: absolute; TOP: 0px
}
.rolesBoxJS {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 1px; RIGHT: 30px; BACKGROUND: #ffffe1; =
PADDING-BOTTOM: 1px; BORDER-LEFT: black 1px solid; WIDTH: 350px; CURSOR: =
pointer; PADDING-TOP: 1px; BORDER-BOTTOM: black 1px solid; POSITION: =
absolute; TOP: 0px
}
.timeZoneBox {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 4px; FONT-SIZE: 0.9em; Z-INDEX: 1000; =
BACKGROUND: white; PADDING-BOTTOM: 4px; BORDER-LEFT: black 1px solid; =
PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid; POSITION: absolute
}
.timeZoneBox-error {
	WIDTH: 270px; COLOR: #d21c1c
}
#restricted-password-HelpBox {
	BACKGROUND: white; LEFT: 150px; CURSOR: pointer; POSITION: absolute; =
TOP: -20px
}
#restricted-password-HelpBox INPUT.restricted-password {
	BORDER-TOP-WIDTH: 0px! important; FONT-WEIGHT: bold; BORDER-LEFT-WIDTH: =
0px! important; FONT-SIZE: 1.2em; BACKGROUND: none transparent scroll =
repeat 0% 0%; BORDER-BOTTOM-WIDTH: 0px! important; COLOR: red; =
BORDER-RIGHT-WIDTH: 0px! important
}
* HTML .helpBoxJS {
	RIGHT: 40px; CURSOR: hand
}
.helpBox .closeHelpBox {
	RIGHT: 4px; VISIBILITY: hidden; POSITION: absolute; TOP: 4px
}
.helpBoxJS .closeHelpBox {
	VISIBILITY: inherit
}
DIV#timeZones {
	WIDTH: 420px
}
.formLeftCol {
	WIDTH: 250px! important
}
.formMiddleCol {
	WIDTH: 420px
}
.formSearchCol {
	WIDTH: 520px
}
UL#page-functions {
	MIN-HEIGHT: 2em; MARGIN: 1.2em 0px; LIST-STYLE-TYPE: none
}
* HTML UL#page-functions {
	HEIGHT: 2em
}
UL#page-functions LI {
	BORDER-RIGHT: #666666 2px outset; PADDING-RIGHT: 0px; BORDER-TOP: =
#666666 2px outset; DISPLAY: block; PADDING-LEFT: 0px; BACKGROUND: =
url(/images/input_bg2.gif) white no-repeat 0px 0px; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px 8px 0px 0px; BORDER-LEFT: #666666 2px =
outset; PADDING-TOP: 0px; BORDER-BOTTOM: #666666 2px outset
}
UL#page-functions LI A {
	PADDING-RIGHT: 6px; DISPLAY: block; PADDING-LEFT: 6px; PADDING-BOTTOM: =
2px; MARGIN: 0px; COLOR: black; PADDING-TOP: 2px; TEXT-DECORATION: none
}
* HTML UL#page-functions LI {
	BORDER-LEFT-COLOR: #ddd; BORDER-BOTTOM-COLOR: #ddd; BORDER-TOP-COLOR: =
#ddd; BORDER-RIGHT-COLOR: #ddd
}
UL#page-functions LI A:hover {
	COLOR: black
}

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/styles/styles_frontend_print.css

#header {
	DISPLAY: none
}
#header-tools {
	DISPLAY: none
}
#left-col {
	DISPLAY: none
}
#main-content {
	MARGIN-LEFT: 0px
}
#main-content DIV.pad {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
HR.print-only {
	DISPLAY: block
}

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/styles/styles_reports.css

TABLE.report-criteria {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; FLOAT: =
left; BORDER-LEFT: #cccccc 1px solid; WIDTH: 45%; BORDER-BOTTOM: #cccccc =
1px solid
}
TABLE.report-statistics {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; FLOAT: =
right; BORDER-LEFT: #cccccc 1px solid; WIDTH: 45%; BORDER-BOTTOM: =
#cccccc 1px solid
}
TR.report-box-heading {
	BACKGROUND-COLOR: #dddddd
}
TR.report-box-heading TH {
	BORDER-BOTTOM: #cccccc 1px solid
}
TABLE.report-output {
	CLEAR: both
}
TABLE.report-output TR TD {
	BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: =
#cccccc 1px solid; PADDING-LEFT: 4px; BORDER-LEFT: #cccccc 1px solid; =
BORDER-BOTTOM: #cccccc 1px solid; WHITE-SPACE: nowrap
}
TR.report-output-headings TH {
	BORDER-RIGHT: #aaaaaa 1px solid; BORDER-TOP: #aaaaaa 1px solid; =
PADDING-LEFT: 0.5em; BORDER-LEFT: #aaaaaa 1px solid; COLOR: #555555; =
LINE-HEIGHT: 1.8em; BORDER-BOTTOM: #aaaaaa 1px solid
}
TH.report-left-border {
	BORDER-LEFT-WIDTH: 1px! important
}
TR.report-group-heading TH {
	COLOR: #003366; PADDING-TOP: 1em; BORDER-BOTTOM: black 1px solid
}
TR.report-header-row {
	BACKGROUND-COLOR: #eeeeee
}
TR.report-header-row TH {
	BORDER-RIGHT: #aaaaaa 1px solid; BORDER-TOP: #aaaaaa 1px solid; =
BORDER-LEFT: #aaaaaa 1px solid; BORDER-BOTTOM: #aaaaaa 1px solid
}
TD.centre {
	TEXT-ALIGN: center
}
.report-numeric {
	TEXT-ALIGN: right
}
P.report-toggle-columns {
	CLEAR: both; FONT-SIZE: 0.8em; PADDING-BOTTOM: 1em
}
P.report-toggle-columns A {
	FLOAT: right
}

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/styles/calendar-atii.css

DIV.calendar {
	BORDER-RIGHT: #333 1px solid; BORDER-TOP: #333 1px solid; FONT-SIZE: =
11px; BORDER-LEFT: #333 1px solid; CURSOR: default; COLOR: #333; =
BORDER-BOTTOM: #333 1px solid; FONT-FAMILY: tahoma,verdana,sans-serif; =
POSITION: relative
}
DIV.calendar TABLE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; BACKGROUND: =
#fff; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 5em! important; CURSOR: =
default; COLOR: #333; PADDING-TOP: 0px; FONT-FAMILY: =
tahoma,verdana,sans-serif; BORDER-COLLAPSE: separate
}
DIV.calendar .button {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; COLOR: =
#333; PADDING-TOP: 1px; BORDER-BOTTOM: #333 1px solid; TEXT-ALIGN: =
center
}
DIV.calendar .nav {
	BACKGROUND: #b5b471
}
DIV.calendar THEAD {
	BACKGROUND-COLOR: #b5b471
}
DIV.calendar THEAD .title {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; FONT-WEIGHT: bold; BACKGROUND: =
#333; PADDING-BOTTOM: 1px; COLOR: #fff; PADDING-TOP: 1px; BORDER-BOTTOM: =
#333 1px solid; TEXT-ALIGN: center
}
DIV.calendar THEAD .headrow {
=09
}
DIV.calendar THEAD .daynames {
=09
}
DIV.calendar THEAD .name {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; BACKGROUND: #ffffff; =
PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #333 1px solid; =
TEXT-ALIGN: center
}
DIV.calendar THEAD .weekend {
	COLOR: #333
}
DIV.calendar THEAD .hilite {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px; BACKGROUND-COLOR: #939247
}
DIV.calendar THEAD .active {
	PADDING-RIGHT: 0px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 2px; BACKGROUND-COLOR: #c6c588
}
DIV.calendar TBODY .day {
	PADDING-RIGHT: 4px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; WIDTH: 2em; =
PADDING-TOP: 2px; TEXT-ALIGN: right
}
DIV.calendar TBODY .othermonth.day {
	FONT-SIZE: 0.8em; COLOR: #333
}
DIV.calendar TBODY .oweekend.othermonth.day {
	COLOR: #333
}
DIV.calendar TABLE .wn {
	BORDER-RIGHT: #333 1px solid; PADDING-RIGHT: 3px; PADDING-LEFT: 2px; =
BACKGROUND: #fff; PADDING-BOTTOM: 2px; PADDING-TOP: 2px
}
DIV.calendar TBODY .rowhilite TD {
	BACKGROUND: #fddeb9
}
DIV.calendar TBODY .rowhilite TD.wn {
	BACKGROUND: #fddeb9
}
DIV.calendar TBODY TD.hilite {
	PADDING-RIGHT: 3px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
DIV.calendar TBODY TD.active {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 2px
}
DIV.calendar TBODY TD.selected {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; BACKGROUND: =
#fcac40; PADDING-BOTTOM: 0px; COLOR: #fff; PADDING-TOP: 2px
}
DIV.calendar TBODY TD.weekend {
	COLOR: #004370
}
DIV.calendar TBODY TD.today {
	FONT-WEIGHT: bold; COLOR: #333
}
DIV.calendar TBODY .disabled {
	COLOR: #999
}
DIV.calendar TBODY .emptycell {
	VISIBILITY: hidden
}
DIV.calendar TBODY .emptyrow {
	DISPLAY: none
}
DIV.calendar TFOOT .footrow {
=09
}
DIV.calendar TFOOT .ttip {
	PADDING-RIGHT: 1px; BORDER-TOP: #333 1px solid; PADDING-LEFT: 1px; =
BACKGROUND: #b5b471; PADDING-BOTTOM: 1px; COLOR: #333; PADDING-TOP: 1px; =
TEXT-ALIGN: center
}
DIV.calendar TFOOT .hilite {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BACKGROUND: #b5b471; =
PADDING-BOTTOM: 1px; PADDING-TOP: 1px
}
DIV.calendar TFOOT .active {
	PADDING-RIGHT: 0px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 2px
}
DIV.calendar .combo {
	PADDING-RIGHT: 1px; DISPLAY: none; PADDING-LEFT: 1px; FONT-SIZE: 0.9em; =
BACKGROUND: #cce0ec; LEFT: 0px; PADDING-BOTTOM: 1px; WIDTH: 4em; CURSOR: =
default; PADDING-TOP: 1px; POSITION: absolute; TOP: 0px
}
DIV.calendar .combo .label {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px; TEXT-ALIGN: center
}
DIV.calendar .combo .label-IEfix {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px; TEXT-ALIGN: center
}
DIV.calendar .combo .label-IEfix {
	WIDTH: 4em
}
DIV.calendar .combo .active {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #eaf2f7; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
DIV.calendar .combo .hilite {
	BACKGROUND: #004370; COLOR: #fff
}
DIV.calendar TD.time {
	PADDING-RIGHT: 0px; BORDER-TOP: #004370 1px solid; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 1px; PADDING-TOP: 1px; BACKGROUND-COLOR: #ffffff; =
TEXT-ALIGN: center
}
DIV.calendar TD.time .hour {
	BORDER-RIGHT: #889 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #889 1px =
solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #889 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #889 1px =
solid; BACKGROUND-COLOR: #fff
}
DIV.calendar TD.time .minute {
	BORDER-RIGHT: #889 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #889 1px =
solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #889 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #889 1px =
solid; BACKGROUND-COLOR: #fff
}
DIV.calendar TD.time .ampm {
	BORDER-RIGHT: #889 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #889 1px =
solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #889 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #889 1px =
solid; BACKGROUND-COLOR: #fff
}
DIV.calendar TD.time .ampm {
	TEXT-ALIGN: center
}
DIV.calendar TD.time .colon {
	PADDING-RIGHT: 2px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
DIV.calendar TD.time SPAN.hilite {
	BORDER-LEFT-COLOR: #004370; BORDER-BOTTOM-COLOR: #004370; COLOR: #fff; =
BORDER-TOP-COLOR: #004370; BACKGROUND-COLOR: #766; BORDER-RIGHT-COLOR: =
#004370
}
DIV.calendar TD.time SPAN.active {
	BORDER-LEFT-COLOR: #f00; BORDER-BOTTOM-COLOR: #f00; COLOR: #000000; =
BORDER-TOP-COLOR: #f00; BACKGROUND-COLOR: #004370; BORDER-RIGHT-COLOR: =
#f00
}

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/lib/jscalendar-0.9.6/calendar.js

/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/
 * ------------------------------------------------------------------
 *
 * The DHTML Calendar, version 0.9.6 "Keep cool but don't freeze"
 *
 * Details and latest version at:
 * http://dynarch.com/mishoo/calendar.epl
 *
 * This script is distributed under the GNU Lesser General Public =
License.
 * Read the entire license text here: =
http://www.gnu.org/licenses/lgpl.html
 */

// $Id: calendar.js,v 1.34 2004/02/06 18:53:11 mishoo Exp $

/** The Calendar object constructor. */
Calendar =3D function (firstDayOfWeek, dateStr, onSelected, onClose) {
	// member variables
	this.activeDiv =3D null;
	this.currentDateEl =3D null;
	this.getDateStatus =3D null;
	this.timeout =3D null;
	this.onSelected =3D onSelected || null;
	this.onClose =3D onClose || null;
	this.dragging =3D false;
	this.hidden =3D false;
	this.minYear =3D 1970;
	this.maxYear =3D 2050;
	this.dateFormat =3D Calendar._TT["DEF_DATE_FORMAT"];
	this.ttDateFormat =3D Calendar._TT["TT_DATE_FORMAT"];
	this.isPopup =3D true;
	this.weekNumbers =3D true;
	this.firstDayOfWeek =3D firstDayOfWeek; // 0 for Sunday, 1 for Monday, =
etc.
	this.showsOtherMonths =3D false;
	this.dateStr =3D dateStr;
	this.ar_days =3D null;
	this.showsTime =3D false;
	this.time24 =3D true;
	this.yearStep =3D 2;
	// HTML elements
	this.table =3D null;
	this.element =3D null;
	this.tbody =3D null;
	this.firstdayname =3D null;
	// Combo boxes
	this.monthsCombo =3D null;
	this.yearsCombo =3D null;
	this.hilitedMonth =3D null;
	this.activeMonth =3D null;
	this.hilitedYear =3D null;
	this.activeYear =3D null;
	// Information
	this.dateClicked =3D false;

	// one-time initializations
	if (typeof Calendar._SDN =3D=3D "undefined") {
		// table of short day names
		if (typeof Calendar._SDN_len =3D=3D "undefined")
			Calendar._SDN_len =3D 3;
		var ar =3D new Array();
		for (var i =3D 8; i > 0;) {
			ar[--i] =3D Calendar._DN[i].substr(0, Calendar._SDN_len);
		}
		Calendar._SDN =3D ar;
		// table of short month names
		if (typeof Calendar._SMN_len =3D=3D "undefined")
			Calendar._SMN_len =3D 3;
		ar =3D new Array();
		for (var i =3D 12; i > 0;) {
			ar[--i] =3D Calendar._MN[i].substr(0, Calendar._SMN_len);
		}
		Calendar._SMN =3D ar;
	}
};

// ** constants

/// "static", needed for event handlers.
Calendar._C =3D null;

/// detect a special case of "web browser"
Calendar.is_ie =3D ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );

Calendar.is_ie5 =3D ( Calendar.is_ie && /msie =
5\.0/i.test(navigator.userAgent) );
Calendar.is_ie7 =3D ( Calendar.is_ie && /msie =
7\.0/i.test(navigator.userAgent) );

/// detect Opera browser
Calendar.is_opera =3D /opera/i.test(navigator.userAgent);

/// detect KHTML-based browsers
Calendar.is_khtml =3D =
/Konqueror|Safari|KHTML/i.test(navigator.userAgent);

// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a =
separate
//        library, at some point.

Calendar.getAbsolutePos =3D function(el) {
	var SL =3D 0, ST =3D 0;
	var is_div =3D /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL =3D el.scrollLeft;
	if (is_div && el.scrollTop)
		ST =3D el.scrollTop;
	var r =3D { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp =3D this.getAbsolutePos(el.offsetParent);
		r.x +=3D tmp.x;
		r.y +=3D tmp.y;
	}
	return r;
};

Calendar.isRelated =3D function (el, evt) {
	var related =3D evt.relatedTarget;
	if (!related) {
		var type =3D evt.type;
		if (type =3D=3D "mouseover") {
			related =3D evt.fromElement;
		} else if (type =3D=3D "mouseout") {
			related =3D evt.toElement;
		}
	}
	while (related) {
		if (related =3D=3D el) {
			return true;
		}
		related =3D related.parentNode;
	}
	return false;
};

Calendar.removeClass =3D function(el, className) {
	if (!(el && el.className)) {
		return;
	}
	var cls =3D el.className.split(" ");
	var ar =3D new Array();
	for (var i =3D cls.length; i > 0;) {
		if (cls[--i] !=3D className) {
			ar[ar.length] =3D cls[i];
		}
	}
	el.className =3D ar.join(" ");
};

Calendar.addClass =3D function(el, className) {
	Calendar.removeClass(el, className);
	el.className +=3D " " + className;
};

Calendar.getElement =3D function(ev) {
	if (Calendar.is_ie) {
		return window.event.srcElement;
	} else {
		return ev.currentTarget;
	}
};

Calendar.getTargetElement =3D function(ev) {
	if (Calendar.is_ie) {
		return window.event.srcElement;
	} else {
		return ev.target;
	}
};

Calendar.stopEvent =3D function(ev) {
	ev || (ev =3D window.event);
	if (Calendar.is_ie) {
		ev.cancelBubble =3D true;
		ev.returnValue =3D false;
	} else {
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
};

Calendar.addEvent =3D function(el, evname, func) {
	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] =3D func;
	}
};

Calendar.removeEvent =3D function(el, evname, func) {
	if (el.detachEvent) { // IE
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) { // Gecko / W3C
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] =3D null;
	}
};

Calendar.createElement =3D function(type, parent) {
	var el =3D null;
	if (document.createElementNS) {
		// use the XHTML namespace; IE won't normally get here unless
		// _they_ "fix" the DOM2 implementation.
		el =3D document.createElementNS("http://www.w3.org/1999/xhtml", type);
	} else {
		el =3D document.createElement(type);
	}
	if (typeof parent !=3D "undefined") {
		parent.appendChild(el);
	}
	return el;
};

// END: UTILITY FUNCTIONS

// BEGIN: CALENDAR STATIC FUNCTIONS

/** Internal -- adds a set of events to make some element behave like a =
button. */
Calendar._add_evs =3D function(el) {
	with (Calendar) {
		addEvent(el, "mouseover", dayMouseOver);
		addEvent(el, "mousedown", dayMouseDown);
		addEvent(el, "mouseout", dayMouseOut);
		if (is_ie) {
			addEvent(el, "dblclick", dayMouseDblClick);
			el.setAttribute("unselectable", true);
		}
	}
};

Calendar.findMonth =3D function(el) {
	if (typeof el.month !=3D "undefined") {
		return el;
	} else if (typeof el.parentNode.month !=3D "undefined") {
		return el.parentNode;
	}
	return null;
};

Calendar.findYear =3D function(el) {
	if (typeof el.year !=3D "undefined") {
		return el;
	} else if (typeof el.parentNode.year !=3D "undefined") {
		return el.parentNode;
	}
	return null;
};

Calendar.showMonthsCombo =3D function () {
	var cal =3D Calendar._C;
	if (!cal) {
		return false;
	}
	var cal =3D cal;
	var cd =3D cal.activeDiv;
	var mc =3D cal.monthsCombo;
	if (cal.hilitedMonth) {
		Calendar.removeClass(cal.hilitedMonth, "hilite");
	}
	if (cal.activeMonth) {
		Calendar.removeClass(cal.activeMonth, "active");
	}
	var mon =3D =
cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
	Calendar.addClass(mon, "active");
	cal.activeMonth =3D mon;
	var s =3D mc.style;
	s.display =3D "block";
	if (cd.navtype < 0)
		s.left =3D cd.offsetLeft + "px";
	else {
		var mcw =3D mc.offsetWidth;
		if (typeof mcw =3D=3D "undefined")
			// Konqueror brain-dead techniques
			mcw =3D 50;
		s.left =3D (cd.offsetLeft + cd.offsetWidth - mcw) + "px";
	}
	s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";
};

Calendar.showYearsCombo =3D function (fwd) {
	var cal =3D Calendar._C;
	if (!cal) {
		return false;
	}
	var cal =3D cal;
	var cd =3D cal.activeDiv;
	var yc =3D cal.yearsCombo;
	if (cal.hilitedYear) {
		Calendar.removeClass(cal.hilitedYear, "hilite");
	}
	if (cal.activeYear) {
		Calendar.removeClass(cal.activeYear, "active");
	}
	cal.activeYear =3D null;
	var Y =3D cal.date.getFullYear() + (fwd ? 1 : -1);
	var yr =3D yc.firstChild;
	var show =3D false;
	for (var i =3D 12; i > 0; --i) {
		if (Y >=3D cal.minYear && Y <=3D cal.maxYear) {
			yr.firstChild.data =3D Y;
			yr.year =3D Y;
			yr.style.display =3D "block";
			show =3D true;
		} else {
			yr.style.display =3D "none";
		}
		yr =3D yr.nextSibling;
		Y +=3D fwd ? cal.yearStep : -cal.yearStep;
	}
	if (show) {
		var s =3D yc.style;
		s.display =3D "block";
		if (cd.navtype < 0)
			s.left =3D cd.offsetLeft + "px";
		else {
			var ycw =3D yc.offsetWidth;
			if (typeof ycw =3D=3D "undefined")
				// Konqueror brain-dead techniques
				ycw =3D 50;
			s.left =3D (cd.offsetLeft + cd.offsetWidth - ycw) + "px";
		}
		s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";
	}
};

// event handlers

Calendar.tableMouseUp =3D function(ev) {
	var cal =3D Calendar._C;
	if (!cal) {
		return false;
	}
	if (cal.timeout) {
		clearTimeout(cal.timeout);
	}
	var el =3D cal.activeDiv;
	if (!el) {
		return false;
	}
	var target =3D Calendar.getTargetElement(ev);
	ev || (ev =3D window.event);
	Calendar.removeClass(el, "active");
	if (target =3D=3D el || target.parentNode =3D=3D el) {
		Calendar.cellClick(el, ev);
	}
	var mon =3D Calendar.findMonth(target);
	var date =3D null;
	if (mon) {
		date =3D new Date(cal.date);
		if (mon.month !=3D date.getMonth()) {
			date.setMonth(mon.month);
			cal.setDate(date);
			cal.dateClicked =3D false;
			cal.callHandler();
		}
	} else {
		var year =3D Calendar.findYear(target);
		if (year) {
			date =3D new Date(cal.date);
			if (year.year !=3D date.getFullYear()) {
				date.setFullYear(year.year);
				cal.setDate(date);
				cal.dateClicked =3D false;
				cal.callHandler();
			}
		}
	}
	with (Calendar) {
		removeEvent(document, "mouseup", tableMouseUp);
		removeEvent(document, "mouseover", tableMouseOver);
		removeEvent(document, "mousemove", tableMouseOver);
		cal._hideCombos();
		_C =3D null;
		return stopEvent(ev);
	}
};

Calendar.tableMouseOver =3D function (ev) {
	var cal =3D Calendar._C;
	if (!cal) {
		return;
	}
	var el =3D cal.activeDiv;
	var target =3D Calendar.getTargetElement(ev);
	if (target =3D=3D el || target.parentNode =3D=3D el) {
		Calendar.addClass(el, "hilite active");
		Calendar.addClass(el.parentNode, "rowhilite");
	} else {
		if (typeof el.navtype =3D=3D "undefined" || (el.navtype !=3D 50 && =
(el.navtype =3D=3D 0 || Math.abs(el.navtype) > 2)))
			Calendar.removeClass(el, "active");
		Calendar.removeClass(el, "hilite");
		Calendar.removeClass(el.parentNode, "rowhilite");
	}
	ev || (ev =3D window.event);
	if (el.navtype =3D=3D 50 && target !=3D el) {
		var pos =3D Calendar.getAbsolutePos(el);
		var w =3D el.offsetWidth;
		var x =3D ev.clientX;
		var dx;
		var decrease =3D true;
		if (x > pos.x + w) {
			dx =3D x - pos.x - w;
			decrease =3D false;
		} else
			dx =3D pos.x - x;

		if (dx < 0) dx =3D 0;
		var range =3D el._range;
		var current =3D el._current;
		var count =3D Math.floor(dx / 10) % range.length;
		for (var i =3D range.length; --i >=3D 0;)
			if (range[i] =3D=3D current)
				break;
		while (count-- > 0)
			if (decrease) {
				if (--i < 0)
					i =3D range.length - 1;
			} else if ( ++i >=3D range.length )
				i =3D 0;
		var newval =3D range[i];
		el.firstChild.data =3D newval;

		cal.onUpdateTime();
	}
	var mon =3D Calendar.findMonth(target);
	if (mon) {
		if (mon.month !=3D cal.date.getMonth()) {
			if (cal.hilitedMonth) {
				Calendar.removeClass(cal.hilitedMonth, "hilite");
			}
			Calendar.addClass(mon, "hilite");
			cal.hilitedMonth =3D mon;
		} else if (cal.hilitedMonth) {
			Calendar.removeClass(cal.hilitedMonth, "hilite");
		}
	} else {
		if (cal.hilitedMonth) {
			Calendar.removeClass(cal.hilitedMonth, "hilite");
		}
		var year =3D Calendar.findYear(target);
		if (year) {
			if (year.year !=3D cal.date.getFullYear()) {
				if (cal.hilitedYear) {
					Calendar.removeClass(cal.hilitedYear, "hilite");
				}
				Calendar.addClass(year, "hilite");
				cal.hilitedYear =3D year;
			} else if (cal.hilitedYear) {
				Calendar.removeClass(cal.hilitedYear, "hilite");
			}
		} else if (cal.hilitedYear) {
			Calendar.removeClass(cal.hilitedYear, "hilite");
		}
	}
	return Calendar.stopEvent(ev);
};

Calendar.tableMouseDown =3D function (ev) {
	if (Calendar.getTargetElement(ev) =3D=3D Calendar.getElement(ev)) {
		return Calendar.stopEvent(ev);
	}
};

Calendar.calDragIt =3D function (ev) {
	var cal =3D Calendar._C;
	if (!(cal && cal.dragging)) {
		return false;
	}
	var posX;
	var posY;
	if (Calendar.is_ie) {
		posY =3D window.event.clientY + document.body.scrollTop;
		posX =3D window.event.clientX + document.body.scrollLeft;
	} else {
		posX =3D ev.pageX;
		posY =3D ev.pageY;
	}
	cal.hideShowCovered();
	var st =3D cal.element.style;
	st.left =3D (posX - cal.xOffs) + "px";
	st.top =3D (posY - cal.yOffs) + "px";
	return Calendar.stopEvent(ev);
};

Calendar.calDragEnd =3D function (ev) {
	var cal =3D Calendar._C;
	if (!cal) {
		return false;
	}
	cal.dragging =3D false;
	with (Calendar) {
		removeEvent(document, "mousemove", calDragIt);
		removeEvent(document, "mouseup", calDragEnd);
		tableMouseUp(ev);
	}
	cal.hideShowCovered();
};

Calendar.dayMouseDown =3D function(ev) {
	var el =3D Calendar.getElement(ev);
	if (el.disabled) {
		return false;
	}
	var cal =3D el.calendar;
	cal.activeDiv =3D el;
	Calendar._C =3D cal;
	if (el.navtype !=3D 300) with (Calendar) {
		if (el.navtype =3D=3D 50) {
			el._current =3D el.firstChild.data;
			addEvent(document, "mousemove", tableMouseOver);
		} else
			addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", =
tableMouseOver);
		addClass(el, "hilite active");
		addEvent(document, "mouseup", tableMouseUp);
	} else if (cal.isPopup) {
		cal._dragStart(ev);
	}
	if (el.navtype =3D=3D -1 || el.navtype =3D=3D 1) {
		if (cal.timeout) clearTimeout(cal.timeout);
		cal.timeout =3D setTimeout("Calendar.showMonthsCombo()", 250);
	} else if (el.navtype =3D=3D -2 || el.navtype =3D=3D 2) {
		if (cal.timeout) clearTimeout(cal.timeout);
		cal.timeout =3D setTimeout((el.navtype > 0) ? =
"Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", =
250);
	} else {
		cal.timeout =3D null;
	}
	return Calendar.stopEvent(ev);
};

Calendar.dayMouseDblClick =3D function(ev) {
	Calendar.cellClick(Calendar.getElement(ev), ev || window.event);
	if (Calendar.is_ie) {
		document.selection.empty();
	}
};

Calendar.dayMouseOver =3D function(ev) {
	var el =3D Calendar.getElement(ev);
	if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
		return false;
	}
	if (el.ttip) {
		if (el.ttip.substr(0, 1) =3D=3D "_") {
			el.ttip =3D el.caldate.print(el.calendar.ttDateFormat) + =
el.ttip.substr(1);
		}
		el.calendar.tooltips.firstChild.data =3D el.ttip;
	}
	if (el.navtype !=3D 300) {
		Calendar.addClass(el, "hilite");
		if (el.caldate) {
			Calendar.addClass(el.parentNode, "rowhilite");
		}
	}
	return Calendar.stopEvent(ev);
};

Calendar.dayMouseOut =3D function(ev) {
	with (Calendar) {
		var el =3D getElement(ev);
		if (isRelated(el, ev) || _C || el.disabled) {
			return false;
		}
		removeClass(el, "hilite");
		if (el.caldate) {
			removeClass(el.parentNode, "rowhilite");
		}
		el.calendar.tooltips.firstChild.data =3D _TT["SEL_DATE"];
		return stopEvent(ev);
	}
};

/**
 *  A generic "click" handler :) handles all types of buttons defined in =
this
 *  calendar.
 */
Calendar.cellClick =3D function(el, ev) {
	var cal =3D el.calendar;
	var closing =3D false;
	var newdate =3D false;
	var date =3D null;
	if (typeof el.navtype =3D=3D "undefined") {
		Calendar.removeClass(cal.currentDateEl, "selected");
		Calendar.addClass(el, "selected");
		closing =3D (cal.currentDateEl =3D=3D el);
		if (!closing) {
			cal.currentDateEl =3D el;
		}
		cal.date =3D new Date(el.caldate);
		date =3D cal.date;
		newdate =3D true;
		// a date was clicked
		if (!(cal.dateClicked =3D !el.otherMonth))
			cal._init(cal.firstDayOfWeek, date);
	} else {
		if (el.navtype =3D=3D 200) {
			Calendar.removeClass(el, "hilite");
			cal.callCloseHandler();
			return;
		}
		date =3D (el.navtype =3D=3D 0) ? new Date() : new Date(cal.date);
		// unless "today" was clicked, we assume no date was clicked so
		// the selected handler will know not to close the calenar when
		// in single-click mode.
		// cal.dateClicked =3D (el.navtype =3D=3D 0);
		cal.dateClicked =3D false;
		var year =3D date.getFullYear();
		var mon =3D date.getMonth();
		function setMonth(m) {
			var day =3D date.getDate();
			var max =3D date.getMonthDays(m);
			if (day > max) {
				date.setDate(max);
			}
			date.setMonth(m);
		};
		switch (el.navtype) {
		    case 400:
			Calendar.removeClass(el, "hilite");
			var text =3D Calendar._TT["ABOUT"];
			if (typeof text !=3D "undefined") {
				text +=3D cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";
			} else {
				// FIXME: this should be removed as soon as lang files get updated!
				text =3D "Help and about box text is not translated into this =
language.\n" +
					"If you know this language and you feel generous please update\n" +
					"the corresponding file in \"lang\" subdir to match =
calendar-en.js\n" +
					"and send it back to <mishoo@infoiasi.ro> to get it into the =
distribution  ;-)\n\n" +
					"Thank you!\n" +
					"http://dynarch.com/mishoo/calendar.epl\n";
			}
			alert(text);
			return;
		    case -2:
			if (year > cal.minYear) {
				date.setFullYear(year - 1);
			}
			break;
		    case -1:
			if (mon > 0) {
				setMonth(mon - 1);
			} else if (year-- > cal.minYear) {
				date.setFullYear(year);
				setMonth(11);
			}
			break;
		    case 1:
			if (mon < 11) {
				setMonth(mon + 1);
			} else if (year < cal.maxYear) {
				date.setFullYear(year + 1);
				setMonth(0);
			}
			break;
		    case 2:
			if (year < cal.maxYear) {
				date.setFullYear(year + 1);
			}
			break;
		    case 100:
			cal.setFirstDayOfWeek(el.fdow);
			return;
		    case 50:
			var range =3D el._range;
			var current =3D el.firstChild.data;
			for (var i =3D range.length; --i >=3D 0;)
				if (range[i] =3D=3D current)
					break;
			if (ev && ev.shiftKey) {
				if (--i < 0)
					i =3D range.length - 1;
			} else if ( ++i >=3D range.length )
				i =3D 0;
			var newval =3D range[i];
			el.firstChild.data =3D newval;
			cal.onUpdateTime();
			return;
		    case 0:
			// TODAY will bring us here
			if ((typeof cal.getDateStatus =3D=3D "function") && =
cal.getDateStatus(date, date.getFullYear(), date.getMonth(), =
date.getDate())) {
				// remember, "date" was previously set to new
				// Date() if TODAY was clicked; thus, it
				// contains today date.
				return false;
			}
			break;
		}
		if (!date.equalsTo(cal.date)) {
			cal.setDate(date);
			newdate =3D true;
		}
	}
	if (newdate) {
		cal.callHandler();
	}
	if (closing) {
		Calendar.removeClass(el, "hilite");
		cal.callCloseHandler();
	}
};

// END: CALENDAR STATIC FUNCTIONS

// BEGIN: CALENDAR OBJECT FUNCTIONS

/**
 *  This function creates the calendar inside the given parent.  If _par =
is
 *  null than it creates a popup calendar inside the BODY element.  If =
_par is
 *  an element, be it BODY, then it creates a non-popup calendar (still
 *  hidden).  Some properties need to be set before calling this =
function.
 */
Calendar.prototype.create =3D function (_par) {
	var parent =3D null;
	if (! _par) {
		// default parent is the document body, in which case we create
		// a popup calendar.
		parent =3D document.getElementsByTagName("body")[0];
		this.isPopup =3D true;
	} else {
		parent =3D _par;
		this.isPopup =3D false;
	}
	this.date =3D this.dateStr ? new Date(this.dateStr) : new Date();

	var table =3D Calendar.createElement("table");
	this.table =3D table;
	table.cellSpacing =3D 0;
	table.cellPadding =3D 0;
	table.calendar =3D this;
	Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);

	var div =3D Calendar.createElement("div");
	this.element =3D div;
	div.className =3D "calendar";
	if (this.isPopup) {
		div.style.position =3D "absolute";
		div.style.display =3D "none";
	}
	div.appendChild(table);

	var thead =3D Calendar.createElement("thead", table);
	var cell =3D null;
	var row =3D null;

	var cal =3D this;
	var hh =3D function (text, cs, navtype) {
		cell =3D Calendar.createElement("td", row);
		cell.colSpan =3D cs;
		cell.className =3D "button";
		if (navtype !=3D 0 && Math.abs(navtype) <=3D 2)
			cell.className +=3D " nav";
		Calendar._add_evs(cell);
		cell.calendar =3D cal;
		cell.navtype =3D navtype;
		if (text.substr(0, 1) !=3D "&") {
			cell.appendChild(document.createTextNode(text));
		}
		else {
			// FIXME: dirty hack for entities
			cell.innerHTML =3D text;
		}
		return cell;
	};

	row =3D Calendar.createElement("tr", thead);
	var title_length =3D 6;
	(this.isPopup) && --title_length;
	(this.weekNumbers) && ++title_length;

	hh("?", 1, 400).ttip =3D Calendar._TT["INFO"];
	this.title =3D hh("", title_length, 300);
	this.title.className =3D "title";
	if (this.isPopup) {
		this.title.ttip =3D Calendar._TT["DRAG_TO_MOVE"];
		this.title.style.cursor =3D "move";
		hh("&#x00d7;", 1, 200).ttip =3D Calendar._TT["CLOSE"];
	}

	row =3D Calendar.createElement("tr", thead);
	row.className =3D "headrow";

	this._nav_py =3D hh("&#x00ab;", 1, -2);
	this._nav_py.ttip =3D Calendar._TT["PREV_YEAR"];

	this._nav_pm =3D hh("&#x2039;", 1, -1);
	this._nav_pm.ttip =3D Calendar._TT["PREV_MONTH"];

	this._nav_now =3D hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, =
0);
	this._nav_now.ttip =3D Calendar._TT["GO_TODAY"];

	this._nav_nm =3D hh("&#x203a;", 1, 1);
	this._nav_nm.ttip =3D Calendar._TT["NEXT_MONTH"];

	this._nav_ny =3D hh("&#x00bb;", 1, 2);
	this._nav_ny.ttip =3D Calendar._TT["NEXT_YEAR"];

	// day names
	row =3D Calendar.createElement("tr", thead);
	row.className =3D "daynames";
	if (this.weekNumbers) {
		cell =3D Calendar.createElement("td", row);
		cell.className =3D "name wn";
		cell.appendChild(document.createTextNode(Calendar._TT["WK"]));
	}
	for (var i =3D 7; i > 0; --i) {
		cell =3D Calendar.createElement("td", row);
		cell.appendChild(document.createTextNode(""));
		if (!i) {
			cell.navtype =3D 100;
			cell.calendar =3D this;
			Calendar._add_evs(cell);
		}
	}
	this.firstdayname =3D (this.weekNumbers) ? row.firstChild.nextSibling : =
row.firstChild;
	this._displayWeekdays();

	var tbody =3D Calendar.createElement("tbody", table);
	this.tbody =3D tbody;

	for (i =3D 6; i > 0; --i) {
		row =3D Calendar.createElement("tr", tbody);
		if (this.weekNumbers) {
			cell =3D Calendar.createElement("td", row);
			cell.appendChild(document.createTextNode(""));
		}
		for (var j =3D 7; j > 0; --j) {
			cell =3D Calendar.createElement("td", row);
			cell.appendChild(document.createTextNode(""));
			cell.calendar =3D this;
			Calendar._add_evs(cell);
		}
	}

	if (this.showsTime) {
		row =3D Calendar.createElement("tr", tbody);
		row.className =3D "time";

		cell =3D Calendar.createElement("td", row);
		cell.className =3D "time";
		cell.colSpan =3D 2;
		cell.innerHTML =3D Calendar._TT["TIME"] || "&nbsp;";

		cell =3D Calendar.createElement("td", row);
		cell.className =3D "time";
		cell.colSpan =3D this.weekNumbers ? 4 : 3;

		(function(){
			function makeTimePart(className, init, range_start, range_end) {
				var part =3D Calendar.createElement("span", cell);
				part.className =3D className;
				part.appendChild(document.createTextNode(init));
				part.calendar =3D cal;
				part.ttip =3D Calendar._TT["TIME_PART"];
				part.navtype =3D 50;
				part._range =3D [];
				if (typeof range_start !=3D "number")
					part._range =3D range_start;
				else {
					for (var i =3D range_start; i <=3D range_end; ++i) {
						var txt;
						if (i < 10 && range_end >=3D 10) txt =3D '0' + i;
						else txt =3D '' + i;
						part._range[part._range.length] =3D txt;
					}
				}
				Calendar._add_evs(part);
				return part;
			};
			var hrs =3D cal.date.getHours();
			var mins =3D cal.date.getMinutes();
			var t12 =3D !cal.time24;
			var pm =3D (hrs > 12);
			if (t12 && pm) hrs -=3D 12;
			var H =3D makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);
			var span =3D Calendar.createElement("span", cell);
			span.appendChild(document.createTextNode(":"));
			span.className =3D "colon";
			var M =3D makeTimePart("minute", mins, 0, 59);
			var AP =3D null;
			cell =3D Calendar.createElement("td", row);
			cell.className =3D "time";
			cell.colSpan =3D 2;
			if (t12)
				AP =3D makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);
			else
				cell.innerHTML =3D "&nbsp;";

			cal.onSetTime =3D function() {
				var hrs =3D this.date.getHours();
				var mins =3D this.date.getMinutes();
				var pm =3D (hrs > 12);
				if (pm && t12) hrs -=3D 12;
				H.firstChild.data =3D (hrs < 10) ? ("0" + hrs) : hrs;
				M.firstChild.data =3D (mins < 10) ? ("0" + mins) : mins;
				if (t12)
					AP.firstChild.data =3D pm ? "pm" : "am";
			};

			cal.onUpdateTime =3D function() {
				var date =3D this.date;
				var h =3D parseInt(H.firstChild.data, 10);
				if (t12) {
					if (/pm/i.test(AP.firstChild.data) && h < 12)
						h +=3D 12;
					else if (/am/i.test(AP.firstChild.data) && h =3D=3D 12)
						h =3D 0;
				}
				var d =3D date.getDate();
				var m =3D date.getMonth();
				var y =3D date.getFullYear();
				date.setHours(h);
				date.setMinutes(parseInt(M.firstChild.data, 10));
				date.setFullYear(y);
				date.setMonth(m);
				date.setDate(d);
				this.dateClicked =3D false;
				this.callHandler();
			};
		})();
	} else {
		this.onSetTime =3D this.onUpdateTime =3D function() {};
	}

	var tfoot =3D Calendar.createElement("tfoot", table);

	row =3D Calendar.createElement("tr", tfoot);
	row.className =3D "footrow";

	cell =3D hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);
	cell.className =3D "ttip";
	if (this.isPopup) {
		cell.ttip =3D Calendar._TT["DRAG_TO_MOVE"];
		cell.style.cursor =3D "move";
	}
	this.tooltips =3D cell;

	div =3D Calendar.createElement("div", this.element);
	this.monthsCombo =3D div;
	div.className =3D "combo";
	for (i =3D 0; i < Calendar._MN.length; ++i) {
		var mn =3D Calendar.createElement("div");
		mn.className =3D Calendar.is_ie ? "label-IEfix" : "label";
		mn.month =3D i;
		mn.appendChild(document.createTextNode(Calendar._SMN[i]));
		div.appendChild(mn);
	}

	div =3D Calendar.createElement("div", this.element);
	this.yearsCombo =3D div;
	div.className =3D "combo";
	for (i =3D 12; i > 0; --i) {
		var yr =3D Calendar.createElement("div");
		yr.className =3D Calendar.is_ie ? "label-IEfix" : "label";
		yr.appendChild(document.createTextNode(""));
		div.appendChild(yr);
	}

	this._init(this.firstDayOfWeek, this.date);
	parent.appendChild(this.element);
};

/** keyboard navigation, only for popup calendars */
Calendar._keyEvent =3D function(ev) {
	if (!window.calendar) {
		return false;
	}
	(Calendar.is_ie) && (ev =3D window.event);
	var cal =3D window.calendar;
	var act =3D (Calendar.is_ie || ev.type =3D=3D "keypress");
	if (ev.ctrlKey) {
		switch (ev.keyCode) {
		    case 37: // KEY left
			act && Calendar.cellClick(cal._nav_pm);
			break;
		    case 38: // KEY up
			act && Calendar.cellClick(cal._nav_py);
			break;
		    case 39: // KEY right
			act && Calendar.cellClick(cal._nav_nm);
			break;
		    case 40: // KEY down
			act && Calendar.cellClick(cal._nav_ny);
			break;
		    default:
			return false;
		}
	} else switch (ev.keyCode) {
	    case 32: // KEY space (now)
		Calendar.cellClick(cal._nav_now);
		break;
	    case 27: // KEY esc
		act && cal.callCloseHandler();
		break;
	    case 37: // KEY left
	    case 38: // KEY up
	    case 39: // KEY right
	    case 40: // KEY down
		if (act) {
			var date =3D cal.date.getDate() - 1;
			var el =3D cal.currentDateEl;
			var ne =3D null;
			var prev =3D (ev.keyCode =3D=3D 37) || (ev.keyCode =3D=3D 38);
			switch (ev.keyCode) {
			    case 37: // KEY left
				(--date >=3D 0) && (ne =3D cal.ar_days[date]);
				break;
			    case 38: // KEY up
				date -=3D 7;
				(date >=3D 0) && (ne =3D cal.ar_days[date]);
				break;
			    case 39: // KEY right
				(++date < cal.ar_days.length) && (ne =3D cal.ar_days[date]);
				break;
			    case 40: // KEY down
				date +=3D 7;
				(date < cal.ar_days.length) && (ne =3D cal.ar_days[date]);
				break;
			}
			if (!ne) {
				if (prev) {
					Calendar.cellClick(cal._nav_pm);
				} else {
					Calendar.cellClick(cal._nav_nm);
				}
				date =3D (prev) ? cal.date.getMonthDays() : 1;
				el =3D cal.currentDateEl;
				ne =3D cal.ar_days[date - 1];
			}
			Calendar.removeClass(el, "selected");
			Calendar.addClass(ne, "selected");
			cal.date =3D new Date(ne.caldate);
			cal.callHandler();
			cal.currentDateEl =3D ne;
		}
		break;
	    case 13: // KEY enter
		if (act) {
			cal.callHandler();
			cal.hide();
		}
		break;
	    default:
		return false;
	}
	return Calendar.stopEvent(ev);
};

/**
 *  (RE)Initializes the calendar to the given date and firstDayOfWeek
 */
Calendar.prototype._init =3D function (firstDayOfWeek, date) {
	var today =3D new Date();
	this.table.style.visibility =3D "hidden";
	var year =3D date.getFullYear();
	if (year < this.minYear) {
		year =3D this.minYear;
		date.setFullYear(year);
	} else if (year > this.maxYear) {
		year =3D this.maxYear;
		date.setFullYear(year);
	}
	this.firstDayOfWeek =3D firstDayOfWeek;
	this.date =3D new Date(date);
	var month =3D date.getMonth();
	var mday =3D date.getDate();
	var no_days =3D date.getMonthDays();

	// calendar voodoo for computing the first day that would actually be
	// displayed in the calendar, even if it's from the previous month.
	// WARNING: this is magic. ;-)
	date.setDate(1);
	var day1 =3D (date.getDay() - this.firstDayOfWeek) % 7;
	if (day1 < 0)
		day1 +=3D 7;
	date.setDate(-day1);
	date.setDate(date.getDate() + 1);

	var row =3D this.tbody.firstChild;
	var MN =3D Calendar._SMN[month];
	var ar_days =3D new Array();
	var weekend =3D Calendar._TT["WEEKEND"];
	for (var i =3D 0; i < 6; ++i, row =3D row.nextSibling) {
		var cell =3D row.firstChild;
		if (this.weekNumbers) {
			cell.className =3D "day wn";
			cell.firstChild.data =3D date.getWeekNumber();
			cell =3D cell.nextSibling;
		}
		row.className =3D "daysrow";
		var hasdays =3D false;
		for (var j =3D 0; j < 7; ++j, cell =3D cell.nextSibling, =
date.setDate(date.getDate() + 1)) {
			var iday =3D date.getDate();
			var wday =3D date.getDay();
			cell.className =3D "day";
			var current_month =3D (date.getMonth() =3D=3D month);
			if (!current_month) {
				if (this.showsOtherMonths) {
					cell.className +=3D " othermonth";
					cell.otherMonth =3D true;
				} else {
					cell.className =3D "emptycell";
					cell.innerHTML =3D "&nbsp;";
					cell.disabled =3D true;
					continue;
				}
			} else {
				cell.otherMonth =3D false;
				hasdays =3D true;
			}
			cell.disabled =3D false;
			cell.firstChild.data =3D iday;
			if (typeof this.getDateStatus =3D=3D "function") {
				var status =3D this.getDateStatus(date, year, month, iday);
				if (status =3D=3D=3D true) {
					cell.className +=3D " disabled";
					cell.disabled =3D true;
				} else {
					if (/disabled/i.test(status))
						cell.disabled =3D true;
					cell.className +=3D " " + status;
				}
			}
			if (!cell.disabled) {
				ar_days[ar_days.length] =3D cell;
				cell.caldate =3D new Date(date);
				cell.ttip =3D "_";
				if (current_month && iday =3D=3D mday) {
					cell.className +=3D " selected";
					this.currentDateEl =3D cell;
				}
				if (date.getFullYear() =3D=3D today.getFullYear() &&
				    date.getMonth() =3D=3D today.getMonth() &&
				    iday =3D=3D today.getDate()) {
					cell.className +=3D " today";
					cell.ttip +=3D Calendar._TT["PART_TODAY"];
				}
				if (weekend.indexOf(wday.toString()) !=3D -1) {
					cell.className +=3D cell.otherMonth ? " oweekend" : " weekend";
				}
			}
		}
		if (!(hasdays || this.showsOtherMonths))
			row.className =3D "emptyrow";
	}
	this.ar_days =3D ar_days;
	this.title.firstChild.data =3D Calendar._MN[month] + ", " + year;
	this.onSetTime();
	this.table.style.visibility =3D "visible";
	// PROFILE
	// this.tooltips.firstChild.data =3D "Generated in " + ((new Date()) - =
today) + " ms";
};

/**
 *  Calls _init function above for going to a certain date (but only if =
the
 *  date is different than the currently selected one).
 */
Calendar.prototype.setDate =3D function (date) {
	if (!date.equalsTo(this.date)) {
		this._init(this.firstDayOfWeek, date);
	}
};

/**
 *  Refreshes the calendar.  Useful if the "disabledHandler" function is
 *  dynamic, meaning that the list of disabled date can change at =
runtime.
 *  Just * call this function if you think that the list of disabled =
dates
 *  should * change.
 */
Calendar.prototype.refresh =3D function () {
	this._init(this.firstDayOfWeek, this.date);
};

/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for =
Monday, etc.). */
Calendar.prototype.setFirstDayOfWeek =3D function (firstDayOfWeek) {
	this._init(firstDayOfWeek, this.date);
	this._displayWeekdays();
};

/**
 *  Allows customization of what dates are enabled.  The "unaryFunction"
 *  parameter must be a function object that receives the date (as a JS =
Date
 *  object) and returns a boolean value.  If the returned value is true =
then
 *  the passed date will be marked as disabled.
 */
Calendar.prototype.setDateStatusHandler =3D =
Calendar.prototype.setDisabledHandler =3D function (unaryFunction) {
	this.getDateStatus =3D unaryFunction;
};

/** Customization of allowed year range for the calendar. */
Calendar.prototype.setRange =3D function (a, z) {
	this.minYear =3D a;
	this.maxYear =3D z;
};

/** Calls the first user handler (selectedHandler). */
Calendar.prototype.callHandler =3D function () {
	if (this.onSelected) {
		this.onSelected(this, this.date.print(this.dateFormat));
	}
};

/** Calls the second user handler (closeHandler). */
Calendar.prototype.callCloseHandler =3D function () {
	if (this.onClose) {
		this.onClose(this);
	}
	this.hideShowCovered();
};

/** Removes the calendar object from the DOM tree and destroys it. */
Calendar.prototype.destroy =3D function () {
	var el =3D this.element.parentNode;
	el.removeChild(this.element);
	Calendar._C =3D null;
	window.calendar =3D null;
};

/**
 *  Moves the calendar element to a different section in the DOM tree =
(changes
 *  its parent).
 */
Calendar.prototype.reparent =3D function (new_parent) {
	var el =3D this.element;
	el.parentNode.removeChild(el);
	new_parent.appendChild(el);
};

// This gets called when the user presses a mouse button anywhere in the
// document, if the calendar is shown.  If the click was outside the =
open
// calendar this function closes it.
Calendar._checkCalendar =3D function(ev) {
	if (!window.calendar) {
		return false;
	}
	var el =3D Calendar.is_ie ? Calendar.getElement(ev) : =
Calendar.getTargetElement(ev);
	for (; el !=3D null && el !=3D calendar.element; el =3D el.parentNode);
	if (el =3D=3D null) {
		// calls closeHandler which should hide the calendar.
		window.calendar.callCloseHandler();
		return Calendar.stopEvent(ev);
	}
};

/** Shows the calendar. */
Calendar.prototype.show =3D function () {
	var rows =3D this.table.getElementsByTagName("tr");
	for (var i =3D rows.length; i > 0;) {
		var row =3D rows[--i];
		Calendar.removeClass(row, "rowhilite");
		var cells =3D row.getElementsByTagName("td");
		for (var j =3D cells.length; j > 0;) {
			var cell =3D cells[--j];
			Calendar.removeClass(cell, "hilite");
			Calendar.removeClass(cell, "active");
		}
	}
	this.element.style.display =3D "block";
	this.hidden =3D false;
	if (this.isPopup) {
		window.calendar =3D this;
		Calendar.addEvent(document, "keydown", Calendar._keyEvent);
		Calendar.addEvent(document, "keypress", Calendar._keyEvent);
		Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);
	}
	this.hideShowCovered();
};

/**
 *  Hides the calendar.  Also removes any "hilite" from the class of any =
TD
 *  element.
 */
Calendar.prototype.hide =3D function () {
	if (this.isPopup) {
		Calendar.removeEvent(document, "keydown", Calendar._keyEvent);
		Calendar.removeEvent(document, "keypress", Calendar._keyEvent);
		Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);
	}
	this.element.style.display =3D "none";
	this.hidden =3D true;
	this.hideShowCovered();
};

/**
 *  Shows the calendar at a given absolute position (beware that, =
depending on
 *  the calendar element style -- position property -- this might be =
relative
 *  to the parent's containing rectangle).
 */
Calendar.prototype.showAt =3D function (x, y) {
	var s =3D this.element.style;
	s.left =3D x + "px";
	s.top =3D y + "px";
	this.show();
};

/** Shows the calendar near a given element. */
Calendar.prototype.showAtElement =3D function (el, opts) {
	var self =3D this;
	var p =3D Calendar.getAbsolutePos(el);
	if (!opts || typeof opts !=3D "string") {
		this.showAt(p.x, p.y + el.offsetHeight);
		return true;
	}
	function fixPosition(box) {
		if (box.x < 0)
			box.x =3D 0;
		if (box.y < 0)
			box.y =3D 0;
		var cp =3D document.createElement("div");
		var s =3D cp.style;
		s.position =3D "absolute";
		s.right =3D s.bottom =3D s.width =3D s.height =3D "0px";
		document.body.appendChild(cp);
		var br =3D Calendar.getAbsolutePos(cp);
		document.body.removeChild(cp);
		//IE7 uses window.scrollY/X not document.body.scrollTop/Left!!
		if (Calendar.is_ie && !Calendar.is_ie7) {
			br.y +=3D document.body.scrollTop;
			br.x +=3D document.body.scrollLeft;
		} else {
			br.y +=3D window.scrollY;
			br.x +=3D window.scrollX;
		}
		var tmp =3D box.x + box.width - br.x;
		if (tmp > 0) box.x -=3D tmp;
		tmp =3D box.y + box.height - br.y;
		if (tmp > 0) box.y -=3D tmp;
	};
	this.element.style.display =3D "block";
	Calendar.continuation_for_the_khtml_browser =3D function() {
		var w =3D self.element.offsetWidth;
		var h =3D self.element.offsetHeight;
		self.element.style.display =3D "none";
		var valign =3D opts.substr(0, 1);
		var halign =3D "l";
		if (opts.length > 1) {
			halign =3D opts.substr(1, 1);
		}
		// vertical alignment
		switch (valign) {
		    case "T": p.y -=3D h; break;
		    case "B": p.y +=3D el.offsetHeight; break;
		    case "C": p.y +=3D (el.offsetHeight - h) / 2; break;
		    case "t": p.y +=3D el.offsetHeight - h; break;
		    case "b": break; // already there
		}
		// horizontal alignment
		switch (halign) {
		    case "L": p.x -=3D w; break;
		    case "R": p.x +=3D el.offsetWidth; break;
		    case "C": p.x +=3D (el.offsetWidth - w) / 2; break;
		    case "r": p.x +=3D el.offsetWidth - w; break;
		    case "l": break; // already there
		}
		p.width =3D w;
		p.height =3D h + 40;
		self.monthsCombo.style.display =3D "none";
		fixPosition(p);
		self.showAt(p.x, p.y);
	};
	if (Calendar.is_khtml)
		setTimeout("Calendar.continuation_for_the_khtml_browser()", 10);
	else
		Calendar.continuation_for_the_khtml_browser();
};

/** Customizes the date format. */
Calendar.prototype.setDateFormat =3D function (str) {
	this.dateFormat =3D str;
};

/** Customizes the tooltip date format. */
Calendar.prototype.setTtDateFormat =3D function (str) {
	this.ttDateFormat =3D str;
};

/**
 *  Tries to identify the date represented in a string.  If successful =
it also
 *  calls this.setDate which moves the calendar to the given date.
 */
Calendar.prototype.parseDate =3D function (str, fmt) {
	var y =3D 0;
	var m =3D -1;
	var d =3D 0;
	var a =3D str.split(/\W+/);
	if (!fmt) {
		fmt =3D this.dateFormat;
	}
	var b =3D fmt.match(/%./g);
	var i =3D 0, j =3D 0;
	var hr =3D 0;
	var min =3D 0;
	for (i =3D 0; i < a.length; ++i) {
		if (!a[i])
			continue;
		switch (b[i]) {
		    case "%d":
		    case "%e":
			d =3D parseInt(a[i], 10);
			break;

		    case "%m":
			m =3D parseInt(a[i], 10) - 1;
			break;

		    case "%Y":
		    case "%y":
			y =3D parseInt(a[i], 10);
			(y < 100) && (y +=3D (y > 29) ? 1900 : 2000);
			break;

		    case "%b":
		    case "%B":
			for (j =3D 0; j < 12; ++j) {
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { m =3D j; break; }
			}
			break;

		    case "%H":
		    case "%I":
		    case "%k":
		    case "%l":
			hr =3D parseInt(a[i], 10);
			break;

		    case "%P":
		    case "%p":
			if (/pm/i.test(a[i]) && hr < 12)
				hr +=3D 12;
			break;

		    case "%M":
			min =3D parseInt(a[i], 10);
			break;
		}
	}
	if (y !=3D 0 && m !=3D -1 && d !=3D 0) {
		this.setDate(new Date(y, m, d, hr, min, 0));
		return;
	}
	y =3D 0; m =3D -1; d =3D 0;
	for (i =3D 0; i < a.length; ++i) {
		if (a[i].search(/[a-zA-Z]+/) !=3D -1) {
			var t =3D -1;
			for (j =3D 0; j < 12; ++j) {
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { t =3D j; break; }
			}
			if (t !=3D -1) {
				if (m !=3D -1) {
					d =3D m+1;
				}
				m =3D t;
			}
		} else if (parseInt(a[i], 10) <=3D 12 && m =3D=3D -1) {
			m =3D a[i]-1;
		} else if (parseInt(a[i], 10) > 31 && y =3D=3D 0) {
			y =3D parseInt(a[i], 10);
			(y < 100) && (y +=3D (y > 29) ? 1900 : 2000);
		} else if (d =3D=3D 0) {
			d =3D a[i];
		}
	}
	if (y =3D=3D 0) {
		var today =3D new Date();
		y =3D today.getFullYear();
	}
	if (m !=3D -1 && d !=3D 0) {
		this.setDate(new Date(y, m, d, hr, min, 0));
	}
};

Calendar.prototype.hideShowCovered =3D function () {
	var self =3D this;
	Calendar.continuation_for_the_khtml_browser =3D function() {
		function getVisib(obj){
			var value =3D obj.style.visibility;
			if (!value) {
				if (document.defaultView && typeof =
(document.defaultView.getComputedStyle) =3D=3D "function") { // Gecko, =
W3C
//					if (!Calendar.is_khtml) //safari logic here is broken; following =
works
						value =3D document.defaultView.getComputedStyle(obj, =
"").getPropertyValue("visibility");
//					else
//						value =3D '';
				} else if (obj.currentStyle) { // IE
					value =3D obj.currentStyle.visibility;
				} else
					value =3D '';
			}
			return value;
		};

		var tags =3D new Array("applet", "iframe", "select");
		var el =3D self.element;

		var p =3D Calendar.getAbsolutePos(el);
		var EX1 =3D p.x;
		var EX2 =3D el.offsetWidth + EX1;
		var EY1 =3D p.y;
		var EY2 =3D el.offsetHeight + EY1;

		for (var k =3D tags.length; k > 0; ) {
			var ar =3D document.getElementsByTagName(tags[--k]);
			var cc =3D null;

			for (var i =3D ar.length; i > 0;) {
				cc =3D ar[--i];

				p =3D Calendar.getAbsolutePos(cc);
				var CX1 =3D p.x;
				var CX2 =3D cc.offsetWidth + CX1;
				var CY1 =3D p.y;
				var CY2 =3D cc.offsetHeight + CY1;

				if (self.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 =
< EY1)) {
					if (!cc.__msh_save_visibility) {
						cc.__msh_save_visibility =3D getVisib(cc);
					}
					cc.style.visibility =3D cc.__msh_save_visibility;
				} else {
					if (!cc.__msh_save_visibility) {
						cc.__msh_save_visibility =3D getVisib(cc);
					}
					cc.style.visibility =3D "hidden";
				}
			}
		}
	};
	if (Calendar.is_khtml)
		setTimeout("Calendar.continuation_for_the_khtml_browser()", 10);
	else
		Calendar.continuation_for_the_khtml_browser();
};

/** Internal function; it displays the bar with the names of the =
weekday. */
Calendar.prototype._displayWeekdays =3D function () {
	var fdow =3D this.firstDayOfWeek;
	var cell =3D this.firstdayname;
	var weekend =3D Calendar._TT["WEEKEND"];
	for (var i =3D 0; i < 7; ++i) {
		cell.className =3D "day name";
		var realday =3D (i + fdow) % 7;
		if (i) {
			cell.ttip =3D Calendar._TT["DAY_FIRST"].replace("%s", =
Calendar._DN[realday]);
			cell.navtype =3D 100;
			cell.calendar =3D this;
			cell.fdow =3D realday;
			Calendar._add_evs(cell);
		}
		if (weekend.indexOf(realday.toString()) !=3D -1) {
			Calendar.addClass(cell, "weekend");
		}
		cell.firstChild.data =3D Calendar._SDN[(i + fdow) % 7];
		cell =3D cell.nextSibling;
	}
};

/** Internal function.  Hides all combo boxes that might be displayed. =
*/
Calendar.prototype._hideCombos =3D function () {
	this.monthsCombo.style.display =3D "none";
	this.yearsCombo.style.display =3D "none";
};

/** Internal function.  Starts dragging the element. */
Calendar.prototype._dragStart =3D function (ev) {
	if (this.dragging) {
		return;
	}
	this.dragging =3D true;
	var posX;
	var posY;
	if (Calendar.is_ie) {
		posY =3D window.event.clientY + document.body.scrollTop;
		posX =3D window.event.clientX + document.body.scrollLeft;
	} else {
		posY =3D ev.clientY + window.scrollY;
		posX =3D ev.clientX + window.scrollX;
	}
	var st =3D this.element.style;
	this.xOffs =3D posX - parseInt(st.left);
	this.yOffs =3D posY - parseInt(st.top);
	with (Calendar) {
		addEvent(document, "mousemove", calDragIt);
		addEvent(document, "mouseup", calDragEnd);
	}
};

// BEGIN: DATE OBJECT PATCHES

/** Adds the number of days array to the Date object. */
Date._MD =3D new Array(31,28,31,30,31,30,31,31,30,31,30,31);

/** Constants used for time computations */
Date.SECOND =3D 1000 /* milliseconds */;
Date.MINUTE =3D 60 * Date.SECOND;
Date.HOUR   =3D 60 * Date.MINUTE;
Date.DAY    =3D 24 * Date.HOUR;
Date.WEEK   =3D  7 * Date.DAY;

/** Returns the number of days in the current month */
Date.prototype.getMonthDays =3D function(month) {
	var year =3D this.getFullYear();
	if (typeof month =3D=3D "undefined") {
		month =3D this.getMonth();
	}
	if (((0 =3D=3D (year%4)) && ( (0 !=3D (year%100)) || (0 =3D=3D =
(year%400)))) && month =3D=3D 1) {
		return 29;
	} else {
		return Date._MD[month];
	}
};

/** Returns the number of day in the year. */
Date.prototype.getDayOfYear =3D function() {
	var now =3D new Date(this.getFullYear(), this.getMonth(), =
this.getDate(), 0, 0, 0);
	var then =3D new Date(this.getFullYear(), 0, 0, 0, 0, 0);
	var time =3D now - then;
	return Math.floor(time / Date.DAY);
};

/** Returns the number of the week in year, as defined in ISO 8601. */
Date.prototype.getWeekNumber =3D function() {
	var d =3D new Date(this.getFullYear(), this.getMonth(), this.getDate(), =
0, 0, 0);
	var DoW =3D d.getDay();
	d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
	var ms =3D d.valueOf(); // GMT
	d.setMonth(0);
	d.setDate(4); // Thu in Week 1
	return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
};

/** Checks dates equality (ignores time) */
Date.prototype.equalsTo =3D function(date) {
	return ((this.getFullYear() =3D=3D date.getFullYear()) &&
		(this.getMonth() =3D=3D date.getMonth()) &&
		(this.getDate() =3D=3D date.getDate()) &&
		(this.getHours() =3D=3D date.getHours()) &&
		(this.getMinutes() =3D=3D date.getMinutes()));
};

/** Prints the date in a string according to the given format. */
Date.prototype.print =3D function (str) {
	var m =3D this.getMonth();
	var d =3D this.getDate();
	var y =3D this.getFullYear();
	var wn =3D this.getWeekNumber();
	var w =3D this.getDay();
	var s =3D {};
	var hr =3D this.getHours();
	var pm =3D (hr >=3D 12);
	var ir =3D (pm) ? (hr - 12) : hr;
	var dy =3D this.getDayOfYear();
	if (ir =3D=3D 0)
		ir =3D 12;
	var min =3D this.getMinutes();
	var sec =3D this.getSeconds();
	s["%a"] =3D Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]
	s["%A"] =3D Calendar._DN[w]; // full weekday name
	s["%b"] =3D Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]
	s["%B"] =3D Calendar._MN[m]; // full month name
	// FIXME: %c : preferred date and time representation for the current =
locale
	s["%C"] =3D 1 + Math.floor(y / 100); // the century number
	s["%d"] =3D (d < 10) ? ("0" + d) : d; // the day of the month (range 01 =
to 31)
	s["%e"] =3D d; // the day of the month (range 1 to 31)
	// FIXME: %D : american date style: %m/%d/%y
	// FIXME: %E, %F, %G, %g, %h (man strftime)
	s["%H"] =3D (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h =
format)
	s["%I"] =3D (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h =
format)
	s["%j"] =3D (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; =
// day of the year (range 001 to 366)
	s["%k"] =3D hr;		// hour, range 0 to 23 (24h format)
	s["%l"] =3D ir;		// hour, range 1 to 12 (12h format)
	s["%m"] =3D (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12
	s["%M"] =3D (min < 10) ? ("0" + min) : min; // minute, range 00 to 59
	s["%n"] =3D "\n";		// a newline character
	s["%p"] =3D pm ? "PM" : "AM";
	s["%P"] =3D pm ? "pm" : "am";
	// FIXME: %r : the time in am/pm notation %I:%M:%S %p
	// FIXME: %R : the time in 24-hour notation %H:%M
	s["%s"] =3D Math.floor(this.getTime() / 1000);
	s["%S"] =3D (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59
	s["%t"] =3D "\t";		// a tab character
	// FIXME: %T : the time in 24-hour notation (%H:%M:%S)
	s["%U"] =3D s["%W"] =3D s["%V"] =3D (wn < 10) ? ("0" + wn) : wn;
	s["%u"] =3D w + 1;	// the day of the week (range 1 to 7, 1 =3D MON)
	s["%w"] =3D w;		// the day of the week (range 0 to 6, 0 =3D SUN)
	// FIXME: %x : preferred date representation for the current locale =
without the time
	// FIXME: %X : preferred time representation for the current locale =
without the date
	s["%y"] =3D ('' + y).substr(2, 2); // year without the century (range =
00 to 99)
	s["%Y"] =3D y;		// year with the century
	s["%%"] =3D "%";		// a literal '%' character

	var re =3D /%./g;
	if (!Calendar.is_ie5)
		return str.replace(re, function (par) { return s[par] || par; });

	var a =3D str.match(re);
	for (var i =3D 0; i < a.length; i++) {
		var tmp =3D s[a[i]];
		if (tmp) {
			re =3D new RegExp(a[i], 'g');
			str =3D str.replace(re, tmp);
		}
	}

	return str;
};

Date.prototype.__msh_oldSetFullYear =3D Date.prototype.setFullYear;
Date.prototype.setFullYear =3D function(y) {
	var d =3D new Date(this);
	d.__msh_oldSetFullYear(y);
	if (d.getMonth() !=3D this.getMonth())
		this.setDate(28);
	this.__msh_oldSetFullYear(y);
};

// END: DATE OBJECT PATCHES


// global object that remembers the calendar
window.calendar =3D null;

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/lib/jscalendar-0.9.6/lang/calendar-en.js

// ** I18N=0A=
=0A=
// Calendar EN language=0A=
// Author: Mihai Bazon, <mishoo@infoiasi.ro>=0A=
// Encoding: any=0A=
// Distributed under the same terms as the calendar itself.=0A=
=0A=
// For translators: please use UTF-8 if possible.  We strongly believe =
that=0A=
// Unicode is the answer to a real internationalized world.  Also please=0A=
// include your contact information in the header, as can be seen above.=0A=
=0A=
// full day names=0A=
Calendar._DN =3D new Array=0A=
("Sunday",=0A=
 "Monday",=0A=
 "Tuesday",=0A=
 "Wednesday",=0A=
 "Thursday",=0A=
 "Friday",=0A=
 "Saturday",=0A=
 "Sunday");=0A=
=0A=
// Please note that the following array of short day names (and the same =
goes=0A=
// for short month names, _SMN) isn't absolutely necessary.  We give it =
here=0A=
// for exemplification on how one can customize the short day names, but =
if=0A=
// they are simply the first N letters of the full name you can simply =
say:=0A=
//=0A=
//   Calendar._SDN_len =3D N; // short day name length=0A=
//   Calendar._SMN_len =3D N; // short month name length=0A=
//=0A=
// If N =3D 3 then this is not needed either since we assume a value of =
3 if not=0A=
// present, to be compatible with translation files that were written =
before=0A=
// this feature.=0A=
=0A=
// short day names=0A=
Calendar._SDN =3D new Array=0A=
("Sun",=0A=
 "Mon",=0A=
 "Tue",=0A=
 "Wed",=0A=
 "Thu",=0A=
 "Fri",=0A=
 "Sat",=0A=
 "Sun");=0A=
=0A=
// full month names=0A=
Calendar._MN =3D new Array=0A=
("January",=0A=
 "February",=0A=
 "March",=0A=
 "April",=0A=
 "May",=0A=
 "June",=0A=
 "July",=0A=
 "August",=0A=
 "September",=0A=
 "October",=0A=
 "November",=0A=
 "December");=0A=
=0A=
// short month names=0A=
Calendar._SMN =3D new Array=0A=
("Jan",=0A=
 "Feb",=0A=
 "Mar",=0A=
 "Apr",=0A=
 "May",=0A=
 "Jun",=0A=
 "Jul",=0A=
 "Aug",=0A=
 "Sep",=0A=
 "Oct",=0A=
 "Nov",=0A=
 "Dec");=0A=
=0A=
// tooltips=0A=
Calendar._TT =3D {};=0A=
Calendar._TT["INFO"] =3D "About the calendar";=0A=
=0A=
Calendar._TT["ABOUT"] =3D=0A=
"DHTML Date/Time Selector\n" +=0A=
"(c) dynarch.com 2002-2003\n" + // don't translate this this ;-)=0A=
"For latest version visit: http://dynarch.com/mishoo/calendar.epl\n" +=0A=
"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for =
details." +=0A=
"\n\n" +=0A=
"Date selection:\n" +=0A=
"- Use the \xab, \xbb buttons to select year\n" +=0A=
"- Use the " + String.fromCharCode(0x2039) + ", " + =
String.fromCharCode(0x203a) + " buttons to select month\n" +=0A=
"- Hold mouse button on any of the above buttons for faster selection.";=0A=
Calendar._TT["ABOUT_TIME"] =3D "\n\n" +=0A=
"Time selection:\n" +=0A=
"- Click on any of the time parts to increase it\n" +=0A=
"- or Shift-click to decrease it\n" +=0A=
"- or click and drag for faster selection.";=0A=
=0A=
Calendar._TT["PREV_YEAR"] =3D "Prev. year (hold for menu)";=0A=
Calendar._TT["PREV_MONTH"] =3D "Prev. month (hold for menu)";=0A=
Calendar._TT["GO_TODAY"] =3D "Go Today";=0A=
Calendar._TT["NEXT_MONTH"] =3D "Next month (hold for menu)";=0A=
Calendar._TT["NEXT_YEAR"] =3D "Next year (hold for menu)";=0A=
Calendar._TT["SEL_DATE"] =3D "Select date";=0A=
Calendar._TT["DRAG_TO_MOVE"] =3D "Drag to move";=0A=
Calendar._TT["PART_TODAY"] =3D " (today)";=0A=
=0A=
// the following is to inform that "%s" is to be the first day of week=0A=
// %s will be replaced with the day name.=0A=
Calendar._TT["DAY_FIRST"] =3D "Display %s first";=0A=
=0A=
// This may be locale-dependent.  It specifies the week-end days, as an =
array=0A=
// of comma-separated numbers.  The numbers are from 0 to 6: 0 means =
Sunday, 1=0A=
// means Monday, etc.=0A=
Calendar._TT["WEEKEND"] =3D "0,6";=0A=
=0A=
Calendar._TT["CLOSE"] =3D "Close";=0A=
Calendar._TT["TODAY"] =3D "Today";=0A=
Calendar._TT["TIME_PART"] =3D "(Shift-)Click or drag to change value";=0A=
=0A=
// date formats=0A=
Calendar._TT["DEF_DATE_FORMAT"] =3D "%Y-%m-%d";=0A=
Calendar._TT["TT_DATE_FORMAT"] =3D "%a, %b %e";=0A=
=0A=
Calendar._TT["WK"] =3D "wk";=0A=
Calendar._TT["TIME"] =3D "Time:";=0A=

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/lib/jscalendar-0.9.6/calendar-setup.js

/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/=0A=
 * =
-------------------------------------------------------------------------=
--=0A=
 *=0A=
 * The DHTML Calendar=0A=
 *=0A=
 * Details and latest version at:=0A=
 * http://dynarch.com/mishoo/calendar.epl=0A=
 *=0A=
 * This script is distributed under the GNU Lesser General Public =
License.=0A=
 * Read the entire license text here: =
http://www.gnu.org/licenses/lgpl.html=0A=
 *=0A=
 * This file defines helper functions for setting up the calendar.  They =
are=0A=
 * intended to help non-programmers get a working calendar on their site=0A=
 * quickly.  This script should not be seen as part of the calendar.  It =
just=0A=
 * shows you what one can do with the calendar, while in the same time=0A=
 * providing a quick and simple method for setting it up.  If you need=0A=
 * exhaustive customization of the calendar creation process feel free to=0A=
 * modify this code to suit your needs (this is recommended and much =
better=0A=
 * than modifying calendar.js itself).=0A=
 */=0A=
=0A=
// $Id: calendar-setup.js,v 1.15 2004/02/04 08:10:03 mishoo Exp $=0A=
=0A=
/**=0A=
 *  This function "patches" an input field (or other element) to use a =
calendar=0A=
 *  widget for date selection.=0A=
 *=0A=
 *  The "params" is a single object that can have the following =
properties:=0A=
 *=0A=
 *    prop. name   | description=0A=
 *  =
-------------------------------------------------------------------------=
------------------------=0A=
 *   inputField    | the ID of an input field to store the date=0A=
 *   displayArea   | the ID of a DIV or other element to show the date=0A=
 *   button        | ID of a button or other element that will trigger =
the calendar=0A=
 *   eventName     | event that will trigger the calendar, without the =
"on" prefix (default: "click")=0A=
 *   ifFormat      | date format that will be stored in the input field=0A=
 *   daFormat      | the date format that will be used to display the =
date in displayArea=0A=
 *   singleClick   | (true/false) wether the calendar is in single click =
mode or not (default: true)=0A=
 *   firstDay      | numeric: 0 to 6.  "0" means display Sunday first, =
"1" means display Monday first, etc.=0A=
 *   align         | alignment (default: "Br"); if you don't know what's =
this see the calendar documentation=0A=
 *   range         | array with 2 elements.  Default: [1900, 2999] -- =
the range of years available=0A=
 *   weekNumbers   | (true/false) if it's true (default) the calendar =
will display week numbers=0A=
 *   flat          | null or element ID; if not null the calendar will =
be a flat calendar having the parent with the given ID=0A=
 *   flatCallback  | function that receives a JS Date object and returns =
an URL to point the browser to (for flat calendar)=0A=
 *   disableFunc   | function that receives a JS Date object and should =
return true if that date has to be disabled in the calendar=0A=
 *   onSelect      | function that gets called when a date is selected.  =
You don't _have_ to supply this (the default is generally okay)=0A=
 *   onClose       | function that gets called when the calendar is =
closed.  [default]=0A=
 *   onUpdate      | function that gets called after the date is updated =
in the input field.  Receives a reference to the calendar.=0A=
 *   date          | the date that the calendar will be initially =
displayed to=0A=
 *   showsTime     | default: false; if true the calendar will include a =
time selector=0A=
 *   timeFormat    | the time format; can be "12" or "24", default is =
"12"=0A=
 *   electric      | if true (default) then given fields/date areas are =
updated for each move; otherwise they're updated only on close=0A=
 *   step          | configures the step of the years in drop-down =
boxes; default: 2=0A=
 *   position      | configures the calendar absolute position; default: =
null=0A=
 *   cache         | if "true" (but default: "false") it will reuse the =
same calendar object, where possible=0A=
 *   showOthers    | if "true" (but default: "false") it will show days =
from other months too=0A=
 *=0A=
 *  None of them is required, they all have default values.  However, if =
you=0A=
 *  pass none of "inputField", "displayArea" or "button" you'll get a =
warning=0A=
 *  saying "nothing to setup".=0A=
 */=0A=
Calendar.setup =3D function (params) {=0A=
	function param_default(pname, def) { if (typeof params[pname] =3D=3D =
"undefined") { params[pname] =3D def; } };=0A=
=0A=
	param_default("inputField",     null);=0A=
	param_default("displayArea",    null);=0A=
	param_default("button",         null);=0A=
	param_default("eventName",      "click");=0A=
	param_default("ifFormat",       "%Y/%m/%d");=0A=
	param_default("daFormat",       "%Y/%m/%d");=0A=
	param_default("singleClick",    true);=0A=
	param_default("disableFunc",    null);=0A=
	param_default("dateStatusFunc", params["disableFunc"]);	// takes =
precedence if both are defined=0A=
	param_default("firstDay",       0); // defaults to "Sunday" first=0A=
	param_default("align",          "Br");=0A=
	param_default("range",          [1900, 2999]);=0A=
	param_default("weekNumbers",    true);=0A=
	param_default("flat",           null);=0A=
	param_default("flatCallback",   null);=0A=
	param_default("onSelect",       null);=0A=
	param_default("onClose",        null);=0A=
	param_default("onUpdate",       null);=0A=
	param_default("date",           null);=0A=
	param_default("showsTime",      false);=0A=
	param_default("timeFormat",     "24");=0A=
	param_default("electric",       true);=0A=
	param_default("step",           2);=0A=
	param_default("position",       null);=0A=
	param_default("cache",          false);=0A=
	param_default("showOthers",     false);=0A=
=0A=
	var tmp =3D ["inputField", "displayArea", "button"];=0A=
	for (var i in tmp) {=0A=
		if (typeof params[tmp[i]] =3D=3D "string") {=0A=
			params[tmp[i]] =3D document.getElementById(params[tmp[i]]);=0A=
		}=0A=
	}=0A=
	if (!(params.flat || params.inputField || params.displayArea || =
params.button)) {=0A=
		alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please =
check your code");=0A=
		return false;=0A=
	}=0A=
=0A=
	function onSelect(cal) {=0A=
		var p =3D cal.params;=0A=
		var update =3D (cal.dateClicked || p.electric);=0A=
		if (update && p.flat) {=0A=
			if (typeof p.flatCallback =3D=3D "function")=0A=
				p.flatCallback(cal);=0A=
			else=0A=
				alert("No flatCallback given -- doing nothing.");=0A=
			return false;=0A=
		}=0A=
		if (update && p.inputField) {=0A=
			p.inputField.value =3D cal.date.print(p.ifFormat);=0A=
			if (typeof p.inputField.onchange =3D=3D "function")=0A=
				p.inputField.onchange();=0A=
		}=0A=
		if (update && p.displayArea)=0A=
			p.displayArea.innerHTML =3D cal.date.print(p.daFormat);=0A=
		if (update && p.singleClick && cal.dateClicked)=0A=
			cal.callCloseHandler();=0A=
		if (update && typeof p.onUpdate =3D=3D "function")=0A=
			p.onUpdate(cal);=0A=
	};=0A=
=0A=
	if (params.flat !=3D null) {=0A=
		if (typeof params.flat =3D=3D "string")=0A=
			params.flat =3D document.getElementById(params.flat);=0A=
		if (!params.flat) {=0A=
			alert("Calendar.setup:\n  Flat specified but can't find parent.");=0A=
			return false;=0A=
		}=0A=
		var cal =3D new Calendar(params.firstDay, params.date, params.onSelect =
|| onSelect);=0A=
		cal.showsTime =3D params.showsTime;=0A=
		cal.time24 =3D (params.timeFormat =3D=3D "24");=0A=
		cal.params =3D params;=0A=
		cal.weekNumbers =3D params.weekNumbers;=0A=
		cal.setRange(params.range[0], params.range[1]);=0A=
		cal.setDateStatusHandler(params.dateStatusFunc);=0A=
		cal.create(params.flat);=0A=
		cal.show();=0A=
		return false;=0A=
	}=0A=
=0A=
	var triggerEl =3D params.button || params.displayArea || =
params.inputField;=0A=
	triggerEl["on" + params.eventName] =3D function() {=0A=
		var dateEl =3D params.inputField || params.displayArea;=0A=
		var dateFmt =3D params.inputField ? params.ifFormat : params.daFormat;=0A=
		var mustCreate =3D false;=0A=
		var cal =3D window.calendar;=0A=
		if (!(cal && params.cache)) {=0A=
			window.calendar =3D cal =3D new Calendar(params.firstDay,=0A=
							     params.date,=0A=
							     params.onSelect || onSelect,=0A=
							     params.onClose || function(cal) { cal.hide(); });=0A=
			cal.showsTime =3D params.showsTime;=0A=
			cal.time24 =3D (params.timeFormat =3D=3D "24");=0A=
			cal.weekNumbers =3D params.weekNumbers;=0A=
			mustCreate =3D true;=0A=
		} else {=0A=
			if (params.date)=0A=
				cal.setDate(params.date);=0A=
			cal.hide();=0A=
		}=0A=
		cal.showsOtherMonths =3D params.showOthers;=0A=
		cal.yearStep =3D params.step;=0A=
		cal.setRange(params.range[0], params.range[1]);=0A=
		cal.params =3D params;=0A=
		cal.setDateStatusHandler(params.dateStatusFunc);=0A=
		cal.setDateFormat(dateFmt);=0A=
		if (mustCreate)=0A=
			cal.create();=0A=
		cal.parseDate(dateEl.value || dateEl.innerHTML);=0A=
		cal.refresh();=0A=
		if (!params.position)=0A=
			cal.showAtElement(params.button || params.displayArea || =
params.inputField, params.align);=0A=
		else=0A=
			cal.showAt(params.position[0], params.position[1]);=0A=
		return false;=0A=
	};=0A=
};=0A=

------=_NextPart_000_0000_01C7E498.1B00FD00
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://www.tenders.gov.au/lib/prototype-1.5.0_rc1/prototype.js

/*  Prototype JavaScript framework, version 1.5.0_rc1=0A=
 *  (c) 2005 Sam Stephenson <sam@conio.net>=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://prototype.conio.net/=0A=
 *=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.5.0_rc1',=0A=
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',=0A=
=0A=
  emptyFunction: function() {},=0A=
  K: function(x) {return x}=0A=
}=0A=
=0A=
var Class =3D {=0A=
  create: function() {=0A=
    return function() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source) {=0A=
    destination[property] =3D source[property];=0A=
  }=0A=
  return destination;=0A=
}=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (object =3D=3D undefined) return 'undefined';=0A=
      if (object =3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : object.toString();=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({}, object);=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.bind =3D function() {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function() {=0A=
    return __method.apply(object, args.concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function(event) {=0A=
    return __method.apply(object, [( event || =
window.event)].concat(args).concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    var digits =3D this.toString(16);=0A=
    if (this < 16) return '0' + digits;=0A=
    return digits;=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  }=0A=
});=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0; i < arguments.length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) {}=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.callback(this);=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D (replacement(match) || '').toString();=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D count =3D=3D=3D undefined ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : this;=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    var text =3D document.createTextNode(this);=0A=
    div.appendChild(text);=0A=
    return div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';=0A=
  },=0A=
=0A=
  toQueryParams: function() {=0A=
    var pairs =3D this.match(/^\??(.*)$/)[1].split('&');=0A=
    return pairs.inject({}, function(params, pairString) {=0A=
      var pair  =3D pairString.split('=3D');=0A=
      var value =3D pair[1] ? decodeURIComponent(pair[1]) : undefined;=0A=
      params[decodeURIComponent(pair[0])] =3D value;=0A=
      return params;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var oStringList =3D this.split('-');=0A=
    if (oStringList.length =3D=3D 1) return oStringList[0];=0A=
=0A=
    var camelizedString =3D this.indexOf('-') =3D=3D 0=0A=
      ? oStringList[0].charAt(0).toUpperCase() + =
oStringList[0].substring(1)=0A=
      : oStringList[0];=0A=
=0A=
    for (var i =3D 1, len =3D oStringList.length; i < len; i++) {=0A=
      var s =3D oStringList[i];=0A=
      camelizedString +=3D s.charAt(0).toUpperCase() + s.substring(1);=0A=
    }=0A=
=0A=
    return camelizedString;=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.replace(/\\/g, '\\\\');=0A=
    if (useDoubleQuotes)=0A=
      return '"' + escapedString.replace(/"/g, '\\"') + '"';=0A=
    else=0A=
      return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (typeof replacement =3D=3D 'function') return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
}=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
var Template =3D Class.create();=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
Template.prototype =3D {=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern  =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      var before =3D match[1];=0A=
      if (before =3D=3D '\\') return match[2];=0A=
      return before + (