From: <Mit Windows Internet Explorer 8 gespeichert>
Subject: The W h i p p e t Archives
Date: Sat, 29 Aug 2009 22:09:57 +0200
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CA28F5.71E28690"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/testmating.php?dam=52159&sire=64054&gens=6

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>The W h i p p e t Archives</TITLE>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META name=3Ddescription=20
content=3D"Database containing whippet pedigrees including thousands of =
photos. A place for the community of whippet lovers worldwide!">
<META name=3Dkeywords content=3D"whippet, pedigree, whippet pedigrees">
<META name=3Dauthor content=3D"Karin Schellner">
<META name=3Dlanguage content=3Den><LINK rel=3Dstylesheet =
type=3Dtext/css=20
href=3D"http://thewhippetarchives.net/styles/basic.css"><!-- yui -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/yahoo.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/dom.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/event.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/animation.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/dragdrop.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/container.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/autocomplete.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/yui/connection.js"></SCRIPT>
<LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://thewhippetarchives.net/styles/yui/container.css"><LINK=20
rel=3D"shortcut icon" =
href=3D"http://thewhippetarchives.net/favicon.ico">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/twa.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript>
//SuckerTree Horizontal Menu (Sept 14th, 06)
//By Dynamic Drive: http://www.dynamicdrive.com/style/
var menuids=3D["treemenu1"] //Enter id(s) of SuckerTree UL menus, =
separated by commas
function buildsubmenus_horizontal(){
for (var i=3D0; i<menuids.length; i++){
  var =
ultags=3Ddocument.getElementById(menuids[i]).getElementsByTagName("ul")
    for (var t=3D0; t<ultags.length; t++){
		if (ultags[t].parentNode.parentNode.id=3D=3Dmenuids[i]){ //if this is =
a first level submenu
			ultags[t].style.top=3Dultags[t].parentNode.offsetHeight+"px" =
//dynamically position first level submenus to be height of main menu =
item
			=
ultags[t].parentNode.getElementsByTagName("a")[0].className=3D"mainfolder=
icon"
		}
		else{ //else if this is a sub level menu (ul)
		  =
ultags[t].style.left=3Dultags[t-1].getElementsByTagName("a")[0].offsetWid=
th+"px" //position menu to the right of menu item that activated it
    	=
ultags[t].parentNode.getElementsByTagName("a")[0].className=3D"subfolderi=
con"
		}
    ultags[t].parentNode.onmouseover=3Dfunction(){
    this.getElementsByTagName("ul")[0].style.visibility=3D"visible"
    }
    ultags[t].parentNode.onmouseout=3Dfunction(){
    this.getElementsByTagName("ul")[0].style.visibility=3D"hidden"
    }
    }
  }
}
if (window.addEventListener)
window.addEventListener("load", buildsubmenus_horizontal, false)
else if (window.attachEvent)
window.attachEvent("onload", buildsubmenus_horizontal)
</SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18812"></HEAD>
<BODY><!--div class=3D"container"--><!-- header -->
<DIV style=3D"FLOAT: left"><IMG border=3D0 alt=3D"The Whippet Archives"=20
src=3D"http://thewhippetarchives.net/images/title_sponsored_floral.gif"=20
useMap=3D#Map> </DIV>
<DIV=20
style=3D"PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
FLOAT: right; PADDING-TOP: 5px">
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD style=3D"HEIGHT: 5px" vAlign=3Dtop align=3Dright><LABEL>Logged =
in as=20
      <STRONG>Bianca Weisl</STRONG> </LABEL></TD>
    <TD style=3D"HEIGHT: 5px" align=3Dright><SPAN class=3Dnavitem><A=20
      class=3DbuttonLink=20
      =
href=3D"http://thewhippetarchives.net/php_users/htdocs/logoff.php">[ =
Logoff=20
      ]</A></SPAN></TD></TR>
  <TR>
    <TD style=3D"HEIGHT: 5px" align=3Dright><SPAN class=3Dnavitem><A=20
      class=3DbuttonLink=20
      =
href=3D"http://thewhippetarchives.net/php_users/htdocs/users_edit.php?ret=
urnto=3D%2Ftestmating.php%3Fdam%3D52159%26sire%3D64054%26gens%3D6">My=20
      Profile</A></SPAN></TD></TR>
  <TR>
    <TD style=3D"HEIGHT: 5px" align=3Dright><SPAN class=3Dnavitem><A=20
      class=3DbuttonLink=20
      =
href=3D"http://thewhippetarchives.net/pm.php">TWAMail</A></SPAN></TD></TR=
>
  <TR>
    <TD style=3D"HEIGHT: 5px" align=3Dright><SPAN class=3Dnavitem><A=20
      class=3DbuttonLink=20
      =
href=3D"http://thewhippetarchives.net/watchlist.php">Watchlist</A></SPAN>=
</TD></TR></TBODY></TABLE></DIV>
<DIV=20
style=3D"BACKGROUND-IMAGE: =
url(http://thewhippetarchives.net/images/header-modern.gif); =
BACKGROUND-REPEAT: repeat-x"=20
class=3Dnavarea>
<DIV class=3Dsuckertreemenu>
<TABLE width=3D"99%">
  <TBODY>
  <TR>
    <TD>
      <UL id=3Dtreemenu1>
        <LI><A style=3D"BORDER-LEFT: #aaaaaa 1px solid"=20
        href=3D"http://thewhippetarchives.net/newest.php">Newest =
Entries</A> </LI>
        <LI><A=20
        =
href=3D"http://thewhippetarchives.net/testmating.php?dam=3D52159&amp;sire=
=3D64054&amp;gens=3D6#">Dogs=20
        <IMG =
src=3D"http://thewhippetarchives.net/images/sort_desc.gif"></A>=20
        <UL>
          <LI><A =
href=3D"http://thewhippetarchives.net/search.php">Search Dogs</A>=20

          <LI><A =
href=3D"http://thewhippetarchives.net/browseDogs.php">Browse=20
          Dogs</A>=20
          <LI><A href=3D"http://thewhippetarchives.net/addDog.php">Add =
Dog</A>=20
          <LI><A=20
          =
href=3D"http://thewhippetarchives.net/testmating.php">Testmating</A>=20
          <LI><A =
href=3D"http://thewhippetarchives.net/standard.php">Whippet=20
          Standard</A> </LI></UL></LI>
        <LI><A=20
        =
href=3D"http://thewhippetarchives.net/testmating.php?dam=3D52159&amp;sire=
=3D64054&amp;gens=3D6#">Persons=20
        <IMG =
src=3D"http://thewhippetarchives.net/images/sort_desc.gif"></A>=20
        <UL>
          <LI><A =
href=3D"http://thewhippetarchives.net/searchPerson.php">Search=20
          Persons</A>=20
          <LI><A =
href=3D"http://thewhippetarchives.net/browsePersons.php">Browse=20
          Persons</A>=20
          <LI><A=20
          onclick=3D"currUserId=3D1630;setCountrySelectBox('<select =
name=3D\'country\' size=3D1><option value=3D\'\'>unknown</option><option =
value=3D\'Argentina\' >Argentina</option><option value=3D\'Australia\' =
>Australia</option><option value=3D\'Austria\' >Austria</option><option =
value=3D\'Belarus\' >Belarus</option><option value=3D\'Belgium\' =
>Belgium</option><option value=3D\'Bermuda\' >Bermuda</option><option =
value=3D\'Brazil\' >Brazil</option><option value=3D\'Bulgaria\' =
>Bulgaria</option><option value=3D\'Canada\' >Canada</option><option =
value=3D\'Chile\' >Chile</option><option value=3D\'China\' =
>China</option><option value=3D\'Colombia\' >Colombia</option><option =
value=3D\'Croatia\' >Croatia</option><option value=3D\'Czech Republic\' =
>Czech Republic</option><option value=3D\'Denmark\' =
>Denmark</option><option value=3D\'Egypt\' >Egypt</option><option =
value=3D\'Estonia\' >Estonia</option><option value=3D\'Finland\' =
>Finland</option><option value=3D\'France\' >France</option><option =
value=3D\'Germany\' >Germany</option><option value=3D\'Greece\' =
>Greece</option><option value=3D\'Hawaii\' >Hawaii</option><option =
value=3D\'Hong Kong\' >Hong Kong</option><option value=3D\'Hungary\' =
>Hungary</option><option value=3D\'Iceland\' >Iceland</option><option =
value=3D\'India\' >India</option><option value=3D\'Indonesia\' =
>Indonesia</option><option value=3D\'Iran\' >Iran</option><option =
value=3D\'Iraq\' >Iraq</option><option value=3D\'Ireland\' =
>Ireland</option><option value=3D\'Israel\' >Israel</option><option =
value=3D\'Italy\' >Italy</option><option value=3D\'Japan\' =
>Japan</option><option value=3D\'Korea\' >Korea</option><option =
value=3D\'Kuwait\' >Kuwait</option><option value=3D\'Latvia\' =
>Latvia</option><option value=3D\'Lithuania\' >Lithuania</option><option =
value=3D\'Luxembourg\' >Luxembourg</option><option value=3D\'Macau\' =
>Macau</option><option value=3D\'Malaysia\' >Malaysia</option><option =
value=3D\'Mexico\' >Mexico</option><option value=3D\'Morocco\' =
>Morocco</option><option value=3D\'Netherlands\' =
>Netherlands</option><option value=3D\'New Zealand\' >New =
Zealand</option><option value=3D\'Norway\' >Norway</option><option =
value=3D\'Pakistan\' >Pakistan</option><option value=3D\'Paraguay\' =
>Paraguay</option><option value=3D\'Peru\' >Peru</option><option =
value=3D\'Philippines\' >Philippines</option><option value=3D\'Poland\' =
>Poland</option><option value=3D\'Portugal\' >Portugal</option><option =
value=3D\'Qatar\' >Qatar</option><option value=3D\'Romania\' =
>Romania</option><option value=3D\'Russia\' >Russia</option><option =
value=3D\'Saudi Arabia\' >Saudi Arabia</option><option =
value=3D\'Serbia\' >Serbia</option><option value=3D\'Singapore\' =
>Singapore</option><option value=3D\'Slovak Republic\' >Slovak =
Republic</option><option value=3D\'Slovenia\' >Slovenia</option><option =
value=3D\'South Africa\' >South Africa</option><option value=3D\'Spain\' =
>Spain</option><option value=3D\'Sweden\' >Sweden</option><option =
value=3D\'Switzerland\' >Switzerland</option><option =
value=3D\'Tasmania\' >Tasmania</option><option value=3D\'Tunisia\' =
>Tunisia</option><option value=3D\'Ukraine\' >Ukraine</option><option =
value=3D\'United Arab Emirates\' >United Arab Emirates</option><option =
value=3D\'United Kingdom\' >United Kingdom</option><option =
value=3D\'Uruguay\' >Uruguay</option><option value=3D\'USA\' =
>USA</option></select>');setSearchTextOnPersonPanel('normalMode');panel.s=
how();"=20
          =
href=3D"http://thewhippetarchives.net/testmating.php?dam=3D52159&amp;sire=
=3D64054&amp;gens=3D6#">Add=20
          Person</A> </LI></UL></A></LI>
        <LI><A=20
        =
href=3D"http://thewhippetarchives.net/php_users/htdocs/users.php">Members=
</A>=20
        </LI>
        <LI><A=20
        =
href=3D"http://thewhippetarchives.net/statistics.php">Statistics</A> =
</LI>
        <LI><A href=3D"http://thewhippetarchives.net/help.php">Help</A> =
</LI>
        <LI><A =
href=3D"http://thewhippetarchives.net/contact.php">Contact</A>=20
</LI>
        <LI><A =
href=3D"http://thewhippetarchives.net/aboutus.php">About</A>=20
      </LI></UL></TD>
    <TD style=3D"WHITE-SPACE: nowrap" align=3Dright>
      <FORM method=3Dget =
action=3Dhttp://thewhippetarchives.net/results.php><INPUT=20
      style=3D"WIDTH: 130px" name=3Dkeyword> <INPUT class=3Dbutton =
onclick=3D"if (keyword.value.length < 3) { alert('Your search term has =
to contain at least 3 letters! Please retry.'); return false;}" =
value=3D"Search Dog" type=3Dsubmit>=20
      <INPUT value=3Dsimple type=3Dhidden name=3Dmode> =
</FORM></TD></TR></TBODY></TABLE><BR=20
style=3D"CLEAR: left"></DIV></DIV>
<SCRIPT language=3Djavascript type=3D"">

	//panel =3D createPanel(document.getElementsByTagName('body')[0]);

</SCRIPT>
<MAP name=3DMap><AREA href=3D"http://thewhippetarchives.net/index.php" =
shape=3Drect=20
  alt=3D"The Whippet Archives" coords=3D1,1,584,98><AREA=20
  href=3D"http://www.wcd-online.de/" shape=3Drect alt=3D"Whippet Club =
Deutschland"=20
  target=3D_blank coords=3D584,1,710,89></MAP>
<DIV class=3Dmain>
<DIV class=3Dcontent>
<H3>Testmating </H3>
<DIV style=3D"PADDING-LEFT: 25px">
<TABLE>
  <TBODY>
  <TR>
    <TD>
      <FORM action=3D""><LABEL>Generations in pedigree </LABEL><INPUT =
value=3D52159=20
      type=3Dhidden name=3Ddam> <INPUT value=3D64054 type=3Dhidden =
name=3Dsire> <SELECT=20
      onchange=3Dsubmit(); name=3Dgens> <OPTION value=3D2>2</OPTION> =
<OPTION=20
        value=3D3>3</OPTION> <OPTION value=3D4>4</OPTION> <OPTION =
value=3D5>5</OPTION>=20
        <OPTION selected value=3D6>6</OPTION> <OPTION =
value=3D7>7</OPTION> <OPTION=20
        value=3D8>8</OPTION> <OPTION value=3D9>9</OPTION></SELECT> =
</FORM></TD>
    <TD style=3D"PADDING-LEFT: 20px"><LABEL>Printable version of =
pedigree=20
      <BR>(<A=20
      =
href=3D"http://thewhippetarchives.net/printable_pedigree.php?sire=3D64054=
&amp;dam=3D52159&amp;gens=3D6&amp;images=3Dyes"=20
      target=3D_blank> with</A> / <A=20
      =
href=3D"http://thewhippetarchives.net/printable_pedigree.php?sire=3D64054=
&amp;dam=3D52159&amp;gens=3D6&amp;images=3Dno"=20
      target=3D_blank>without images</A>) =
</LABEL></TD></TR></TBODY></TABLE></DIV>
<TABLE id=3Dpedigree border=3D0 width=3D"97%" align=3Dcenter>
  <TBODY>
  <TR>
    <TH colSpan=3D6>Pedigree</TH></TR>
  <TR>
    <TD rowSpan=3D32>
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/images/new_logos/TWA_whip_standing.j=
pg"=20
      width=3D100></P>future litter<LABEL></LABEL></TD>
    <TD rowSpan=3D16>
      <DIV=20
      style=3D"PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; PADDING-RIGHT: =
20px; FONT-WEIGHT: bold; PADDING-TOP: 20px"=20
      id=3Dsire><A=20
      =
onclick=3D"setTestParentSex('sire');setChooseTestParent();panel.show();" =

      =
href=3D"http://thewhippetarchives.net/testmating.php?dam=3D52159&amp;sire=
=3D64054&amp;gens=3D6#">Change=20
      sire</A></DIV><A=20
href=3D"http://thewhippetarchives.net/details.php?id=3D64054">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/1630/th_4a36a54f56c38.jp=
g"=20
      width=3D100></P>Let's Run Hip Hop Culture</A><LABEL><BR>Brindle =
and White=20
      <BR>Sweden<BR>2008</LABEL></TD>
    <TD rowSpan=3D8><LABEL><FONT color=3Dred>Fin, Norw &amp; Swedish=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1887">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/2110/th_48eb5dd1af7b2.jp=
g"=20
      width=3D100></P>Adagio My Culture</A><LABEL><BR>Light Fawn=20
      <BR>Sweden<BR>2002</LABEL></TD>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>UK, Int, Swe, Norw, Dan =
&amp; Fin=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1890">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46c68e3839f21.jpg"=20
      width=3D100></P>Adagio Love Supreme</A><LABEL><BR>Fawn Brindle and =
White=20
      <BR>Sweden<BR>2001</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Int, Swe, Norw &amp; Fin=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1576">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_nelson.jpg"=
=20
      width=3D100></P>Carry On Pastrami</A><LABEL><BR>Fawn Brindle=20
      <BR>Sweden<BR>1998</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Int, Swe, Norw, Dan &amp; Fin=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1574">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/544/th_4a24c15f1c6c2.jpg=
"=20
      width=3D100></P>Birkonbrae True E'Nuff</A><LABEL><BR>Brindle =
<BR>United=20
      Kingdom<BR>1995</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Swe Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D2316">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_fanny.jpg" =

      width=3D100></P>Carry On Bordeaux</A><LABEL><BR>Red Brindle=20
      <BR>Sweden<BR>1995</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Multi =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1577">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4686dafc746b9.jpg"=20
      width=3D100></P>FlicFlac Kiss Of Love</A><LABEL><BR>Red Fawn=20
      <BR>Germany<BR>1998</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>German (WCD) &amp; German KC (VDH)=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D12">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/2726/th_49cf530a11690.jp=
g"=20
      width=3D100></P>Lorricbrook Bandleader</A><LABEL><BR>Light Brindle =
and White=20
      <BR>Canada<BR>1996</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Int, German (WCD), Ger.KC (VDH) &amp; =
Swiss Ch,=20
      BS-95, EJS-95</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D629">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_471106628fdf6.jpg"=20
      width=3D100></P>Pencloe Dutch Amber</A><LABEL><BR>Red Brindle =
<BR>United=20
      Kingdom<BR>1994</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>Swedish =
Champion</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1888">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46c69986ba35b.jpg"=20
      width=3D100></P>Fennaur Emmeline Pankhurst</A><LABEL><BR>Brindle =
and White=20
      <BR>Sweden<BR>2000</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Int, Swe, Norw, Dan &amp; =
Fin=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1810">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46c66744cddde.jpg"=20
      width=3D100></P>Fennaur Delacroix</A><LABEL><BR>Dark Fawn and =
White=20
      <BR>Sweden<BR>1994</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>S Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1560">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4635b0d16b41d.jpg"=20
      width=3D100></P>Birkonbrae Sweet Talking Guy</A><LABEL><BR>United=20
      Kingdom<BR>1992</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>S Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D10527">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46c69bbc69d2c.jpg"=20
      width=3D100></P>Fennaur Bella Bartok</A><LABEL><BR>Fawn=20
      <BR>Sweden<BR>1989</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Swedish =
Champion</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1889">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4635b0030022e.jpg"=20
      width=3D100></P>Birkonbrae Summer Love</A><LABEL><BR>Brindle and =
White=20
      <BR>United Kingdom</LABEL></TD>
    <TD><A href=3D"http://thewhippetarchives.net/details.php?id=3D157">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4616caa9eb286.jpg"=20
      width=3D100></P>Hillsdown Fergal</A><LABEL><BR>Brindle <BR>United=20
      Kingdom<BR>1985</LABEL></TD></TR>
  <TR>
    <TD><A href=3D"http://thewhippetarchives.net/details.php?id=3D177">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46c669624ea13.jpg"=20
      width=3D100></P>Birkonbrae Buttons 'N' Bows</A><LABEL><BR>Dark =
Fawn and=20
      White <BR>United Kingdom<BR>1987</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D8><A=20
href=3D"http://thewhippetarchives.net/details.php?id=3D36301">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_477e3d7e20080.jpg=
"=20
      width=3D100></P>The Rattigan's=20
    Airstep</A><LABEL><BR>Sweden<BR>2002</LABEL></TD>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>SU &amp; SLC =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D19038">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/1911/th_48a00465b3d95.jp=
g"=20
      width=3D100></P>G=E5rdsj=F6ns Ingemar</A><LABEL><BR>Brindle and =
White=20
      <BR>Sweden<BR>1996</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Int, Fin, Nor, Swed, Est =
&amp; Ch,=20
      FinW-98</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1663">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/76/th_47780fd22084d.jpg"=
=20
      width=3D100></P>Bohem Flight Time</A><LABEL><BR>Black Brindle and =
White=20
      <BR>USA<BR>1992</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Am Ch, Am FCh, JC, =
ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D224">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4616caaeac93e.jpg"=20
      width=3D100></P>Chelsea Drakkar of Oxford</A><LABEL><BR>White and =
Red=20
      <BR>USA<BR>1988</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Am Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1667">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4687b474c9c0c.jpg"=20
      width=3D100></P>Bohem Delacreme=20
    Demoiselle</A><LABEL><BR>USA<BR>1986</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>SUCh</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D19039">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/76/th_477a597979896.jpg"=
=20
      width=3D100></P>G=E5rdsj=F6ns G=F6ta</A><LABEL><BR>Brindle and =
White=20
      <BR>Sweden<BR>1992</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>S Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D7169">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46c72b6cb4cf1.jpg"=20
      width=3D100></P>Hi Tor's Baryshnikov</A><LABEL><BR>Brindle and =
White=20
      <BR>USA<BR>1990</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Swedish &amp; Norw =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D10632">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_477ba16e9da29.JPG=
"=20
      width=3D100></P>G=E5rdsj=F6ns Birgitta</A><LABEL><BR>Brindle and =
White=20
      <BR>Sweden<BR>1987</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>SUCh</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D19015">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/76/th_477d6c15107f7.jpg"=
=20
      width=3D100></P>Khalibadh Regndans (A.I.)</A><LABEL><BR>Brindle =
and White=20
      <BR>Sweden<BR>1998</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Am Ch, JC, =
ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D322">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4725f4130ce45.jpg"=20
      width=3D100></P>Starline's Reign On</A><LABEL><BR>White and Dark =
Brindle=20
      <BR>USA<BR>1990</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Am Ch SC, FCh, ROM</FONT><BR></LABEL><A =

      href=3D"http://thewhippetarchives.net/details.php?id=3D324">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_469de8b945147.jpg"=20
      width=3D100></P>Hamrya's Lucky Charm</A><LABEL><BR>White and Black =
Brindle=20
      <BR>USA<BR>1987</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Am Ch, ROM</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D325">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4725fd043a228.jpg"=20
      width=3D100></P>Ringmaster's Gold Fever</A><LABEL><BR>White and =
Fawn Brindle=20
      <BR>USA<BR>1985</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Int &amp; Nord=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D10627">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_46fe6ab932fcb.jpg"=20
      width=3D100></P>Khalibadh Eldstorm</A><LABEL><BR>Black Brindle and =
White=20
      <BR>Sweden<BR>1994</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Int &amp; Nord Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D10628">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_477bdb0ae65e9.JPG=
"=20
      width=3D100></P>G=E5rdsj=F6ns Frej</A><LABEL><BR>Brindle and White =

      <BR>Sweden<BR>1991</LABEL></TD></TR>
  <TR>
    <TD><A =
href=3D"http://thewhippetarchives.net/details.php?id=3D10629">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_47012e2eaf0d5.jpg"=20
      width=3D100></P>Khalibadh =
Clarkia</A><LABEL><BR>Sweden</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D16>
      <DIV=20
      style=3D"PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; PADDING-RIGHT: =
20px; FONT-WEIGHT: bold; PADDING-TOP: 20px"=20
      id=3Ddam><A=20
      =
onclick=3D"setTestParentSex('dam');setChooseTestParent();panel.show();"=20
      =
href=3D"http://thewhippetarchives.net/testmating.php?dam=3D52159&amp;sire=
=3D64054&amp;gens=3D6#">Change=20
      dam</A></DIV><LABEL><FONT color=3Dred>Austrian Youth =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D52159">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/51/th_4a114518df7ec.JPG"=
=20
      width=3D100></P>Airescot May Marigold</A><LABEL><BR>Blue Fawn and =
White=20
      <BR>Sweden<BR>2008</LABEL></TD>
    <TD rowSpan=3D8><LABEL><FONT color=3Dred>Swed, Nor &amp; Fin=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1660">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_4766874d1b8=
3d.jpg"=20
      width=3D100></P>Wolf Tone Viking</A><LABEL><BR>Fawn Brindle=20
      <BR>Sweden<BR>1997</LABEL></TD>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>Int, Fin, Nor, Swed, Est =
&amp; Ch,=20
      FinW-98</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1663">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/76/th_47780fd22084d.jpg"=
=20
      width=3D100></P>Bohem Flight Time</A><LABEL><BR>Black Brindle and =
White=20
      <BR>USA<BR>1992</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Am Ch, Am FCh, JC,=20
      ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D224">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4616caaeac93e.jpg"=20
      width=3D100></P>Chelsea Drakkar of Oxford</A><LABEL><BR>White and =
Red=20
      <BR>USA<BR>1988</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D225">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4616caba750e9.jpg"=20
      width=3D100></P>Whippoorwill Moonstone</A><LABEL><BR>Blue brindle =
and White=20
      <BR>USA<BR>1979</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Am Ch, ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D200">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4616cac0d7c4b.jpg"=20
      width=3D100></P>Chelsea Saffron</A><LABEL><BR>Red and White=20
      <BR>USA<BR>1985</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Am Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1667">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4687b474c9c0c.jpg"=20
      width=3D100></P>Bohem Delacreme=20
    Demoiselle</A><LABEL><BR>USA<BR>1986</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Am Ch, ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D211">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_4957ace8a32ac.JPG=
"=20
      width=3D100></P>Delacreme de la Renta</A><LABEL><BR>Fawn Brindle =
and White=20
      <BR>USA<BR>1983</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Am Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D7403">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_472631b3d54e4.jpg"=20
      width=3D100></P>Whippoorwill Sonatina</A><LABEL><BR>White and =
Brindle=20
      <BR>USA<BR>1983</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D4><A =
href=3D"http://thewhippetarchives.net/details.php?id=3D857">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4694e6de34dc3.jpg"=20
      width=3D100></P>Signum Soprani</A><LABEL><BR>Black Brindle=20
      <BR>Sweden<BR>1993</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>SUCh</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1568">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_47567cbc93c=
da.jpg"=20
      width=3D100></P>Airescot Fandango</A><LABEL><BR>Black Brindle=20
      <BR>Norway<BR>1992</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Int, Nor, Fin &amp; Aus =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1514">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_477bb7983fe00.JPG=
"=20
      width=3D100></P>Airescot Waistcoat</A><LABEL><BR>Brindle and White =

      <BR>Norway<BR>1989</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Swed Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1570">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_477bbfcd18433.JPG=
"=20
      width=3D100></P>Merci Isle Whisper To A Purr</A><LABEL><BR>Brindle =
and White=20
      Ticked <BR>USA<BR>1989</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Swed =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1570">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_477bbfcd18433.JPG=
"=20
      width=3D100></P>Merci Isle Whisper To A Purr</A><LABEL><BR>Brindle =
and White=20
      Ticked <BR>USA<BR>1989</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Am Ch, ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D211">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_4957ace8a32ac.JPG=
"=20
      width=3D100></P>Delacreme de la Renta</A><LABEL><BR>Fawn Brindle =
and White=20
      <BR>USA<BR>1983</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Am Ch, SC, FCh</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1571">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_45d60d0495034.jpg"=20
      width=3D100></P>Merci Isle Hot Flowers</A><LABEL><BR>Brindle=20
      <BR>USA<BR>1988</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D8><LABEL><FONT color=3Dred>Swedish &amp; Danish=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D5546">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4672b037e8d3b.jpg"=20
      width=3D100></P>Collooney Winner Takes It All</A><LABEL><BR>Fawn =
Brindle and=20
      White <BR>Ireland<BR>2003</LABEL></TD>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>Can, Am, UK &amp; Nord=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1546">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_Rascal.jpg"=
=20
      width=3D100></P>Airescot Ruby Rascal</A><LABEL><BR>Fawn Brindle =
and White=20
      <BR>Sweden<BR>2000</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Aust, Fin, DK, Nord &amp; =
Swedish=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1531">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4651abc4b93de.jpg"=20
      width=3D100></P>Statuesque Extortion (i.i.d.)</A><LABEL><BR>Fawn =
Brindle and=20
      White <BR>Australia<BR>1996</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Am Ch, JC, ROMX</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D322">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4725f4130ce45.jpg"=20
      width=3D100></P>Starline's Reign On</A><LABEL><BR>White and Dark =
Brindle=20
      <BR>USA<BR>1990</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Aust Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1533">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_45ddf0fc8191b.jpg"=20
      width=3D100></P>Bohem Critic's Choice</A><LABEL><BR>Dark Brindle =
and White=20
      <BR>USA<BR>1994</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>Swed, DK, Fin, &amp; Int=20
      Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1551">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_Redee.jpg" =

      width=3D100></P>Airescot Red Redee</A><LABEL><BR>Red Fawn=20
      <BR>Sweden<BR>1996</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>Am, Int &amp; Nor =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D610">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_irish%20mis=
t.jpg"=20
      width=3D100></P>Sporting Fields Irish Mist</A><LABEL><BR>Light =
Fawn and=20
      White <BR>USA<BR>1994</LABEL></TD></TR>
  <TR>
    <TD><LABEL><FONT color=3Dred>Swed Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1552">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/anonymous/th_Mercia.jpg"=
=20
      width=3D100></P>Oakbark Mercia</A><LABEL><BR>Fawn <BR>United=20
      Kingdom<BR>1994</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D4><LABEL><FONT color=3Dred>Ch &amp; Ir =
Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D5547">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4683dfaea1a9c.jpg"=20
      width=3D100></P>Collooney Silver Silas</A><LABEL><BR>Fawn=20
      <BR>Ireland<BR>1999</LABEL></TD>
    <TD rowSpan=3D2><LABEL><FONT color=3Dred>UK Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D822">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_4686dccbd0fbc.jpg"=20
      width=3D100></P>Rum Punch of Falconcrag</A><LABEL><BR>Fawn =
<BR>United=20
      Kingdom<BR>1996</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>UK Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D1765">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/443/th_4a0c2bcd8f389.JPG=
"=20
      width=3D100></P>Millwold Gold Dust to Exhurst</A><LABEL><BR>Red =
Brindle=20
      <BR>United Kingdom<BR>1993</LABEL></TD></TR>
  <TR>
    <TD><A =
href=3D"http://thewhippetarchives.net/details.php?id=3D2890">Silkstone=20
      Isolda</A><LABEL><BR>Brindle and White <BR>United=20
    Kingdom<BR>1991</LABEL></TD></TR>
  <TR>
    <TD rowSpan=3D2><A=20
      =
href=3D"http://thewhippetarchives.net/details.php?id=3D13245">Collooney =
Silver=20
      Lace</A><LABEL><BR>Fawn <BR>Ireland<BR>1995</LABEL></TD>
    <TD><LABEL><FONT color=3Dred>UK &amp; IR Ch</FONT><BR></LABEL><A=20
      href=3D"http://thewhippetarchives.net/details.php?id=3D13246">
      <P><IMG=20
      =
src=3D"http://thewhippetarchives.net/pics/thumbs/th_474afce6a4e8e.JPG"=20
      width=3D100></P>Collooney Silver Fox</A><LABEL><BR>Light Brindle =
and White=20
      <BR>Ireland<BR>1991</LABEL></TD></TR>
  <TR>
    <TD><A =
href=3D"http://thewhippetarchives.net/details.php?id=3D13249">Austrene=20
      Rejoice</A><LABEL><BR>Fawn and White <BR>Ireland</LABEL></TD></TR>
  <TR></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV=20
style=3D"BACKGROUND-IMAGE: =
url(http://thewhippetarchives.net/images/footer-modern.gif); =
BACKGROUND-REPEAT: repeat-x"=20
class=3Dfooter>
<P>Please keep in mind that this website is not affiliated with any =
organisation=20
and it is not an official registration database but a place for the =
community of=20
whippet lovers worldwide. Therefore no guarantees as to the correctness =
of the=20
information can be given.</P>
<TABLE align=3Dcenter>
  <TBODY>
  <TR>
    <TD vAlign=3Dbottom><IMG=20
      =
src=3D"http://thewhippetarchives.net/images/ornament_left.gif"></TD>
    <TD><SPAN style=3D"FONT-SIZE: 9px">Copyright =A9 2006-2009 Karin =
Schellner.=20
      All Rights Reserved. <A=20
      href=3D"http://thewhippetarchives.net/aboutus.php">About us /=20
      Disclaimers.</A> </SPAN></TD>
    <TD vAlign=3Dbottom><IMG=20
      =
src=3D"http://thewhippetarchives.net/images/ornament_right.gif"></TD></TR=
></TBODY></TABLE></DIV>
<SCRIPT language=3DJavaScript type=3Dtext/javascript=20
src=3D"http://thewhippetarchives.net/js/wz_tooltip.js"></SCRIPT>

<SCRIPT language=3Djavascript>=0A=
	panel =3D createPanel(document.getElementsByTagName('body')[0]);=0A=
</SCRIPT>
</BODY></HTML>

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/images/title_sponsored_floral.gif

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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/images/sort_desc.gif

R0lGODlhDAAMAJEAAJqamsyZZv///wAAACH5BAEAAAIALAAAAAAMAAwAAAIYlI+pywIPowGh2goO
vSGjjS2bJ5LNiTIFADs=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/images/new_logos/TWA_whip_standing.jpg

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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/1630/th_4a36a54f56c38.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAPQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
5v4KaXqNx4pm0iyeB7a6haSRpEOQY1YoM/w5JwTz9K6TUdS1bT9al06/0Se3aJ9pkSQkKPXoAR7g
1b/ZmlhvfGmpTw2KW8FvYMN3mM7ZLr1J46A9h0r1zx3oP9o2E91FJO8qrt/1QLEHoDyOPwzzWEou
Ub9RzhyuzPDLbWL6/uTnS9hB27pZwDj1GAcmsD4hOkeraWtk8Md9Ahm/fvs3qxxt3H5f4W6kdeK6
ZNMaDUHc/f8AuY6Y/wDr15Z8QdTTU/Es7Q8w24Fuh9ducn8ya5cLVnVm1KNrDnTjGzi7lzxlYyvb
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/2110/th_48eb5dd1af7b2.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8j0ny0h2tFGSUAO5B6Vat7KUq91Dp0l4scEgf7PDvCZVkBOPqDXX+H7TR57B3YXolMAQFmU+Y4XJ
zxnBzgH0r034WQDSPCktvDhJ5pi77yuScAD64Hp61zqMea19dzb2NRJTkvdZ4dZ+Cr678LWmraXp
lxdxsD9pZU5gYE5GMZIxjpWOESOEZiAKybW+UZ6V9g6jeG3j+SVY7ZFO5QNoxg9/rivFfE/jzRtZ
1+5tf+EcgmitSFFzOBmVhwWGOo/PitpYa70Zi6vNqlojzK1aA3RKwwgH7+UHJ/pTikRkMawxFs8A
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46c68e3839f21.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAQgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
5gwLhmZZOT/doZYwQpVwpHU17GZY1A8zJycDnrT7fy7i5W2iQNI3OzjP1+leWpts7nB9zxkQQ3Gx
WjuGGf4ByO9TLZ2pl+WS6GeWMmMAV7BrOmSraX1lfJbQpNuih/eEmaMqN24Y4Odwx6Gsj4caWW8F
26TTH7VHucg4z5e4hfwxg5rVxlEzWvU8zuPLknWJd4hHCgr09/qaptpVuxbbNKueTlAR/OvaJUtx
IAwzjvtFMDWiOV8lXb/aAOPyFZe1NPZs8ROkW8LljcyH/Z8ofzzU+2NlEZmcbec7ef517LM0RA22
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
iOhaRVK8gH8KKKKsR//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_nelson.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgASwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
87i0mFoYyW/hGchTVaz8OR293JP9o3lz91o845B/pW/bugt4v3EI+UZO5/T/AHqesq5wIIcf7zcf
+PV897SSukx2MmXR1mYHcoA4/wBV/wDXpDpKqhzJFjnkw9P1rdDoOXtLY/8AA3H/ALNTwYTj/RFH
P8Lt/wDXqeZvqHKcrPFapCVa5tsZwT5JJP61HjT1s4ZGuoSWZ03mFhyMH/2auqnkhCAx2czleoE+
M/mhqutzEQC+m3uM7cLdxtnIznlBxx6VrB6NX/H/AIAreZzksNjIwlN/ZhSRgcDinyJafvJ/tNiy
Dnj+VdUhtCp3QXqoSCFMqH8fu4pkllpcoy9pLgn+JUb/ANlFLmWzf9fcFjgm0qBWh1C5nhUTu+G3
ZUDHy8Yzz8w/4DW/ZaXPq9hALaeCWOBwibY2O7IVcDC8nKp+vfNb9n4f0y8eK1trYne3CeUmB74z
+Ndza+GbayexjUvYG0IaKe2laMvngcDHDc5HIy3fNdfto1Hfob06XO/I8/1LwzdNAGEKOiZLbCSc
854xnsc8dqxbGzigJ+e1YspHLAEZ74Ir6NgsNLv2ijsnla9iQMJ2GFHGNw4wetch4x+Hhs7db9pl
uP3am48m1X5nAwZNu4DnGTgdST06ZzwzUPdJnBXvE8XvLFfMUsICSv8ACciitbVrLTftK7ZgfkHW
2Udz/tUVnGOn/BMrMtQOPs8YyThR/D7VY4+8CfbK1DbyjyEUHgKM7H9u/FWbSOW4ljhhDMznCqCP
8iubqaJDVClvlw3uFq5aaZf3ib7W2ZkzjeBhfzPFdRYaLb6V5h1BWuLpVPGPlVunHr9elErCw8RM
/nSSW1whKxZwFIAxj9a2jR0vI3hQb3MFPDl06Fne2UDrulzj8s0S+G7iNgD5Lem1zj8+3411JBup
/wDRoyMk/dGO4/pmtWHS5bYEpKwY4wCM8dx+p/OhU1c2+rQscCvhvUWc7bdsDqQ6n9c1NF4fvA4j
xGhzgljuwfwzXc/ZzBGN6EJyCQeAe1XdMt45LeVFVGVlJwfXH+f0peyD6vBasqeCdJsdOIM777tz
hpCuNoHYe3H41N4wWEXCSTf8e0bKsmRjMe4Hbj6H8qhlmksHRn3Er88bFfxIP51F8QtUh/4RRAiF
pbmRVznjG0MT+oraFlF+QTtTWh55/adzbXNxJpt1NZLK7OUt22KMnoB0qxqfifV9S0g6XcX0rWxQ
o5I3Ow/3jk/09MVhuQpViAM9xUbFNpOQCMcAisVWmtmcXMylqMaJJEmMhYwoJOTgZ70VBqTDzkxk
/IOdw96KcVoSXYIJPJjwBkKOx9K6j4fg/wDCSwsAqvGC6tn7voa8yl8aWcUUSxRyTsgHt29TXU/D
vxUmoapeRwxSpKtsXBIBz86f/WrSNCpF8zWhdNpySR6zq94ZI1EDfu/3kG4nqNo59eGDc+1c5cXk
CXVnCmnXOr6pICba2t2wCBgb3bnavXn1H1roItPnls7aKELGgiLyM5wseVxkn2yTXk3hTxpqFj4v
udY0l9PAYmIJcS4cQjgKR74ycdzW8Yr4pbI651OTQ9p33mn2CTalZizlxlgD5kan0LgYH4mo4Ndj
laPfGY8/KT1X1GCOO1eca74hXV9Xm1Mz29tNLjK28hwOMetZsN09oWmsLv7OH5ODlG+oPH41jKpB
vaxmq7W566rm6t549zcEjd61naVqsemyJb3DjcxwCTn9fX/EVz2heMha7YtTiDxdC8a5wQBzjrz9
K3JjourRosOqQRySEGOKRud5OAfbnrWsYprRmntYs6DUDFM0ZY+bEp2kgc4PBI/SvP8AxlqkV+bO
2t1SNbYOrDsSWIzx/sqtbXimPUtA024e9REPmKkaCQNuLEADjsCcn2zXnTieVzuYF9vOeSfUmsqs
uWFnuzOvPoiRiAGy236qT/8AqqHLbywVNvPzCnqWIIyp6g/nTAmVw6hmyc5U8fhXIcxm6scXCgtg
7B1A96KXVfNNyCdnKjrx/Kito7COQ0LwZLfJFJNPt8wYWOPls9hXtXgbwlaaJab5beOM8GeWU5wu
ehPGen06elT/AA0sbVtGnneNBJA2Z5sDKRbck57AbW47/gKxfF+om71XJ1GB7KPaI7K3fKx/75/i
cfpxjvXXKcpR55PTsawtTXNuzX8U+K4tWsbnTdP89LedvLkm+55kY6qO4BOMnuOOhzXE3NraoCGt
0Cnhh5YP456VDfanZWke+4uEQHkAHk4HoP8APNc/J4zsVkkWGOVl7Hbw34ZFc1qlXVLQznJyeps3
WmabtJW0gZzx90dOfwpBpNkJAPsgjJUcLkZFc5J4wUgiKylXdjB3cmoD4xuEYGOz+UA8MxIP6Vqq
Fb+mZ3O1k0y1cFREMf3RwfyqezEVpcQNFuQLIrcEkcY/CuGh8dXUagNaofXk9KsReNkbbm2k3n73
IYdsYpewrLdD5j6C+MUYlhtY1yYxIbiQr/EEQ/8AszLXl21XG8bM7cA9zXr/AMUo2s/DF/dKqtNb
abMcHpzLEc/ktfMsGoa3qrl7ZhDCuQDj5SeOCT1Na16Lk09kaVJanewbt2V2FQCeMcf5GaQOjqoe
QE5IyAMcf/rrnIbXWCi+ZqFt5gx8rJxjPPb+laenxXgdku/IAU5LxP1GTxjGa4pQS1umZ8zGak7G
dSGOCufl6dTRUOpQs04KOQMdMZ7n0orSNrBzs7/4eTCLw94lsfOQXF9p7LaITjfIEfC/jmvPINKv
3tSLq8Gn3BYl1WMspY9O+R74BpsNxLtK7uFUEcDI49aikupnADPkdOg7mtVOSXLoNspv4X+0Nm/v
fMfb8oVSCOecD86t2vhXToOCryuuDuY+nPT+lTrcSb2+YfcB6Drmi2uZkt8B88BvmAPP40nUqvRS
ErGmlpDCqiOIqgzt6fh+mR/kVK0Xm53QbgD0KAHrVB724AfEmMDjAFQSXk4nhIkIx04HfFYckn1H
o9Czd6dbSqY5bCKRB3CgHp3quvhrTo545lttrBt6jBw3PHHpx+tRPdzLHIQwzvx90dMfSpoLqfyz
+8JwAefXcBVr2kVoxHu+t6lY+IfBgudTZoI9UtJLWSJTu8mUfdBx2J3HPtXjaaYlrHHBHH5KpnYu
cYBPI/MmqdtfXIiYCUgK644HHQf1NQSXk7LgyHHHYVVSc6lrlN8xfa2PmfeJxkkFjyfY/nRILgIJ
AI1JGfmrM+2T+WrbwGznIUD09qQ3k8sTtI4YgAAlR61n7Nk2vsO1OSdZ1BXJ287SMdTRWZfTOXjJ
P8A7D3orWMNCLn//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/544/th_4a24c15f1c6c2.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgASABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8YnmYxxQoSFZgPQ1DdDhlh2qDnIPJzmrv2VP3BiZ3O0FSy8k56exqOexmF5MkyNG4fkHr19qAMpn
TyBHMB5hPGBkiq19A6yK0fmbQOQVq+9leSLK6wfKrhVZVOcHP+FTMlyqhpoJHIwFPUZ/CgDHt5As
e2VRubOc9atw3MsP3YyoP4cVdbS7qXT2uhblYxMsXA5yQT/Sp49NmliAniZccADqPqaAGW91CS3n
5GR8oU1p2cI/se9uI1BEciqd/fdnH8qz7rRZbYK5UHP5it3S7S6fwNrKhBk3FuAQOw3f40AJ4YSP
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_fanny.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
5F5bnckrXl2Ac8CZucH61PqUs0kQKXV2vO0FJWzn86hnglSwMhjLRqdx2jcQC2M4Hb+grr9O0myt
tNaW8u4opZkV4WinR5EIwckHHXGOMnnGa8aFKrUldPRFrU8/mudR02B2nu7uVUU7WMzAFiOByenT
8jXPTanqNx4mgt7fUbt1LKuUuG2ucZJHPTNek+JNWsPEGmzaXp7CfVbmRYgGUcnpx2wBzn6nrXnd
/wCGr/w7PFf3QSU2kyrcJEcqoP3XX/ZYbvoyt2xXoU7x0b1NJR001N7WrjUJrWHZfXUcrMGbZI2O
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
1nVmu5bYIxUAjfnuT6e9FdtKE1BJks//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4686dafc746b9.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
5D4eeJZNI1rxDbw3Motnmnurdo2DIQVfDFefRa5LWNZ069u72/uoTcTy3TyOkc5R+T1I2kYwe1bn
hnwFPpGom4k1FZIJImjkRDsZgcYGefb8vetTWfhj4f0/Spdav21K3s92TJJMCHJ7JhAWPsPxxWcs
VCdrO7IlRcpXRi6B4Pj8YzXF/pV/Y2ccESCWKaRmZzgjjIHOF9O9fZXhy1Sx020tkwEiiWP26V88
aLpPgzwxpkWsaZNrN5FKsczeVMgzjnGzH1yM9q6vwz8VtQ1C2mlsLC1uLPeUhkfdGdoH3W5OHGRk
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
A5ZI/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/2726/th_49cf530a11690.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAQABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8nmvNNa3Fs9vcAuozI8vKH1wBgjj/wCtVS8hRZSiXKSwEcZbLDvg1SXT7hYldUUhhnBdc49faps2
YG+3Rw/XDSc5HPUda51BR+F3J02Kogfa6B2UqfuMcDvVJJmiLBwc9MEVqXtxdzSC4eONAAGG1QCe
2ffnNQKh1SUKWETd8KAN3r2xW0ZaXlsPYhtpFeYuoIcY2qvc1oWGrxWtxuSGTLLtY78Af8B6H8aq
TacltKQJVlZD0wdrfiOQamigS7t3CtmeP5sBRnaOpz3x+fWpnySWuwrJkEhjuZDKqHcSThAFAPXt
+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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_471106628fdf6.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8XtJII/szFsbJBvfIJx/h1FXLqcX8zySIqttOG27SR1yMHnmsGe6VXxPErKeP3TDIH612Xw7fw9N
9sXxABFujP2WSdzhW9wMD88j1FRyXZny3M7S9B17UEza2M86SE7JDhQwA7FiAcfjUuq6LLpMixa4
lxZSsMeWwwD77hkHr69u1eq+G/EHh+wu4rhb+KeUoIwguBhCpOCIwdo69BVS80ebxsdRurK6jJMh
BUw434x3+vr69ulEkkdUKHNF2Z4rNbJ9qDLckqnIR+ST6Vdu4Li9tRsxAmfkEhAL4HUd6fqFubSW
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46c69986ba35b.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
5PwyJ7ex+zz7maNjlsY5PzdM/wC1Vi609b+5SKG1V55m27hGCSTwP8mpLPd5krSIE3Y4DZ5Hf+X5
V1fg66srKzN1qLR/bAxG1CMY9snJrwacOed72PUlLkj3KXh/w/BZ6YgZ4ZmDS4a2y4ALcjI6Hpn6
V5f8QNPz4thkktJvsLSxRRGMZVlVV3KDxjLF+uK9/wBNktryK4s/DttEV2NI6w4Qr64GOck+/WpL
r4bXd14Rv735nunCzRWrLghQQSPrgEgY9q74U1C8ou9zllU5rRaseRma41uG2is9NvI4reUFpGZQ
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
NZMkQJycknqSaKKBuTasyPyV75zRRRQK5//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46c66744cddde.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgASABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
9t8BeErLwj4LmtLKeO+naMpPcxfJ5m3IwCDxty3fqT0zXK/EDUf7Y0CyeSaG1ijldTJKW3ENEVJV
eequRjk8/WsC2vx4WOp6fHFfGwhGIbdbrouQ3ykLn25zkHvWP4hfWtbvEk1GzgijlhT5IVw0RHop
OfujnOfagDS07W9H1DSLmHRbdtNv1szA1zOVP2sYUOJMhthIUcj5j8vsD0fw90qHxB8NoLa3G7+z
blvJj3Z6HejLjoRu4PtXn0T6VpsS3NpFJKWkWOcOMBsDkjjg5x+dexfD+Sy0tXmt222l6dzE8bX4
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
d8toJ0kZStwQGXB4H0/rmiiigD//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4635b0d16b41d.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgASQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
7XyotgZC7AHKDONx65+n+fSpbSTTZ9Oiu5r4xNIu9rdkzIrAfdwD/n86qtIXyUY53BC68geg/wA/
4VUuNMtJhlo2hfO5lU/c+vY1yUnST/eo82L8jodGbRdVtUkivmhnljEjrKoVoxz8pXtjuc1Jq8Bt
be2kZ4JE2uizxnKFMgjB9TnH4fn5x4o0270/TXn88JDAD+8CZIXPTHfOa2vhNosWpaNd3lnLewyN
IVa3llDxSYwflGBjBzj06VrUpwabgdkaUZxujcD4XI+Rf4T18sY7/WnRuQRsVgTkhc/d9WJ6/wCf
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
mBGPlOSuRn05oqzbf6lfoP5CikloaqKsf//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46c69bbc69d2c.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAPQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
1hnqAc0PwKUuEUHjg4Oe9J5oLEYHTP4V8o9tS7E9tZXM8fmRQO0ecb8cfnWXq939k0s3ERdZPlO1
1wffgj8KmfULuCy+w6bkJIxbJ4RCTkk9+p6VSfSWutjS3XnuRtMLJxJk5PP09q9PDQw/Kpbt97fk
bU4RVnItWdw93ax3DosYkCkKeoG0dffvWJ40jL2UBGBhsH8v/rV1/l/adNjmjULIOCo7EcVzPiRf
+JVI2MyKRtPvToxdLGQlbSTJrU+W55tcRqqnIxnpkVS07SGvv7TnCHFtb+YD/tbgf5Bqs3AlLsJt
qg90HFdH8PrZZJtU3E7GRE/Pd/hXv42o6VFzXS35nHFXdjH0H99EY15YpkD1Nb/hqULdwhjtcMeM
deK5vT1fS9Ulgc5aCQr9cEj+VddZxxW+pR3GAin5vY57VvP95Qly9U/yHE6tGDLyQPbNIzjf0NRM
20kIp69TTDIcAZIxxzXwXNZGxZ3BSRlqKq9emAPfmiq532FY05MKxI6DuKaBk7XC4H4USMvlnjk/
L1pGJA6gMVAz9RScjewxQSTtJx3qW2cwTJJn5kYNzVcSIrOqjAzz3x/nJpCwKsQecZHOCcVMZWs0
FjpI18i2kSNA3OQe2DyD+tZf9nQ31vc/aUAyd2ASufrg1fiuI2s7Zg+XC7ZB6EcD9MVWv7ryYtqq
Pn43D1r6WNSLipL1OmK51qc0PCelyjEkDqB0Acn+ea0dM0PTtNEi2ZZfNIJ3HPNKLsR/6xs/So7n
U7ZsRmYI/YjtRUr+0jyT1Q/Yw7HOeKvBd7dajLqGmyRTbsFos7W4AHHY9Ky7WSS3aOK5jdGUfOjr
yB9OtdzDcXkTqZeYz0bPX8qt6tpi63p7FolFyiny5V+8PY+oPpXZhcQklHojmqYdLWJlq+YlkRuC
uc9OtP3quWC5Hb/D+VVdPP8AokSkbXChTuHQjtVhGITb0DHJHTnNfI1qfLVlFdGzNdxpOCd0XU55
OKKnUIcl1BPbntRWXKxqLGqxMa8hm28YNI05YHPQDHTnNTbAEPoDn1IGcVXcFYQQQoJ/h6Zp8ySN
BSpBeRWOO/41WaVlOMYB59M1NsYQD5ztJwfbvVd+YjsIyg59x/k0mlcTLGlXTvK8ak+ZtJAz1PX+
lLezskyC7B3JkgA5Uk8D9P51BZqFu45AAGkBGfQYx/Wq2pyFzISCdozj1OO1elQqONJW79TSMnGm
YviLxL9mUxwQLGxOPMfn8h+HeqfhHVJJpbqO6cySMuRntz27d6p6zby3R3xBvlwCjDIIz+f8X6VZ
0q2FtEHSJoxK+VIOc9f0/wAfavYr+xeFaVrtficntJynrsa9/fSWuowTiRhFg71HRgPX867jTdSj
uIopIWyGA6HFefXtvJImwgM5IKj3JxV3Qrp4cQEF40PQfKUznn8fSuLCVFGHL2OqE1ext3bbb65V
hhGlZhjngn/69RbyDsJBA4PB5/yKsyAXLrcRGRiRsMYYBSw74xkH9PxqFt0m92iSMk4UKMAH0x61
w4uivaSlfchxSEaZweMYx6gf1oqMAD76jPY9cj1orm9j5kW8zV8tphIcouGHJPY84xSyQf6MHjZC
mcOCcFTxjr1/CqLzYiX5Sd5DnJ780+ZiIowe4DDHGOxolGNrl9CZ0V4SVPy88Dv7/pUENusk7gNi
MqMmlUnysnnJxnv/AJ5qWEB5FVQEVwVYL/n3rNq1hlZ1SKaJ5SFCYfAzkd/8Kh1CPMwcYCkemcEc
Z6e9OkkJkIPQgnFWZIvKVwhGY03A479/6/nV05c0Ega01MwWqG5YBQCSMEDp+H40v2UGYJEBgMcb
R8q/h+Bq3G4UYIzgF+vfHFSECGPKjLFup/z70c7Zly2K0UKsQFVWKgnB744PFJFFGrlQF3YPToe3
X8anWTymKqoxgjmmq2YXkKjIyfbv+lLmey3HJ2QyM/ZJJFXKK5ydv06frU8kitISxI3SEkY6UHBt
Y9yqZGYqXPX6/rVaJzLLhuzFR+lJzl8LEmW3cRsV5HfAoqJJJCo+bgcDIzgCijnHY//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4635b0030022e.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
861n4Sarp+3Go6WzFCVjaYo0hHZQRzR4Y+Ht2bO5u9Ut7mVhtSG1tZMszFgNzEZG3nsf5V6x47tv
IvdP1aWyS6trUMsu2MvIinuBkZH48fiawNF+LGgwXZNw11HbHHymzAYj1JEhBxXm5ZjauNo87d31
02PUxlCODkuVaPzNaTwXJpvh9bmyt3toocOY2id3HbOAcnjr9RzgVj3UcctxeWBKXsETGJ3C7d3G
clM5Xg9ehxxXstleW3iLR7fV7WYTabMrKkq7lXAbHIPIORivHfF3h5LGGPXopDsgmNrLKrH5l/h3
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
1Bxeo05SWxy20DrRUpX+8nNFLlZNpH//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4616caa9eb286.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAUwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
t67pkw1O2F3bOkkV5FFuEeBC5S4XLYHAzxn3rqNA8Kapb2uo6vNb2lxp8u5POjuCk1tnAkhdcEZL
RkjI43f7Qrd8V6DcatJZ2P22PT/s87T3kF3dFIpHVGUSIDlnxgMcAgAEjvUehaPqel6nqaXt7pyD
U5Y7YO75jd43YCRk2jLg8GQ5DBVORgFvgKWHtSlFa6fifoGKx/t1TldLXX0XU8z8WQC80iVI08ky
uoE0R6bpe2e3IP0r5j+FPxNl0Wwn0OWZyZ5c+VMAiDgKMSZyvTr29G6V9YfFrwXe+FLK4lmAiVkW
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46c669624ea13.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8/h8Q+IzqotBLdbSyxrIzkh9xGOMdcZGD68Yr0Gw8L+NbZftGtzGGxaVdoedEKBmAUMy7j1OOG6G
uTXWbGymjtvDs732q70kSLytscTgDD7ioyRjPORxXpvhj4p3aP8AY/FdlaW4bgOLlAx7gsvQfga5
X56GyXzNWDR9b0fS7iWW+snvVhENvHO58iP+87PtyzY6Zx355rzPxOfFz2st3e3c0UcUghZoAAJC
AOeDjr6Ag/SvT9R8QWfje0bS9GnCXEoKzM0W5IV6bjkYOeQAOT7AEjjvFngTXtJ8E6hBZS219I4j
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
JorldV1i5vLkSyiJW2AYRcCiuynC0Uhpn//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_477e3d7e20080.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+aYxItswZCrREEcdc+tFmY3lxIGUA52jp+JpFDxjeh+b35qWGIzK7SH5z/F6+1Zkml54ztaNXY4O
0kY4qlc2zxS79o2yHhSwPNLb20zvtiiYnHPHBrTgaWx3JOFZSCVGQcdf61j8D90W2xmpY3udmyRV
5zngdzSNbiICSdGVCepPynrWibt3kUZYADjHpTXkd0mg3ja4yQP73XNHPK+orsQTKNPjGwrA3LBe
7Z4+vFK0N2bWM7WaLHHlnfjPPOOlVnhYKPMJGPugVasrOYJ5ySPGingg4xn0pN21uMrXVnIkgkj3
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
/wCw7JWbZBGATnjjP60Uv7Nf8wvZruf/2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/1911/th_48a00465b3d95.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
9c03wVpWnWUUUUKzOV8uSZ1BLev48nmrsulaTHdx2/lKGXoGXjgDOD09K0Wn3IDCd3bk45x71JOw
kiRMKZ89SMbQcd+f/r4r5jm5nuWm+jOH1nwLYXrMyCIYk835ECuGHIBOOR7Vk+JfBQN+LgOSGcTu
M4DNu5zxg5r0OJJU5EMgRG8sqQORnk9e/WtZoopIwkpDYxjIyRTUmupaa6nHeEPCEOk7nWMgDCI2
cfKcnp0681tXmkxXsbia2gkJUxbnGSyk5bqOnt/hW05h84KrkOVxgnGajSLypSUXHHXrUSk2wbuY
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/76/th_47780fd22084d.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
vTapp1x51tqOjXYRiEDK3DEjac84Gfm79u1WTrek2yrmSWKSTDK+4NsXrzuwB05OR3q7qV9b2NnL
dXsgit41Mjs47e/Xnt6+lcf471bQNW0KwtYtRNvJciO6aYKE2KDwvcknB4HIOM45rhoxlU0Wxd2u
p2thrNnN4ni043UwkmjWWKUDbGcMwZST3HBIHY9cCtCV5Y0miE8kEwBUrLI29Txjnofr0JJ5INeW
W1xDf3Gkwamk0ljay4t5CpZFbKkP5nTjZgDvnGTXtdrYWmv6Lsb/AI/of9UWOWKn7qEnt6Z6Hj1z
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
XLiVLpRLPBG78rk9Tgn0/wA/WigFGTR//9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4616caaeac93e.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAYwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
/OzV9Zlnu4ZL29aK6fYUuT86tGeA7Y/iHQnrwadoF1D4nudVt7i2Xynj85Psqjerx5Pyg9iC2fwr
PdtLhsx9oZ7m4uId6sGG2Js9GHcH/PWtEpY2tpFcQahJb2SB5D9njCyi4aMKAD/dPfkd6hntvmev
QiilutIivbVIDd2geaN4Hi+YJgbXB6jBwe3QU2ynFpp8h1SzuXsjIuZM5aHzB85ww53BcjpyBzUA
e6sLm5NnC5d4gPJuUYO/Gw7QSd3r7VXi1i/lihM0waS0j8r7PKg5jUnh/XGcc9hSuTu+Us6R4pCg
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
yvExvN7z/vXDbdzdcUUUVmbLY//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4687b474c9c0c.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgASQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
851aKfR7W01S3eRyyIslu0LHO5gN6noPQk+oqzJZK4eaYsSehIyT9K7TxH4G1G117TvC1xIkUSDz
llljAFykeHwG6DOwZ+h9abqnhPUX1ZNOhs5JL6RgkUYXGT6L/jXkVuaydj9PU6SajCW6T/4J4l8S
NZmitjo2npILu4t2lDwHLxqCOQBySf6V8+67rPiXS702qa3qpCKDzNIp57EHmvt7wx8LfEWgfFS4
1DWdAktrRdOEcN60mGjmEm4qQpJIIAOcY7fxYr5b+O3jjTr/AMbeK7b7LMrvPApmkDF98cZWRhuw
SCchQcAjnHTHqYGST9mo30uzixUoOPPzHnOk+NdWN5FHe6zex22Tvl37mHBx1966SLxLcIR9n8YT
MGOWDpFHjg8/M3PO0fQ+1eWajfme8lKELE3Cg9gOlQXUg8mGOOcy/wCwRyCcZ/w/CvadGEt0vuPm
5Y2pG9pPTzPqn4a6/d6tqtlbTeLRrNvhka3BACMMYOB69h/kdd4i059L1DMYG/G9go7dA30PP5Gv
kj4e+Mf+EH8QG8uLU3SCNojCX2ckjvg4PHpXbaj8cfE2o3yRW9zFBKypAZDCrBwHYqehxkP29PpX
i18DUdW9O1rHsYXNKapJ1G2z3KYeeVvLaQJNGPmXPQc1l3V7C8sN9bOIL5wDtwdsv0PQ5rw6X4r6
/BqTreMNqtiS2EQReDyp789+fWvq/wAb2vhvTvglpmuR2cVuEgiMs6CRmuTtBXg4BydvP15wKylQ
dFxVT7WisepTxsaqbpfZ3uYuha9Dq1k0UhBXOHQn5om/wqJ5G0e4MMqlrV/unrtNc3NDI8UOsaaD
Fc7FaeBv4gRnkVe0nUbPxVrOi6VfyzQ2dzM/mRwy7JWCoTs3emcdOcVjGnq2tuvkd7XVGo6ROxLD
cfUHrRWT4i0W28Ga7e6b/b9vp1urh7e3uw80iRkDq3fndRXoRpuUU4vT0ZlzW0f6H6neDfDmk+Kb
99L1PTEvknhlWGV4A/2fdGVkOT90Mvyn1O0V5ppnhw23xh0K3lEax2cU7lm+XaqFRn8C2Pxqx4Q+
NXhCDw7darr2vr4VtUj+zSS3chiG4sBgHHP3T1A5HSvN9N/aD0bVvihpWi+E9QsfElqy+Rdailxk
uux2IJx95tiYLdSMe4zqLnpScT4ejSrU6qU01a57x4/0SPW9CmnZBIhk8wNtUk7Su0gN8uQUBGeM
gV4j4q8KaVZfC3UdWOjaTc3t40fh22utTsYp5TEVZ5ERWVgx2xR8YPdh0r03XPiFf6D5Mceh3WqW
JLl7C5tiywxbRlm4zt6jPK8MelfL3xj+Oi61f2tlaaXNpWl6Ha3r2ds03nGS6mXieRsAbVUeWOpy
epJNedh6c5Sbp/Ek7evT8T3oQ54KMl7t19x8lfHX4NeFfC3gPR/EGmTXlnrGoahJAbO4AMHlrGjM
3H3SHcr1Ktg7funPzy6SWx4bBYEEA/gQa+tP2w9P1LSLzT/BGkEan4f8KwRWl3LGAbh9QeN55BIQ
P+WYcoPZOcnkeH/Cf4Iat8U/EU1j5zabZwwmabUWhMscfQKCQQBuJA5I619RCp7Om5VJXt18vQ+c
xMI1ayVCO+x5spw4I5IPevU/CunW8unSXlxYzQ6dcMIJmEJMKZB+bdjAdWOR9dvTOefv9DtPAXjD
W9F1C7jvntle1WeBN0TP+IyMewyD9K+pr3xFpOjfBmOx1XV3XS41SNYVtomuPvYPUfeHQAjvkniu
bFV7KKir3PRyvBxl7SVR25d0el/sq/su+FPi1pN54j8ZWj3lvYSi2SNXKx3j4HzSY5ONu7AIyZGJ
r7Cg+DvhC60EWMmg27WMMXkNZFRJE0a8RgAgAABVOAo5AyTyT85/Aj46eD/B/wAGvDtvp2v2cfk6
s82sRNIPPcvFJsjVQDgh/IO84BCt9K24P2t9T8aXi3OmeMLCw017c77aC28poyAGKhp1UvKdu1Tk
IS2MgHNcCpSmlfoVWm4TlybbHkP7Reh6N4JufD+teHdJl0y11Nri1utOLmX7LcwuocE5OARIhxnG
OR1rLuPgNoN78I5PieNQvBq1lbG9hsrdxHHE4OcNxuP3exHU8V3Xx1+Jdj4x+GWl3ep/YNO8Q/2k
JRp8YZLpw8IMplQjgg+XyuVHTNdP8NNEs9X+Cc3hV7jzW1fT7hP9HDTtE0pZkyqgkFS/TH8q6KCU
J+8d9evN0IyhdXf4bknwY+CugePvAdp4o8XaRFfajrDtdwpPlmt7c4WJM98qu/PcyGivePDFpPoX
h3TNOtdF1wQ2ltFAu3RbvGEQKAP3fQAAfhRXRzxWkXZHjTnVnJyd9Td8DfCLwhrl7rc1/olpqSs3
mLDeL5sIZt24+W2VOevIOO1eR+JvhTovgj9o+C90yDSNG0O8t42TT4I44JHu0DBvLUAAja6nbzyM
gda+w4dGstKOLK2jgDMfMESgcZIGa+Lfi/qceuft1+BfDUlhGw07OqpeicllBtm+TyxwPmjHJyTn
jGOeSMFVTjHRHNTrTUueTvZf0j6/tZI20VpSSBJb7vQ85x/SvhT9pnwb8O/hNpNx431u01a+h8RX
MdveGxMQEEplSbzFVgA5JjYNyudz85zX2c1q81iY7WHfP5YCqvXJGAPzxXx5+1ro6X/gG50u4vLX
XkMztb6eUOYLiRpI0QYPLK6jqOp6GtcOvqybT7HThJyxFSTjpofDz+IpviZretX+vaze2lrf393r
OIGWPFxNvLHceoO4L1OBuA9K4KfW9b8B67qtloOs3tppt/p80UzQXodbhFjdkDFcD5TjAxwRkYr6
v8Q/A/SPCmiW9r/Zsct9JCq3McN1LHwCM7yCcHOT6AnFepfDf4GfB79oO08XeCPAGsRwLo1vGJZ7
6y8uVWZWVpDKCGl5Egyfu7gPukLUU8XCd3FOx14qhywV3bzPzB8MWC6nr+nQTRyXEc1wiyRxnDsp
YbgCe+M819z/ALdvi3QfDPwu+HHhKx0e2g8Vayi+KNYndQ8sSSFjDFuPO0s7/KegjXPWvnnwF4N0
n4T/AB61DS/iBff2ZYeHdQlsrueJDJuKSbGKBeWym5hjr8tcr8c/i1efGz4p694vuYhbrfz4trQH
K2tsgCQwj/djVRnuQT3r1nBVay7RX4s8mjelT1erIzcaZNbPq1ismm3Mp2PDDkhHBBLIQRgcjg/0
zVm3aJ9NZIwIryWQZx0+5jkk8nPJ9+a5jSYN1mzFwuGLjJx0HUfrXV294Zb5bsfM9uV2OUAZsJ2X
pjocnnnPtVqCjoevGTnZtf11O08F2v2We4124Intof8Aj2G0bggx5gI7/dABJPFftt8LJoLX4b+G
HmfyYl0y0Ubj0/dKAK/FHQJzaaOIAqi3fJUgZwSORn6k5r9pfBsJk+GOlxKuSum2+B9I1/wrwcS3
zN+p04yKVKmu53WkajHqSXXymLyLh4MFs52459utFcFZWurRRyCWY3bmVz5vl4yCxwDjOSBjmiud
VVb4TyXhtfiPIPi1r+l6h8W7PVf7TvrDUtAsmmm027vfsdlMySExq+AS2JCzcZDKgHQmvmy213xW
3xvj+IfidLeDWZ7cwW7sQwjTZtCeWmBkKWIPPtnNVNIh8XeMvAlt498Q66bnXZ55raf7UoQzQ53R
sMKACGDH/dcHgV9KfDT4YfDv4n+GNO1KyvrbUtTt4oVv44jEWtLkKGZCu3K4PQfrxTdT6rNPl5u5
1U3JQlCrbl22u1u9O1++5V1z48wWNjpguLhLG/VVjvL82xlFoCCspKAEkFT/AAHPUDHUcN8Pfhv4
L+OfxBuYtI+Ij316kEWtXsFsRMIrgTMdhWXnKlx83PTqcmuP+LtjN4c+Ns3g61SKTSIClw8cirue
MvCq8AAHBcZ7YY57VxlprB8Oao13ocsukSughkmst1vJtzyuUAOOB1OOK9Oio4iMpQ05kt/VnEp/
U3KMeq/4J9R/Fr9nLwta6Pp2n6nrN3Hb6pfpazXQcxzMCjkruVhyxHXFcP4G+B3gb9nr4i6jceB7
uS0h17SLnTZYmumlYShRMjqXLHdmMj/gR4ziuK+Pmt67q/7Imj6xZ311d6/pfiD+0IXmZpZWWOOU
kHJJ27Fc/QGub8OfEv8A4SD4e+F/F6zvaPFfwR31o7fvLecXCxvGCezdcHkqfWuJ0HTTjHbY1VSV
SKlJ3O48YfBfQPGWs2F1qOk2Gq6lNerFcXF5apKzxhfnDbumOTnquFA4JrjPHHwq+HtrrEOm3Xgz
wzZq8uyC3AgtZJ23LsVX2gncCOAc/MOnNe9fEPwN4o0HxxqdvoetaXBZyA3DG80t7maFpSWwjecq
cKV+9G3OetfmB8aPB3xD/wCFk+J7vXtUn8R6hojpNPqzzhfLjYlotoYjZ7IvTtxzWOFwrk7Opax2
yrqXwwvfyPqH9r39g7TvhV4K0fx34FtL610WVFbWdFuZvPW0bK4MT53snzMcMScLnd2ryPwp8GdK
1udHubkxPFIm6GCVl8slDw+7v908H69wP0Z8EfFTw58ffghrfhBtRtI9XudNSKe3kIZbG9khBaB+
OMSH5TjDEsF5XFfn/wDEXwL4r8Oa/ZWGqfadFvZbpobfyyY2jWOMqM4PIYKxBGRxyeRn1qNSTl+8
1tf+vM5I4mdOlKkkrPrbXyt953esePdPi+Btx4Ut9GWyuLVBp93eGIbZreGdpI2R8ly7uyBuMDy1
A4JFfW37GPifxt41tdYu/EHiCG80OOBbaDTTD5bwS8bcHYCFCAjBY9Rx3PwR4R8KXPieay1LSL+P
VLKGMriS44Rz0Tb2ZsHqMZ4z0x2t78dfiJ+z1oT6r4bv7K1t7iSO2exvovNM7YJaSNAwxtIIOezD
nisJ0YznywVm+jOiGJqSpewUFZ/aa1/4B+rdvozGP5rhVOTwBnvRX5dar/wUM+L2kvbxpqmj3Cyw
JNu/stVxuHT79FTHATkk1+bFLD1U7Nr+vkdVpXxJ8E/Dz4QvpV/rE92ljcyGN7nTpovMiCPGpwUO
wtujb72c8CuU/Zv+OHwj+GXjvR/ETaV4qGuqbltZ1S3RZbSOG4RfLVlV87UAJIxncW4O1QKOv/8A
Hg/+7WLpv/IQP+6K6fYwlFt318zilim1ytHqX7QXxE0LxV8fdA8Z6AVvLCOO5TfcWrYjkeCOKN3w
CQFYs/v5YFcH4f1+PW7FZL24AuYvmSeSMw7gQP4XUEEEkcgZxnoaXUPuL9aw5u/+e9FBOjGMU9v8
2/1MK1VVVbltt+CsefftC3/irUNSsdP8Pz39zo82nxreJZu3lSypNOVEgUhWIWTjI43n1rc+APhv
xh4z+weFPJ1PUNS1XWob+5F2zbISJIw87s/BARQTgknFdXa/fH1P8qD99/xracuZWsKFVpKPY+z9
W/ah+HeoeK/F0eoLeQzWd21qkrwkpc+Uix74iuQyllbB7jBwM1+cfxr8a+IfG3iHxS2i+GJbKw1i
bbJcSLiSSJW+Xgn0VeSMjJH07Qf8fD1dj++axpUYQbbVzRYidP4Tz79l2DxL4E+K8/irV5bix0yH
TrxdRDzIZb5XgdUhVCcys0hj46DAYkYzXr/7UHiCfxInwuuNHW+1C5sbJne6uGiN5DB58oiWZg5J
kEYTBJ3EAFuWIGDL95Kli/1Z/D+VdcZclZVUtjJ1W4uNjA+EHiSb4efEe7vHg1Gz8PzqIlggwI8A
cMyM7EnI6YbGfwrZ/a18QWPxTv8AQYfCdtPPp9r5stwXVYh5hCgYB2nHB9cZHTkU2f76/jVQf678
a2q1PbV/bta/ga0cRKlFQR5G3hfxDdLGZ7SR3RQgKhAAB0HBor22P7i/SiqVdrojf63N7n//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/76/th_477a597979896.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
4TTNGGoSOI1jDgYjWMgdSenr161amtbfSQZ54JvtaIwRWbAX1zx1Gev/AOuupsdD0zwDZLe+JNUx
cK+6IRsc5H8IUfe9x/KvPPiF4ybxXdwR2iSQWcGcI7/NIx7kDgew57159OUqs/d+HuT7LTXc6Tw9
44gm16ytJVTDnYJ5uVjJ7jn8Pxr0S+uyj3Asn8rG3MnlgrkE8e3GP1r5rt2YXsBDIGQjkdOD/OvY
/D+qreaeZI5EnnCFDE7H5h2x6Hp3wfrwdKlBbxCUbIo6kjpqCPYxyXEsjDaqcDk46/WtHxVpWrPp
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
lP/Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46c72b6cb4cf1.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
86TwXbR/K19AFYYCk+9Sy+CYYkDw3ds2DnaH5rTjZvLRimR3+tW4WB+XAzkivHlXmDq9LHMReDbh
mkmGoIFOdyKBkj2qncWE0B2RabMFhOVcA56dff8A/VXaecFfbgZ9qtQPgklCeefpU/WJdTF1FfY8
qWC7e+hCrMFZ8MZU4A4q/Lp8jszxBnkT14GMHHT1Ir00FQme2eeSKuwxWuCxiUAFQQB9T/jQ8V5F
qSbPHLmF5ZJv3YUsw+UHueeP5VmQQSurqskhbhihPUA46/jXtU2n2UoYC3jPKn0ycCp7LQ7LzDvt
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_477ba16e9da29.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
87j1OV7WMKCuSxHGCMsa6axeP7BwSJFAC4Iwad8OvDFv4gsmlclI7csjADncSePwGPzrtR4Ds4wF
85wo6dOKptDPLN7/APCUwGVpEMsiqWPIGRjArp59CvjdS7fKeFvuAcGsjxTpiWPjSGyEjumY8s3Y
HHI9xXpEelpbRhFmnkC9CQDihsDhLrw5qKfuzt8s9RnpS22gzQQ7NrSfoK62Yv56pH5pcnJ3DsK0
Iradzkb1GMc8UrjOBn0mZVUfZd6r0GQDWF4jSaGyRJYnXe4XBPbHf1r1TVIrmC3Z8gn1xzXm/jDL
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
I+g/kKKKKHuWtkf/2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/76/th_477d6c15107f7.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
7e/1S4h1H7LBHGBs3+Y6lh244I9ayLnxDqKLK0a2reWxUhomHT/gVcx4d8ZnXtRf7WkMEwT5UAPz
9Oh7d+KzNb8Wx21/dWiWxch8FgcAj16c0pYqbm9dDeNOiqak0dLoPj25vtTm0++t7eCdRuRl3MHG
cdO3r1rovDnizTNcWYQTCOeFtskUhAI9/cV4pot69l4mWeNYJ96JuaXJCKWBJHPBArptJ0zw7pWt
yX51Od3DFjGR8h3Z4yBz/wDqrZYtwfvMxdKMlpoexpeW3P8ApEWf98Un22HJCSKcehrgYdc8OXM7
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4725f4130ce45.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
43xJeNbWUckt1PZSySJaweZuLMF/1kzrk8cnHBNen22o6/o/wnaxtzNrGot8ltNbxM4MTc5BGSQB
nB9wK+YLq9ub1BFJtcx/cAUAj16den6V798DPHsOh+HL/TXezXy5RNCLu5EAIZeQMjple3rUUafs
7uW5315c1orZHCnQ/E0ce9tH1SKHG5g1s+AO56cVS0/VLmwuFmgdkl5GQQc47EV9ISfFa3+z4SPT
GulY7h/acRi2juG659tv41y3iS/8F+KIhcXsGk2+o8NJLBdqD0OcsvXnbyR3qXSS1izLmb3RheGt
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
dGjZM//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_469de8b945147.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAXwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8MuYf+JUl0fODtIUO4gqcenOR+WKWCeaGOIsrBXA2kn+HPb2yKL66ubqB3VQtrv+gLew/wAKfbzo
9nJb3y+XsTzIHx82f7v0P6Vhqo2eppOSUvdOx0+6todPtjZSjzbiXE6HO5AOVO0dRx2681iavdRF
cyQB327QruV2tySwAPGfSsI385t498jLIuGjfecgDIwKmXVEMCQtGJFWTzQX5OSMEE/ka56eFcJc
xc6jasQT2y5ZoyWkUZHcN+HWp3s5mtILtmXYZPLwTt+YLnFVonyZtij5fm34Py/l+ArQvoJZbG0u
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
YJ7hAwRl25yM/wD6qKv3u5XtEuh//9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4725fd043a228.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
4f4jeCbnRNL0TVGninivEMbLGSWikH8B9cHIyO4+ldX4C8A6SNXhtvEl48HiBrRbiOyt5/KaEEfL
vxzuxglRjA65zw34QfEG00a6uotfljlt5Pmtmch2hwxJBY9OoPTBrqvFfiaLWr83/hvTZXuVCqL1
djHAPAIGQR1xzmleSXKjoeruynq/iJbPxidEuYFjQIk1vcbsmQgBmBGMggBlx1z9a7FdS+1zutrJ
mGdhIQp655x+tct8MLaPxF43utS1hRK8VoIlWUBtxYbWI6BRwcAf3vzvR2Z8MeOJ9MnlL2USfbop
H4IhJb5Sc84KkZ+lC10FezPWI7OQtZpuTyoVy47s3Sud8b+CbPW9MvYoY1haYGSTYOZHBBBHYHjG
cd62fDl+13ZRyMd28B8hfXnB/AittuVIzjNLdEczjK55Z8L/AABYadbC7mhe4RmDxfaACeMENjHT
jj869CmX7FO8/wDyxIyygdSTWii7VAyTjuapau4Gn3LcM8aFwvfjmpjBRViqlV1ZXZyHxb8EweL/
AA9LNbx/8Te0hkNowHL7l5Q+x7eh5r4wKOwZUjKupKsOh/HNffFpfIsEUY5dVCsO4I4NfK/x58JX
Gn+IJvEOnafNbaXeuGk+QqIpj97PpuOT6ZJx2zMcRBz9lfUSi0cn4F8IQ+IJmk1DVodMt432/MpM
jkYyFHAHXufwo+JPh1vD2sRpHdw3dlKhFvKh+Yqp24cdmHf86ytEtZ9SnWG2ZQ+MuXl255zuyfT+
lW767udV0bTNJKgzWU9wVdn5bftOPzU4+tdTS3BN3sc4KKsQWxkQsPXHSilzFcjYgJ24zxnOK+jP
hRokkXwv1m9Mr2UlxHI32hwQEjSPIK8cdW5Gf0wfFG1F7Owt7rSraxtFldkYxxGSWNlxj55NxBIO
crjv6V7F8Lb+91P4Y+LRcTy3EkVtcPEzSEuGMR5Y5yc7c88cGpm7oTNX4RQw23il7W3ZzFDCoHmM
Wb5lRuSQM/er0L4neHP7c0J57VW+3W6EKY87niJUunHXO0evT3rxjwdrbaR4/vvtJ+QwwsmOuBCg
P9K+k7C5jurSGeJgySKGB9iKzvaVyZbXOX8K3ZudEtp4EEe1QskbAgowxkHP4dRXWW8gljDAg+vs
aw/EJa5v4bFJfIVomeWTbkhTwAO2Sfx9KjtnlisxLZQrufKnEhCjrg854/XB4qHNRZTXMjdvLlbW
3eV+ijPXFeaa54geDUEnJ3s7MqRs/A6gn8q6q5s7nUryKO6IFrCoZpuRufJBCj8MZPb1zWLrXgjS
Nfb7Pbm4tVt8x/aIJBlWPJA3bgfTGP60Kom9RxtGLXUyLrxZaWOvW0M06C8uGyIYxzs7sRzgZ9cf
pXesdO13TZbG8tlubedSkkMgyGFeJeN/hLr8cE91oN6usW7x4MHypIcf3Qfl6gHIIPXHWsDwv448
Rpo95o15BcQ6hpyB53cbJGhUjcGBwQwyMnuOvu5U4c3tEtQj79otjfix8Hn8OXEmoeHBNNpco4gz
veF8gbc9WUgkg9eMH1PNeMtCTw5q2j2tpBJDcQ2yzXEjyBMuxOck+gHb1r0L4oapc/8ACFIgYyRz
7MIXIAIdWyB64X+dcL8UdVun8Z3tzbvdRpJawEBJiqkmFTnAGO5/M1VKr7WKkXVpOjNxbuavhifw
jp+lrBreh6dNebt5eV3ZiCAR0OKK86utb1KOQBp+doPKKTyO5IzRWjhd3M00W2sLURBCJfLU7sFu
Ca1NN1S60yKaLTrm4t45o2jkVJGAdW6ggHHNQ/OQOFAIzzmltrS4u7qO3gjMs8rBEjQZLMcAAVDZ
jdnW+HF1HVvtmqMoNlbqqTy+UqDdgKi56ntx7571778NJJJNBs3aUFBDsKdcEMcf+O4rP0/wT/Zf
wrudFjUSXskJmcjnfNkMAPxVQPoK4r4ReJTpxewugTDLKSrMfumpadtDWLurHZeOfECWWpzJKCQm
yFFHB5GWce/zKBjv71kSfECEXn2UeWluieWHzyHI6jGRxz+NVfi3YTalcW91pzROrBd6lwDgE4x+
P8hXCXXhJ47N5tW1W3wHMmyLJweyk9P51PJGWrKu1pY9YtvGllq+rXumy3PkC2KSgq2N6H+En+np
XC3t9rS311faFcM+mfaGAEQBRjx82MdM557/AJUvhb4b6lr8738rf2fYTtvMkinzJh6hPT3P4Zrl
Ne1rXfCHiLUNJsdTuoo7SZkUBwoZOqkjpyuD+NP2ai9CXU0se0+AvFt5dyC01coZG+4QMfhXQeMP
Ctpr+n3rRwQR6pLaSWsdyy8hWH3WPcZA9cV4PpfjfUNRu7W7v3Rp4iE81UCkntuxwe4z1+tfRPh7
VI9W0i2u4yPnX5h6HuKa032CStqj568a6Ctn4eijneSC8tz86SuZFZsYwc559D/jXnEjtJjzlikP
TLc4xXsP7SAkt9U0vyH8uO5gfzV3YVyrLgkfSvE2Yqw4Q/Q1nSg4rVmmJqxqyUoq2mpO8cTH5orb
2ytFR7xgfKD9SOKK11OYvyJlRyOnOa9O+Auhm98Syaq+RBZoUU9Q0jDBx9AT+Yry3eUwjspUHkAf
zz1r6L/Z/jX/AIQ5ZYpCyPLIWjP/ACzkDEH812Giw4nqQGBivDNN0SyPxQ1bT7zzEtnklaNY+Dlm
DAfTBNe6V5P4otha/FK0uFJUTbHJHrjH/stU9iobm/q3w80/Vbq2nF1fWr2qeVEY5Afl5OcMDz8x
Gat6B8P9E0eYT+XNe3IOVku337T6hQAoPvjPvXVx/dGaq3uq2NjkXd3DEQM4Zhn8utKK0Fdsu18s
fHOSL/hZOqqqrvCw5J9fKWvqC1uobu2We2kWSFxkMvevkX4hXCah461y8kJCm7dRtBxhDtH44A/O
iRLMvS3BuGgbYgmXGQ3BI5HP5/nXs3wz1a704EXJJtldVuADny2I4JHUcV41pgt4r21lkLbRKrsT
0A3cj8q6bSdbTQvEV/58jxF2O9ycq2TuUkdcdMEdKlq6saQkrWZ6H+0hp7XOi6NqsKiSGCV4nYHo
HAKn6fJj8RXguxvuiJR6nNfUWja/p3iTRzo2vxRvFdoYllD74bgegfs49Dg8Zrxrxz8N9T8K3Es0
Qa50rBKXQHKj0cdj79D+gFsRJWOHEJwNxjz9c0U2dJPNYDC7eMNhT+tFMmxBcyS8eXDukdgoDMDk
nPQflX0p8DrObRNOn0/UIzHdSql1kPujYN0KnoeMD8K+doAYJY7gTMtyhzuU8qc549fpWq/ivxJZ
2D2On6rNb2wZCI4gqkY9+o5APBqk1sWrdT6z1vW4dKiEkqh1DAMocBsH0B69q5ZdX0zxK11e2UG+
5tfJQiRRvQByeOfoOK+a5fEniS6lSW51Y3D7P+WuDkdvrXofgzxSLq10fTtRuBDdPdG4u5uFQRKj
FUB6ZOF/OlLY2Xs0rLc7vx/411DTtfn0axXy1SCOUOvBO7cOvoNvauUeSWaJnkZ2ZjuZ3bkn3rhv
GHiXUtU8U39+b4eSz/ZojGhXMSs2w4z6MTn1qN/EV1JbMoGxhxuJLHr7n0x27U1JISqRSsd/4H8Q
X1p4rtLTT5RMLiTZJCXAjZcZJz0BAHGOe1T/AB08F2Wn2reJrBYoYi6pdwZ27iTgMnvkgEfj615E
tzdxXTXSalJFICTHsGOMYbnPAxx+P1rPvlvb79xe6jdXMe0FBJIWAx9fT+lOUkzJtMbHcxy7nQAY
xgH5vr/WrV7ex30KiVWa4iOxJR0Kj+9jrjqD+FZEOmMiqY7r7x5GPpmrUMDJKoP7xWwrOBgDqMVO
hJ0PgnX7jRL7EMiSW8pEctvMu+JwT1ZfxH/1sV71p3jDy/Fsvh2eATW00EMkCE5+VogzoCTzjJIB
6gEdcV81RyM1wrLbnYCNqFiSM++K6YeL55/F9jq97bICskXneWOqoFXAz7D9al3GmZ/j2ODT/G2u
2iWkRiivZVjVflCJuOFAGOAKK2fGktnqPizU763jWWK6dJwVdQBujRiOfQn880UJhc5iP/WP9W/9
CqFP9fF9G/kKKK0IRDaf8e83+8v9asw/8eT/AO6n/s1FFDGhk/8ArovoP50knX/gJ/nRRSYh8H+r
H1P9al07/j1l/D+QooqWAz/l1X/e/wDZKq6Z1uP+A/8AoS0UUo7iZPaf6+2/3V/kadd/dH4/+gii
iqQyC5/1n5/zNFFFaR2A/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_46fe6ab932fcb.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
81vvD/iBpIgNJuMpBEpOMDOxc/rmqE/hPxHMny6VKpHcuq4/M19BXdrcwyYkKPtwD8pzx9Dx0rkf
E0HiTVjNpWlaROtpImJboRyN5qkcqhXIGemTjr261xxxEqkuWMV+P+ZxQjrsef8Ah/XfInltvGN4
95bO6p5ck5uBjPzYKkjuD17V7vqErajp8tlaRGC2nAiRw6GOOMAKp4bJ+XsB+deJQ/C7xLDeW9zq
mizQadFMvmGVs/JuHBx69M8V9NXmgWE/h21u9BtVijgQK0CZ+7j+n8vpV4lPlvDVmsqS3PnjUvh3
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
2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_477bdb0ae65e9.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8z8KTsbfxCG5/wCJXIMknP8ArI6wUurmOBooJpUR/vorEK3pkd6tx3dxp8M8kbR7b2JoGDKc7dwJ
x09Bz0rOaTOBnPPUUyiePUbyON7eO4mSGUbXiDHa3IPI+oH5U+4LQ3DoDzwcfhVeQsGAIHB7Dv8A
WpJpjNM0h+Ut3NACP5jYAOcDpnkd6Id0kiITySAM0xTk/KWGT25qUTNvQnAKkfNjpVAMZSz4TJwc
cCjY6tllx9RwaedillRlf/aXP9aAAFIycE88dKAGFjk5/KmopbOO3XPar+jafPrGpwWFlCZbiVtq
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
uRp09x88UTMvT5SaKdxWP//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_47012e2eaf0d5.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
9As/ijDHciO7ZdvqGzWwvjS0eYtbX8Tx4DFS2CK8vtfgtpSRb7rxJezS99iBQTXN+MPAi6E8l7pW
ryC3iiaURyjcDjqM8cc96GpR6aGca1Oo7X1PbLzxwiiTypThOWPoO5xWNq/xL+xukXmqpCgsc9z2
rxOLxNaXljFHdy3W+BfNfy1RAwAyRjqR074rmPDdjN4v1+VJtVjtLcs0sjzSEEL1Yqo6nH4Uc/Mr
hKHs5Wvc+iE+JzSWk0gm/wBWQT9ORVdfinu/5bj868ftItEnj1OJbW6ggKbbeRbnezgchyOmTgZ4
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
/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/51/th_4a114518df7ec.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
q20LTMFQ5dFycjr7VYEAlBEkajaO5702P93taJ8YPJ65q3C7SzLuQHuW9R2r5N2uZ2Kpi2lVXHyn
kelHRlYZOWwcD9asTNtQ5XBzn8aihYBFfbtVieQOTQ7BYmQq64BPoBSpjyhgsBkjpUYlb5mC/uwT
8xGMGohdFFBVSRjJz6n0oVkBdbySgMrMDgEY6Z71GIkZmkUquD8vNVlvEa5CSxKoIwN3SpYpYpBu
X5vJz9PTNCV2A8jzcYA3IeT61oQaHeXLuzRxRpjjzZApY+w61z+pzzvaq1g5UggvuB+bnoPb+gpL
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
Jor2C/sbOKcqtpDjnqvuaKOd9xezXY//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_4766874d1b83d.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+c5pyzSAngk43dV9KfpVzPFfQtG5QKeSK9svPgbqaz3rQSWiwylWhkYlmXrkEce3IJ6VY1H4P6nK
gEa2UQKKF2KE5A6nA5rhljqNrXJadrWPOoWF95i2zNNK/wBxCM4PJ7dc1ftZ7iKxulaLyr1J0iTd
wpGCWGPqEP5V6v4X8I6N4Pa4stUtb0X11auTdIh2xqUcERyH7jAKWJHPzD8cv4Z+BYdV0vUbPUy8
kKXTS2kkhB2sRj5h1+bAJ/Cs3KD/AK7jWHk43PM7u/uJoopZJEt25mVehI3MoIOPVSPwp9pbXE8l
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4616caba750e9.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgATwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+CprNbqYIHBVSAW3csMcdq0xp81t8x2eT0wpzj8KigSHCYXn0P8AhV+GUzssUC/vCMBgcc+xrg5j
6pU7ale+sI2W1YLgtEVbHThmH9KpT6fEpJYbvqf0qrqXiee0JCFhtVk+YZy+5if0Iqjb6hd6iLdw
EhYnk7+GH0pvm3Rg5RatHc24NL/dT+WfvoBgAnB3Kf6U6PS2Dq7FgFxuwOc06wtb++IhFq87l+Eh
yTnPHT6V6H4P+Gmr3OpRxamhtrVxzIy8dMDngZ5xjNYSqy+yVGLe6PMNU0Bbv7GkrvHHFCIyrdcZ
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
VfLfoSf/2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4616cac0d7c4b.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAUgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
6j9gzWJ9T8Aa5qTZEw1Qxtk9VWNOvtyTX0v4yFt4u8NXek2fiEQ3lsIri+t7ZVe4gQ4dVKMfk3DG
CR3r5/8A+CdfxT8BaF4A1PS7xG0LUY71pt1+vl/aQwA3KG9NoFdP8UfjP8LPDPjbU9f0W/sIdauf
kv7tMEy7cABlxuJxgc8VONqyqzkofeXhaahGPMvkZvgL41ax4c+K1p4C1rR5jpc9w4069WE+bKhU
7mbaMYyOMDgDn1r6V8SaO3inTNT8PReZBHdaeYTPGcGHeHQMPcEg/hXzl4Bu9F8UePtI8e6C8881
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
/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_4957ace8a32ac.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAVABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
891ixjs0tpDHdJII9zs65Dk9NuemP6VZ8M3LXO6yW2SYSlyymP5jxnAI6dD0r3T7Fa67oc9nckXc
M6ssd00alhnI3DjgjHenaP4Z0jRrCSDTooskhnaQgl8ZHPPHGRXA5pws9/6/r8r7m97M8ZstSktb
h2hsUhu45gGcHZ5LehIHHIOa0tb8R3N/a4iSfJdZJjMwbPy9Rjt1zj096tfEjVNFuJYbeztoLa6g
uMvNGhA28g/MO+7P5cGuftmvLnRZFFtFPGjlkmSTDZOCR3yOnHqetS4LSTRaZzuswXkwW9uUcxzM
QZMcEjjH/wBavdvBv9h+HvDtk+mOZRdhQZ2UAzkAksRyRgAjHb8zXndvp/8AaGjxrqN2LRZEKoAP
fdkjI9vyHpXIatZ6lpLQw3Esxt4GPlEMdq55bA7Z/pWql7Vct7WFKPU9e8deMY0jRdFkWSW6t5Bu
gCye3Y8cZ/So/g3qsUNjeQ3ETobToWBDOXJOCoHHauL8F3lrp+nRkW8T3jM6NIcbueNo78Dmugtv
EXk6LMCgKvtKZyQ5wcYPHsPwqbct4pf8P/X9X1T5Lo9CuvECWty1xPL+68sORu+6O46joMV4/wCI
Z4fEdzrPiBoNs29I4oFBwq4xvZhxnAwBnr9OZNb1WJtPnWzu5HZ0ETq2SQDjJB5znA7967DUdPOi
/DmPT4rNjJPEs1yQPm3n5sH6AAUqcfZq/f8Ar+vv01YWSZnDwbpZ8N6ffy6hDYTtCrymVsxlj79R
+tLBoVxbNMI7ZZJEIj8wkbQTyCueucVzul20mw/aoW8pRlYyOG9u1d1feNVg0WG0j0uae7CAYOVV
COgJAxilNKejf9f1/Xek5R2OfvNCkS5kE8E/mHBOAD1HtxRWzD4n1GONVktY1fA3BXOM496Ky5f7
39feXd9jzvRPHGr2NpeWERlmnuGjWJg5BjCnoAPw9Pxq1eeIdRGrym9lvLTGPLV3PEYJ4I6HPB+t
YenmKzSZp4Ab4EMPNbavl57e5+nSql9fS6pczXNwFSePnYM4IzgqM/5611uKlLbQwTsbEl8t/Dd2
l3dvOqsvktySzDPI9scY+lX7We80Wwt7WxdTLeASFPLyUBwNoJPqQeRWDFHG2oLIqpGNoYBsnHY/
rUtxfTy6iJiVZ1iYAbQAoGTjHSpdO+i2/r+v6sO51UqwreIJZ1nlhiLuxbKAjHB+uMYPrWTqljd3
cv2O4K2tpgyrIEOxmHAHJ+g61r+HvDuuavayR2ltPJaTgfvXAiQjHynJ+9jjpmuvh+Hk91Aw1zWN
8qpsjWHkJx74z+X/ANbKMJQa1/r+v6voxyR4j5EqhpI8ZVgQ2e+OcVaiCXNtFbtKwk83jJO0Z7Ef
19zXsknwt0gQF7W/usbQdxweRnJ6jvmtPw58NfDlu7LdpLfSM29WlYoM9+Bj+Zrp9on/AF/X9fcT
zJHmnw98ODVtbs7URu1uHEk+5f4VwSM+/T8a9m8ZgkAKM/KcDpzXT2FjZ6fB5FhbxW8XUrGoUZ9f
rXNeMjGsTSh/mXCsPTJ4qKivH+v6/rZ6olT5pI4vypBIiyGOJcbUGeuT156dqqakDHnG13HDfMOQ
fX61De25vLh4SwAZh5i5A4Jx19eOKRrZYLcODklvLfLE5x90/kCPwrlaW6/r+v6b3XQmUJL8EjYW
UAYwVBoqKaLc5KNtHptzRT5V2/r7h3ORm02W/Q6qtzFLcOGcxBDgbcde34VgwLNLLJKqeYcF3x6V
oXQiWMm03BWCnjjace/41DdSCF1EYPnxj5pcbefpXfG6MNC5ZvLdXEQVDNLKdigrliT/AF6V7DpH
hjTfCOji+1OOO41FlJ3yrlI+MjavfnufTtXnPw0SW48WW0hiUrGC554OOM/rXp3ibVhqHg+6uPL3
GSTywrex7e3ArKd72X9f1/V9gKd18SZxNdQQRKFjcKjseowP1rmbHxHe/wBv/abm4LxxgssRbHOO
AP0rkoVupryUgjYzl2I5x7+1dHrGhtY21m0iPKJ49x8onfGMAnIxwMEHrUSUYuz1v/X9fd2RqrJH
cweNEtry1iuV5lQiUZyM49e3/wBerUfjm2N9DHEhOZMB8YwR/SvMRYw3LHyrkNKrEHzOOQBnFb2k
6dFCEeVgzocgZ4FS7Jb/ANfj/XfVByJntFlqkM8BkBw5P+TXJ+JWN1JI3mqISQc+gBzzVXw5eoLK
4WeTeIzkgdTnoBWPq+oR4KuyokhKglsAH69uoH405T01/r+rfh1tzGKg1Kxxf9tX1/fRzvIixmYF
SiKSwHTIHVuOM11F3IU05g0Ej72XOwbiMAkscenIrlLV7FrW+t5ZQj5DLkAMG/vEjrjA6ep960rW
6ku5rC0aeNIowZPOGdrckdu/NZVN1bS3/D/1/TNFfYmVreQBlYScDk8H+tFY82oyx3Mys3Ibrn73
A5+poqeSYuY4b5p5Bk4J4I7YrabTIrmxi+yzsZip3RtEee/ykZz+OKjTTJTcxqy/uo1OD6/l7Vte
Hre6v7lILZC02cYxtwB/ETj3613znZXRKXc0/hR4bvLp9UvAJIVigMSkqclm9PyrZ11JNL8PxWaT
F2jypHdSTz/hXWXl02kaXb6LZkSXjqS7Zxj1ZvTP6CuP8WMLSBIHm8593+qX+93J/Xj0rCU+aWv9
f1/w/RFwj1exy1nvgKGGdYpiwOCwUsB2HPHOK661R7SLUdQu5kKYUsjuHzNu4bHUDGSePw6CuXsr
e2RpLi/s5LyZgRGA4VIxnjjqT79OfxrFulvkuS/kSRbmJVTuAwe3PrScPaS3/r+v6toOTLE2s3Eu
ttPcSl2GQxHGRj9Kn0e51PVNTaz0kKx2lljkcZwOvJPPrWbbWE3nLJKoVSSSjDkgjtW54ea1s9Rt
72BCHtj5nlg/fJB474z0rSSjFaIlc3Q7f4cvbalZyeb5qzBW88bgVXHQr35z3rmfiTJsBjgJ2MUR
fzJ/XFbHgJ0GpX7RSHK2b5jPHO5T/hWZ4ltoZ5EkvGcKJMgEcZAA59uf51EbRl/X9f13sh7tnnsY
wjMjE7TtHzYP5en+NbWg3qQ3UAuGZIIwwJ9M9/61o/2fokEW2V2Mo6KG5b/ZOOnrV4WOn39pClvO
oVFYbmyNhxkk57VU6sWrNOwkmndEuv6foMclmdOmIjktkkbcGyWOckjJx24oqrN4cuzsFrc2d1CF
ADiRfy5PFFStvi/r7iuXyNC3j0uWQpKjxkHP71wB+hrqNHuLPSdJeTTxCskkpBlMgIQADv688Dtk
1k2vhzTdit9mOe6yOTz74NdRpOj28tjJBbRW6yq29YuBuHAJ/lXIqicrRb/r+vl5FSVldnNxSafH
qX2qCWNr0qwRzLuO4jjjPPOKI1tDIktw8T3C8uXPzE9881sSR21pcMHEayRtgg8bSOtQG9s44mMj
QqR97D5HuRWXO2ra/wBf15fIuxQup9MmkzI0bMOQwDZGPcVct7WymjV1tonB6ZB+b8+lZ934jsIW
URo8vPJiXJH54p8fiK0JGLO9Ct1xCPy60clS2if9fd/XbW6NCbSbCZRvtISMEAjIwOnQGqw8O6Qh
G2wiHOep/wAaeuvWW3MsV1EAR8zREZ/Kpv7a04hSZpVHXLRtgn8qj96tNfx/r+unUsaOjabZ2cV9
Ja20cbtHsZwOceh/Kqq2tndOyzQxTBWIO9M4J5wM0thqVnf3AtLS6zJIDhecNgE88e1SNcWdozC5
kMGM4V8qcDqR61v77pWs7/1/X4dVEzslIU6RpTHLWVqW9oxzU0Gl6dEh2Wluqnr+7HPsaqHW9LKj
ZcqfbkjH5VYi1O0mUssyA9/mH8q5Ze063/r+vP56paWLsFvZQxhI4oY1H8KrgD9KKgN9b9pY8f71
FZWk9bf1/wCAv82KxnS/K7YA4OOlTW8jKwKHacn7vFFFXLTY0RJIS+4tyxyST1NRu2MDauDkniii
iO4MkZVABwCVBxxUSN94kA4zx2oooei/rsJDjw+B2FWhEu3OB0Haiik9Hp/WjAjaKKJlkWJN+Qc4
qOaOK+ZDeQxzkA4Mg3Ec54zRRV8zWif9af5isNTS7DaW+xwZVN33O9XYrK3jcCOGNenRB/hRRUSk
3u/60AnEMYUYjTp/dFFFFYXbGj//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_472631b3d54e4.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
m8eWJ1LxFb6MloJLUwS7rhl3RLIUyvOOCCo/OqHjfQNLvfsqSatp1mYMGKIaeUd2Hbamdy5GR8vt
WTqfi2S58fTaZ9kurUSyiCCdCWKyDgEoeCmc579+eleuw+A/EuonSdV1nUbFdTtyqOIogy+Rz+7H
AGWzkkAdAKYHhdxb6TL45sz44sbmeKZUHmwSiONsu2XYBckcqMDGMfhV34raBp7eIxB4ejSKwtoo
4jtcnC7c8ZPvXsPi34YWniF7VDevaPC7Rlk4ZwxBxjuOKveL/hWk+k3c+lsGvEQFUxzKB1HpnHSk
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4694e6de34dc3.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8Yh8Oq7bdw3fWrS+FYS2DKgIOD+8HWupt9HtJIgmW2Dsj4rR0fwla3N5BbWdqXmkcKqhiSx/M1KU
zF1OzPWvDEvhH4ZeFdA8P3l3Fa6trCR3M0rRbt5b5h5jYxsyNmPTJ9TV/wAM3+ta/qs+jRQto8MS
P+9QB4xGj7MR4wDnAAIx0Y+grxP4w2OoyzRWuoRbb7duFujCcoo+UfOOgIA+XAxgV13wh8Y30Nja
20ESpc2cZSQsCDLyCVYdzjcc/wCS3TU2jeFd009D0PxZ8LrOCyF9p2r6lb6gmPMneTzRJ7leMfRS
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
LccLVkAAuZsf7qf/ABNFFFXYk//Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_47567cbc93cda.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgATABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
838PeH18X2tlDNcMk6W8rmRnxu2FiQSQf4QvNT6N4N8NyyXDS6/YKsab2DSucf8Ajq5/Orvwo03W
Zbyw/si2iuJ4LiZ2WVx5ZjKJndk/d/nmvQbXXrq3tNQttT8P6ZLeROIrlvsirkn7yjauWGemOfc1
U2ktb/Ixw1OUrrszT+Hnh3QvCtkt/dyWT3Mr7raaUYKAcZUMTzz1+lcb+0p4hmim0S2sbllJiecs
p6hjgH9K7DxA+mTeIbLTLYhLG2gVI03liPQE8842968f+OdrqWreP4rXTbG5uAsUdtCI42O4jggf
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
QQoY+c9aKPaM8b2CfU//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_477bb7983fe00.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAWABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8g0SRTdmbb+8G7ewPHJGMD867/TracaLNfayJ7e1ZxHCdxZ246hcge/+RnC8G+HbjX9SjjsIvLRQ
GlkxlEGfXGCfpXffEPSdRTUInWfdpkcXlJBt6H+9+PrVyeozz601T7RfyWc0txDJuzDuJ+cdjx04
/wD11oC8uRIW+3zBhxkykmug8F6VbPq1rqE8QlS2cDlchj2B+nFW/iN4YttLvo7qxgZbG6yyBWAV
H7rjHA7j8fShtXDdHJ/bLphxeyN3++c1WnJuE/fyNJ/vc/zqWO2Td88TlQCAA4Bz/wB80GG2LELB
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_477bbfcd18433.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8lsbEHxBDaXHyAyhX9uea9s1/Wrz7JNf+H4ohbWEOyIyxljOR94gdgoB61RsNL0fXPEytZafMpQe
Y0pdQq46sx9K53RLppJ5be0laRnZpBCTkKTnI54/HB7VT1KL+yfx94MjSXbJr0MgWIFMGXOemOBw
CT247VymlXd1o+ox2esLcW81m21oGG3jOcH1616n8M54IfFcrHT1gkjthGAIyNrcbiM+238zXQfF
fwhba3ZRaotrJNqVv8oWDhpExnafU+n1x3pXtoIwrjV/MsLK7iAS2uWCKT0z6Vm3PiDT47to5bqO
CQv5WW6Z/wAK4exnXWrYaVaLqBiSXcI3mCrFjqT6Vm6k/h+wvbm3nsru4eNtocXIIz35HWjlGema
MbLQrqSG41KE/aD5ishyOfetjTZLHWta+x2t4zyqhkJzxgdq8tg8SaK8Egi0iUhYvLCvOSV9+laW
ktNbNDquh6LcrKw2rumJz2pNAd74hm0+OO7tv7SKS28ZYBXIVm9Ki8M6Zo154dXVb64XcnE25yQh
rzXWria1vJV1PSSJXO9l80kAnms063dJZXNpZWDpazsGdRk5xT5QPUPE/iTTdBu9OTRbqB41YPNH
jO5fY+tbVr8SY38V26wtHD4f8n94WT5i/rXgEt8oZXmtVZ/RsjGKvx63CqrstlLZ6bjRyhY+qY/E
87NIdNNpcWmQUcZOcqDzz70V5r8M9VE/h+Rkt4lH2hhgt/srRSsI8n8M+JtU0P7b9lDPaXNuYZF7
Y9f5j8ax7zXZX3iwgWziYdEOW9zuPIJ9sCti20eaJJES4IRzkgCpb7RreOwjj+Qy43s+P0qwOn+B
z3jfbxAv3P3iSMuVB4DKT7r2/wBmvoW1uI/se6YhVC5JPevnX4W6lfadJc2OmMkkbyLJIuc5Hf8A
SvZruzddOfT2mUyocq33d3U4yOfxrOW4HI6p4C0HXNX1DVZHvLEzOVmhhwAxP/LQYz1zyPWvNdT+
FOvLcuNJSO9t2y0Y3bHx2DBgADg5617jJ/ojLawyF7hmElw+AAoONxP4Lx74rm9V8TT23indagpG
w8txnhj2A96FJgeSWPw48Sve/Z2t4YLgDJRrhdwB9QCcfjXT6r4b1vQLaD7dqkEXZIkmYsSByFUA
n0rZlt5XuLy6vL3ZK372eWIncgBOFPuTgdOw6Vg3+oRRTibL3t/I5VWZv9UmeRnPLN3JB4qrtjKM
mj6zLKrMhkklwVBkXe3XnaTn1roPCNpNBNPFqELwyDBCzIRke1ZLarJcaYkUxkkndlUI/wAyxDP3
gffOP8itPSNbnF1uvD9qihjMEUbnAwoJzgcdh780MDhtWs5dZ8TCxsxGrvIyJngVnrp02keIFt71
EZ4WywHzA1634i0B5IofEHh+GKMwEmRGXDD/AGge468dfrXnklpdS30tzcYaST7xz1pp3A9B+HV5
ZJok+GjXNyxwBwPlWisjwXpjppc259pM7HGM9lopMLFGW2Z0I3kDpWcmj7YpIxI7I/UM2a2OATlT
mk47DFO4inYWRsBm3whxjKnBr2BdQt9au9OksjIlwIEZ3Y9ASQ3flvl69vxryw555H41q6Bq01vI
bcEAGNo4nAHyFiOv60nqB12pXl+lrqSxJi4mlYoX4wijgjPrt/rXBJZFbmG51KXZtIYEseCfX8hW
5P4iV7u5d4mMKgxRhP4jnkjtXNeJ9Z+2TvBbWJEQGBwRk9ME/rSSYDrXUWe6uZ7pibW53SFWbPc4
/HpisO3t2e4WVQxCnce+M0zT4LhYDHdSKBv3AJ1A9M+lacL+UuI+B6VQy5bfY0EpBczyKAN3CDnJ
4GSemKh0VHGs2dm8ayRtvfjByGXB571E0iuw+XafUVLY3JXxBYzOWRi+yRuzZI+b8cUAeravcl/C
89lbMg8pUjVfuk8jFeU3amK6ljKsNrYwwwRXVX7jyJ1CE292VlZ0fJRt2GHPbCt+lc9rJEmsXTxt
lGkOCO4qUCNjwxMUsJAB/wAtT1+goqDQPls3x/z0Pf2FFMRQzhjnNISCOBVE3oB5j3Z9+lJ9t54j
H/fVMDQyvIPNPskBuJY9gO+J8bumQu4fyrPN4QeIxn69Ku6JqCx6xbvIgCBsEk+oI/rSAfrhaK00
22R8RLFyqkHc2Fzk/kfx96yNvORW14mQQ3SgDKo7LkdOi/4VktJkfdP500MYI888fnT0Ug8KMetI
jrj5kOfY08SqFyFP50AKOvP8qp3aFCGUkueAPxzn8KtiZQR8lPe9H2YwCMFGcPuxyCARj9aAOitN
dGo6HBFDBH9ss3ErrjAIB+YYH1J/D6VhNCQIsJuLoGHfPHP8jWUyhZTNblo5V5I6A1s6XLNcx+Zb
S+RcRkuqg4xxzg9s0rWA0NIKrbNnj5z29hRWbbXchEhabLFySfU0UWAwyWzkD5acrYbnt1PpUbHP
zHGKI14y2ceg70xE2/oPXqK6j4daVFrHiiGG4Tdbwq08g6ZCjj/x7bXK7ADnPzE9u1ezfCS40+XQ
XhK2dhNGVjeZpFMs4LbmyOCAQAPw74pMDi/FFtc29nf/ANpweVdi/wBqAn70e1yGHqORXK7icYAF
bfxG1yPWvGF9eWjGS1UiKJumQBgn881zkUm4DOfwNCAs5IHUD1xQGAHPNRDJ45IPvQG3DheOKYy0
CvHA4pH9MVVAOU5zwfakLOEzwccGgDpvB2iyaxquxonNqkbu8m35RhT36ZyRXN3TETO0R2BifunG
PpWwnjDWYNFOlRXCx2ZXaNkaqQM56gfr71p+BdI0O9glv9f1W3hijLqbQsA7jYeTzke2AelAHK2k
hEA65PJopb+a3e+uWslK2zSsYgeoXPAP4Yopi+RUUkz7Sfl25xSkkyAE0UUP+vxH/X5EkRIU/TNM
yfm/Oiik/wCvxF/X5D1UFFJHPXNR7RvIx70UUv6/MF/X4D4STMATkVMqj5D75oop/wBfmPr/AF5D
lGTFn0z+tRPwG9hRRSFH+vwImHDexA/Wm/xsO2f6UUU/6/IfQRR1HocdaKKKpLQ55yak9T//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_45d60d0495034.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAVQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+KP2mfjVJ8Q3j0pNLWwtre6Y72m8x3MeUBwAAOp9a4X4NfBvVvi94lgs7aOe30pZAt3qKR7lgB6c
EjJJIGO2cniqvxAjtNR1eFNMtruOSRneRbmZZOSR02ouOfr2r62+AWi6p4F8N6AbDUYv7P1WNHkt
BbeZcW8kRbfIVUEvG55GMcAcnrSqr2ekDrpR9vUvN6HF+EtY1L9nPxTaRTW+oat4TsBcfaraB1lm
sRIUPngptDgFUJDDbgkd67r4uafpP7Q2k6bqNrZsoXE1tOigeYCFBGMZC4557j2r6x8AyeENc8Sz
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
iMiRh7YoooplWR//2Q==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4672b037e8d3b.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgASwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+v7vTLZ5rreLlvP3lmjQfxDHy7enBrjdL8EzfCOG9t9M13XBYTM12Tax/aC7sozG+1CT1Hb+HGet
d/8Ab5mI/cEA+/NY2s/EjQNDvv7PvdStY9S8vzTYLKGuAnYmMcge5wK/HcKqvtLUU3J9j1FNQT81
Y/Oz46zD4afFvTL2y0S+m17UlS6D6kbiEyz5x5sQGweYWHYAhsYB6nudD+C3xKttUvPEPivU30PR
1tYb/VDfaq1xPJIUkWIrDsdWIlZmCOQMttPt2HxS8b6d4u+KV1d6x4dsLaGKKOHStXktxPMYQCxD
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_Rascal.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
37tidSusdPNf/wBCNTRqckHCKMnJ4AFVbw7dSulPTzXP6mtXR9V0eTwnLHrOnTG6n3RzWw/eOVyR
gHhcHg5zXVJ2Wh5tOHM9TK8TT3OhtbuLbzYZG2s5baAeMADHU59e1aEcoYKy5wanea01K4s7Z7Bh
YqeAzjci9SMZwTwBntV2/tA6ia2h2qx+6eMDtXLGpOnL33ozrlThUj+7Wxm7s5GMg0q4jBJwM/jT
C+1MYwaRj+7ORnv1rsOMilkBU/LyazLjOC2CcVoO6xqSV4PrWbczhgc49hQwMm+3Bcjv2rnr8Agh
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4651abc4b93de.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgARABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
9yiurqW1LtMUbPmER9SBwQPToBn39qj03xFa6nFs1OynmMZMmTaGRR7ocHOPXrXM+EE8UWt9DYXm
kRfZkg8wMpHlru6R9AMjnI57Vt67rd1pOkS2cFsIbppQqRxOrOYznLhR90HaQK82lCUKju7o6Hyy
+FET6Z4Zu7vH26NrpkIRLxQuRjkjgHoT06ZNdPpenJa6ZHAn2e1sxDtiVAGIJBG4vnkkGvK5bi8L
f2a6zDTNQVohJKhWSORkLghsY7EevNcN4e8BXN94glt9cnb7NHNLb4EjB2dVDKQCOQQc/QGt4xgn
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_45ddf0fc8191b.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAUABk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
/PvxgwHibUVz0k6e/FV/C/g3VPGV9LbaXb/aZkBcrkDj8enOBk8cjJFWvGMefEt+wwAzg4J6fKte
u3vg2b4M6X4OXXLTUrBdVtRqmoRj9y28yFYoWYkceX8+04w0nzZ2ivSlVlCkuXex9K5qKiu54edL
udL1Wa3vLaW1ntnZZIpkKsjLyVIPesyXBlOOh7k16bfxeH9b8bvNpQuF0e6nE1xYlgCACC6huQEJ
OATkj3xzmeP/AIW3Xhqwh1yyWS58P3crJFOVw0RydqSDkAkA4OSDg+lTCunJKWjZTl3OGQDdjOR6
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
LS4G8gY3Nlc7sAZzzxzRRzW6kXR//9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_Redee.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
880H5pJGktYzamJIZJQuVUMVG49+MDp6HvU6aPJZeIPsNykb7CrMw+6R6549Dn6U7whcyW/ieyiR
91teJJDJGcYbcpbB/EAfga6vXdJEdpCxyzKDEd/3iACAOOuRx+NccrNXOiKTZyN/aGTTXVYxlpiU
wmcbVHy4HoVH45rF1SFE0FVSM5MuSTEFyQuOhGen866iNnW7a3G1cHYH7AYPT1zxj61NqaR3K+XL
+9CAg54ZTnr9c1EZWepbiedW0XmxIsqRphNoOzk/4mnJZxx2pTHO7qeprob2wiM6G3kKx5ztJ3E8
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
LP/Z

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_irish%20mist.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAQgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+X1Z0cMrsrKcgg8g1ZuZA+JDNLLKx3Mznn8eT7/pVMk1KFZ5Nsfz5GemOcZNU0UaXh6xj1XVrOzd
pts8yw7YgC5LHGFBPWvRfF3wluvC0ck5N1qVm5ZM20fzwYwQW556EdMe4zWb8AdPv7/4oaGtooKW
0xuJi4yqIoOSQe5yAPcivb9Xmle81TSrnVn1K8kmdzE6CMW0ZY4VcckdOSTiues5R1TOihGEtJI+
V9V02bTb9rWZx5gxkcgrnsQehrPkDKTyRg17Z8SPDFxrOj3l/Daf8TDRisM4jHMkGODgdSuD+B9q
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
pSqBu6UUUgHdCcUUUUxn/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/anonymous/th_Mercia.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAhwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+jLoj/hHJ2JAH2Vjk/7lfKPhqOGPxbpDRxiNVv4iTzhV3jnJHTpX1OnhfSZIwJLYupA+VpXK/lnF
cv8AEGLRvC/hq4u7TR7fzg6RJI0J2RliBuJ9B/OgDtJdW0+xtYXvL22gVlUKZJQucj3NfKPxBMc3
jzX5YSJEe5lZWXBDcnocc0niHw/BPrkkjalFPcLIWY7iNyZ7E9vf0r2T4RNb3EGpWd7pKzxW5R45
1VZAVYEEDuRlSePWgDvvBV3bP4T0si4hIFugJDjsMGvG/wBoNlvfEun/AGBxcNHa7X8o7tp3E4OD
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

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4683dfaea1a9c.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUwBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+e25pp6V0lv4S1W7toZ7W38yORdwYOoH6mpG8F6qgzNHDEPV5kH9aqVWCdnJfeZJMzvCd39l1y2J
OEkbym+h4H64ra8W6KjTPPANsrctxw3/ANeuZvLeSwvGiJHmRMDkHI9QQa9B1RxcWscoYjcAQR3B
Ga4675ZqS6nbQtKLiy18MfH2meGtFGlX4mtpPMZ3k2bkYnucc9AB07V6Jous6NdWs9xbXsU0Sxkl
FlVxH7kduAOor571W03kk43diBVBrCaO08/GUDbCR2OK5ZYXmT5JtX76o05uXdXsW/EWpNq+vXd+
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
gMbjGM9KKKK522fX04Rtt3/M/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_4686dccbd0fbc.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgASgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8xtpI7C1SZ0aSaTIG4YAHTIqPU9RkmvkntpWXZGiqcYPCgHPrzmm6g73Ny8hjMcKLiJCP4RwK6n4
aeE4tVvG1HXYJxoNqR5zqCAzFgoXI7DOTjoB2yKZexlaFNqczAi1lmtESRZXVCyx7wVGW/h5OB9a
xrawF3KCsqBS2WBblV6kn8Oa+j/FMUHh2LSr2xtZG0rzPImtYVCwMh/i24wGzjB79DXlvxR+HVz4
X1GO+0pHfR7x/LXnm3ZuPLYk9OTgn8fUsSdzhHQ6jdlY3EMAyEaRuuOgHqabfaZNabQG84NnhOSM
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
Q9oxfPzMY1O4+vWimzEieQA+n8hRRco//9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/443/th_4a0c2bcd8f389.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAUQBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
jEzoqss24/3VXHTirWkabLf6nCq/L8wLtsPygc8n8KoxX0MlxDFJeRwbxgh1BIHr0/mRVyOeWD7S
FljuLd2Xym3fMxxyvp1/nXm8kkrpHXhKCqTTk7I3fiTLcXngq1mvUPm2VwDGCPmwoY7hnsf8K8MJ
ynTtXoej+IZbjU5dM1BpFjmlCpHjAQg5AJz0yAMe/WsHx3oR0jU2lt42WwufniOOFPdfwPT2xXpY
Oo4P2U92duPpqf72nt1OSJAf61YjOeKgZCMPjgnHv/nmpocMcZ+legup5h3vheZbbSISW+8S2AMn
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
/QRUrf6u1/3z/Wiip6kk8X+qT/dX+QoooqCj/9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/jpg
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/pics/thumbs/th_474afce6a4e8e.JPG

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcU
GBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgAWgBk
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
8NwM8YP1Q06COS5lEUUWWPQKuSaau4sAB+te7/CO1Xw9otxdyfZJNSvceSoIYooH8TDOMk9KIxud
Vaq4rY8UubSaCwjadMETOMMOc7RVURDHPJHH3fave9T1eLUNJeHxDY263GW7b8kdGAIyK8T1SPyd
UukVWRFkZQrfKQM9CO1TOwYeq+xSVQOg/wDHaRhk9B/3xU8WSe/PvTnU7uN4/KsrnqW0KxU9tv8A
3waFYj/nnx/sGpQH7s+fwpdjYzucj6Ci5Nio7Db/AAg+yUxMcdM/7tWSrA9Wx9BTCrHkF/0p3IaI
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
X61SbFuKyZbIYD60VE3WigZ//9k=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/images/ornament_left.gif

R0lGODlhTQAWALMBAI+Pj+rq6tLS0sPDw9vb27Ozs7q6usrKyuTk5Kurq/j4+PT09P39/aCgoPDw
8P///yH5BAEAAAEALAAAAABNABYAAAT/MMhJq7046827pwSGEMIwhF+qdgMCDkWSFDEAGGuuT4hh
JA1Ao5EwCFwSQgO3a6oEBlujcIDJqJICyqkiDQwFw+BAQGYIheUWmiAPuJ9B0Cal0xunTG+YDxAG
QFtwGAVCRoI8JGk2CX0WAjEzBV8ACQKDF3IGZh4IgECHHgcGB5xcBI0eBFVkFSVzQiZkLpwIAkFL
YwcCvL29BCQCiBMHWhwEP2E+kroCozRjJj7TYDRiXzQx2srWPibCFyXH32VeM6QJw5gekBtyhmBA
VEhj6zoJGj9zQ0a1MfY5DmioJ8FWpBkygjABmOKIn4euMjirconhijcIBFaxyLGCgTIfGREU6EjS
D44Qf0qSNCJBoEqSZUy9nEkTTgQAOw==

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://thewhippetarchives.net/images/ornament_right.gif

R0lGODlhTQAWALMBAI+Pj+rq6tLS0sPDw9vb27Ozs7q6usrKyuTk5Kurq/j4+PT09P39/aCgoPDw
8P///yH5BAEAAAEALAAAAABNABYAAAT/MMhJq7046827/+CGIERonuchCQbqvthQlkYJ329BGmOL
/6aB6oAIDIAwgfAgyDQrswDiiTQZAI1EoqDdCoqSwzGjqpq2YMnU0GgAsAkfJmE2idWHQrZgYGN5
GgVUdR0ECQcGXAMCBCRKMhyLFwSPfYl8l1tbBXwDA5eYlgaeYn1CAgdinHF9XDUcBAVlFpSMtQK4
uailbg1fFEUkYgNubw0GgwEEYgc2kQnOOAiIsxrCxFoDaR4IbGN1AgkAo6teGAQD4n+MGGtuBYQU
BA0FkMrExxroxW/G/cbf4k2QcSAOFQJsCkS7MKWUqWYCz8ELkEdLPUTFkEX8wcbZmgRtGuD02bYR
xRUAm7jUG4QgYEkXqIQ0OveyJqEIADs=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/styles/basic.css

BODY {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #f7f7f9; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Verdana, Arial, =
Helvetica, sans-serif; COLOR: #333333; FONT-SIZE: 12px; PADDING-TOP: 0px
}
TABLE {
=09
}
.newstable {
	BORDER-BOTTOM: #aaaaaa 1px solid; BORDER-LEFT: #aaaaaa 1px solid; =
BACKGROUND-COLOR: #e0e0e0; BORDER-TOP: #aaaaaa 1px solid; BORDER-RIGHT: =
#aaaaaa 1px solid
}
TD {
	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; HEIGHT: 20px; =
FONT-SIZE: 12px
}
#doglist {
	BORDER-BOTTOM: #e0e0e0 2px solid; BORDER-LEFT: #e0e0e0 2px solid; =
WIDTH: 95%; BORDER-TOP: #e0e0e0 2px solid; BORDER-RIGHT: #e0e0e0 2px =
solid
}
#userlist {
	BORDER-BOTTOM: #e0e0e0 2px solid; BORDER-LEFT: #e0e0e0 2px solid; =
WIDTH: 95%; BORDER-TOP: #e0e0e0 2px solid; BORDER-RIGHT: #e0e0e0 2px =
solid
}
#categorylist {
	BORDER-BOTTOM: #aaa 1px solid; BORDER-LEFT: #aaa 1px solid; HEIGHT: =
460px; BORDER-TOP: #aaa 1px solid; BORDER-RIGHT: #aaa 1px solid
}
#doglist TR {
	BACKGROUND-COLOR: #e0e0e0
}
#userlist TR {
	BACKGROUND-COLOR: #e0e0e0
}
#userlist TD {
	FONT-SIZE: 11px
}
#doglist TH {
	BACKGROUND-COLOR: #aaa; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; HEIGHT: 20px; FONT-SIZE: 12px
}
#pedigree TH {
	BACKGROUND-COLOR: #aaa; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; HEIGHT: 20px; FONT-SIZE: 12px
}
#categorylist TH {
	BACKGROUND-COLOR: #aaa; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; HEIGHT: 20px; FONT-SIZE: 12px
}
#standard_table TH {
	BACKGROUND-COLOR: #aaa; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; HEIGHT: 20px; FONT-SIZE: 12px
}
#userlist TH {
	BACKGROUND-COLOR: #aaa; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; HEIGHT: 20px; FONT-SIZE: 12px
}
#userlist TH {
	BACKGROUND-COLOR: #ccc
}
#doglist TH {
	TEXT-ALIGN: left
}
#categorylist TH {
	TEXT-ALIGN: left
}
#doglist TH {
	WHITE-SPACE: nowrap
}
#doglist .tablesubheadline {
	FONT-STYLE: italic; COLOR: #666; FONT-WEIGHT: bold
}
#printable_pedigree {
=09
}
#printable_pedigree TH {
	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; HEIGHT: 20px; =
FONT-SIZE: 12px
}
#printable_pedigree TD {
	TEXT-ALIGN: center
}
#pedigree {
	BORDER-BOTTOM: #aaa 1px double; BORDER-LEFT: #aaa 1px double; =
BORDER-TOP: #aaa 1px double; BORDER-RIGHT: #aaa 1px double
}
#pedigree TR {
	BACKGROUND-COLOR: #e0e0e0
}
#pedigree TD {
	TEXT-ALIGN: center
}
#standard_table {
	BORDER-BOTTOM: #aaa 1px double; BORDER-LEFT: #aaa 1px double; =
BORDER-TOP: #aaa 1px double; BORDER-RIGHT: #aaa 1px double
}
#standard_table TR {
	BACKGROUND-COLOR: #e0e0e0
}
#standard_table TD {
	TEXT-ALIGN: left; PADDING-BOTTOM: 10px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; FONT-SIZE: 10px; PADDING-TOP: 10px
}
H2 {
	PADDING-BOTTOM: 5px; FONT-STYLE: normal; FONT-FAMILY: Verdana, Arial, =
Helvetica, sans-serif; COLOR: #aaa; FONT-SIZE: 20px; FONT-WEIGHT: =
normal; PADDING-TOP: 5px
}
H3 {
	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; COLOR: #333333; =
FONT-SIZE: 16px
}
H4 {
	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; COLOR: #333333; =
FONT-SIZE: 14px; PADDING-TOP: 10px
}
H5 {
	MARGIN-TOP: 25px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
MARGIN-BOTTOM: 0px; COLOR: #333333; FONT-SIZE: 12px
}
SELECT {
	BORDER-BOTTOM: #aaa 1px solid; BORDER-LEFT: #aaa 1px solid; =
BACKGROUND-COLOR: #e7e7e7; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; COLOR: #333333; FONT-SIZE: 10px; BORDER-TOP: #aaa 1px solid; =
BORDER-RIGHT: #aaa 1px solid
}
INPUT {
	BORDER-BOTTOM: #cc9966 1px solid; BORDER-LEFT: #cc9966 1px solid; =
BACKGROUND-COLOR: #e7e7e7; PADDING-LEFT: 2px; FONT-FAMILY: Verdana, =
Arial, Helvetica, sans-serif; COLOR: #333333; FONT-SIZE: 10px; =
BORDER-TOP: #cc9966 1px solid; BORDER-RIGHT: #cc9966 1px solid
}
TEXTAREA {
	BORDER-BOTTOM: #cc9966 1px solid; BORDER-LEFT: #cc9966 1px solid; =
BACKGROUND-COLOR: #e7e7e7; PADDING-LEFT: 2px; FONT-FAMILY: Verdana, =
Arial, Helvetica, sans-serif; COLOR: #333333; FONT-SIZE: 10px; =
BORDER-TOP: #cc9966 1px solid; BORDER-RIGHT: #cc9966 1px solid
}
INPUT.radio {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BACKGROUND-COLOR: #eeeeee; =
PADDING-LEFT: 5px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
COLOR: #333333; FONT-SIZE: 10px; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
INPUT[readonly] {
	BACKGROUND-COLOR: #eeeeee; COLOR: #aaa
}
TEXTAREA[readonly] {
	BACKGROUND-COLOR: #eeeeee; COLOR: #aaa
}
.button {
	BORDER-BOTTOM: #cc9966 2px solid; BORDER-LEFT: #cc9966 1px solid; =
BACKGROUND-COLOR: #e7e7e7; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; COLOR: #333333; FONT-SIZE: 10px; BORDER-TOP: #cc9966 1px =
solid; BORDER-RIGHT: #cc9966 2px solid
}
[disabled].button {
	BACKGROUND-COLOR: #eeeeee; COLOR: #aaa
}
INPUT[disabled] {
	BACKGROUND-COLOR: #eeeeee; COLOR: #aaa
}
LABEL {
	FONT-SIZE: 10px
}
.header {
	BORDER-BOTTOM: #bbb 1px solid; POSITION: relative; BACKGROUND-COLOR: =
#808080; MARGIN-LEFT: 150px
}
.navarea {
	POSITION: relative; PADDING-BOTTOM: 5px; MARGIN: 0px; PADDING-LEFT: =
5px; PADDING-RIGHT: 5px; WHITE-SPACE: nowrap; COLOR: #aaaaaa; CLEAR: =
both; PADDING-TOP: 15px
}
.selectednavitem {
	BORDER-BOTTOM: #aaa 1px solid; POSITION: relative; BORDER-LEFT: #aaa =
1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #dfd4be; =
PADDING-LEFT: 10px; PADDING-RIGHT: 5px; BORDER-TOP: #aaa 1px solid; =
FONT-WEIGHT: bold; BORDER-RIGHT: #aaa 1px solid; PADDING-TOP: 10px
}
.navitem {
	PADDING-LEFT: 5px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
WHITE-SPACE: nowrap; FONT-SIZE: 10px
}
.separator {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: =
#aaaaaa; PADDING-TOP: 5px
}
UNKNOWN {
	MARGIN: 0px
}
.content {
	PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 12px; =
PADDING-TOP: 10px
}
.footer {
	PADDING-BOTTOM: 5px; BACKGROUND-COLOR: #e0e0e0; PADDING-LEFT: 20px; =
PADDING-RIGHT: 20px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
CLEAR: both; FONT-SIZE: 9px; PADDING-TOP: 40px
}
A:link {
	COLOR: #cc9966; TEXT-DECORATION: none
}
A:visited {
	COLOR: #cc9966; TEXT-DECORATION: none
}
A:active {
	COLOR: #cc9966; TEXT-DECORATION: none
}
A:hover {
	COLOR: #ff9900; TEXT-DECORATION: none
}
A.a-pict:link {
	BORDER-BOTTOM: #cc9966 thin; BORDER-LEFT: #cc9966 thin; BORDER-TOP: =
#cc9966 thin; BORDER-RIGHT: #cc9966 thin
}
A.a-pict:visited {
	BORDER-BOTTOM: #cc9966 thin; BORDER-LEFT: #cc9966 thin; BORDER-TOP: =
#cc9966 thin; BORDER-RIGHT: #cc9966 thin
}
A.a-pict:active {
	BORDER-BOTTOM: #cc9966 thin; BORDER-LEFT: #cc9966 thin; BORDER-TOP: =
#cc9966 thin; BORDER-RIGHT: #cc9966 thin
}
A.a-pict:hover {
	BORDER-BOTTOM: #cc9966; BORDER-LEFT: #cc9966; BORDER-TOP: #cc9966; =
BORDER-RIGHT: #cc9966
}
A IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
#sireDiv {
	POSITION: relative; MARGIN: 1em; WIDTH: 40%
}
#damDiv {
	POSITION: relative; MARGIN: 1em; WIDTH: 40%
}
#kennelDiv {
	POSITION: relative; MARGIN: 1em; WIDTH: 40%
}
#sireInput {
	POSITION: relative; WIDTH: 100%; DISPLAY: block
}
#damInput {
	POSITION: relative; WIDTH: 100%; DISPLAY: block
}
#kennelInput {
	POSITION: relative; WIDTH: 100%; DISPLAY: block
}
#sireContainer {
	BORDER-BOTTOM: #777 1px solid; POSITION: relative; BORDER-LEFT: #777 =
1px solid; BOTTOM: 4px; DISPLAY: none; BACKGROUND: #eee; FONT-SIZE: 85%; =
OVERFLOW: hidden; BORDER-TOP: #777 1px solid; RIGHT: 4px; BORDER-RIGHT: =
#777 1px solid
}
#damContainer {
	BORDER-BOTTOM: #777 1px solid; POSITION: relative; BORDER-LEFT: #777 =
1px solid; BOTTOM: 4px; DISPLAY: none; BACKGROUND: #eee; FONT-SIZE: 85%; =
OVERFLOW: hidden; BORDER-TOP: #777 1px solid; RIGHT: 4px; BORDER-RIGHT: =
#777 1px solid
}
#kennelContainer {
	BORDER-BOTTOM: #777 1px solid; POSITION: relative; BORDER-LEFT: #777 =
1px solid; BOTTOM: 4px; DISPLAY: none; BACKGROUND: #eee; FONT-SIZE: 85%; =
OVERFLOW: hidden; BORDER-TOP: #777 1px solid; RIGHT: 4px; BORDER-RIGHT: =
#777 1px solid
}
#sireContainer .yui-content {
	Z-INDEX: 9050; BORDER-BOTTOM: #404040 1px solid; POSITION: absolute; =
BORDER-LEFT: #404040 1px solid; WIDTH: 100%; BACKGROUND: #fff; OVERFLOW: =
hidden; BORDER-TOP: #404040 1px solid; BORDER-RIGHT: #404040 1px solid
}
#damContainer .yui-content {
	Z-INDEX: 9050; BORDER-BOTTOM: #404040 1px solid; POSITION: absolute; =
BORDER-LEFT: #404040 1px solid; WIDTH: 100%; BACKGROUND: #fff; OVERFLOW: =
hidden; BORDER-TOP: #404040 1px solid; BORDER-RIGHT: #404040 1px solid
}
#kennelContainer .yui-content {
	Z-INDEX: 9050; BORDER-BOTTOM: #404040 1px solid; POSITION: absolute; =
BORDER-LEFT: #404040 1px solid; WIDTH: 100%; BACKGROUND: #fff; OVERFLOW: =
hidden; BORDER-TOP: #404040 1px solid; BORDER-RIGHT: #404040 1px solid
}
#sireContainer UL {
	POSITION: relative; PADDING-BOTTOM: 5px; LIST-STYLE-TYPE: none; =
PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; PADDING-TOP: 5px
}
#damContainer UL {
	POSITION: relative; PADDING-BOTTOM: 5px; LIST-STYLE-TYPE: none; =
PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; PADDING-TOP: 5px
}
#kennelContainer UL {
	POSITION: relative; PADDING-BOTTOM: 5px; LIST-STYLE-TYPE: none; =
PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; PADDING-TOP: 5px
}
#sireContainer LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; DISPLAY: =
list-item; WHITE-SPACE: nowrap; CURSOR: default; PADDING-TOP: 0px
}
#damContainer LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; DISPLAY: =
list-item; WHITE-SPACE: nowrap; CURSOR: default; PADDING-TOP: 0px
}
#kennelContainer LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; DISPLAY: =
list-item; WHITE-SPACE: nowrap; CURSOR: default; PADDING-TOP: 0px
}
#sireContainer LI.highlight {
	BACKGROUND: #ddd
}
#damContainer LI.highlight {
	BACKGROUND: #ddd
}
#kennelContainer LI.highlight {
	BACKGROUND: #ddd
}
.suckertreemenu UL {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.suckertreemenu UL LI {
	POSITION: relative; BACKGROUND-COLOR: #e7e7e7; DISPLAY: inline; FLOAT: =
left
}
.suckertreemenu UL LI A {
	BORDER-BOTTOM: #aaaaaa 1px dotted; BORDER-LEFT: #aaaaaa 0px dotted; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; DISPLAY: =
block; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; WHITE-SPACE: =
nowrap; FONT-SIZE: 12px; BORDER-TOP: #aaaaaa 1px dotted; BORDER-RIGHT: =
#aaaaaa 1px dotted; TEXT-DECORATION: none; PADDING-TOP: 5px
}
.suckertreemenu UL LI UL {
	POSITION: absolute; DISPLAY: block; VISIBILITY: hidden; TOP: 1em; LEFT: =
0px
}
.suckertreemenu UL LI UL LI {
	DISPLAY: list-item; FLOAT: none
}
.suckertreemenu UL LI UL LI UL {
	TOP: 0px; LEFT: 159px
}
.suckertreemenu UL LI UL LI A {
	BORDER-BOTTOM: #ccc 1px dotted; BORDER-LEFT: #ccc 1px dotted; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 160px; PADDING-RIGHT: =
5px; DISPLAY: block; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
WHITE-SPACE: nowrap; FONT-SIZE: 12px; BORDER-TOP: #ccc 1px dotted; =
BORDER-RIGHT: #ccc 1px dotted; TEXT-DECORATION: none; PADDING-TOP: 5px
}
.suckertreemenu UL LI A:hover {
	BACKGROUND-COLOR: #cc9966; COLOR: #e0e0e0
}
.suckertreemenu .mainfoldericon {
=09
}
.suckertreemenu .subfoldericon {
	BACKGROUND: url(../images/sort_desc_active.gif) no-repeat right center
}
* HTML P#iepara {
	PADDING-TOP: 1em
}
.overlay {
	BORDER-BOTTOM: black 1px dotted; BORDER-LEFT: black 1px dotted; =
PADDING-BOTTOM: 5px; MARGIN: 10px; PADDING-LEFT: 5px; PADDING-RIGHT: =
5px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 1px dotted; =
PADDING-TOP: 5px
}
.overlay .hd {
	BORDER-BOTTOM: red 1px solid; BORDER-LEFT: red 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BORDER-TOP: =
red 1px solid; BORDER-RIGHT: red 1px solid; PADDING-TOP: 5px
}
.overlay .bd {
	BORDER-BOTTOM: green 1px solid; BORDER-LEFT: green 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BORDER-TOP: =
green 1px solid; BORDER-RIGHT: green 1px solid; PADDING-TOP: 5px
}
.overlay .ft {
	BORDER-BOTTOM: blue 1px solid; BORDER-LEFT: blue 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BORDER-TOP: =
blue 1px solid; BORDER-RIGHT: blue 1px solid; PADDING-TOP: 5px
}
.expand {
	DISPLAY: block; COLOR: #cc9966; FONT-SIZE: 10pt; CURSOR: pointer
}
.changelog_div {
	BORDER-BOTTOM: #aaa 1px solid; BORDER-LEFT: #aaa 1px solid; =
WHITE-SPACE: nowrap; HEIGHT: 100px; FONT-SIZE: 10px; OVERFLOW: auto; =
BORDER-TOP: #aaa 1px solid; BORDER-RIGHT: #aaa 1px solid
}
.TWA_Admin {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; FONT: bold =
11px Verdana, Arial, Helvetica, sans-serif; BACKGROUND: #ffe28a; COLOR: =
#000; PADDING-TOP: 1px
}
.TWA_Admin_small {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; FONT: bold =
11px Verdana, Arial, Helvetica, sans-serif; BACKGROUND: #ffe28a; COLOR: =
#000; PADDING-TOP: 1px
}
.TWA_Admin_small {
	LINE-HEIGHT: normal; FONT-VARIANT: normal; FONT-STYLE: normal; =
FONT-SIZE: 8px; VERTICAL-ALIGN: middle; FONT-WEIGHT: normal
}

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/styles/yui/container.css

.overlay {
	POSITION: absolute; DISPLAY: block
}
.tt {
	BORDER-BOTTOM: #fcc90d 1px solid; POSITION: absolute; BORDER-LEFT: =
#fcc90d 1px solid; PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #fdffb4; =
PADDING-LEFT: 2px; WIDTH: auto; PADDING-RIGHT: 2px; FONT: 100% =
sans-serif; VISIBILITY: hidden; COLOR: #333; BORDER-TOP: #fcc90d 1px =
solid; BORDER-RIGHT: #fcc90d 1px solid; PADDING-TOP: 2px
}
* HTML BODY.masked SELECT {
	VISIBILITY: hidden
}
* HTML DIV.panel-container SELECT {
	VISIBILITY: inherit
}
* HTML DIV.drag SELECT {
	VISIBILITY: hidden
}
* HTML DIV.hide-select SELECT {
	VISIBILITY: hidden
}
.mask {
	Z-INDEX: 0; POSITION: absolute; FILTER: alpha(opacity=3D50); =
BACKGROUND-COLOR: #222; DISPLAY: none; TOP: 0px; LEFT: 0px; =
-moz-opacity: 0.5; opacity: .50
}
[id].mask {
	POSITION: fixed
}
.hide-scrollbars * {
	OVERFLOW: hidden
}
.hide-scrollbars TEXTAREA {
	DISPLAY: none; OVERFLOW: hidden
}
.hide-scrollbars SELECT {
	DISPLAY: none; OVERFLOW: hidden
}
.show-scrollbars TEXTAREA {
	OVERFLOW: visible
}
.show-scrollbars SELECT {
	OVERFLOW: visible
}
.panel-container {
	Z-INDEX: 6; POSITION: absolute; BACKGROUND-COLOR: transparent; WIDTH: =
auto; VISIBILITY: hidden; OVERFLOW: visible
}
.matte {
	PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 3px; =
PADDING-RIGHT: 3px; PADDING-TOP: 3px
}
.matte .underlay {
	DISPLAY: none
}
.shadow {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: transparent; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.shadow .underlay {
	Z-INDEX: 0; POSITION: absolute; FILTER: alpha(opacity=3D70); =
BACKGROUND-COLOR: #e0e0e0; WIDTH: 100%; HEIGHT: 100%; VISIBILITY: =
inherit; TOP: 3px; LEFT: 3px; -moz-opacity: 0.7; opacity: .70
}
.panel {
	Z-INDEX: 1; BORDER-BOTTOM: #aaa 1px solid; POSITION: relative; =
BORDER-LEFT: #aaa 1px solid; BACKGROUND-COLOR: #eeeeee; BORDER-COLLAPSE: =
separate; FONT: 1em Arial; VISIBILITY: hidden; OVERFLOW: auto; =
BORDER-TOP: #aaa 1px solid; TOP: 0px; BORDER-RIGHT: #aaa 1px solid; =
LEFT: 0px
}
.panel .hd {
	BORDER-BOTTOM: #333333 1px solid; BORDER-LEFT: #eeeeee 1px solid; =
PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #aaaaaa; PADDING-LEFT: 2px; =
PADDING-RIGHT: 2px; HEIGHT: 20px; COLOR: #eeeeee; FONT-SIZE: 1em; =
OVERFLOW: hidden; BORDER-TOP: #eeeeee 1px solid; FONT-WEIGHT: bold; =
BORDER-RIGHT: #eeeeee 1px solid; PADDING-TOP: 2px
}
.panel .bd {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 4px; OVERFLOW: =
hidden; PADDING-TOP: 4px
}
.panel .bd P {
	MARGIN: 0px 0px 1em
}
.panel .close {
	Z-INDEX: 6; POSITION: absolute; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: 12px; PADDING-RIGHT: 0px; BACKGROUND-REPEAT: =
no-repeat; HEIGHT: 12px; VISIBILITY: inherit; TOP: 5px; CURSOR: pointer; =
RIGHT: 4px; PADDING-TOP: 0px
}
.panel .nonsecure {
	BACKGROUND-IMAGE: url(close.gif)
}
.panel .secure {
	BACKGROUND-IMAGE: =
url(https://a248.e.akamai.net/sec.yimg.com/i/nt/ic/ut/alt3/close12_1.gif)=

}
.panel .ft {
	PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 4px; OVERFLOW: =
hidden; PADDING-TOP: 4px
}
.simple-dialog .bd .icon {
	WIDTH: 16px; BACKGROUND-REPEAT: no-repeat; FLOAT: left; HEIGHT: 16px; =
MARGIN-RIGHT: 10px
}
.dialog .ft {
	TEXT-ALIGN: right; PADDING-BOTTOM: 5px; PADDING-RIGHT: 5px
}
.simple-dialog .ft {
	TEXT-ALIGN: right; PADDING-BOTTOM: 5px; PADDING-RIGHT: 5px
}
.dialog FORM {
	MARGIN: 0px
}
.simple-dialog FORM {
	MARGIN: 0px
}
.button-group BUTTON {
	BORDER-BOTTOM: #797979 2px solid; BORDER-LEFT: #fff 2px solid; =
PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #e4e4e4; MARGIN: 2px; =
PADDING-LEFT: 2px; PADDING-RIGHT: 2px; FONT: 100 76% verdana; COLOR: =
#333; VERTICAL-ALIGN: middle; BORDER-TOP: #fff 2px solid; CURSOR: hand; =
BORDER-RIGHT: #797979 2px solid; TEXT-DECORATION: none; PADDING-TOP: 2px
}
.button-group BUTTON.default {
	FONT-WEIGHT: bold
}
.button-group BUTTON:hover {
	BORDER-BOTTOM: #90a029 2px solid; BORDER-LEFT: #fff 2px solid; =
BACKGROUND-COLOR: #ebf09e; BORDER-TOP: #fff 2px solid; BORDER-RIGHT: =
#90a029 2px solid
}
.button-group BUTTON.hover {
	BORDER-BOTTOM: #90a029 2px solid; BORDER-LEFT: #fff 2px solid; =
BACKGROUND-COLOR: #ebf09e; BORDER-TOP: #fff 2px solid; BORDER-RIGHT: =
#90a029 2px solid
}
.button-group BUTTON:active {
	BORDER-BOTTOM: #e4e4e4 2px solid; BORDER-LEFT: #333 2px solid; =
BACKGROUND-COLOR: #bbb; BORDER-TOP: #333 2px solid; BORDER-RIGHT: =
#e4e4e4 2px solid
}

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/yahoo.js

/*                                                                       =
                                                                         =
     =20
Copyright (c) 2006, Yahoo! Inc. All rights reserved.                     =
                                                                         =
     =20
Code licensed under the BSD License:                                     =
                                                                         =
     =20
http://developer.yahoo.net/yui/license.txt                               =
                                                                         =
     =20
version: 0.10.0                                                          =
                                                                         =
     =20
*/=20

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

/**
 * The Yahoo global namespace
 * @constructor
 */
var YAHOO =3D window.YAHOO || {};

/**
 * Returns the namespace specified and creates it if it doesn't exist
 *
 * YAHOO.namespace("property.package");
 * YAHOO.namespace("YAHOO.property.package");
 *
 * Either of the above would create YAHOO.property, then
 * YAHOO.property.package
 *
 * @param  {String} sNameSpace String representation of the desired=20
 *                             namespace
 * @return {Object}            A reference to the namespace object
 */
YAHOO.namespace =3D function( sNameSpace ) {

    if (!sNameSpace || !sNameSpace.length) {
        return null;
    }

    var levels =3D sNameSpace.split(".");

    var currentNS =3D YAHOO;

    // YAHOO is implied, so it is ignored if it is included
    for (var i=3D(levels[0] =3D=3D "YAHOO") ? 1 : 0; i<levels.length; =
++i) {
        currentNS[levels[i]] =3D currentNS[levels[i]] || {};
        currentNS =3D currentNS[levels[i]];
    }

    return currentNS;
};

/**
 * Global log method.
 */
YAHOO.log =3D function(sMsg,sCategory) {
    if(YAHOO.widget.Logger) {
        YAHOO.widget.Logger.log(null, sMsg, sCategory);
    } else {
        return false;
    }
};

YAHOO.namespace("util");
YAHOO.namespace("widget");
YAHOO.namespace("example");

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/dom.js

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
*/

/**
 * @class Provides helper methods for DOM elements.
 */
YAHOO.util.Dom =3D function() {
   var ua =3D navigator.userAgent.toLowerCase();
   var isOpera =3D (ua.indexOf('opera') !=3D -1);
   var isIE =3D (ua.indexOf('msie') !=3D -1 && !isOpera); // not opera =
spoof
   var id_counter =3D 0;
  =20
   return {
      /**
       * Returns an HTMLElement reference
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID for getting a DOM reference, an actual DOM reference, or an Array =
of IDs and/or HTMLElements.
       * @return {HTMLElement/Array} A DOM reference to an HTML element =
or an array of HTMLElements.
       */
      get: function(el) {
         if (typeof el !=3D 'string' && !(el instanceof Array) )
         { // assuming HTMLElement or HTMLCollection, so pass back as is
            return el;
         }
        =20
         if (typeof el =3D=3D 'string')=20
         { // ID
            return document.getElementById(el);
         }
         else
         { // array of ID's and/or elements
            var collection =3D [];
            for (var i =3D 0, len =3D el.length; i < len; ++i)
            {
               collection[collection.length] =3D this.get(el[i]);
            }
           =20
            return collection;
         }

         return null; // safety, should never happen
      },
  =20
      /**
       * Normalizes currentStyle and ComputedStyle.
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
       * @param {String} property The style property whose value is =
returned.
       * @return {String/Array} The current value of the style property =
for the element(s).
       */
      getStyle: function(el, property) {
         var f =3D function(el) {
            var value =3D null;
            var dv =3D document.defaultView;
           =20
            if (property =3D=3D 'opacity' && el.filters)=20
            {// IE opacity
               value =3D 1;
               try {
                  value =3D =
el.filters.item('DXImageTransform.Microsoft.Alpha').opacity / 100;
               } catch(e) {
                  try {
                     value =3D el.filters.item('alpha').opacity / 100;
                  } catch(e) {}
               }
            }
            else if (el.style[property])=20
            {
               value =3D el.style[property];
            }
            else if (el.currentStyle && el.currentStyle[property]) {
               value =3D el.currentStyle[property];
            }
            else if ( dv && dv.getComputedStyle )
            {  // convert camelCase to hyphen-case
              =20
               var converted =3D '';
               for(var i =3D 0, len =3D property.length;i < len; ++i) {
                  if (property.charAt(i) =3D=3D =
property.charAt(i).toUpperCase())=20
                  {
                     converted =3D converted + '-' + =
property.charAt(i).toLowerCase();
                  } else {
                     converted =3D converted + property.charAt(i);
                  }
               }
              =20
               if (dv.getComputedStyle(el, '') && =
dv.getComputedStyle(el, '').getPropertyValue(converted)) {
                  value =3D dv.getComputedStyle(el, =
'').getPropertyValue(converted);
               }
            }
     =20
            return value;
         };
        =20
         return this.batch(el, f, this, true);
      },
  =20
      /**
       * Wrapper for setting style properties of HTMLElements.  =
Normalizes "opacity" across modern browsers.
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
       * @param {String} property The style property to be set.
       * @param {String} val The value to apply to the given property.
       */
      setStyle: function(el, property, val) {
         var f =3D function(el) {
            switch(property) {
               case 'opacity' :
                  if (isIE && typeof el.style.filter =3D=3D 'string') { =
// in case not appended
                     el.style.filter =3D 'alpha(opacity=3D' + val * 100 =
+ ')';
                    =20
                     if (!el.currentStyle || !el.currentStyle.hasLayout) =
{
                        el.style.zoom =3D 1; // when no layout or cant =
tell
                     }
                  } else {
                     el.style.opacity =3D val;
                     el.style['-moz-opacity'] =3D val;
                     el.style['-khtml-opacity'] =3D val;
                  }

                  break;
               default :
                  el.style[property] =3D val;
            }
           =20
         };
        =20
         this.batch(el, f, this, true);
      },
     =20
      /**
       * Gets the current position of an element based on page =
coordinates.  Element must be part of the DOM tree to have page =
coordinates (display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
       @ return {Array} The XY position of the element(s)
       */
      getXY: function(el) {
         var f =3D function(el) {
  =20
         // has to be part of document to have pageXY
            if (el.parentNode =3D=3D=3D null || this.getStyle(el, =
'display') =3D=3D 'none') {
               return false;
            }
           =20
            var parent =3D null;
            var pos =3D [];
            var box;
           =20
            if (el.getBoundingClientRect) { // IE
               box =3D el.getBoundingClientRect();
               var scrollTop =3D =
Math.max(document.documentElement.scrollTop, document.body.scrollTop);
               var scrollLeft =3D =
Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
              =20
               return [box.left + scrollLeft, box.top + scrollTop];
            }
            else if (document.getBoxObjectFor) { // gecko
               box =3D document.getBoxObjectFor(el);
              =20
               var borderLeft =3D parseInt(this.getStyle(el, =
'borderLeftWidth'));
               var borderTop =3D parseInt(this.getStyle(el, =
'borderTopWidth'));
              =20
               pos =3D [box.x - borderLeft, box.y - borderTop];
            }
            else { // safari & opera
               pos =3D [el.offsetLeft, el.offsetTop];
               parent =3D el.offsetParent;
               if (parent !=3D el) {
                  while (parent) {
                     pos[0] +=3D parent.offsetLeft;
                     pos[1] +=3D parent.offsetTop;
                     parent =3D parent.offsetParent;
                  }
               }
               if (
                  ua.indexOf('opera') !=3D -1=20
                  || ( ua.indexOf('safari') !=3D -1 && this.getStyle(el, =
'position') =3D=3D 'absolute' )=20
               ) {
                  pos[0] -=3D document.body.offsetLeft;
                  pos[1] -=3D document.body.offsetTop;
               }=20
            }
           =20
            if (el.parentNode) { parent =3D el.parentNode; }
            else { parent =3D null; }
     =20
            while (parent && parent.tagName !=3D 'BODY' && =
parent.tagName !=3D 'HTML')=20
            { // account for any scrolled ancestors
               pos[0] -=3D parent.scrollLeft;
               pos[1] -=3D parent.scrollTop;
     =20
               if (parent.parentNode) { parent =3D parent.parentNode; }=20
               else { parent =3D null; }
            }
     =20
            return pos;
         };
        =20
         return this.batch(el, f, this, true);
      },
     =20
      /**
       * Gets the current X position of an element based on page =
coordinates.  The element must be part of the DOM tree to have page =
coordinates (display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
       * @return {String/Array} The X position of the element(s)
       */
      getX: function(el) {
         return this.getXY(el)[0];
      },
     =20
      /**
       * Gets the current Y position of an element based on page =
coordinates.  Element must be part of the DOM tree to have page =
coordinates (display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
       * @return {String/Array} The Y position of the element(s)
       */
      getY: function(el) {
         return this.getXY(el)[1];
      },
     =20
      /**
       * Set the position of an html element in page coordinates, =
regardless of how the element is positioned.
       * The element(s) must be part of the DOM tree to have page =
coordinates (display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
       * @param {Array} pos Contains X & Y values for new position =
(coordinates are page-based)
       * @param {Boolean} noRetry By default we try and set the position =
a second time if the first fails
       */
      setXY: function(el, pos, noRetry) {
         var f =3D function(el) {
  =20
            var style_pos =3D this.getStyle(el, 'position');
            if (style_pos =3D=3D 'static') { // default to relative
               this.setStyle(el, 'position', 'relative');
               style_pos =3D 'relative';
            }
           =20
            var pageXY =3D YAHOO.util.Dom.getXY(el);
            if (pageXY =3D=3D=3D false) { return false; } // has to be =
part of doc to have pageXY
           =20
            var delta =3D [
               parseInt( YAHOO.util.Dom.getStyle(el, 'left'), 10 ),
               parseInt( YAHOO.util.Dom.getStyle(el, 'top'), 10 )
            ];
        =20
            if ( isNaN(delta[0]) ) // defaults to 'auto'
            {=20
               delta[0] =3D (style_pos =3D=3D 'relative') ? 0 : =
el.offsetLeft;
            }=20
            if ( isNaN(delta[1]) ) // defaults to 'auto'
            {=20
               delta[1] =3D (style_pos =3D=3D 'relative') ? 0 : =
el.offsetTop;
            }=20
     =20
            if (pos[0] !=3D=3D null) { el.style.left =3D pos[0] - =
pageXY[0] + delta[0] + 'px'; }
            if (pos[1] !=3D=3D null) { el.style.top =3D pos[1] - =
pageXY[1] + delta[1] + 'px'; }
     =20
            var newXY =3D this.getXY(el);
     =20
            // if retry is true, try one more time if we miss
            if (!noRetry && (newXY[0] !=3D pos[0] || newXY[1] !=3D =
pos[1]) ) {
               var retry =3D function() { YAHOO.util.Dom.setXY(el, pos, =
true); };
               setTimeout(retry, 0); // "delay" for IE resize timing =
issue
            }
         };
        =20
         this.batch(el, f, this, true);
      },
     =20
      /**
       * Set the X position of an html element in page coordinates, =
regardless of how the element is positioned.
       * The element must be part of the DOM tree to have page =
coordinates (display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
       * @param {Int} x to use as the X coordinate for the element(s).
       */
      setX: function(el, x) {
         this.setXY(el, [x, null]);
      },
     =20
      /**
       * Set the Y position of an html element in page coordinates, =
regardless of how the element is positioned.
       * The element must be part of the DOM tree to have page =
coordinates (display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
       * @param {Int} x to use as the Y coordinate for the element(s).
       */
      setY: function(el, y) {
         this.setXY(el, [null, y]);
      },
     =20
      /**
       * Returns the region position of the given element.
       * The element must be part of the DOM tree to have a region =
(display:none or elements not appended return false).
       * @param {String/HTMLElement/Array} el Accepts a string to use as =
an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
       * @return {Region/Array} A Region or array of Region instances =
containing "top, left, bottom, right" member data.
       */
      getRegion: function(el) {
         var f =3D function(el) {
            return new YAHOO.util.Region.getRegion(el);
         };
        =20
         return this.batch(el, f, this, true);
      },
     =20
      /**
       * Returns the width of the client (viewport).
       * Now using getViewportWidth.  This interface left intact for =
back compat.
       * @return {Int} The width of the viewable area of the page.
       */
      getClientWidth: function() {
         return this.getViewportWidth();
      },
     =20
      /**
       * Returns the height of the client (viewport).
       * Now using getViewportHeight.  This interface left intact for =
back compat.
       * @return {Int} The height of the viewable area of the page.
       */
      getClientHeight: function() {
         return this.getViewportHeight();
      },

      /**
       * Returns a array of HTMLElements with the given class
       * For optimized performance, include a tag and/or root node if =
possible
       * @param {String} className The class name to match against
       * @param {String} tag (optional) The tag name of the elements =
being collected
       * @param {String/HTMLElement} root (optional) The HTMLElement or =
an ID to use as the starting point=20
       * @return {Array} An array of elements that have the given class =
name
       */
      getElementsByClassName: function(className, tag, root) {
         var re =3D new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
        =20
         var method =3D function(el) { return re.test(el['className']); =
};
        =20
         return this.getElementsBy(method, tag, root);
      },

      /**
       * Determines whether an HTMLElement has the given className
       * @param {String/HTMLElement/Array} el The element or collection =
to test
       * @param {String} className the class name to search for
       * @return {Boolean/Array} A boolean value or array of boolean =
values
       */
      hasClass: function(el, className) {
         var f =3D function(el) {
            var re =3D new RegExp('(?:^|\\s+)' + className + =
'(?:\\s+|$)');
            return re.test(el['className']);
         };
        =20
         return this.batch(el, f, this, true);
      },
  =20
      /**
       * Adds a class name to a given element or collection of elements
       * @param {String/HTMLElement/Array} el The element or collection =
to add the class to
       * @param {String} className the class name to add to the class =
attribute
       */
      addClass: function(el, className) {
         var f =3D function(el) {
            if (this.hasClass(el, className)) { return; } // already =
present
           =20
            el['className'] =3D [el['className'], className].join(' ');
         };
        =20
         this.batch(el, f, this, true);
      },
  =20
      /**
       * Removes a class name from a given element or collection of =
elements
       * @param {String/HTMLElement/Array} el The element or collection =
to remove the class from
       * @param {String} className the class name to remove from the =
class attribute
       */
      removeClass: function(el, className) {
         var f =3D function(el) {
            if (!this.hasClass(el, className)) { return; } // not =
present
           =20
            var re =3D new RegExp('(?:^|\\s+)' + className + =
'(?:\\s+|$)', 'g');
            var c =3D el['className'];
           =20
            el['className'] =3D c.replace( re, ' ');
         };
        =20
         this.batch(el, f, this, true);
      },
     =20
      /**
       * Replace a class with another class for a given element or =
collection of elements.
       * If no oldClassName is present, the newClassName is simply =
added.
       * @param {String/HTMLElement/Array} el The element or collection =
to remove the class from
       * @param {String} oldClassName the class name to be replaced
       * @param {String} newClassName the class name that will be =
replacing the old class name
       */
      replaceClass: function(el, oldClassName, newClassName) {
         var f =3D function(el) {
            this.removeClass(el, oldClassName);
            this.addClass(el, newClassName);
         };
        =20
         this.batch(el, f, this, true);
      },
     =20
      /**
       * Generates a unique ID
       * @param {String/HTMLElement/Array} el (optional) An optional =
element array of elements to add an ID to (no ID is added if one is =
already present)
       * @param {String} prefix (optional) an optional prefix to use =
(defaults to "yui-gen")
       * @return {String/Array} The generated ID, or array of generated =
IDs (or original ID if already present on an element)
       */
      generateId: function(el, prefix) {
         prefix =3D prefix || 'yui-gen';
        =20
         var f =3D function(el) {
            el =3D el || {}; // just generating ID in this case
           =20
            if (!el.id) { el.id =3D prefix + id_counter++; } // dont =
override existing
           =20
            return el.id;
         };
        =20
         return this.batch(el, f, this, true);
      },
     =20
      /**
       * Determines whether an HTMLElement is an ancestor of another =
HTML element in the DOM hierarchy
       * @param {String/HTMLElement} haystack The possible ancestor
       * @param {String/HTMLElement} needle The possible descendent
       * @return {Boolean} Whether or not the haystack is an ancestor of =
needle
       */
      isAncestor: function(haystack, needle) {
         haystack =3D this.get(haystack);
         if (!haystack || !needle) { return false; }
        =20
         var f =3D function(needle) {
            if (haystack.contains && ua.indexOf('safari') < 0)=20
            { // safari "contains" is broken
               return haystack.contains(needle);
            }
            else if ( haystack.compareDocumentPosition )=20
            {
               return !!(haystack.compareDocumentPosition(needle) & 16);
            }
            else=20
            { // loop up and test each parent
               var parent =3D needle.parentNode;
              =20
               while (parent) {
                  if (parent =3D=3D haystack) {
                     return true;
                  }
                  else if (parent.tagName =3D=3D 'HTML') {
                     return false;
                  }
                 =20
                  parent =3D parent.parentNode;
               }
              =20
               return false;
            }   =20
         };
        =20
         return this.batch(needle, f, this, true);    =20
      },
     =20
      /**
       * Determines whether an HTMLElement is present in the current =
document
       * @param {String/HTMLElement} el The element to search for
       * @return {Boolean} Whether or not the element is present in the =
current document
       */
      inDocument: function(el) {
         var f =3D function(el) {
            return this.isAncestor(document.documentElement, el);
         };
        =20
         return this.batch(el, f, this, true);
      },
     =20
      /**
       * Returns a array of HTMLElements that pass the test applied by =
supplied boolean method
       * For optimized performance, include a tag and/or root node if =
possible
       * @param {Function} method A boolean method to test elements with
       * @param {String} tag (optional) The tag name of the elements =
being collected
       * @param {String/HTMLElement} root (optional) The HTMLElement or =
an ID to use as the starting point=20
       */
      getElementsBy: function(method, tag, root) {
         tag =3D tag || '*';
         root =3D this.get(root) || document;
        =20
         var nodes =3D [];
         var elements =3D root.getElementsByTagName(tag);
        =20
         if ( !elements.length && (tag =3D=3D '*' && root.all) ) {
            elements =3D root.all; // IE < 6
         }
        =20
         for (var i =3D 0, len =3D elements.length; i < len; ++i)=20
         {
            if ( method(elements[i]) ) { nodes[nodes.length] =3D =
elements[i]; }
         }

         return nodes;
      },
     =20
      /**
       * Returns an array of elements that have had the supplied method =
applied.
       * The method is called with the element(s) as the first arg, and =
the optional param as the second ( method(el, o) )
       * @param {String/HTMLElement/Array} el (optional) An element or =
array of elements to apply the method to
       * @param {Function} method The method to apply to the element(s)
       * @param {Generic} (optional) o An optional arg that is passed to =
the supplied method
       * @param {Boolean} (optional) override Whether or not to override =
the scope of "method" with "o"
       * @return {HTMLElement/Array} The element(s) with the method =
applied
       */
      batch: function(el, method, o, override) {
         el =3D this.get(el);
         var scope =3D (override) ? o : window;
        =20
         if (!el || el.tagName || !el.length)=20
         { // is null or not a collection (tagName for SELECT and others =
that can be both an element and a collection)
            return method.call(scope, el, o);
         }=20
        =20
         var collection =3D [];
        =20
         for (var i =3D 0, len =3D el.length; i < len; ++i)
         {
            collection[collection.length] =3D method.call(scope, el[i], =
o);
         }
        =20
         return collection;
      },
     =20
      /**
       * Returns the height of the document.
       * @return {Int} The height of the actual document (which includes =
the body and its margin).
       */
      getDocumentHeight: function() {
         var scrollHeight=3D-1,windowHeight=3D-1,bodyHeight=3D-1;
         var marginTop =3D parseInt(this.getStyle(document.body, =
'marginTop'), 10);
         var marginBottom =3D parseInt(this.getStyle(document.body, =
'marginBottom'), 10);
        =20
         var mode =3D document.compatMode;
        =20
         if ( (mode || isIE) && !isOpera ) { // (IE, Gecko)
            switch (mode) {
               case 'CSS1Compat': // Standards mode
                  scrollHeight =3D ((window.innerHeight && =
window.scrollMaxY) ?  window.innerHeight+window.scrollMaxY : -1);
                  windowHeight =3D =
[document.documentElement.clientHeight,self.innerHeight||-1].sort(functio=
n(a, b){return(a-b);})[1];
                  bodyHeight =3D document.body.offsetHeight + marginTop =
+ marginBottom;
                  break;
              =20
               default: // Quirks
                  scrollHeight =3D document.body.scrollHeight;
                  bodyHeight =3D document.body.clientHeight;
            }
         } else { // Safari & Opera
            scrollHeight =3D document.documentElement.scrollHeight;
            windowHeight =3D self.innerHeight;
            bodyHeight =3D document.documentElement.clientHeight;
         }
     =20
         var h =3D =
[scrollHeight,windowHeight,bodyHeight].sort(function(a, =
b){return(a-b);});
         return h[2];
      },
     =20
      /**
       * Returns the width of the document.
       * @return {Int} The width of the actual document (which includes =
the body and its margin).
       */
      getDocumentWidth: function() {
         var docWidth=3D-1,bodyWidth=3D-1,winWidth=3D-1;
         var marginRight =3D parseInt(this.getStyle(document.body, =
'marginRight'), 10);
         var marginLeft =3D parseInt(this.getStyle(document.body, =
'marginLeft'), 10);
        =20
         var mode =3D document.compatMode;
        =20
         if (mode || isIE) { // (IE, Gecko, Opera)
            switch (mode) {
               case 'CSS1Compat': // Standards mode
                  docWidth =3D document.documentElement.clientWidth;
                  bodyWidth =3D document.body.offsetWidth + marginLeft + =
marginRight;
                  winWidth =3D self.innerWidth || -1;
                  break;
                 =20
               default: // Quirks
                  bodyWidth =3D document.body.clientWidth;
                  winWidth =3D document.body.scrollWidth;
                  break;
            }
         } else { // Safari
            docWidth =3D document.documentElement.clientWidth;
            bodyWidth =3D document.body.offsetWidth + marginLeft + =
marginRight;
            winWidth =3D self.innerWidth;
         }
     =20
         var w =3D [docWidth,bodyWidth,winWidth].sort(function(a, =
b){return(a-b);});
         return w[2];
      },

      /**
       * Returns the current height of the viewport.
       * @return {Int} The height of the viewable area of the page =
(excludes scrollbars).
       */
      getViewportHeight: function() {
         var height =3D -1;
         var mode =3D document.compatMode;
     =20
         if ( (mode || isIE) && !isOpera ) {
            switch (mode) { // (IE, Gecko)
               case 'CSS1Compat': // Standards mode
                  height =3D document.documentElement.clientHeight;
                  break;
     =20
               default: // Quirks
                  height =3D document.body.clientHeight;
            }
         } else { // Safari, Opera
            height =3D self.innerHeight;
         }
     =20
         return height;
      },
     =20
      /**
       * Returns the current width of the viewport.
       * @return {Int} The width of the viewable area of the page =
(excludes scrollbars).
       */
     =20
      getViewportWidth: function() {
         var width =3D -1;
         var mode =3D document.compatMode;
        =20
         if (mode || isIE) { // (IE, Gecko, Opera)
            switch (mode) {
            case 'CSS1Compat': // Standards mode=20
               width =3D document.documentElement.clientWidth;
               break;
              =20
            default: // Quirks
               width =3D document.body.clientWidth;
            }
         } else { // Safari
            width =3D self.innerWidth;
         }
        =20
         return width;
      }
   };
}();

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
*/

/**
 * @class A region is a representation of an object on a grid.  It is =
defined
 * by the top, right, bottom, left extents, so is rectangular by =
default.  If=20
 * other shapes are required, this class could be extended to support =
it.
 *
 * @param {int} t the top extent
 * @param {int} r the right extent
 * @param {int} b the bottom extent
 * @param {int} l the left extent
 * @constructor
 */
YAHOO.util.Region =3D function(t, r, b, l) {

    /**
     * The region's top extent
     * @type int
     */
    this.top =3D t;
   =20
    /**
     * The region's top extent as index, for symmetry with set/getXY
     * @type int
     */
    this[1] =3D t;

    /**
     * The region's right extent
     * @type int
     */
    this.right =3D r;

    /**
     * The region's bottom extent
     * @type int
     */
    this.bottom =3D b;

    /**
     * The region's left extent
     * @type int
     */
    this.left =3D l;
   =20
    /**
     * The region's left extent as index, for symmetry with set/getXY
     * @type int
     */
    this[0] =3D l;
};

/**
 * Returns true if this region contains the region passed in
 *
 * @param  {Region}  region The region to evaluate
 * @return {boolean}        True if the region is contained with this =
region,=20
 *                          else false
 */
YAHOO.util.Region.prototype.contains =3D function(region) {
    return ( region.left   >=3D this.left   &&=20
             region.right  <=3D this.right  &&=20
             region.top    >=3D this.top    &&=20
             region.bottom <=3D this.bottom    );

    // this.logger.debug("does " + this + " contain " + region + " ... " =
+ ret);
};

/**
 * Returns the area of the region
 *
 * @return {int} the region's area
 */
YAHOO.util.Region.prototype.getArea =3D function() {
    return ( (this.bottom - this.top) * (this.right - this.left) );
};

/**
 * Returns the region where the passed in region overlaps with this one
 *
 * @param  {Region} region The region that intersects
 * @return {Region}        The overlap region, or null if there is no =
overlap
 */
YAHOO.util.Region.prototype.intersect =3D function(region) {
    var t =3D Math.max( this.top,    region.top    );
    var r =3D Math.min( this.right,  region.right  );
    var b =3D Math.min( this.bottom, region.bottom );
    var l =3D Math.max( this.left,   region.left   );
   =20
    if (b >=3D t && r >=3D l) {
        return new YAHOO.util.Region(t, r, b, l);
    } else {
        return null;
    }
};

/**
 * Returns the region representing the smallest region that can contain =
both
 * the passed in region and this region.
 *
 * @param  {Region} region The region that to create the union with
 * @return {Region}        The union region
 */
YAHOO.util.Region.prototype.union =3D function(region) {
    var t =3D Math.min( this.top,    region.top    );
    var r =3D Math.max( this.right,  region.right  );
    var b =3D Math.max( this.bottom, region.bottom );
    var l =3D Math.min( this.left,   region.left   );

    return new YAHOO.util.Region(t, r, b, l);
};

/**
 * toString
 * @return string the region properties
 */
YAHOO.util.Region.prototype.toString =3D function() {
    return ( "Region {" +
             "t: "    + this.top    +=20
             ", r: "    + this.right  +=20
             ", b: "    + this.bottom +=20
             ", l: "    + this.left   +=20
             "}" );
};

/**
 * Returns a region that is occupied by the DOM element
 *
 * @param  {HTMLElement} el The element
 * @return {Region}         The region that the element occupies
 * @static
 */
YAHOO.util.Region.getRegion =3D function(el) {
    var p =3D YAHOO.util.Dom.getXY(el);

    var t =3D p[1];
    var r =3D p[0] + el.offsetWidth;
    var b =3D p[1] + el.offsetHeight;
    var l =3D p[0];

    return new YAHOO.util.Region(t, r, b, l);
};

/////////////////////////////////////////////////////////////////////////=
////


/**
 * @class
 *
 * A point is a region that is special in that it represents a single =
point on=20
 * the grid.
 *
 * @param {int} x The X position of the point
 * @param {int} y The Y position of the point
 * @constructor
 * @extends Region
 */
YAHOO.util.Point =3D function(x, y) {
    /**
     * The X position of the point
     * @type int
     */
    this.x      =3D x;

    /**
     * The Y position of the point
     * @type int
     */
    this.y      =3D y;
    this.top    =3D y;
    this[1] =3D y;
   =20
    this.right  =3D x;
    this.bottom =3D y;
    this.left   =3D x;
    this[0] =3D x;
};

YAHOO.util.Point.prototype =3D new YAHOO.util.Region();


------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/event.js

/*                                                                       =
                                                                         =
     =20
Copyright (c) 2006, Yahoo! Inc. All rights reserved.                     =
                                                                         =
     =20
Code licensed under the BSD License:                                     =
                                                                         =
     =20
http://developer.yahoo.net/yui/license.txt                               =
                                                                         =
     =20
version: 0.10.0                                                          =
                                                                         =
     =20
*/=20

/**
 * The CustomEvent class lets you define events for your application
 * that can be subscribed to by one or more independent component.
 *
 * @param {String} type The type of event, which is passed to the =
callback
 *                 when the event fires
 * @param {Object} oScope The context the event will fire from.  "this" =
will
 *                 refer to this object in the callback.  Default value: =

 *                 the window object.  The listener can override this.
 * @constructor
 */
YAHOO.util.CustomEvent =3D function(type, oScope) {
    /**
     * The type of event, returned to subscribers when the event fires
     * @type string
     */
    this.type =3D type;

    /**
     * The scope the the event will fire from by default.  Defaults to =
the window=20
     * obj
     * @type object
     */
    this.scope =3D oScope || window;

    /**
     * The subscribers to this event
     * @type Subscriber[]
     */
    this.subscribers =3D [];

    // Register with the event utility for automatic cleanup.  Made =
optional
    // so that CustomEvent can be used independently of pe.event
    if (YAHOO.util.Event) {=20
        YAHOO.util.Event.regCE(this);
    }
};

YAHOO.util.CustomEvent.prototype =3D {
    /**
     * Subscribes the caller to this event
     * @param {Function} fn       The function to execute
     * @param {Object}   obj      An object to be passed along when the =
event fires
     * @param {boolean}  bOverride If true, the obj passed in becomes =
the execution
     *                            scope of the listener
     */
    subscribe: function(fn, obj, bOverride) {
        this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, =
bOverride) );
    },

    /**
     * Unsubscribes the caller from this event
     * @param {Function} fn  The function to execute
     * @param {Object}   obj An object to be passed along when the event =
fires
     * @return {boolean} True if the subscriber was found and detached.
     */
    unsubscribe: function(fn, obj) {
        var found =3D false;
        for (var i=3D0, len=3Dthis.subscribers.length; i<len; ++i) {
            var s =3D this.subscribers[i];
            if (s && s.contains(fn, obj)) {
                this._delete(i);
                found =3D true;
            }
        }

        return found;
    },

    /**
     * Notifies the subscribers.  The callback functions will be =
executed
     * from the scope specified when the event was created, and with the =
following
     * parameters:
     *   <pre>
     *   - The type of event
     *   - All of the arguments fire() was executed with as an array
     *   - The custom object (if any) that was passed into the =
subscribe() method
     *   </pre>
     *  =20
     * @param {Array} an arbitrary set of parameters to pass to the =
handler
     */
    fire: function() {
        for (var i=3D0, len=3Dthis.subscribers.length; i<len; ++i) {
            var s =3D this.subscribers[i];
            if (s) {
                var scope =3D (s.override) ? s.obj : this.scope;
                s.fn.call(scope, this.type, arguments, s.obj);
            }
        }
    },

    /**
     * Removes all listeners
     */
    unsubscribeAll: function() {
        for (var i=3D0, len=3Dthis.subscribers.length; i<len; ++i) {
            this._delete(i);
        }
    },

    /**
     * @private
     */
    _delete: function(index) {
        var s =3D this.subscribers[index];
        if (s) {
            delete s.fn;
            delete s.obj;
        }

        delete this.subscribers[index];
    }
};

/////////////////////////////////////////////////////////////////////

/**
 * @class Stores the subscriber information to be used when the event =
fires.
 * @param {Function} fn       The function to execute
 * @param {Object}   obj      An object to be passed along when the =
event fires
 * @param {boolean}  bOverride If true, the obj passed in becomes the =
execution
 *                            scope of the listener
 * @constructor
 */
YAHOO.util.Subscriber =3D function(fn, obj, bOverride) {
    /**
     * The callback that will be execute when the event fires
     * @type function
     */
    this.fn =3D fn;

    /**
     * An optional custom object that will passed to the callback when
     * the event fires
     * @type object
     */
    this.obj =3D obj || null;

    /**
     * The default execution scope for the event listener is defined =
when the
     * event is created (usually the object which contains the event).
     * By setting override to true, the execution scope becomes the =
custom
     * object passed in by the subscriber
     * @type boolean
     */
    this.override =3D (bOverride);
};

/**
 * Returns true if the fn and obj match this objects properties.
 * Used by the unsubscribe method to match the right subscriber.
 *
 * @param {Function} fn the function to execute
 * @param {Object} obj an object to be passed along when the event fires
 * @return {boolean} true if the supplied arguments match this=20
 *                   subscriber's signature.
 */
YAHOO.util.Subscriber.prototype.contains =3D function(fn, obj) {
    return (this.fn =3D=3D fn && this.obj =3D=3D obj);
};

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

// Only load this library once.  If it is loaded a second time, existing
// events cannot be detached.
if (!YAHOO.util.Event) {

/**
 * @class
 * The event utility provides functions to add and remove event =
listeners,
 * event cleansing.  It also tries to automatically remove listeners it
 * registers during the unload event.
 * @constructor
 */
    YAHOO.util.Event =3D function() {

        /**
         * True after the onload event has fired
         * @type boolean
         * @private
         */
        var loadComplete =3D  false;

        /**
         * Cache of wrapped listeners
         * @type array
         * @private
         */
        var listeners =3D [];

        /**
         * Listeners that will be attached during the onload event
         * @type array
         * @private
         */
        var delayedListeners =3D [];

        /**
         * User-defined unload function that will be fired before all =
events
         * are detached
         * @type array
         * @private
         */
        var unloadListeners =3D [];

        /**
         * Cache of the custom events that have been defined.  Used for
         * automatic cleanup
         * @type array
         * @private
         */
        var customEvents =3D [];

        /**
         * Cache of DOM0 event handlers to work around issues with DOM2 =
events
         * in Safari
         * @private
         */
        var legacyEvents =3D [];

        /**
         * Listener stack for DOM0 events
         * @private
         */
        var legacyHandlers =3D [];

        /**
         * The number of times to poll after window.onload.  This number =
is
         * increased if additional late-bound handlers are requested =
after
         * the page load.
         * @private
         */
        var retryCount =3D 0;

        /**
         * onAvailable listeners
         * @private
         */
        var onAvailStack =3D [];

        /**
         * Lookup table for legacy events
         * @private
         */
        var legacyMap =3D [];

        /**
         * Counter for auto id generation
         * @private
         */
        var counter =3D 0;

        return { // PREPROCESS

            /**
             * The number of times we should look for elements that are =
not
             * in the DOM at the time the event is requested after the =
document
             * has been loaded.  The default is 200@50 ms, so it will =
poll
             * for 10 seconds or until all outstanding handlers are =
bound
             * (whichever comes first).
             * @type int
             */
            POLL_RETRYS: 200,

            /**
             * The poll interval in milliseconds
             * @type int
             */
            POLL_INTERVAL: 50,

            /**
             * Element to bind, int constant
             * @type int
             */
            EL: 0,

            /**
             * Type of event, int constant
             * @type int
             */
            TYPE: 1,

            /**
             * Function to execute, int constant
             * @type int
             */
            FN: 2,

            /**
             * Function wrapped for scope correction and cleanup, int =
constant
             * @type int
             */
            WFN: 3,

            /**
             * Object passed in by the user that will be returned as a=20
             * parameter to the callback, int constant
             * @type int
             */
            SCOPE: 3,

            /**
             * Adjusted scope, either the element we are registering the =
event
             * on or the custom object passed in by the listener, int =
constant
             * @type int
             */
            ADJ_SCOPE: 4,

            /**
             * Safari detection is necessary to work around the =
preventDefault
             * bug that makes it so you can't cancel a href click from =
the=20
             * handler.  There is not a capabilities check we can use =
here.
             * @private
             */
            isSafari: =
(/Safari|Konqueror|KHTML/gi).test(navigator.userAgent),

            /**
             * IE detection needed to properly calculate pageX and =
pageY. =20
             * capabilities checking didn't seem to work because another =

             * browser that does not provide the properties have the =
values=20
             * calculated in a different manner than IE.
             * @private
             */
            isIE: (!this.isSafari && =
!navigator.userAgent.match(/opera/gi) &&=20
                    navigator.userAgent.match(/msie/gi)),

            /**
             * @private
             */
            addDelayedListener: function(el, sType, fn, oScope, =
bOverride) {
                delayedListeners[delayedListeners.length] =3D
                    [el, sType, fn, oScope, bOverride];

                // If this happens after the inital page load, we need =
to
                // reset the poll counter so that we continue to search =
for
                // the element for a fixed period of time.
                if (loadComplete) {
                    retryCount =3D this.POLL_RETRYS;
                    this.startTimeout(0);
                    // this._tryPreloadAttach();
                }
            },

            /**
             * @private
             */
            startTimeout: function(interval) {
                var i =3D (interval || interval =3D=3D=3D 0) ? interval =
: this.POLL_INTERVAL;
                var self =3D this;
                var callback =3D function() { self._tryPreloadAttach(); =
};
                this.timeout =3D setTimeout(callback, i);
            },

            /**
             * Executes the supplied callback when the item with the =
supplied
             * id is found.  This is meant to be used to execute =
behavior as
             * soon as possible as the page loads.  If you use this =
after the
             * initial page load it will poll for a fixed time for the =
element.
             * The number of times it will poll and the frequency are
             * configurable.  By default it will poll for 10 seconds.
             * @param {string} p_id the id of the element to look for.
             * @param {function} p_fn what to execute when the element =
is found.
             * @param {object} p_obj an optional object to be passed =
back as
             * a parameter to p_fn.
             * @param {boolean} p_override If set to true, p_fn will =
execute
             * in the scope of p_obj
             *
             */
            onAvailable: function(p_id, p_fn, p_obj, p_override) {
                onAvailStack.push( { id:       p_id,=20
                                     fn:       p_fn,=20
                                     obj:      p_obj,=20
                                     override: p_override } );

                retryCount =3D this.POLL_RETRYS;
                this.startTimeout(0);
                // this._tryPreloadAttach();
            },

            /**
             * Appends an event handler
             *
             * @param {Object}   el        The html element to assign =
the=20
             *                             event to
             * @param {String}   sType     The type of event to append
             * @param {Function} fn        The method the event invokes
             * @param {Object}   oScope    An arbitrary object that will =
be=20
             *                             passed as a parameter to the =
handler
             * @param {boolean}  bOverride If true, the obj passed in =
becomes
             *                             the execution scope of the =
listener
             * @return {boolean} True if the action was successful or =
defered,
             *                        false if one or more of the =
elements=20
             *                        could not have the event bound to =
it.
             */
            addListener: function(el, sType, fn, oScope, bOverride) {

                if (!fn || !fn.call) {
                    return false;
                }

                // The el argument can be an array of elements or =
element ids.
                if ( this._isValidCollection(el)) {
                    var ok =3D true;
                    for (var i=3D0,len=3Del.length; i<len; ++i) {
                        ok =3D ( this.on(el[i],=20
                                       sType,=20
                                       fn,=20
                                       oScope,=20
                                       bOverride) && ok );
                    }
                    return ok;

                } else if (typeof el =3D=3D "string") {
                    var oEl =3D this.getEl(el);
                    // If the el argument is a string, we assume it is=20
                    // actually the id of the element.  If the page is =
loaded
                    // we convert el to the actual element, otherwise we =

                    // defer attaching the event until onload event =
fires

                    // check to see if we need to delay hooking up the =
event=20
                    // until after the page loads.
                    if (loadComplete && oEl) {
                        el =3D oEl;
                    } else {
                        // defer adding the event until onload fires
                        this.addDelayedListener(el,=20
                                                sType,=20
                                                fn,=20
                                                oScope,=20
                                                bOverride);

                        return true;
                    }
                }

                // Element should be an html element or an array if we =
get=20
                // here.
                if (!el) {
                    return false;
                }

                // we need to make sure we fire registered unload events =

                // prior to automatically unhooking them.  So we hang on =
to=20
                // these instead of attaching them to the window and =
fire the
                // handles explicitly during our one unload event.
                if ("unload" =3D=3D sType && oScope !=3D=3D this) {
                    unloadListeners[unloadListeners.length] =3D
                            [el, sType, fn, oScope, bOverride];
                    return true;
                }


                // if the user chooses to override the scope, we use the =
custom
                // object passed in, otherwise the executing scope will =
be the
                // HTML element that the event is registered on
                var scope =3D (bOverride) ? oScope : el;

                // wrap the function so we can return the oScope object =
when
                // the event fires;
                var wrappedFn =3D function(e) {
                        return fn.call(scope, =
YAHOO.util.Event.getEvent(e),=20
                                oScope);
                    };

                var li =3D [el, sType, fn, wrappedFn, scope];
                var index =3D listeners.length;
                // cache the listener so we can try to automatically =
unload
                listeners[index] =3D li;

                if (this.useLegacyEvent(el, sType)) {
                    var legacyIndex =3D this.getLegacyIndex(el, sType);
                    if (legacyIndex =3D=3D -1) {

                        legacyIndex =3D legacyEvents.length;
                        legacyMap[el.id + sType] =3D legacyIndex;

                        // cache the signature for the DOM0 event, and=20
                        // include the existing handler for the event, =
if any
                        legacyEvents[legacyIndex] =3D=20
                            [el, sType, el["on" + sType]];
                        legacyHandlers[legacyIndex] =3D [];

                        el["on" + sType] =3D=20
                            function(e) {
                                YAHOO.util.Event.fireLegacyEvent(
                                    YAHOO.util.Event.getEvent(e), =
legacyIndex);
                            };
                    }

                    // add a reference to the wrapped listener to our =
custom
                    // stack of events
                    legacyHandlers[legacyIndex].push(index);

                // DOM2 Event model
                } else if (el.addEventListener) {
                    el.addEventListener(sType, wrappedFn, false);
                // Internet Explorer abstraction
                } else if (el.attachEvent) {
                    el.attachEvent("on" + sType, wrappedFn);
                }

                return true;
               =20
            },

            /**
             * Shorthand for YAHOO.util.Event.addListener
             * @type function
             */
            // on: this.addListener,

            /**
             * When using legacy events, the handler is routed to this =
object
             * so we can fire our custom listener stack.
             * @private
             */
            fireLegacyEvent: function(e, legacyIndex) {
                var ok =3D true;

                var le =3D legacyHandlers[legacyIndex];
                for (var i=3D0,len=3Dle.length; i<len; ++i) {
                    var index =3D le[i];
                    if (index) {
                        var li =3D listeners[index];
                        if ( li && li[this.WFN] ) {
                            var scope =3D li[this.ADJ_SCOPE];
                            var ret =3D li[this.WFN].call(scope, e);
                            ok =3D (ok && ret);
                        } else {
                            // This listener was removed, so delete it =
from
                            // the array
                            delete le[i];
                        }
                    }
                }

                return ok;
            },

            /**
             * Returns the legacy event index that matches the supplied=20
             * signature
             * @private
             */
            getLegacyIndex: function(el, sType) {
                /*
                for (var i=3D0,len=3DlegacyEvents.length; i<len; ++i) {
                    var le =3D legacyEvents[i];
                    if (le && le[0] =3D=3D=3D el && le[1] =3D=3D=3D =
sType) {
                        return i;
                    }
                }
                return -1;
                */

                var key =3D this.generateId(el) + sType;
                if (typeof legacyMap[key] =3D=3D "undefined") {=20
                    return -1;
                } else {
                    return legacyMap[key];
                }

            },

            /**
             * Logic that determines when we should automatically use =
legacy
             * events instead of DOM2 events.
             * @private
             */
            useLegacyEvent: function(el, sType) {

                if (!el.addEventListener && !el.attachEvent) {
                    return true;
                } else if (this.isSafari) {
                    if ("click" =3D=3D sType || "dblclick" =3D=3D sType) =
{
                        return true;
                    }
                }

                return false;
            },
                   =20
            /**
             * Removes an event handler
             *
             * @param {Object} el the html element or the id of the =
element to=20
             * assign the event to.
             * @param {String} sType the type of event to remove
             * @param {Function} fn the method the event invokes
             * @return {boolean} true if the unbind was successful, =
false=20
             * otherwise
             */
            removeListener: function(el, sType, fn, index) {

                if (!fn || !fn.call) {
                    return false;
                }

                // The el argument can be a string
                if (typeof el =3D=3D "string") {
                    el =3D this.getEl(el);
                // The el argument can be an array of elements or =
element ids.
                } else if ( this._isValidCollection(el)) {
                    var ok =3D true;
                    for (var i=3D0,len=3Del.length; i<len; ++i) {
                        ok =3D ( this.removeListener(el[i], sType, fn) =
&& ok );
                    }
                    return ok;
                }

                if ("unload" =3D=3D sType) {

                    for (i=3D0, len=3DunloadListeners.length; i<len; =
i++) {
                        var li =3D unloadListeners[i];
                        if (li &&=20
                            li[0] =3D=3D el &&=20
                            li[1] =3D=3D sType &&=20
                            li[2] =3D=3D fn) {
                                delete unloadListeners[i];
                                return true;
                        }
                    }

                    return false;
                }

                var cacheItem =3D null;
 =20
                if ("undefined" =3D=3D typeof index) {
                    index =3D this._getCacheIndex(el, sType, fn);
                }

                if (index >=3D 0) {
                    cacheItem =3D listeners[index];
                }

                if (!el || !cacheItem) {
                    return false;
                }


                if (el.removeEventListener) {
                    el.removeEventListener(sType, cacheItem[this.WFN], =
false);
                } else if (el.detachEvent) {
                    el.detachEvent("on" + sType, cacheItem[this.WFN]);
                }

                // removed the wrapped handler
                delete listeners[index][this.WFN];
                delete listeners[index][this.FN];
                delete listeners[index];

                return true;

            },

            /**
             * Returns the event's target element
             * @param {Event} ev the event
             * @param {boolean} resolveTextNode when set to true the =
target's
             *                  parent will be returned if the target is =
a=20
             *                  text node
             * @return {HTMLElement} the event's target
             */
            getTarget: function(ev, resolveTextNode) {
                var t =3D ev.target || ev.srcElement;

                if (resolveTextNode && t && "#text" =3D=3D t.nodeName) {
                    return t.parentNode;
                } else {
                    return t;
                }
            },

            /**
             * Returns the event's pageX
             * @param {Event} ev the event
             * @return {int} the event's pageX
             */
            getPageX: function(ev) {
                var x =3D ev.pageX;
                if (!x && 0 !=3D=3D x) {
                    x =3D ev.clientX || 0;

                    if ( this.isIE ) {
                        x +=3D this._getScrollLeft();
                    }
                }

                return x;
            },

            /**
             * Returns the event's pageY
             * @param {Event} ev the event
             * @return {int} the event's pageY
             */
            getPageY: function(ev) {
                var y =3D ev.pageY;
                if (!y && 0 !=3D=3D y) {
                    y =3D ev.clientY || 0;

                    if ( this.isIE ) {
                        y +=3D this._getScrollTop();
                    }
                }

                return y;
            },

            /**
             * Returns the pageX and pageY properties as an indexed =
array.
             * @type int[]
             */
            getXY: function(ev) {
                return [this.getPageX(ev), this.getPageY(ev)];
            },

            /**
             * Returns the event's related target=20
             * @param {Event} ev the event
             * @return {HTMLElement} the event's relatedTarget
             */
            getRelatedTarget: function(ev) {
                var t =3D ev.relatedTarget;
                if (!t) {
                    if (ev.type =3D=3D "mouseout") {
                        t =3D ev.toElement;
                    } else if (ev.type =3D=3D "mouseover") {
                        t =3D ev.fromElement;
                    }
                }

                return t;
            },

            /**
             * Returns the time of the event.  If the time is not =
included, the
             * event is modified using the current time.
             * @param {Event} ev the event
             * @return {Date} the time of the event
             */
            getTime: function(ev) {
                if (!ev.time) {
                    var t =3D new Date().getTime();
                    try {
                        ev.time =3D t;
                    } catch(e) {=20
                        // can't set the time property =20
                        return t;
                    }
                }

                return ev.time;
            },

            /**
             * Convenience method for stopPropagation + preventDefault
             * @param {Event} ev the event
             */
            stopEvent: function(ev) {
                this.stopPropagation(ev);
                this.preventDefault(ev);
            },

            /**
             * Stops event propagation
             * @param {Event} ev the event
             */
            stopPropagation: function(ev) {
                if (ev.stopPropagation) {
                    ev.stopPropagation();
                } else {
                    ev.cancelBubble =3D true;
                }
            },

            /**
             * Prevents the default behavior of the event
             * @param {Event} ev the event
             */
            preventDefault: function(ev) {
                if (ev.preventDefault) {
                    ev.preventDefault();
                } else {
                    ev.returnValue =3D false;
                }
            },
            =20
            /**
             * Finds the event in the window object, the caller's =
arguments, or
             * in the arguments of another method in the callstack.  =
This is
             * executed automatically for events registered through the =
event
             * manager, so the implementer should not normally need to =
execute
             * this function at all.
             * @param {Event} the event parameter from the handler
             * @return {Event} the event=20
             */
            getEvent: function(e) {
                var ev =3D e || window.event;

                if (!ev) {
                    var c =3D this.getEvent.caller;
                    while (c) {
                        ev =3D c.arguments[0];
                        if (ev && Event =3D=3D ev.constructor) {
                            break;
                        }
                        c =3D c.caller;
                    }
                }

                return ev;
            },

            /**
             * Returns the charcode for an event
             * @param {Event} ev the event
             * @return {int} the event's charCode
             */
            getCharCode: function(ev) {
                return ev.charCode || ((ev.type =3D=3D "keypress") ? =
ev.keyCode : 0);
            },

            /**
             * @private
             * Locating the saved event handler data by function ref
             */
            _getCacheIndex: function(el, sType, fn) {
                for (var i=3D0,len=3Dlisteners.length; i<len; ++i) {
                    var li =3D listeners[i];
                    if ( li                 &&=20
                         li[this.FN] =3D=3D fn  &&=20
                         li[this.EL] =3D=3D el  &&=20
                         li[this.TYPE] =3D=3D sType ) {
                        return i;
                    }
                }

                return -1;
            },

            /**
             * Generates an unique ID for the element if it does not =
already=20
             * have one.
             * @param el the element
             * @return {string} the id of the element
             */
            generateId: function(el) {
                var id =3D el.id;

                if (!id) {
                    id =3D "yuievtautoid-" + (counter++);
                    el.id =3D id;
                }

                return id;
            },

            /**
             * We want to be able to use getElementsByTagName as a =
collection
             * to attach a group of events to.  Unfortunately, different =

             * browsers return different types of collections.  This =
function
             * tests to determine if the object is array-like.  It will =
also=20
             * fail if the object is an array, but is empty.
             * @param o the object to test
             * @return {boolean} true if the object is array-like and =
populated
             * @private
             */
            _isValidCollection: function(o) {

                return ( o                    && // o is something
                         o.length             && // o is indexed
                         typeof o !=3D "string" && // o is not a string
                         !o.tagName           && // o is not an HTML =
element
                         !o.alert             && // o is not a window
                         typeof o[0] !=3D "undefined" );

            },

            /**
             * @private
             * DOM element cache
             */
            elCache: {},

            /**
             * We cache elements bound by id because when the unload =
event=20
             * fires, we can no longer use document.getElementById
             * @private
             */
            getEl: function(id) {
                return document.getElementById(id);
            },

            /**
             * Clears the element cache
             * @deprecated
             * @private
             */
            clearCache: function() { },

            /**
             * Called by CustomEvent instances to provide a handle to =
the=20
             * event * that can be removed later on.  Should be package=20
             * protected.
             * @private
             */
            regCE: function(ce) {
                customEvents.push(ce);
            },

            /**
             * @private
             * hook up any deferred listeners
             */
            _load: function(e) {
                loadComplete =3D true;
            },

            /**
             * Polling function that runs before the onload event fires, =

             * attempting * to attach to DOM Nodes as soon as they are=20
             * available
             * @private
             */
            _tryPreloadAttach: function() {

                if (this.locked) {
                    return false;
                }

                this.locked =3D true;


                // keep trying until after the page is loaded.  We need =
to=20
                // check the page load state prior to trying to bind the =

                // elements so that we can be certain all elements have =
been=20
                // tested appropriately
                var tryAgain =3D !loadComplete;
                if (!tryAgain) {
                    tryAgain =3D (retryCount > 0);
                }

                // Delayed listeners
                var stillDelayed =3D [];

                for (var i=3D0,len=3DdelayedListeners.length; i<len; =
++i) {
                    var d =3D delayedListeners[i];
                    // There may be a race condition here, so we need to =

                    // verify the array element is usable.
                    if (d) {

                        // el will be null if document.getElementById =
did not
                        // work
                        var el =3D this.getEl(d[this.EL]);

                        if (el) {
                            this.on(el, d[this.TYPE], d[this.FN],=20
                                    d[this.SCOPE], d[this.ADJ_SCOPE]);
                            delete delayedListeners[i];
                        } else {
                            stillDelayed.push(d);
                        }
                    }
                }

                delayedListeners =3D stillDelayed;

                // onAvailable
                notAvail =3D [];
                for (i=3D0,len=3DonAvailStack.length; i<len ; ++i) {
                    var item =3D onAvailStack[i];
                    if (item) {
                        el =3D this.getEl(item.id);

                        if (el) {
                            var scope =3D (item.override) ? item.obj : =
el;
                            item.fn.call(scope, item.obj);
                            delete onAvailStack[i];
                        } else {
                            notAvail.push(item);
                        }
                    }
                }

                retryCount =3D (stillDelayed.length =3D=3D=3D 0 &&=20
                                    notAvail.length =3D=3D=3D 0) ? 0 : =
retryCount - 1;

                if (tryAgain) {
                    this.startTimeout();
                }

                this.locked =3D false;

            },

            /**
             * Removes all listeners registered by pe.event.  Called=20
             * automatically during the unload event.
             * @private
             */
            _unload: function(e, me) {
                for (var i=3D0,len=3DunloadListeners.length; i<len; ++i) =
{
                    var l =3D unloadListeners[i];
                    if (l) {
                        var scope =3D (l[this.ADJ_SCOPE]) ? =
l[this.SCOPE]: window;
                        l[this.FN].call(scope, this.getEvent(e), =
l[this.SCOPE] );
                    }
                }

                if (listeners && listeners.length > 0) {
                    for (i=3D0,len=3Dlisteners.length; i<len ; ++i) {
                        l =3D listeners[i];
                        if (l) {
                            this.removeListener(l[this.EL], =
l[this.TYPE],=20
                                    l[this.FN], i);
                        }
                    }

                    this.clearCache();
                }

                for (i=3D0,len=3DcustomEvents.length; i<len; ++i) {
                    customEvents[i].unsubscribeAll();
                    delete customEvents[i];
                }

                for (i=3D0,len=3DlegacyEvents.length; i<len; ++i) {
                    // dereference the element
                    delete legacyEvents[i][0];
                    // delete the array item
                    delete legacyEvents[i];
                }
            },

            /**
             * Returns scrollLeft
             * @private
             */
            _getScrollLeft: function() {
                return this._getScroll()[1];
            },

            /**
             * Returns scrollTop
             * @private
             */
            _getScrollTop: function() {
                return this._getScroll()[0];
            },

            /**
             * Returns the scrollTop and scrollLeft.  Used to calculate =
the=20
             * pageX and pageY in Internet Explorer
             * @private
             */
            _getScroll: function() {
                var dd =3D document.documentElement; db =3D =
document.body;
                if (dd && dd.scrollTop) {
                    return [dd.scrollTop, dd.scrollLeft];
                } else if (db) {
                    return [db.scrollTop, db.scrollLeft];
                } else {
                    return [0, 0];
                }
            }
        };
    } ();

    /**
     * @private
     */
    YAHOO.util.Event.on =3D YAHOO.util.Event.addListener;

    if (document && document.body) {
        YAHOO.util.Event._load();
    } else {
        YAHOO.util.Event.on(window, "load", YAHOO.util.Event._load,=20
                YAHOO.util.Event, true);
    }

    YAHOO.util.Event.on(window, "unload", YAHOO.util.Event._unload,=20
                YAHOO.util.Event, true);

    YAHOO.util.Event._tryPreloadAttach();

}


------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/animation.js

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version: 0.10.0
*/

/**
 *
 * Base class for animated DOM objects.
 * @class Base animation class that provides the interface for building =
animated effects.
 * <p>Usage: var myAnim =3D new YAHOO.util.Anim(el, { width: { from: 10, =
to: 100 } }, 1, YAHOO.util.Easing.easeOut);</p>
 * @requires YAHOO.util.AnimMgr
 * @requires YAHOO.util.Easing
 * @requires YAHOO.util.Dom
 * @requires YAHOO.util.Event
 * @requires YAHOO.util.CustomEvent
 * @constructor
 * @param {String or HTMLElement} el Reference to the element that will =
be animated
 * @param {Object} attributes The attribute(s) to be animated. =20
 * Each attribute is an object with at minimum a "to" or "by" member =
defined. =20
 * Additional optional members are "from" (defaults to current value), =
"units" (defaults to "px"). =20
 * All attribute names use camelCase.
 * @param {Number} duration (optional, defaults to 1 second) Length of =
animation (frames or seconds), defaults to time-based
 * @param {Function} method (optional, defaults to =
YAHOO.util.Easing.easeNone) Computes the values that are applied to the =
attributes per frame (generally a YAHOO.util.Easing method)
 */

YAHOO.util.Anim =3D function(el, attributes, duration, method)=20
{
   if (el) {
      this.init(el, attributes, duration, method);=20
   }
};

YAHOO.util.Anim.prototype =3D {
   /**
    * Returns the value computed by the animation's "method".
    * @param {String} attribute The name of the attribute.
    * @param {Number} start The value this attribute should start from =
for this animation.
    * @param {Number} end  The value this attribute should end at for =
this animation.
    * @return {Number} The Value to be applied to the attribute.
    */
   doMethod: function(attribute, start, end) {
      return this.method(this.currentFrame, start, end - start, =
this.totalFrames);
   },
  =20
   /**
    * Applies a value to an attribute
    * @param {String} attribute The name of the attribute.
    * @param {Number} val The value to be applied to the attribute.
    * @param {String} unit The unit ('px', '%', etc.) of the value.
    */
   setAttribute: function(attribute, val, unit) {
      YAHOO.util.Dom.setStyle(this.getEl(), attribute, val + unit);=20
   },                 =20
  =20
   /**
    * Returns current value of the attribute.
    * @param {String} attribute The name of the attribute.
    * @return {Number} val The current value of the attribute.
    */
   getAttribute: function(attribute) {
      return parseFloat( YAHOO.util.Dom.getStyle(this.getEl(), =
attribute));
   },
  =20
   /**
    * The default unit to use for all attributes if not defined per =
attribute.
    * @type String
    */
   defaultUnit: 'px',
  =20
   /**
    * Per attribute units that should be used by default.
    * @type Object
    */
   defaultUnits: { opacity: ' ' },

   /**
    * @param {String or HTMLElement} el Reference to the element that =
will be animated
    * @param {Object} attributes The attribute(s) to be animated. =20
    * Each attribute is an object with at minimum a "to" or "by" member =
defined. =20
    * Additional optional members are "from" (defaults to current =
value), "units" (defaults to "px"). =20
    * All attribute names use camelCase.
    * @param {Number} duration (optional, defaults to 1 second) Length =
of animation (frames or seconds), defaults to time-based
    * @param {Function} method (optional, defaults to =
YAHOO.util.Easing.easeNone) Computes the values that are applied to the =
attributes per frame (generally a YAHOO.util.Easing method)
    */=20
   init: function(el, attributes, duration, method) {
  =20
      /**
       * Whether or not the animation is running.
       * @private
       * @type Boolean
       */
      var isAnimated =3D false;
     =20
      /**
       * A Date object that is created when the animation begins.
       * @private
       * @type Date
       */
      var startTime =3D null;
     =20
      /**
       * A Date object that is created when the animation ends.
       * @private
       * @type Date
       */
      var endTime =3D null;
     =20
      /**
       * The number of frames this animation was able to execute.
       * @private
       * @type Int
       */
      var actualFrames =3D 0;
     =20
      /**
       * The attribute values that will be used if no "from" is =
supplied.
       * @private
       * @type Object
       */
      var defaultValues =3D {};     =20

      /**
       * The element to be animated.
       * @private
       * @type HTMLElement
       */
      el =3D YAHOO.util.Dom.get(el);
     =20
      /**
       * The collection of attributes to be animated. =20
       * Each attribute must have at least a "to" or "by" defined in =
order to animate. =20
       * If "to" is supplied, the animation will end with the attribute =
at that value. =20
       * If "by" is supplied, the animation will end at that value plus =
its starting value.=20
       * If both are supplied, "to" is used, and "by" is ignored.=20
       * @member YAHOO#util#Anim
       * Optional additional member include "from" (the value the =
attribute should start animating from, defaults to current value), and =
"unit" (the units to apply to the values).
       * @type Object
       */
      this.attributes =3D attributes || {};
     =20
      /**
       * The length of the animation.  Defaults to "1" (second).
       * @type Number
       */
      this.duration =3D duration || 1;
     =20
      /**
       * The method that will provide values to the attribute(s) during =
the animation.=20
       * Defaults to "YAHOO.util.Easing.easeNone".
       * @type Function
       */
      this.method =3D method || YAHOO.util.Easing.easeNone;

      /**
       * Whether or not the duration should be treated as seconds.
       * Defaults to true.
       * @type Boolean
       */
      this.useSeconds =3D true; // default to seconds
     =20
      /**
       * The location of the current animation on the timeline.
       * In time-based animations, this is used by AnimMgr to ensure the =
animation finishes on time.
       * @type Int
       */
      this.currentFrame =3D 0;
     =20
      /**
       * The total number of frames to be executed.
       * In time-based animations, this is used by AnimMgr to ensure the =
animation finishes on time.
       * @type Int
       */
      this.totalFrames =3D YAHOO.util.AnimMgr.fps;
     =20
     =20
      /**
       * Returns a reference to the animated element.
       * @return {HTMLElement}
       */
      this.getEl =3D function() { return el; };
     =20
     =20
      /**
       * Sets the default value to be used when "from" is not supplied.
       * @param {String} attribute The attribute being set.
       * @param {Number} val The default value to be applied to the =
attribute.
       */
      this.setDefault =3D function(attribute, val) {
         if ( val.constructor !=3D Array && (val =3D=3D 'auto' || =
isNaN(val)) ) { // if 'auto' or NaN, set defaults for well known =
attributes, zero for others
            switch(attribute) {
               case'width':
                  val =3D el.clientWidth || el.offsetWidth; // computed =
width
                  break;
               case 'height':
                  val =3D el.clientHeight || el.offsetHeight; // =
computed height
                  break;
               case 'left':
                  if (YAHOO.util.Dom.getStyle(el, 'position') =3D=3D =
'absolute') {
                     val =3D el.offsetLeft; // computed left
                  } else {
                     val =3D 0;
                  }
                  break;
               case 'top':
                  if (YAHOO.util.Dom.getStyle(el, 'position') =3D=3D =
'absolute') {
                     val =3D el.offsetTop; // computed top
                  } else {
                     val =3D 0;
                  }
                  break;                    =20
               default:
                  val =3D 0;
            }
         }

         defaultValues[attribute] =3D val;
      };
     =20
      /**
       * Returns the default value for the given attribute.
       * @param {String} attribute The attribute whose value will be =
returned.
       */     =20
      this.getDefault =3D function(attribute) {
         return defaultValues[attribute];
      };
     =20
      /**
       * Checks whether the element is currently animated.
       * @return {Boolean} current value of isAnimated.   =20
       */
      this.isAnimated =3D function() {
         return isAnimated;
      };
     =20
      /**
       * Returns the animation start time.
       * @return {Date} current value of startTime.    =20
       */
      this.getStartTime =3D function() {
         return startTime;
      };     =20
     =20
      /**
       * Starts the animation by registering it with the animation =
manager.  =20
       */
      this.animate =3D function() {
         if ( this.isAnimated() ) { return false; }
        =20
         this.onStart.fire();
         this._onStart.fire();
        =20
         this.totalFrames =3D ( this.useSeconds ) ? =
Math.ceil(YAHOO.util.AnimMgr.fps * this.duration) : this.duration;
         YAHOO.util.AnimMgr.registerElement(this);
        =20
         // get starting values or use defaults
         var attributes =3D this.attributes;
         var el =3D this.getEl();
         var val;
        =20
         for (var attribute in attributes) {
            val =3D this.getAttribute(attribute);
            this.setDefault(attribute, val);
         }
        =20
         isAnimated =3D true;
         actualFrames =3D 0;
         startTime =3D new Date();  =20
      };
       =20
      /**
       * Stops the animation.  Normally called by AnimMgr when animation =
completes.
       */=20
      this.stop =3D function() {
         if ( !this.isAnimated() ) { return false; }=20
        =20
         this.currentFrame =3D 0;
        =20
         endTime =3D new Date();
        =20
         var data =3D {
            time: endTime,
            duration: endTime - startTime,
            frames: actualFrames,
            fps: actualFrames / this.duration
         };

         isAnimated =3D false; =20
         actualFrames =3D 0;
        =20
         this.onComplete.fire(data);
      };
     =20
      /**
       * Feeds the starting and ending values for each animated =
attribute to doMethod once per frame, then applies the resulting value =
to the attribute(s).
       * @private
       */
      var onTween =3D function() {
         var start;
         var end =3D null;
         var val;
         var unit;
         var attributes =3D this['attributes'];
        =20
         for (var attribute in attributes) {
            unit =3D attributes[attribute]['unit'] || =
this.defaultUnits[attribute] || this.defaultUnit;
  =20
            if (typeof attributes[attribute]['from'] !=3D 'undefined') {
               start =3D attributes[attribute]['from'];
            } else {
               start =3D this.getDefault(attribute);
            }
  =20

            // To beats by, per SMIL 2.1 spec
            if (typeof attributes[attribute]['to'] !=3D 'undefined') {
               end =3D attributes[attribute]['to'];
            }=20
            else if (typeof attributes[attribute]['by'] !=3D =
'undefined')=20
            {
               if (start.constructor =3D=3D Array) {
                  end =3D [];
                  for (var i =3D 0, len =3D start.length; i < len; ++i)
                  {
                     end[i] =3D start[i] + =
attributes[attribute]['by'][i];
                  }
               }
               else
               {
                  end =3D start + attributes[attribute]['by'];
               }
            }
  =20
            // if end is null, dont change value
            if (end !=3D=3D null && typeof end !=3D 'undefined') {
  =20
               val =3D this.doMethod(attribute, start, end);

               // negative not allowed for these (others too, but these =
are most common)
               if ( (attribute =3D=3D 'width' || attribute =3D=3D =
'height' || attribute =3D=3D 'opacity') && val < 0 ) {
                  val =3D 0;
               }

               this.setAttribute(attribute, val, unit);=20
            }
         }
        =20
         actualFrames +=3D 1;
      };
     =20
      /**
       * Custom event that fires after onStart, useful in subclassing
       * @private
       */  =20
      this._onStart =3D new YAHOO.util.CustomEvent('_onStart', this);
     =20
      /**
       * Custom event that fires when animation begins
       * Listen via subscribe method (e.g. =
myAnim.onStart.subscribe(someFunction)
       */  =20
      this.onStart =3D new YAHOO.util.CustomEvent('start', this);
     =20
      /**
       * Custom event that fires between each frame
       * Listen via subscribe method (e.g. =
myAnim.onTween.subscribe(someFunction)
       */
      this.onTween =3D new YAHOO.util.CustomEvent('tween', this);
     =20
      /**
       * Custom event that fires after onTween
       * @private
       */
      this._onTween =3D new YAHOO.util.CustomEvent('_tween', this);
     =20
      /**
       * Custom event that fires when animation ends
       * Listen via subscribe method (e.g. =
myAnim.onComplete.subscribe(someFunction)
       */
      this.onComplete =3D new YAHOO.util.CustomEvent('complete', this);

      this._onTween.subscribe(onTween);
   }
};

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version: 0.10.0
*/

/**
 * @class Handles animation queueing and threading.
 * Used by Anim and subclasses.
 */
YAHOO.util.AnimMgr =3D new function() {
   /**=20
    * Reference to the animation Interval
    * @private
    * @type Int
    */
   var thread =3D null;
  =20
   /**=20
    * The current queue of registered animation objects.
    * @private
    * @type Array
    */  =20
   var queue =3D [];

   /**=20
    * The number of active animations.
    * @private
    * @type Int
    */     =20
   var tweenCount =3D 0;

   /**=20
    * Base frame rate (frames per second).=20
    * Arbitrarily high for better x-browser calibration (slower browsers =
drop more frames).
    * @type Int
    *=20
    */
   this.fps =3D 200;

   /**=20
    * Interval delay in milliseconds, defaults to fastest possible.
    * @type Int
    *=20
    */
   this.delay =3D 1;

   /**
    * Adds an animation instance to the animation queue.
    * All animation instances must be registered in order to animate.
    * @param {object} tween The Anim instance to be be registered
    */
   this.registerElement =3D function(tween) {
      if ( tween.isAnimated() ) { return false; }// but not if already =
animating
     =20
      queue[queue.length] =3D tween;
      tweenCount +=3D 1;

      this.start();
   };
  =20
   /**
    * Starts the animation thread.
	 * Only one thread can run at a time.
    */  =20
   this.start =3D function() {
      if (thread =3D=3D=3D null) { thread =3D setInterval(this.run, =
this.delay); }
   };

   /**
    * Stops the animation thread or a specific animation instance.
    * @param {object} tween A specific Anim instance to stop (optional)
    * If no instance given, Manager stops thread and all animations.
    */  =20
   this.stop =3D function(tween) {
      if (!tween)
      {
         clearInterval(thread);
         for (var i =3D 0, len =3D queue.length; i < len; ++i) {
            if (queue[i].isAnimated()) {
               queue[i].stop(); =20
            }
         }
         queue =3D [];
         thread =3D null;
         tweenCount =3D 0;
      }
      else {
         tween.stop();    =20
         tweenCount -=3D 1;
        =20
         if (tweenCount <=3D 0) { this.stop(); }
      }
   };
  =20
   /**
    * Called per Interval to handle each animation frame.
    */  =20
   this.run =3D function() {
      for (var i =3D 0, len =3D queue.length; i < len; ++i) {
         var tween =3D queue[i];
         if ( !tween || !tween.isAnimated() ) { continue; }

         if (tween.currentFrame < tween.totalFrames || tween.totalFrames =
=3D=3D=3D null)
         {
            tween.currentFrame +=3D 1;
           =20
            if (tween.useSeconds) {
               correctFrame(tween);
            }
           =20
            tween.onTween.fire();    =20
            tween._onTween.fire();       =20
         }
         else { YAHOO.util.AnimMgr.stop(tween); }
      }
   };
  =20
   /**
    * On the fly frame correction to keep animation on time.
    * @private
    * @param {Object} tween The Anim instance being corrected.
    */
   var correctFrame =3D function(tween) {
      var frames =3D tween.totalFrames;
      var frame =3D tween.currentFrame;
      var expected =3D (tween.currentFrame * tween.duration * 1000 / =
tween.totalFrames);
      var elapsed =3D (new Date() - tween.getStartTime());
      var tweak =3D 0;
     =20
      if (elapsed < tween.duration * 1000) { // check if falling behind
         tweak =3D Math.round((elapsed / expected - 1) * =
tween.currentFrame);
      } else { // went over duration, so jump to end
         tweak =3D frames - (frame + 1);=20
      }
      if (tweak > 0 && isFinite(tweak)) { // adjust if needed
         if (tween.currentFrame + tweak >=3D frames) {// dont go past =
last frame
            tweak =3D frames - (frame + 1);
         }
        =20
         tween.currentFrame +=3D tweak;    =20
      }
   };
};

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version: 0.10.0
*/

/**
 *
 * @class Used to calculate Bezier splines for any number of control =
points.
 *
 */
YAHOO.util.Bezier =3D new function()=20
{
   /**
    * Get the current position of the animated element based on t.
    * Each point is an array of "x" and "y" values (0 =3D x, 1 =3D y)
    * At least 2 points are required (start and end).
    * First point is start. Last point is end.
    * Additional control points are optional.   =20
    * @param {Array} points An array containing Bezier points
    * @param {Number} t A number between 0 and 1 which is the basis for =
determining current position
    * @return {Array} An array containing int x and y member data
    */
   this.getPosition =3D function(points, t)
   { =20
      var n =3D points.length;
      var tmp =3D [];

      for (var i =3D 0; i < n; ++i){
         tmp[i] =3D [points[i][0], points[i][1]]; // save input
      }
     =20
      for (var j =3D 1; j < n; ++j) {
         for (i =3D 0; i < n - j; ++i) {
            tmp[i][0] =3D (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, =
10)][0];
            tmp[i][1] =3D (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, =
10)][1];=20
         }
      }
  =20
      return [ tmp[0][0], tmp[0][1] ];=20
  =20
   };
};

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version: 0.10.0
*/

/**
 * @class Class for defining the acceleration rate and path of =
animations.
 */
YAHOO.util.Easing =3D new function() {

   /**
    * Uniform speed between points.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.easeNone =3D function(t, b, c, d) {
	return b+c*(t/=3Dd);=20
   };
  =20
   /**
    * Begins slowly and accelerates towards end.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.easeIn =3D function(t, b, c, d) {
   	return b+c*((t/=3Dd)*t*t);
   };
  =20
   /**
    * Begins quickly and decelerates towards end.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.easeOut =3D function(t, b, c, d) {
   	var ts=3D(t/=3Dd)*t;
   	var tc=3Dts*t;
   	return b+c*(tc + -3*ts + 3*t);
   };
  =20
   /**
    * Begins slowly and decelerates towards end.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.easeBoth =3D function(t, b, c, d) {
   	var ts=3D(t/=3Dd)*t;
   	var tc=3Dts*t;
   	return b+c*(-2*tc + 3*ts);
   };
  =20
   /**
    * Begins by going below staring value.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.backIn =3D function(t, b, c, d) {
   	var ts=3D(t/=3Dd)*t;
   	var tc=3Dts*t;
   	return b+c*(-3.4005*tc*ts + 10.2*ts*ts + -6.2*tc + 0.4*ts);
   };
  =20
   /**
    * End by going beyond ending value.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.backOut =3D function(t, b, c, d) {
   	var ts=3D(t/=3Dd)*t;
   	var tc=3Dts*t;
   	return b+c*(8.292*tc*ts + -21.88*ts*ts + 22.08*tc + -12.69*ts + =
5.1975*t);
   };
  =20
   /**
    * Starts by going below staring value, and ends by going beyond =
ending value.
    * @param {Number} t Time value used to compute current value.
    * @param {Number} b Starting value.
    * @param {Number} c Delta between start and end values.
    * @param {Number} d Total length of animation.
    * @return {Number} The computed value for the current animation =
frame.
    */
   this.backBoth =3D function(t, b, c, d) {
   	var ts=3D(t/=3Dd)*t;
   	var tc=3Dts*t;
   	return b+c*(0.402*tc*ts + -2.1525*ts*ts + -3.2*tc + 8*ts + -2.05*t);
   };
};

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version: 0.10.0
*/

/**
 * @class Anim subclass for moving elements along a path defined by the =
"points" member of "attributes".  All "points" are arrays with x, y =
coordinates.
 * <p>Usage: <code>var myAnim =3D new YAHOO.util.Motion(el, { points: { =
to: [800, 800] } }, 1, YAHOO.util.Easing.easeOut);</code></p>
 * @requires YAHOO.util.Anim
 * @requires YAHOO.util.AnimMgr
 * @requires YAHOO.util.Easing
 * @requires YAHOO.util.Bezier
 * @requires YAHOO.util.Dom
 * @requires YAHOO.util.Event
 * @requires YAHOO.util.CustomEvent=20
 * @constructor
 * @param {String or HTMLElement} el Reference to the element that will =
be animated
 * @param {Object} attributes The attribute(s) to be animated. =20
 * Each attribute is an object with at minimum a "to" or "by" member =
defined. =20
 * Additional optional members are "from" (defaults to current value), =
"units" (defaults to "px"). =20
 * All attribute names use camelCase.
 * @param {Number} duration (optional, defaults to 1 second) Length of =
animation (frames or seconds), defaults to time-based
 * @param {Function} method (optional, defaults to =
YAHOO.util.Easing.easeNone) Computes the values that are applied to the =
attributes per frame (generally a YAHOO.util.Easing method)
 */
YAHOO.util.Motion =3D function(el, attributes, duration, method) {
   if (el) {
      this.initMotion(el, attributes, duration, method);
   }
};

YAHOO.util.Motion.prototype =3D new YAHOO.util.Anim();

/**
 * Per attribute units that should be used by default.
 * Motion points default to 'px' units.
 * @type Object
 */
YAHOO.util.Motion.prototype.defaultUnits.points =3D 'px';

/**
 * Returns the value computed by the animation's "method".
 * @param {String} attribute The name of the attribute.
 * @param {Number} start The value this attribute should start from for =
this animation.
 * @param {Number} end  The value this attribute should end at for this =
animation.
 * @return {Number} The Value to be applied to the attribute.
 */
YAHOO.util.Motion.prototype.doMethod =3D function(attribute, start, end) =
{
   var val =3D null;
  =20
   if (attribute =3D=3D 'points') {
      var translatedPoints =3D this.getTranslatedPoints();
      var t =3D this.method(this.currentFrame, 0, 100, this.totalFrames) =
/ 100;			=09
  =20
      if (translatedPoints) {
         val =3D YAHOO.util.Bezier.getPosition(translatedPoints, t);
      }
     =20
   } else {
      val =3D this.method(this.currentFrame, start, end - start, =
this.totalFrames);
   }
  =20
   return val;
};

/**
 * Returns current value of the attribute.
 * @param {String} attribute The name of the attribute.
 * @return {Number} val The current value of the attribute.
 */
YAHOO.util.Motion.prototype.getAttribute =3D function(attribute) {
   var val =3D null;
  =20
   if (attribute =3D=3D 'points') {
      val =3D [ this.getAttribute('left'), this.getAttribute('top') ];
      if ( isNaN(val[0]) ) { val[0] =3D 0; }
      if ( isNaN(val[1]) ) { val[1] =3D 0; }
   } else {
      val =3D parseFloat( YAHOO.util.Dom.getStyle(this.getEl(), =
attribute) );
   }
  =20
   return val;
};

/**
 * Applies a value to an attribute
 * @param {String} attribute The name of the attribute.
 * @param {Number} val The value to be applied to the attribute.
 * @param {String} unit The unit ('px', '%', etc.) of the value.
 */
YAHOO.util.Motion.prototype.setAttribute =3D function(attribute, val, =
unit) {
   if (attribute =3D=3D 'points') {
      YAHOO.util.Dom.setStyle(this.getEl(), 'left', val[0] + unit);
      YAHOO.util.Dom.setStyle(this.getEl(), 'top', val[1] + unit);
   } else {
      YAHOO.util.Dom.setStyle(this.getEl(), attribute, val + unit);=20
   }
};

/**
 * @param {String or HTMLElement} el Reference to the element that will =
be animated
 * @param {Object} attributes The attribute(s) to be animated. =20
 * Each attribute is an object with at minimum a "to" or "by" member =
defined. =20
 * Additional optional members are "from" (defaults to current value), =
"units" (defaults to "px"). =20
 * All attribute names use camelCase.
 * @param {Number} duration (optional, defaults to 1 second) Length of =
animation (frames or seconds), defaults to time-based
 * @param {Function} method (optional, defaults to =
YAHOO.util.Easing.easeNone) Computes the values that are applied to the =
attributes per frame (generally a YAHOO.util.Easing method)
 */=20
YAHOO.util.Motion.prototype.initMotion =3D function(el, attributes, =
duration, method) {
   YAHOO.util.Anim.call(this, el, attributes, duration, method);
  =20
   attributes =3D attributes || {};
   attributes.points =3D attributes.points || {};
   attributes.points.control =3D attributes.points.control || [];
  =20
   this.attributes =3D attributes;
  =20
   var start;
   var end =3D null;
   var translatedPoints =3D null;
  =20
   this.getTranslatedPoints =3D function() { return translatedPoints; };
  =20
   var translateValues =3D function(val, self) {
      var pageXY =3D YAHOO.util.Dom.getXY(self.getEl());
      val =3D [ val[0] - pageXY[0] + start[0], val[1] - pageXY[1] + =
start[1] ];
  =20
      return val;=20
   };
  =20
   var onStart =3D function() {
      start =3D this.getAttribute('points');
      var attributes =3D this.attributes;
      var control =3D  attributes['points']['control'] || [];

      if (control.length > 0 && control[0].constructor !=3D Array) { // =
could be single point or array of points
         control =3D [control];
      }
     =20
      if (YAHOO.util.Dom.getStyle(this.getEl(), 'position') =3D=3D =
'static') { // default to relative
         YAHOO.util.Dom.setStyle(this.getEl(), 'position', 'relative');
      }

      if (typeof attributes['points']['from'] !=3D 'undefined') {
         YAHOO.util.Dom.setXY(this.getEl(), =
attributes['points']['from']); // set to from point
         start =3D this.getAttribute('points'); // get actual offset =
values
      }=20
      else if ((start[0] =3D=3D=3D 0 || start[1] =3D=3D=3D 0)) { // =
these sometimes up when auto
         YAHOO.util.Dom.setXY(this.getEl(), =
YAHOO.util.Dom.getXY(this.getEl())); // set it to current position, =
giving offsets
         start =3D this.getAttribute('points'); // get actual offset =
values
      }

      var i, len;
      // TO beats BY, per SMIL 2.1 spec
      if (typeof attributes['points']['to'] !=3D 'undefined') {
         end =3D translateValues(attributes['points']['to'], this);
        =20
         for (i =3D 0, len =3D control.length; i < len; ++i) {
            control[i] =3D translateValues(control[i], this);
         }
        =20
      } else if (typeof attributes['points']['by'] !=3D 'undefined') {
         end =3D [ start[0] + attributes['points']['by'][0], start[1] + =
attributes['points']['by'][1]];
        =20
         for (i =3D 0, len =3D control.length; i < len; ++i) {
            control[i] =3D [ start[0] + control[i][0], start[1] + =
control[i][1] ];
         }
      }

      if (end) {
         translatedPoints =3D [start];
        =20
         if (control.length > 0) { translatedPoints =3D =
translatedPoints.concat(control); }
        =20
         translatedPoints[translatedPoints.length] =3D end;
      }
   };
  =20
   this._onStart.subscribe(onStart);
};

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
Version: 0.10.0
*/

/**
 * @class Anim subclass for scrolling elements to a position defined by =
the "scroll" member of "attributes".  All "scroll" members are arrays =
with x, y scroll positions.
 * <p>Usage: <code>var myAnim =3D new YAHOO.util.Scroll(el, { scroll: { =
to: [0, 800] } }, 1, YAHOO.util.Easing.easeOut);</code></p>
 * @requires YAHOO.util.Anim
 * @requires YAHOO.util.AnimMgr
 * @requires YAHOO.util.Easing
 * @requires YAHOO.util.Bezier
 * @requires YAHOO.util.Dom
 * @requires YAHOO.util.Event
 * @requires YAHOO.util.CustomEvent=20
 * @constructor
 * @param {String or HTMLElement} el Reference to the element that will =
be animated
 * @param {Object} attributes The attribute(s) to be animated. =20
 * Each attribute is an object with at minimum a "to" or "by" member =
defined. =20
 * Additional optional members are "from" (defaults to current value), =
"units" (defaults to "px"). =20
 * All attribute names use camelCase.
 * @param {Number} duration (optional, defaults to 1 second) Length of =
animation (frames or seconds), defaults to time-based
 * @param {Function} method (optional, defaults to =
YAHOO.util.Easing.easeNone) Computes the values that are applied to the =
attributes per frame (generally a YAHOO.util.Easing method)
 */
YAHOO.util.Scroll =3D function(el, attributes, duration,  method) {
   if (el) {
      YAHOO.util.Anim.call(this, el, attributes, duration, method);
   }
};

YAHOO.util.Scroll.prototype =3D new YAHOO.util.Anim();

/**
 * Per attribute units that should be used by default.
 * Scroll positions default to no units.
 * @type Object
 */
YAHOO.util.Scroll.prototype.defaultUnits.scroll =3D ' ';

/**
 * Returns the value computed by the animation's "method".
 * @param {String} attribute The name of the attribute.
 * @param {Number} start The value this attribute should start from for =
this animation.
 * @param {Number} end  The value this attribute should end at for this =
animation.
 * @return {Number} The Value to be applied to the attribute.
 */
YAHOO.util.Scroll.prototype.doMethod =3D function(attribute, start, end) =
{
   var val =3D null;

   if (attribute =3D=3D 'scroll') {
      val =3D [
         this.method(this.currentFrame, start[0], end[0] - start[0], =
this.totalFrames),
         this.method(this.currentFrame, start[1], end[1] - start[1], =
this.totalFrames)
      ];
     =20
   } else {
      val =3D this.method(this.currentFrame, start, end - start, =
this.totalFrames);
   }
   return val;
};

/**
 * Returns current value of the attribute.
 * @param {String} attribute The name of the attribute.
 * @return {Number} val The current value of the attribute.
 */
YAHOO.util.Scroll.prototype.getAttribute =3D function(attribute) {
   var val =3D null;
   var el =3D this.getEl();
  =20
   if (attribute =3D=3D 'scroll') {
      val =3D [ el.scrollLeft, el.scrollTop ];
   } else {
      val =3D parseFloat( YAHOO.util.Dom.getStyle(el, attribute) );
   }
  =20
   return val;
};

/**
 * Applies a value to an attribute
 * @param {String} attribute The name of the attribute.
 * @param {Number} val The value to be applied to the attribute.
 * @param {String} unit The unit ('px', '%', etc.) of the value.
 */
YAHOO.util.Scroll.prototype.setAttribute =3D function(attribute, val, =
unit) {
   var el =3D this.getEl();
  =20
   if (attribute =3D=3D 'scroll') {
      el.scrollLeft =3D val[0];
      el.scrollTop =3D val[1];
   } else {
      YAHOO.util.Dom.setStyle(el, attribute, val + unit);=20
   }
};

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/dragdrop.js

/*                                                                       =
                                                                         =
     =20
Copyright (c) 2006, Yahoo! Inc. All rights reserved.                     =
                                                                         =
     =20
Code licensed under the BSD License:                                     =
                                                                         =
     =20
http://developer.yahoo.net/yui/license.txt                               =
                                                                         =
     =20
version: 0.10.0                                                          =
                                                                         =
     =20
*/=20

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

/**
 * Defines the interface and base operation of items that that can be=20
 * dragged or can be drop targets.  It was designed to be extended, =
overriding
 * the event handlers for startDrag, onDrag, onDragOver, onDragOut.
 * Up to three html elements can be associated with a DragDrop instance:
 * <ul>
 * <li>linked element: the element that is passed into the constructor.
 * This is the element which defines the boundaries for interaction with =

 * other DragDrop objects.</li>
 * <li>handle element(s): The drag operation only occurs if the element =
that=20
 * was clicked matches a handle element.  By default this is the linked=20
 * element, but there are times that you will want only a portion of the =

 * linked element to initiate the drag operation, and the =
setHandleElId()=20
 * method provides a way to define this.</li>
 * <li>drag element: this represents an the element that would be moved =
along
 * with the cursor during a drag operation.  By default, this is the =
linked
 * element itself as in {@link YAHOO.util.DD}.  setDragElId() lets you =
define
 * a separate element that would be moved, as in {@link =
YAHOO.util.DDProxy}
 * </li>
 * </ul>
 * This class should not be instantiated until the onload event to =
ensure that
 * the associated elements are available.
 * The following would define a DragDrop obj that would interact with =
any=20
 * other * DragDrop obj in the "group1" group:
 * <pre>
 *  dd =3D new YAHOO.util.DragDrop("div1", "group1");
 * </pre>
 * Since none of the event handlers have been implemented, nothing would =

 * actually happen if you were to run the code above.  Normally you =
would=20
 * override this class or one of the default implementations, but you =
can=20
 * also override the methods you want on an instance of the class...
 * <pre>
 *  dd.onDragDrop =3D function(e, id) {
 *   alert("dd was dropped on " + id);
 *  }
 * </pre>
 * @constructor
 * @param {String} id of the element that is linked to this instance
 * @param {String} sGroup the group of related DragDrop objects
 */
YAHOO.util.DragDrop =3D function(id, sGroup) {
    if (id) {
        this.init(id, sGroup);=20
    }
};

YAHOO.util.DragDrop.prototype =3D {

    /**
     * The id of the element associated with this object.  This is what =
we=20
     * refer to as the "linked element" because the size and position of =

     * this element is used to determine when the drag and drop objects =
have=20
     * interacted.
     *
     * @type String
     */
    id: null,

    /**
     * The id of the element that will be dragged.  By default this is =
same=20
     * as the linked element , but could be changed to another element. =
Ex:=20
     * YAHOO.util.DDProxy
     *
     * @type String
     * @private
     */
    dragElId: null,=20

    /**
     * the id of the element that initiates the drag operation.  By =
default=20
     * this is the linked element, but could be changed to be a child of =
this
     * element.  This lets us do things like only starting the drag when =
the=20
     * header element within the linked html element is clicked.
     *
     * @type String
     * @private
     */
    handleElId: null,=20

    /**
     * An associative array of HTML tags that will be ignored if =
clicked.
     * @type {string: string}
     */
    invalidHandleTypes: null,=20

    /**
     * An associative array of ids for elements that will be ignored if =
clicked
     * @type {string: string}
     */
    invalidHandleIds: null,=20

    /**
     * An indexted array of css class names for elements that will be =
ignored
     * if clicked.
     * @type string[]
     */
    invalidHandleClasses: null,=20

    /**
     * The linked element's absolute X position at the time the drag was =

     * started
     *
     * @type int
     * @private
     */
    startPageX: 0,

    /**
     * The linked element's absolute X position at the time the drag was =

     * started
     *
     * @type int
     * @private
     */
    startPageY: 0,

    /**
     * The group defines a logical collection of DragDrop objects that =
are=20
     * related.  Instances only get events when interacting with other=20
     * DragDrop object in the same group.  This lets us define multiple=20
     * groups using a single DragDrop subclass if we want.
     * @type {string: string}
     */
    groups: null,

    /**
     * Individual drag/drop instances can be locked.  This will prevent=20
     * onmousedown start drag.
     *
     * @type boolean
     * @private
     */
    locked: false,

    /**
     * Lock this instance
     */
    lock: function() { this.locked =3D true; },

    /**
     * Unlock this instace
     */
    unlock: function() { this.locked =3D false; },

    /**
     * By default, all insances can be a drop target.  This can be =
disabled by
     * setting isTarget to false.
     *
     * @type boolean
     */
    isTarget: true,

    /**
     * The padding configured for this drag and drop object for =
calculating
     * the drop zone intersection with this object.
     * @type int[]
     */
    padding: null,

    /**
     * @private
     */
    _domRef: null,

    /**
     * Internal typeof flag
     * @private
     */
    __ygDragDrop: true,

    /**
     * Set to true when horizontal contraints are applied
     *
     * @type boolean
     * @private
     */
    constrainX: false,

    /**
     * Set to true when vertical contraints are applied
     *
     * @type boolean
     * @private
     */
    constrainY: false,

    /**
     * The left constraint
     *
     * @type int
     * @private
     */
    minX: 0,

    /**
     * The right constraint
     *
     * @type int
     * @private
     */
    maxX: 0,

    /**
     * The up constraint=20
     *
     * @type int
     * @private
     */
    minY: 0,

    /**
     * The down constraint=20
     *
     * @type int
     * @private
     */
    maxY: 0,

    /**
     * Maintain offsets when we resetconstraints.  Used to maintain the=20
     * slider thumb value, and this needs to be fixed.
     * @type boolean
     */
    maintainOffset: false,

    /**
     * Array of pixel locations the element will snap to if we specified =
a=20
     * horizontal graduation/interval.  This array is generated =
automatically
     * when you define a tick interval.
     * @type int[]
     */
    xTicks: null,

    /**
     * Array of pixel locations the element will snap to if we specified =
a=20
     * vertical graduation/interval.  This array is generated =
automatically=20
     * when you define a tick interval.
     * @type int[]
     */
    yTicks: null,

    /**
     * By default the drag and drop instance will only respond to the =
primary
     * button click (left button for a right-handed mouse).  Set to true =
to
     * allow drag and drop to start with any mouse click that is =
propogated
     * by the browser
     * @type boolean
     */
    primaryButtonOnly: true,

    /**
     * The availabe property is false until the linked dom element is =
accessible.
     * @type boolean
     */
    available: false,

    /**
     * Code that executes immediately before the startDrag event
     * @private
     */
    b4StartDrag: function(x, y) { },

    /**
     * Abstract method called after a drag/drop object is clicked
     * and the drag or mousedown time thresholds have beeen met.
     *
     * @param {int} X click location
     * @param {int} Y click location
     */
    startDrag: function(x, y) { /* override this */ },

    /**
     * Code that executes immediately before the onDrag event
     * @private
     */
    b4Drag: function(e) { },

    /**
     * Abstract method called during the onMouseMove event while =
dragging an=20
     * object.
     *
     * @param {Event} e
     */
    onDrag: function(e) { /* override this */ },

    /**
     * Code that executes immediately before the onDragEnter event
     * @private
     */
    // b4DragEnter: function(e) { },

    /**
     * Abstract method called when this element fist begins hovering =
over=20
     * another DragDrop obj
     *
     * @param {Event} e
     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the =
element
     * id this is hovering over.  In INTERSECT mode, an array of one or =
more=20
     * dragdrop items being hovered over.
     */
    onDragEnter: function(e, id) { /* override this */ },

    /**
     * Code that executes immediately before the onDragOver event
     * @private
     */
    b4DragOver: function(e) { },

    /**
     * Abstract method called when this element is hovering over another =

     * DragDrop obj
     *
     * @param {Event} e
     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the =
element
     * id this is hovering over.  In INTERSECT mode, an array of dd =
items=20
     * being hovered over.
     */
    onDragOver: function(e, id) { /* override this */ },

    /**
     * Code that executes immediately before the onDragOut event
     * @private
     */
    b4DragOut: function(e) { },

    /**
     * Abstract method called when we are no longer hovering over an =
element
     *
     * @param {Event} e
     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the =
element
     * id this was hovering over.  In INTERSECT mode, an array of dd =
items=20
     * that the mouse is no longer over.
     */
    onDragOut: function(e, id) { /* override this */ },

    /**
     * Code that executes immediately before the onDragDrop event
     * @private
     */
    b4DragDrop: function(e) { },

    /**
     * Abstract method called when this item is dropped on another =
DragDrop=20
     * obj
     *
     * @param {Event} e
     * @param {String || YAHOO.util.DragDrop[]} id In POINT mode, the =
element
     * id this was dropped on.  In INTERSECT mode, an array of dd items =
this=20
     * was dropped on.
     */
    onDragDrop: function(e, id) { /* override this */ },

    /**
     * Code that executes immediately before the endDrag event
     * @private
     */
    b4EndDrag: function(e) { },

    /**
     * Fired when we are done dragging the object
     *
     * @param {Event} e
     */
    endDrag: function(e) { /* override this */ },

    /**
     * Code executed immediately before the onMouseDown event

     * @param {Event} e
     * @private
     */
    b4MouseDown: function(e) {  },

    /**
     * Event handler that fires when a drag/drop obj gets a mousedown
     * @param {Event} e
     */
    onMouseDown: function(e) { /* override this */ },

    /**
     * Event handler that fires when a drag/drop obj gets a mouseup
     * @param {Event} e
     */
    onMouseUp: function(e) { /* override this */ },
  =20
    /**
     * Override the onAvailable method to do what is needed after the =
initial
     * position was determined.
     */
    onAvailable: function () {=20
    },

    /**
     * Returns a reference to the linked element
     *
     * @return {HTMLElement} the html element=20
     */
    getEl: function() {=20
        if (!this._domRef) {
            this._domRef =3D this.DDM.getElement(this.id);=20
        }

        return this._domRef;
    },

    /**
     * Returns a reference to the actual element to drag.  By default =
this is
     * the same as the html element, but it can be assigned to another=20
     * element. An example of this can be found in YAHOO.util.DDProxy
     *
     * @return {HTMLElement} the html element=20
     */
    getDragEl: function() {
        return this.DDM.getElement(this.dragElId);
    },

    /**
     * Sets up the DragDrop object.  Must be called in the constructor =
of any
     * YAHOO.util.DragDrop subclass
     *
     * @param id the id of the linked element
     * @param {String} sGroup the group of related items
     * element is supposed to be a target only, set to false.
     */
    init: function(id, sGroup) {
        this.initTarget(id, sGroup);
        YAHOO.util.Event.addListener(this.id, "mousedown",=20
                                          this.handleMouseDown, this, =
true);
    },

    /**
     * Initializes Targeting functionality only... the object does not
     * get a mousedown handler.
     *
     * @param id the id of the linked element
     * @param {String} sGroup the group of related items
     * element is supposed to be a target only, set to false.
     */
    initTarget: function(id, sGroup) {

        // create a local reference to the drag and drop manager
        this.DDM =3D YAHOO.util.DDM;


        // set the default padding
        this.padding =3D [0, 0, 0, 0];

        // initialize the groups array
        this.groups =3D {};

        // set the id
        this.id =3D id;

        // the element is a drag handle by default
        this.setDragElId(id);=20

        // by default, clicked anchors will not start drag operations
        this.invalidHandleTypes =3D { A: "A" };
        this.invalidHandleIds =3D {};
        this.invalidHandleClasses =3D [];

        // We don't want to register this as the handle with the manager
        // so we just set the id rather than calling the setter
        this.handleElId =3D id;

        // cache the position of the element if we can
        // if (document && document.body) {
            // this.setInitPosition();
        // }

        // var self =3D this;
        YAHOO.util.Event.onAvailable(id, this.handleOnAvailable, this, =
true);

        // add to an interaction group
        this.addToGroup((sGroup) ? sGroup : "default");
    },

    /**
     * Executed when the linked element is available
     * @private
     */
    handleOnAvailable: function() {
        this.available =3D true;
        this.resetConstraints();
        this.onAvailable();
    },

     /**
     * Configures the padding for the target zone in px.  Effectively =
expands
     * (or reduces) the virtual object size for targeting calculations.  =

     * Supports css-style shorthand; if only one parameter is passed, =
all sides
     * will have that padding, and if only two are passed, the top and =
bottom
     * will have the first param, the left and right the second.
     * @param {int} iTop    Top pad
     * @param {int} iRight  Right pad
     * @param {int} iBot    Bot pad
     * @param {int} iLeft   Left pad
     */
    setPadding: function(iTop, iRight, iBot, iLeft) {
        // this.padding =3D [iLeft, iRight, iTop, iBot];
        if (!iRight && 0 !=3D=3D iRight) {
            this.padding =3D [iTop, iTop, iTop, iTop];
        } else if (!iBot && 0 !=3D=3D iBot) {
            this.padding =3D [iTop, iRight, iTop, iRight];
        } else {
            this.padding =3D [iTop, iRight, iBot, iLeft];
        }
    },

    /**
     * Stores the initial placement of the dd element
     */
    setInitPosition: function(diffX, diffY) {
        var el =3D this.getEl();

        if (!this.DDM.verifyEl(el)) {
            return;
        }

        var dx =3D diffX || 0;
        var dy =3D diffY || 0;

        var p =3D YAHOO.util.Dom.getXY( el );

        this.initPageX =3D p[0] - dx;
        this.initPageY =3D p[1] - dy;

        this.lastPageX =3D p[0];
        this.lastPageY =3D p[1];


        this.setStartPosition(p);
    },

    /**
     * Sets the start position of the element.  This is set when the obj
     * is initialized, the reset when a drag is started.
     * @param pos current position (from previous lookup)
     * @private
     */
    setStartPosition: function(pos) {

        var p =3D pos || YAHOO.util.Dom.getXY( this.getEl() );

        this.startPageX =3D p[0];
        this.startPageY =3D p[1];
    },

    /**
     * Add this instance to a group of related drag/drop objects.  All=20
     * instances belong to at least one group, and can belong to as many =

     * groups as needed.
     *
     * @param sGroup {string} the name of the group
     */
    addToGroup: function(sGroup) {
        this.groups[sGroup] =3D true;
        this.DDM.regDragDrop(this, sGroup);
    },

    /**
     * Allows you to specify that an element other than the linked =
element=20
     * will be moved with the cursor during a drag
     *
     * @param id the id of the element that will be used to initiate the =
drag
     */
    setDragElId: function(id) {
        this.dragElId =3D id;
    },

    /**
     * Allows you to specify a child of the linked element that should =
be=20
     * used to initiate the drag operation.  An example of this would be =
if=20
     * you have a content div with text and links.  Clicking anywhere in =
the=20
     * content area would normally start the drag operation.  Use this =
method
     * to specify that an element inside of the content div is the =
element=20
     * that starts the drag operation.
     *
     * @param id the id of the element that will be used to initiate the =
drag
     */
    setHandleElId: function(id) {
        this.handleElId =3D id;
        this.DDM.regHandle(this.id, id);
    },

    /**
     * Allows you to set an element outside of the linked element as a =
drag=20
     * handle
     */
    setOuterHandleElId: function(id) {
        YAHOO.util.Event.addListener(id, "mousedown",=20
                this.handleMouseDown, this, true);
        this.setHandleElId(id);
    },

    /**
     * Remove all drag and drop hooks for this element
     */
    unreg: function() {
        YAHOO.util.Event.removeListener(this.id, "mousedown",=20
                this.handleMouseDown);
        this._domRef =3D null;
        this.DDM._remove(this);
    },

    /**
     * Returns true if this instance is locked, or the drag drop mgr is =
locked
     * (meaning that all drag/drop is disabled on the page.)
     *
     * @return {boolean} true if this obj or all drag/drop is locked, =
else=20
     * false
     */
    isLocked: function() {
        return (this.DDM.isLocked() || this.locked);
    },

    /**
     * Fired when this object is clicked
     *
     * @param {Event} e=20
     * @param {YAHOO.util.DragDrop} oDD the clicked dd object (this dd =
obj)
     * @private
     */
    handleMouseDown: function(e, oDD) {


        var EU =3D YAHOO.util.Event;

        var button =3D e.which || e.button;

        if (this.primaryButtonOnly && button > 1) {
            return;
        }

        if (this.isLocked()) {
            return;
        }


        this.DDM.refreshCache(this.groups);

        // Only process the event if we really clicked within the linked =

        // element.  The reason we make this check is that in the case =
that=20
        // another element was moved between the clicked element and the =

        // cursor in the time between the mousedown and mouseup events. =
When=20
        // this happens, the element gets the next mousedown event=20
        // regardless of where on the screen it happened. =20
        var pt =3D new YAHOO.util.Point(EU.getPageX(e), EU.getPageY(e));
        if ( this.DDM.isOverTarget(pt, this) )  {


            //  check to see if the handle was clicked
            var srcEl =3D EU.getTarget(e);

            if (this.isValidHandleChild(srcEl) &&
                    (this.id =3D=3D this.handleElId ||=20
                     this.DDM.handleWasClicked(srcEl, this.id)) ) {


                // set the initial element position
                this.setStartPosition();


                this.b4MouseDown(e);
                this.onMouseDown(e);
                this.DDM.handleMouseDown(e, this);

                this.DDM.stopEvent(e);
            }
        }
    },

    /**
     * Allows you to specify a tag name that should not start a drag =
operation
     * when clicked.  This is designed to facilitate embedding links =
within a
     * drag handle that do something other than start the drag.
     *=20
     * @param {string} tagName the type of element to exclude
     */
    addInvalidHandleType: function(tagName) {
        var type =3D tagName.toUpperCase();
        this.invalidHandleTypes[type] =3D type;
    },

    /**
     * Lets you to specify an element id for a child of a drag handle
     * that should not initiate a drag
     * @param {string} id the element id of the element you wish to =
ignore
     */
    addInvalidHandleId: function(id) {
        this.invalidHandleIds[id] =3D id;
    },

    /**
     * Lets you specify a css class of elements that will not initiate a =
drag
     * @param {string} cssClass the class of the elements you wish to =
ignore
     */
    addInvalidHandleClass: function(cssClass) {
        this.invalidHandleClasses.push(cssClass);
    },

    /**
     * Unsets an excluded tag name set by addInvalidHandleType
     *=20
     * @param {string} tagName the type of element to unexclude
     */
    removeInvalidHandleType: function(tagName) {
        var type =3D tagName.toUpperCase();
        // this.invalidHandleTypes[type] =3D null;
        delete this.invalidHandleTypes[type];
    },
   =20
    /**
     * Unsets an invalid handle id
     * @param {string} the id of the element to re-enable
     */
    removeInvalidHandleId: function(id) {
        delete this.invalidHandleIds[id];
    },

    /**
     * Unsets an invalid css class
     * @param {string} the class of the element(s) you wish to re-enable
     */
    removeInvalidHandleClass: function(cssClass) {
        for (var i=3D0, len=3Dthis.invalidHandleClasses.length; i<len; =
++i) {
            if (this.invalidHandleClasses[i] =3D=3D cssClass) {
                delete this.invalidHandleClasses[i];
            }
        }
    },

    /**
     * Checks the tag exclusion list to see if this click should be =
ignored
     *
     * @param {ygNode} node
     * @return {boolean} true if this is a valid tag type, false if not
     */
    isValidHandleChild: function(node) {
        // var type =3D node.nodeName;

        // if (type =3D=3D "#text") {
            // type =3D node.parentNode.nodeName;
        // }

        var valid =3D true;
        var n =3D (node.nodeName =3D=3D "#text") ? node.parentNode : =
node;
        valid =3D valid && !this.invalidHandleTypes[n.nodeName];
        valid =3D valid && !this.invalidHandleIds[n.id];

        for (var i=3D0, len=3Dthis.invalidHandleClasses.length; valid && =
i<len; ++i) {
            valid =3D !YAHOO.util.Dom.hasClass(n, =
this.invalidHandleClasses[i]);
        }


        return valid;

        //return ( !(this.invalidHandleTypes[n.nodeName] ||=20
                    //this.invalidHandleIds[n.id]) );
    },

    /**
     * Create the array of horizontal tick marks if an interval was =
specified
     * in setXConstraint().
     *
     * @private
     */
    setXTicks: function(iStartX, iTickSize) {
        this.xTicks =3D [];
        this.xTickSize =3D iTickSize;
       =20
        var tickMap =3D {};

        for (var i =3D this.initPageX; i >=3D this.minX; i =3D i - =
iTickSize) {
            if (!tickMap[i]) {
                this.xTicks[this.xTicks.length] =3D i;
                tickMap[i] =3D true;
            }
        }

        for (i =3D this.initPageX; i <=3D this.maxX; i =3D i + =
iTickSize) {
            if (!tickMap[i]) {
                this.xTicks[this.xTicks.length] =3D i;
                tickMap[i] =3D true;
            }
        }

        this.xTicks.sort(this.DDM.numericSort) ;
    },

    /**
     * Create the array of vertical tick marks if an interval was =
specified in=20
     * setYConstraint().
     *
     * @private
     */
    setYTicks: function(iStartY, iTickSize) {
        this.yTicks =3D [];
        this.yTickSize =3D iTickSize;

        var tickMap =3D {};

        for (var i =3D this.initPageY; i >=3D this.minY; i =3D i - =
iTickSize) {
            if (!tickMap[i]) {
                this.yTicks[this.yTicks.length] =3D i;
                tickMap[i] =3D true;
            }
        }

        for (i =3D this.initPageY; i <=3D this.maxY; i =3D i + =
iTickSize) {
            if (!tickMap[i]) {
                this.yTicks[this.yTicks.length] =3D i;
                tickMap[i] =3D true;
            }
        }

        this.yTicks.sort(this.DDM.numericSort) ;
    },

    /**
     * By default, the element can be dragged any place on the screen.  =
Use=20
     * this method to limit the horizontal travel of the element.  Pass =
in=20
     * 0,0 for the parameters if you want to lock the drag to the y =
axis.
     *
     * @param {int} iLeft the number of pixels the element can move to =
the left
     * @param {int} iRight the number of pixels the element can move to =
the=20
     * right
     * @param {int} iTickSize optional parameter for specifying that the =

     * element
     * should move iTickSize pixels at a time.
     */
    setXConstraint: function(iLeft, iRight, iTickSize) {
        this.leftConstraint =3D iLeft;

        this.rightConstraint =3D iRight;

        this.minX =3D this.initPageX - iLeft;
        this.maxX =3D this.initPageX + iRight;
        if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }

        this.constrainX =3D true;
    },

    /**
     * By default, the element can be dragged any place on the screen.  =
Set=20
     * this to limit the vertical travel of the element.  Pass in 0,0 =
for the
     * parameters if you want to lock the drag to the x axis.
     *
     * @param {int} iUp the number of pixels the element can move up
     * @param {int} iDown the number of pixels the element can move down
     * @param {int} iTickSize optional parameter for specifying that the =

     * element should move iTickSize pixels at a time.
     */
    setYConstraint: function(iUp, iDown, iTickSize) {
        this.topConstraint =3D iUp;
        this.bottomConstraint =3D iDown;

        this.minY =3D this.initPageY - iUp;
        this.maxY =3D this.initPageY + iDown;
        if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }

        this.constrainY =3D true;
       =20
    },

    /**
     * resetConstraints must be called if you manually reposition a dd =
element.
     * @param {boolean} maintainOffset
     */
    resetConstraints: function() {


        // Maintain offsets if necessary
        if (this.initPageX || this.initPageX =3D=3D=3D 0) {
            // figure out how much this thing has moved
            var dx =3D (this.maintainOffset) ? this.lastPageX - =
this.initPageX : 0;
            var dy =3D (this.maintainOffset) ? this.lastPageY - =
this.initPageY : 0;

            this.setInitPosition(dx, dy);

        // This is the first time we have detected the element's =
position
        } else {
            this.setInitPosition();
        }

        if (this.constrainX) {
            this.setXConstraint( this.leftConstraint,=20
                                 this.rightConstraint,=20
                                 this.xTickSize        );
        }

        if (this.constrainY) {
            this.setYConstraint( this.topConstraint,=20
                                 this.bottomConstraint,=20
                                 this.yTickSize         );
        }
    },

    /**
     * Normally the drag element is moved pixel by pixel, but we can =
specify=20
     * that it move a number of pixels at a time.  This method resolves =
the=20
     * location when we have it set up like this.
     *
     * @param {int} val where we want to place the object
     * @param {int[]} tickArray sorted array of valid points
     * @return {int} the closest tick
     * @private
     */
    getTick: function(val, tickArray) {

        if (!tickArray) {
            // If tick interval is not defined, it is effectively 1 =
pixel,=20
            // so we return the value passed to us.
            return val;=20
        } else if (tickArray[0] >=3D val) {
            // The value is lower than the first tick, so we return the =
first
            // tick.
            return tickArray[0];
        } else {
            for (var i=3D0, len=3DtickArray.length; i<len; ++i) {
                var next =3D i + 1;
                if (tickArray[next] && tickArray[next] >=3D val) {
                    var diff1 =3D val - tickArray[i];
                    var diff2 =3D tickArray[next] - val;
                    return (diff2 > diff1) ? tickArray[i] : =
tickArray[next];
                }
            }

            // The value is larger than the last tick, so we return the =
last
            // tick.
            return tickArray[tickArray.length - 1];
        }
    },

    /**
     * toString method
     * @return {string} string representation of the dd obj
     */
    toString: function(val, tickArray) {
        return ("YAHOO.util.DragDrop {" + this.id + "}");
    }

};

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

// Only load the library once.  Rewriting the manager class would orphan =

// existing drag and drop instances.
if (!YAHOO.util.DragDropMgr) {

    /**
     * Handles the element interaction for all DragDrop items in the=20
     * window.  Generally, you will not call this class directly, but it =
does
     * have helper methods that could be useful in your DragDrop=20
     * implementations.  This class should not be instantiated; all =
methods=20
     * are are static.
     *
     * @constructor
     */
    YAHOO.util.DragDropMgr =3D new function() {

        /**
         * Two dimensional Array of registered DragDrop objects.  The =
first=20
         * dimension is the DragDrop item group, the second the DragDrop =

         * object.
         *
         * @type {string: string}
         * @private
         */
        this.ids =3D {};

        /**
         * Array of element ids defined as drag handles.  Used to =
determine=20
         * if the element that generated the mousedown event is actually =
the=20
         * handle and not the html element itself.
         *
         * @type {string: string}
         * @private
         */
        this.handleIds =3D {};

        /**
         * the DragDrop object that is currently being dragged
         *
         * @type DragDrop
         * @private
         **/
        this.dragCurrent =3D null;

        /**
         * the DragDrop object(s) that are being hovered over
         *
         * @type Array
         * @private
         */
        this.dragOvers =3D {};

        /**
         * @private
         */

        /**
         * the X distance between the cursor and the object being =
dragged
         *
         * @type int
         * @private
         */
        this.deltaX =3D 0;

        /**
         * the Y distance between the cursor and the object being =
dragged
         *
         * @type int
         * @private
         */
        this.deltaY =3D 0;

        /**
         * Flag to determine if we should prevent the default behavior =
of the
         * events we define. By default this is true, but this can be =
set to=20
         * false if you need the default behavior (not recommended)
         *
         * @type boolean
         */
        this.preventDefault =3D true;

        /**
         * Flag to determine if we should stop the propagation of the =
events=20
         * we generate. This is true by default but you may want to set =
it to
         * false if the html element contains other features that =
require the
         * mouse click.
         *
         * @type boolean
         */
        this.stopPropagation =3D true;

        /**
         * @private
         */
        this.initalized =3D false;

        /**
         * All drag and drop can be disabled.
         *
         * @private
         */
        this.locked =3D false;
       =20
        /**
         * Called the first time an element is registered.
         *
         * @private
         */
        this.init =3D function() {
        };

        /**
         * In point mode, drag and drop interaction is defined by the=20
         * location of the cursor during the drag/drop
         * @type int
         */
        this.POINT     =3D 0;

        /**
         * In intersect mode, drag and drop interactio nis defined by =
the=20
         * overlap of two or more drag and drop objects.
         * @type int
         */
        this.INTERSECT =3D 1;

        /**
         * The current drag and drop mode.  Default it point mode
         * @type int
         */
        this.mode =3D this.POINT;

        /**
         * Runs method on all drag and drop objects
         * @private
         */
        this._execOnAll =3D function(sMethod, args) {
            for (var i in this.ids) {
                for (var j in this.ids[i]) {
                    var oDD =3D this.ids[i][j];
                    if (! this.isTypeOfDD(oDD)) {
                        continue;
                    }
                    oDD[sMethod].apply(oDD, args);
                }
            }
        };

        /**
         * Drag and drop initialization.  Sets up the global event =
handlers
         * @private
         */
        this._onLoad =3D function() {

            // Switched to onAvailable in 2.0.1 (in DragDrop.initTarget)
            // this._execOnAll("setInitPosition", []);


            var EU =3D YAHOO.util.Event;

            EU.on(document, "mouseup",   this.handleMouseUp, this, =
true);
            EU.on(document, "mousemove", this.handleMouseMove, this, =
true);
            EU.on(window,   "unload",    this._onUnload, this, true);
            EU.on(window,   "resize",    this._onResize, this, true);
            // EU.on(window,   "mouseout",    this._test);

            this.initalized =3D true;

        };

        /**
         * Reset constraints on all drag and drop objs
         * @private
         */
        this._onResize =3D function(e) {
            this._execOnAll("resetConstraints", []);
        };

        /**
         * Lock all drag and drop functionality
         */
        this.lock =3D function() { this.locked =3D true; };

        /**
         * Unlock all drag and drop functionality
         */
        this.unlock =3D function() { this.locked =3D false; };

        /**
         * Is drag and drop locked?
         *
         * @return {boolean} True if drag and drop is locked, false =
otherwise.
         */
        this.isLocked =3D function() { return this.locked; };

        /**
         * Location cache that is set for all drag drop objects when a =
drag is
         * initiated, cleared when the drag is finished.
         *
         * @private
         */
        this.locationCache =3D {};

        /**
         * Set useCache to false if you want to force object the lookup =
of each
         * drag and drop linked element constantly during a drag.
         * @type boolean
         */
        this.useCache =3D true;

        /**
         * The number of pixels that the mouse needs to move after the=20
         * mousedown before the drag is initiated.  Default=3D3;
         * @type int
         */
        this.clickPixelThresh =3D 3;

        /**
         * The number of milliseconds after the mousedown event to =
initiate the
         * drag if we don't get a mouseup event. Default=3D1000
         * @type int
         */
        this.clickTimeThresh =3D 1000;

        /**
         * Flag that indicates that either the drag pixel threshold or =
the=20
         * mousdown time threshold has been met
         * @type boolean
         * @private
         */
        this.dragThreshMet =3D false;

        /**
         * Timeout used for the click time threshold
         * @type Object
         * @private
         */
        this.clickTimeout =3D null;

        /**
         * The X position of the mousedown event stored for later use =
when a=20
         * drag threshold is met.
         * @type int
         * @private
         */
        this.startX =3D 0;

        /**
         * The Y position of the mousedown event stored for later use =
when a=20
         * drag threshold is met.
         * @type int
         * @private
         */
        this.startY =3D 0;

        /**
         * Each DragDrop instance must be registered with the =
DragDropMgr. =20
         * This is executed in ygDragDrop.init()
         *
         * @param {DragDrop} oDD the DragDrop object to register
         * @param {String} sGroup the name of the group this element =
belongs to
         */
        this.regDragDrop =3D function(oDD, sGroup) {
            if (!this.initialized) { this.init(); }
           =20
            if (!this.ids[sGroup]) {
                this.ids[sGroup] =3D {};
            }
            this.ids[sGroup][oDD.id] =3D oDD;
        };

        /**
         * Unregisters a drag and drop item.  This is executed in=20
         * ygDragDrop.unreg, use that method instead of calling this =
directly.
         * @private
         */
        this._remove =3D function(oDD) {
            for (var g in oDD.groups) {
                if (g && this.ids[g][oDD.id]) {
                    delete this.ids[g][oDD.id];
                }
            }
            delete this.handleIds[oDD.id];
        };

        /**
         * Each DragDrop handle element must be registered.  This is =
done
         * automatically when executing ygDragDrop.setHandleElId()
         *
         * @param {String} sDDId the DragDrop id this element is a =
handle for
         * @param {String} sHandleId the id of the element that is the =
drag=20
         * handle
         */
        this.regHandle =3D function(sDDId, sHandleId) {
            if (!this.handleIds[sDDId]) {
                this.handleIds[sDDId] =3D {};
            }
            this.handleIds[sDDId][sHandleId] =3D sHandleId;
        };

        /**
         * Utility function to determine if a given element has been=20
         * registered as a drag drop item.
         *
         * @param {String} id the element id to check
         * @return {boolean} true if this element is a DragDrop item,=20
         * false otherwise
         */
        this.isDragDrop =3D function(id) {
            return ( this.getDDById(id) ) ? true : false;
        };

        /**
         * Returns the drag and drop instances that are in all groups =
the
         * passed in instance belongs to.
         *
         * @param {ygDragDrop} p_oDD the obj to get related data for
         * @param {boolean} bTargetsOnly if true, only return targetable =
objs
         * @return {ygDragDrop[]} the related instances
         */
        this.getRelated =3D function(p_oDD, bTargetsOnly) {
            var oDDs =3D [];
            for (var i in p_oDD.groups) {
                for (j in this.ids[i]) {
                    var dd =3D this.ids[i][j];
                    if (! this.isTypeOfDD(dd)) {
                        continue;
                    }
                    if (!bTargetsOnly || dd.isTarget) {
                        oDDs[oDDs.length] =3D dd;
                    }
                }
            }

            return oDDs;
        };

        /**
         * Returns true if the specified dd target is a legal target for =

         * the specifice drag obj
         *
         * @param {ygDragDrop} the drag obj
         * @param {ygDragDrop) the target
         * @return {boolean} true if the target is a legal target for =
the=20
         * dd obj
         */
        this.isLegalTarget =3D function (oDD, oTargetDD) {
            var targets =3D this.getRelated(oDD);
            for (var i=3D0, len=3Dtargets.length;i<len;++i) {
                if (targets[i].id =3D=3D oTargetDD.id) {
                    return true;
                }
            }

            return false;
        };

        /**
         * My goal is to be able to transparently determine if an object =
is
         * typeof ygDragDrop, and the exact subclass of ygDragDrop.  =
typeof=20
         * returns "object", oDD.constructor.toString() always returns
         * "ygDragDrop" and not the name of the subclass.  So for now it =
just
         * evaluates a well-known variable in ygDragDrop.
         *
         * @param {Object} the object to evaluate
         * @return {boolean} true if typeof oDD =3D ygDragDrop
         */
        this.isTypeOfDD =3D function (oDD) {
            return (oDD && oDD.__ygDragDrop);
        };

        /**
         * Utility function to determine if a given element has been=20
         * registered as a drag drop handle for the given Drag Drop =
object.
         *
         * @param {String} id the element id to check
         * @return {boolean} true if this element is a DragDrop handle, =
false=20
         * otherwise
         */
        this.isHandle =3D function(sDDId, sHandleId) {
            return ( this.handleIds[sDDId] &&=20
                            this.handleIds[sDDId][sHandleId] );
        };

        /**
         * Returns the DragDrop instance for a given id
         *
         * @param {String} id the id of the DragDrop object
         * @return {DragDrop} the drag drop object, null if it is not =
found
         */
        this.getDDById =3D function(id) {
            for (var i in this.ids) {
                if (this.ids[i][id]) {
                    return this.ids[i][id];
                }
            }
            return null;
        };

        /**
         * Fired after a registered DragDrop object gets the mousedown =
event.
         * Sets up the events required to track the object being dragged
         *
         * @param {Event} e the event
         * @param oDD the DragDrop object being dragged
         * @private
         */
        this.handleMouseDown =3D function(e, oDD) {

            this.currentTarget =3D YAHOO.util.Event.getTarget(e);

            this.dragCurrent =3D oDD;

            var el =3D oDD.getEl();

            // track start position
            this.startX =3D YAHOO.util.Event.getPageX(e);
            this.startY =3D YAHOO.util.Event.getPageY(e);

            this.deltaX =3D this.startX - el.offsetLeft;
            this.deltaY =3D this.startY - el.offsetTop;

            this.dragThreshMet =3D false;

            this.clickTimeout =3D setTimeout(=20
                    function() {=20
                        var DDM =3D YAHOO.util.DDM;
                        DDM.startDrag(DDM.startX, DDM.startY);=20
                    },=20
                    this.clickTimeThresh );
        };

        /**
         * Fired when either the drag pixel threshol or the mousedown =
hold=20
         * time threshold has been met.
         *=20
         * @param x {int} the X position of the original mousedown
         * @param y {int} the Y position of the original mousedown
         */
        this.startDrag =3D function(x, y) {
            clearTimeout(this.clickTimeout);
            if (this.dragCurrent) {
                this.dragCurrent.b4StartDrag(x, y);
                this.dragCurrent.startDrag(x, y);
            }
            this.dragThreshMet =3D true;
        };

        /**
         * Internal function to handle the mouseup event.  Will be =
invoked=20
         * from the context of the document.
         *
         * @param {Event} e the event
         * @private
         */
        this.handleMouseUp =3D function(e) {

            if (! this.dragCurrent) {
                return;
            }

            clearTimeout(this.clickTimeout);

            if (this.dragThreshMet) {
                this.fireEvents(e, true);
            } else {
            }

            this.stopDrag(e);

            this.stopEvent(e);
        };

        /**
         * Utility to stop event propagation and event default, if these =

         * features are turned on.
         *
         * @param {Event} e the event as returned by this.getEvent()
         */
        this.stopEvent =3D function(e) {
            if (this.stopPropagation) {
                YAHOO.util.Event.stopPropagation(e);
            }

            if (this.preventDefault) {
                YAHOO.util.Event.preventDefault(e);
            }
        };

        /**=20
         * Internal function to clean up event handlers after the drag=20
         * operation is complete
         *
         * @param {Event} e the event
         * @private
         */
        this.stopDrag =3D function(e) {

            // Fire the drag end event for the item that was dragged
            if (this.dragCurrent) {
                if (this.dragThreshMet) {
                    this.dragCurrent.b4EndDrag(e);
                    this.dragCurrent.endDrag(e);
                }

                this.dragCurrent.onMouseUp(e);
            }

            this.dragCurrent =3D null;
            this.dragOvers =3D {};
        };

        /**=20
         * Internal function to handle the mousemove event.  Will be =
invoked=20
         * from the context of the html element.
         *
         * @TODO figure out what we can do about mouse events lost when =
the=20
         * user drags objects beyond the window boundary.  Currently we =
can=20
         * detect this in internet explorer by verifying that the mouse =
is=20
         * down during the mousemove event.  Firefox doesn't give us the =

         * button state on the mousemove event.
         *
         * @param {Event} e the event
         * @private
         */
        this.handleMouseMove =3D function(e) {
            if (! this.dragCurrent) {
                return;
            }

            // var button =3D e.which || e.button;

            // check for IE mouseup outside of page boundary
            if (YAHOO.util.Event.isIE && !e.button) {
                this.stopEvent(e);
                return this.handleMouseUp(e);
            }

            if (!this.dragThreshMet) {
                var diffX =3D Math.abs(this.startX - =
YAHOO.util.Event.getPageX(e));
                var diffY =3D Math.abs(this.startY - =
YAHOO.util.Event.getPageY(e));
                if (diffX > this.clickPixelThresh ||=20
                            diffY > this.clickPixelThresh) {
                    this.startDrag(this.startX, this.startY);
                }
            }

            if (this.dragThreshMet) {
                this.dragCurrent.b4Drag(e);
                this.dragCurrent.onDrag(e);
                this.fireEvents(e, false);
            }

            this.stopEvent(e);
        };

        /**
         * Iterates over all of the DragDrop elements to find ones we =
are=20
         * hovering over or dropping on
         *
         * @param {Event} e the event
         * @param {boolean} isDrop is this a drop op or a mouseover op?
         * @private
         */
        this.fireEvents =3D function(e, isDrop) {
            var dc =3D this.dragCurrent;

            // If the user did the mouse up outside of the window, we =
could=20
            // get here even though we have ended the drag.
            if (!dc || dc.isLocked()) {
                return;
            }

            var x =3D YAHOO.util.Event.getPageX(e);
            var y =3D YAHOO.util.Event.getPageY(e);
            var pt =3D new YAHOO.util.Point(x,y);

            // cache the previous dragOver array
            var oldOvers =3D [];

            var outEvts   =3D [];
            var overEvts  =3D [];
            var dropEvts  =3D [];
            var enterEvts =3D [];

            // Check to see if the object we were hovering over is no =
longer=20
            // being hovered over so we can fire the onDragOut event
            for (var i in this.dragOvers) {

                var ddo =3D this.dragOvers[i];

                if (! this.isTypeOfDD(ddo)) {
                    continue;
                }

                if (! this.isOverTarget(pt, ddo, this.mode)) {
                    outEvts.push( ddo );
                }

                oldOvers[i] =3D true;
                delete this.dragOvers[i];
            }

            for (var sGroup in dc.groups) {
               =20
                if ("string" !=3D typeof sGroup) {
                    continue;
                }

                for (i in this.ids[sGroup]) {
                    var oDD =3D this.ids[sGroup][i];
                    if (! this.isTypeOfDD(oDD)) {
                        continue;
                    }

                    if (oDD.isTarget && !oDD.isLocked() && oDD !=3D dc) =
{
                        if (this.isOverTarget(pt, oDD, this.mode)) {
                            // look for drop interactions
                            if (isDrop) {
                                dropEvts.push( oDD );
                            // look for drag enter and drag over =
interactions
                            } else {

                                // initial drag over: dragEnter fires
                                if (!oldOvers[oDD.id]) {
                                    enterEvts.push( oDD );
                                // subsequent drag overs: dragOver fires
                                } else {
                                    overEvts.push( oDD );
                                }

                                this.dragOvers[oDD.id] =3D oDD;
                            }
                        }
                    }
                }
            }

            if (this.mode) {
                if (outEvts.length) {
                    dc.b4DragOut(e, outEvts);
                    dc.onDragOut(e, outEvts);
                }

                if (enterEvts.length) {
                    dc.onDragEnter(e, enterEvts);
                }

                if (overEvts.length) {
                    dc.b4DragOver(e, overEvts);
                    dc.onDragOver(e, overEvts);
                }

                if (dropEvts.length) {
                    dc.b4DragDrop(e, dropEvts);
                    dc.onDragDrop(e, dropEvts);
                }

            } else {
                // fire dragout events
                var len =3D 0;
                for (i=3D0, len=3DoutEvts.length; i<len; ++i) {
                    dc.b4DragOut(e, outEvts[i].id);
                    dc.onDragOut(e, outEvts[i].id);
                }
                =20
                // fire enter events
                for (i=3D0,len=3DenterEvts.length; i<len; ++i) {
                    // dc.b4DragEnter(e, oDD.id);
                    dc.onDragEnter(e, enterEvts[i].id);
                }
        =20
                // fire over events
                for (i=3D0,len=3DoverEvts.length; i<len; ++i) {
                    dc.b4DragOver(e, overEvts[i].id);
                    dc.onDragOver(e, overEvts[i].id);
                }

                // fire drop events
                for (i=3D0, len=3DdropEvts.length; i<len; ++i) {
                    dc.b4DragDrop(e, dropEvts[i].id);
                    dc.onDragDrop(e, dropEvts[i].id);
                }

            }

        };

        /**
         * Helper function for getting the best match from the list of =
drag=20
         * and drop objects returned by the drag and drop events when we =
are=20
         * in INTERSECT mode.  It returns either the first object that =
the=20
         * cursor is over, or the object that has the greatest overlap =
with=20
         * the dragged element.
         *
         * @param  {ygDragDrop[]} dds The array of drag and drop objects =

         * targeted
         * @return {ygDragDrop}       The best single match
         */
        this.getBestMatch =3D function(dds) {
            var winner =3D null;
            // Return null if the input is not what we expect
            //if (!dds || !dds.length || dds.length =3D=3D 0) {
               // winner =3D null;
            // If there is only one item, it wins
            //} else if (dds.length =3D=3D 1) {

            var len =3D dds.length;

            if (len =3D=3D 1) {
                winner =3D dds[0];
            } else {
                // Loop through the targeted items
                for (var i=3D0; i<len; ++i) {
                    var dd =3D dds[i];
                    // If the cursor is over the object, it wins.  If =
the=20
                    // cursor is over multiple matches, the first one we =
come
                    // to wins.
                    if (dd.cursorIsOver) {
                        winner =3D dd;
                        break;
                    // Otherwise the object with the most overlap wins
                    } else {
                        if (!winner ||=20
                            winner.overlap.getArea() < =
dd.overlap.getArea()) {
                            winner =3D dd;
                        }
                    }
                }
            }

            return winner;
        };

        /**
         * Refreshes the cache of the top-left and bottom-right points =
of the=20
         * drag and drop objects in the specified groups
         *
         * @param {Array} aGroups an associative array of groups to =
refresh
         */
        this.refreshCache =3D function(aGroups) {
            for (sGroup in aGroups) {
                if ("string" !=3D typeof sGroup) {
                    continue;
                }
                for (i in this.ids[sGroup]) {
                    var oDD =3D this.ids[sGroup][i];

                    if (this.isTypeOfDD(oDD)) {
                        var loc =3D this.getLocation(oDD);
                        if (loc) {
                            this.locationCache[oDD.id] =3D loc;
                        } else {
                            delete this.locationCache[oDD.id];
                            // this will unregister the drag and drop =
object if
                            // the element is not in a usable state
                            oDD.unreg();
                        }
                    }
                }
            }
        };

        /**
         * This checks to make sure an element exists and is in the DOM. =
 The
         * main purpose is to handle cases where innerHTML is used to =
remove
         * drag and drop objects from the DOM.  IE provides an =
'unspecified
         * error' when trying to access the offsetParent of such an =
element
         * @param {HTMLElement} el the element to check
         * @return {boolean} true if the element looks usable
         */
        this.verifyEl =3D function(el) {
            try {
                if (el) {
                    var parent =3D el.offsetParent;
                    if (parent) {
                        return true;
                    }
                }
            } catch(e) {
            }

            return false;
        };
       =20
        /**
         * Returns the an array containing the drag and drop element's =
position
         * and size, including the ygDragDrop.padding configured for it
         *
         * @param {ygDragDrop} oDD the drag and drop object to get the=20
         * location for
         * @return array containing the top left and bottom right points =
of the=20
         * element=20
         */
        this.getLocation =3D function(oDD) {
            if (! this.isTypeOfDD(oDD)) {
                return null;
            }

            var el =3D oDD.getEl();

            if (!this.verifyEl(el)) {
                return null;
            }


            // var aPos =3D ygPos.getPos(el);
            var aPos =3D YAHOO.util.Dom.getXY(el);

            x1 =3D aPos[0];
            x2 =3D x1 + el.offsetWidth;

            y1 =3D aPos[1];
            y2 =3D y1 + el.offsetHeight;

            var t =3D y1 - oDD.padding[0];
            var r =3D x2 + oDD.padding[1];
            var b =3D y2 + oDD.padding[2];
            var l =3D x1 - oDD.padding[3];

            return new YAHOO.util.Region( t, r, b, l );

        };

        /**
         * Checks the cursor location to see if it over the target
         *=20
         * @param {YAHOO.util.Point} pt The point to evaluate
         * @param {ygDragDrop} oDDTarget the DragDrop object we are =
inspecting
         * @return {boolean} true if the mouse is over the target
         * @private
         */
        this.isOverTarget =3D function(pt, oDDTarget, intersect) {
            // use cache if available
            var loc =3D this.locationCache[oDDTarget.id];
            if (!loc || !this.useCache) {
                loc =3D this.getLocation(oDDTarget);
                this.locationCache[oDDTarget.id] =3D loc;

            }


            // var cursorIsOver =3D  (x >=3D loc[3] && x <=3D loc[1] && =
y >=3D loc[0] && y <=3D loc[2]);
            //oDDTarget.cursorIsOver =3D loc.contains( new =
YAHOO.util.Point(x, y) );
            oDDTarget.cursorIsOver =3D loc.contains( pt );
            oDDTarget.overlap =3D null;

            // if (this.INTERSECT =3D=3D this.mode) {
            if (intersect) {

                // var curRegion =3D=20
                  //   YAHOO.util.Region.getRegion(
                  //   this.dragCurrent.getDragEl());
                var el =3D this.dragCurrent.getDragEl();
                var x =3D pt.x - this.dragCurrent.deltaX;
                var y =3D pt.y - this.dragCurrent.deltaY;
                var curRegion =3D new YAHOO.util.Region( y, x + =
el.offsetWidth,
                                                       y + =
el.offsetHeight, x );

                var overlap =3D curRegion.intersect(loc);

                if (overlap) {
                    oDDTarget.overlap =3D overlap;
                    return true;
                } else {
                    return false;
                }

            } else {
                return oDDTarget.cursorIsOver;
            }
        };

        /**
         * @private
         */
        this._onUnload =3D function(e, me) {
            this.unregAll();
        };

        /**
         * Cleans up the drag and drop events and objects.
         *
         * @private
         */
        this.unregAll =3D function() {

            if (this.dragCurrent) {
                this.stopDrag();
                this.dragCurrent =3D null;
            }

            this._execOnAll("unreg", []);

            for (i in this.elementCache) {
                delete this.elementCache[i];
            }

            this.elementCache =3D {};
            this.ids =3D {};
        };

        /**
         * A cache of DOM elements
         *
         * @private
         */
        this.elementCache =3D {};
       =20
        /**
         * Get the wrapper for the DOM element specified
         *
         * @param {String} id the id of the elment to get
         * @return {YAHOO.util.DDM.ElementWrapper} the wrapped element
         * @private
         */
        this.getElWrapper =3D function(id) {
            var oWrapper =3D this.elementCache[id];
            if (!oWrapper || !oWrapper.el) {
                oWrapper =3D this.elementCache[id] =3D=20
                    new =
this.ElementWrapper(document.getElementById(id));
            }
            return oWrapper;
        };

        /**
         * Returns the actual DOM element
         *
         * @param {String} id the id of the elment to get
         * @return {Object} The element
         */
        this.getElement =3D function(id) {
            // return this.getElWrapper(id).el;
            return document.getElementById(id);
        };
       =20
        /**
         * Returns the style property for the DOM element (i.e.,=20
         * document.getElById(id).style)
         *
         * @param {String} id the id of the elment to get
         * @return {Object} The style property of the element
         */
        this.getCss =3D function(id) {
            // return this.getElWrapper(id).css;
            var css =3D null;
            var el =3D document.getElementById(id);
            if (el) {
                css =3D el.style;
            }

            return css;
        };

        /**
         * Inner class for cached elements
         */
        this.ElementWrapper =3D function(el) {
                /**
                 * @private
                 */
                this.el =3D el || null;
                /**
                 * @private
                 */
                this.id =3D this.el && el.id;
                /**
                 * @private
                 */
                this.css =3D this.el && el.style;
            };

        /**
         * Returns the X position of an html element
         * @param el the element for which to get the position
         * @return {int} the X coordinate
         */
        this.getPosX =3D function(el) {
            return YAHOO.util.Dom.getX(el);
        };

        /**
         * Returns the Y position of an html element
         * @param el the element for which to get the position
         * @return {int} the Y coordinate
         */
        this.getPosY =3D function(el) {
            return YAHOO.util.Dom.getY(el);=20
        };

        /**
         * Swap two nodes.  In IE, we use the native method, for others =
we=20
         * emulate the IE behavior
         *
         * @param n1 the first node to swap
         * @param n2 the other node to swap
         */
        this.swapNode =3D function(n1, n2) {
            if (n1.swapNode) {
                n1.swapNode(n2);
            } else {
                // the node reference order for the swap is a little =
tricky.=20
                var p =3D n2.parentNode;
                var s =3D n2.nextSibling;
                n1.parentNode.replaceChild(n2, n1);
                p.insertBefore(n1,s);
            }
        };

        /**
         * @private
         */
        this.getScroll =3D function () {
            var t, l;
            if (document.documentElement && =
document.documentElement.scrollTop) {
                t =3D document.documentElement.scrollTop;
                l =3D document.documentElement.scrollLeft;
            } else if (document.body) {
                t =3D document.body.scrollTop;
                l =3D document.body.scrollLeft;
            }
            return { top: t, left: l };
        };

        /**
         * Returns the specified element style property
         * @param {HTMLElement} el          the element
         * @param {string}      styleProp   the style property
         * @return {string}     The value of the style property
         * @deprecated, use YAHOO.util.Dom.getStyle
         */
        this.getStyle =3D function(el, styleProp) {
            return YAHOO.util.Dom.getStyle(el, styleProp);
        };

        /**
         * Gets the scrollTop
         *
         * @return {int} the document's scrollTop
         */
        this.getScrollTop =3D function () { return this.getScroll().top; =
};

        /**
         * Gets the scrollLeft
         *
         * @return {int} the document's scrollTop
         */
        this.getScrollLeft =3D function () { return =
this.getScroll().left; };

        this.moveToEl =3D function (moveEl, targetEl) {
            var aCoord =3D YAHOO.util.Dom.getXY(targetEl);
            YAHOO.util.Dom.setXY(moveEl, aCoord);
        };

        /**
         * Gets the client height
         *
         * @return {int} client height in px
         */
        this.getClientHeight =3D function() {
            return (window.innerHeight) ? window.innerHeight :=20
                (document.documentElement && =
document.documentElement.clientHeight) ?
                document.documentElement.clientHeight : =
document.body.offsetHeight;
        };

        /**
         * Gets the client width
         *
         * @return {int} client width in px
         */
        this.getClientWidth =3D function() {
            return (window.innerWidth) ? window.innerWidth :=20
                (document.documentElement && =
document.documentElement.clientWidth) ?
                document.documentElement.clientWidth : =
document.body.offsetWidth;
        };

        /**
         * numeric array sort function
         */
        this.numericSort =3D function(a, b) { return (a - b); };

        /**
         * @private
         */
        this._timeoutCount =3D 0;

        /**
         * @private
         * Trying to make the load order less important.  Without this =
we get
         * an error if this file is loaded before the Event Utility.
         */
        this._addListeners =3D function() {
            if ( YAHOO.util.Event && document ) {
                this._onLoad();
            } else {
                if (this._timeoutCount > 1000) {
                } else {
                    setTimeout(YAHOO.util.DDM._addListeners, 10);
                    if (document && document.body) {
                        this._timeoutCount +=3D 1;
                    }
                }
            }
        };

        /**
         * Recursively searches the immediate parent and all child nodes =
for=20
         * the handle element in order to determine wheter or not it was =

         * clicked.
         *
         * @param node the html element to inspect
         */
        this.handleWasClicked =3D function(node, id) {
            if (this.isHandle(id, node.id)) {
                return true;
            } else {
                // check to see if this is a text node child of the one =
we want
                var p =3D node.parentNode;

                while (p) {
                    if (this.isHandle(id, p.id)) {
                        return true;
                    } else {
                        p =3D p.parentNode;
                    }
                }
            }

            return false;
        };

    } ();

    // shorter alias, save a few bytes
    YAHOO.util.DDM =3D YAHOO.util.DragDropMgr;
    YAHOO.util.DDM._addListeners();

}

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

/**
 * A DragDrop implementation where the linked element follows the=20
 * mouse cursor during a drag.
 *
 * @extends YAHOO.util.DragDrop
 * @constructor
 * @param {String} id the id of the linked element=20
 * @param {String} sGroup the group of related DragDrop items
 */
YAHOO.util.DD =3D function(id, sGroup) {
    if (id) {
        this.init(id, sGroup);
    }
};

YAHOO.util.DD.prototype =3D new YAHOO.util.DragDrop();

/**
 * When set to true, the utility automatically tries to scroll the =
browser
 * window wehn a drag and drop element is dragged near the viewport =
boundary.
 * Defaults to true.
 *
 * @type boolean
 */
YAHOO.util.DD.prototype.scroll =3D true;=20

/**
 * Sets the pointer offset to the distance between the linked element's =
top=20
 * left corner and the location the element was clicked
 *
 * @param {int} iPageX the X coordinate of the click
 * @param {int} iPageY the Y coordinate of the click
 */
YAHOO.util.DD.prototype.autoOffset =3D function(iPageX, iPageY) {
    var el =3D this.getEl();
    var aCoord =3D YAHOO.util.Dom.getXY(el);
    var x =3D iPageX - aCoord[0];
    var y =3D iPageY - aCoord[1];
    this.setDelta(x, y);
};

/**=20
 * Sets the pointer offset.  You can call this directly to force the =
offset to
 * be in a particular location (e.g., pass in 0,0 to set it to the =
center of the
 * object, as done in YAHOO.widget.Slider)
 *
 * @param {int} iDeltaX the distance from the left
 * @param {int} iDeltaY the distance from the top
 */
YAHOO.util.DD.prototype.setDelta =3D function(iDeltaX, iDeltaY) {
    this.deltaX =3D iDeltaX;
    this.deltaY =3D iDeltaY;
};

/**
 * Sets the drag element to the location of the mousedown or click =
event,=20
 * maintaining the cursor location relative to the location on the =
element=20
 * that was clicked.  Override this if you want to place the element in =
a=20
 * location other than where the cursor is.
 *
 * @param {int} iPageX the X coordinate of the mousedown or drag event
 * @param {int} iPageY the Y coordinate of the mousedown or drag event
 */

YAHOO.util.DD.prototype.setDragElPos =3D function(iPageX, iPageY) {
    // the first time we do this, we are going to check to make sure
    // the element has css positioning

    var el =3D this.getDragEl();

    // if (!this.cssVerified) {
        // var pos =3D el.style.position;
    // }

    this.alignElWithMouse(el, iPageX, iPageY);
};

/**
 * Sets the element to the location of the mousedown or click event,=20
 * maintaining the cursor location relative to the location on the =
element=20
 * that was clicked.  Override this if you want to place the element in =
a=20
 * location other than where the cursor is.
 *
 * @param {HTMLElement} el the element to move
 * @param {int} iPageX the X coordinate of the mousedown or drag event
 * @param {int} iPageY the Y coordinate of the mousedown or drag event
 */
YAHOO.util.DD.prototype.alignElWithMouse =3D function(el, iPageX, =
iPageY) {
    var oCoord =3D this.getTargetCoord(iPageX, iPageY);
    var aCoord =3D [oCoord.x, oCoord.y];
    YAHOO.util.Dom.setXY(el, aCoord);

    this.cachePosition(oCoord.x, oCoord.y);

    this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, =
el.offsetWidth);
};

/**
 * Saves the most recent position so that we can reset the constraints =
and
 * tick marks on-demand.  We need to know this so that we can calculate =
the
 * number of pixels the element is offset from its original position.
 */
YAHOO.util.DD.prototype.cachePosition =3D function(iPageX, iPageY) {
    if (iPageX) {
        this.lastPageX =3D iPageX;
        this.lastPageY =3D iPageY;
    } else {
        var aCoord =3D YAHOO.util.Dom.getXY(this.getEl());
        this.lastPageX =3D aCoord[0];
        this.lastPageY =3D aCoord[1];
    }
};

/**
 * Auto-scroll the window if the dragged object has been moved beyond =
the=20
 * visible window boundary.
 *
 * @param {int} x the drag element's x position
 * @param {int} y the drag element's y position
 * @param {int} h the height of the drag element
 * @param {int} w the width of the drag element
 * @private
 */
YAHOO.util.DD.prototype.autoScroll =3D function(x, y, h, w) {

    if (this.scroll) {
        // The client height
        var clientH =3D this.DDM.getClientHeight();

        // The client width
        var clientW =3D this.DDM.getClientWidth();

        // The amt scrolled down
        var st =3D this.DDM.getScrollTop();

        // The amt scrolled right
        var sl =3D this.DDM.getScrollLeft();

        // Location of the bottom of the element
        var bot =3D h + y;

        // Location of the right of the element
        var right =3D w + x;

        // The distance from the cursor to the bottom of the visible =
area,=20
        // adjusted so that we don't scroll if the cursor is beyond the
        // element drag constraints
        var toBot =3D (clientH + st - y - this.deltaY);

        // The distance from the cursor to the right of the visible area
        var toRight =3D (clientW + sl - x - this.deltaX);


        // How close to the edge the cursor must be before we scroll
        // var thresh =3D (document.all) ? 100 : 40;
        var thresh =3D 40;

        // How many pixels to scroll per autoscroll op.  This helps to =
reduce=20
        // clunky scrolling. IE is more sensitive about this ... it =
needs this=20
        // value to be higher.
        var scrAmt =3D (document.all) ? 80 : 30;

        // Scroll down if we are near the bottom of the visible page and =
the=20
        // obj extends below the crease
        if ( bot > clientH && toBot < thresh ) {=20
            window.scrollTo(sl, st + scrAmt);=20
        }

        // Scroll up if the window is scrolled down and the top of the =
object
        // goes above the top border
        if ( y < st && st > 0 && y - st < thresh ) {=20
            window.scrollTo(sl, st - scrAmt);=20
        }

        // Scroll right if the obj is beyond the right border and the =
cursor is
        // near the border.
        if ( right > clientW && toRight < thresh ) {=20
            window.scrollTo(sl + scrAmt, st);=20
        }

        // Scroll left if the window has been scrolled to the right and =
the obj
        // extends past the left border
        if ( x < sl && sl > 0 && x - sl < thresh ) {=20
            window.scrollTo(sl - scrAmt, st);
        }
    }
};

/**
 * Finds the location the element should be placed if we want to move
 * it to where the mouse location less the click offset would place us.
 *
 * @param {int} iPageX the X coordinate of the click
 * @param {int} iPageY the Y coordinate of the click
 * @return an object that contains the coordinates (Object.x and =
Object.y)
 * @private
 */
YAHOO.util.DD.prototype.getTargetCoord =3D function(iPageX, iPageY) {


    var x =3D iPageX - this.deltaX;
    var y =3D iPageY - this.deltaY;

    if (this.constrainX) {
        if (x < this.minX) { x =3D this.minX; }
        if (x > this.maxX) { x =3D this.maxX; }
    }

    if (this.constrainY) {
        if (y < this.minY) { y =3D this.minY; }
        if (y > this.maxY) { y =3D this.maxY; }
    }

    x =3D this.getTick(x, this.xTicks);
    y =3D this.getTick(y, this.yTicks);


    return {x:x, y:y};
};

/**=20
 * Event that fires prior to the onMouseDown event.  Overrides=20
 * YAHOO.util.DragDrop.
 */
YAHOO.util.DD.prototype.b4MouseDown =3D function(e) {
    // this.resetConstraints();
    this.autoOffset(YAHOO.util.Event.getPageX(e),=20
                        YAHOO.util.Event.getPageY(e));
};

/**=20
 * Event that fires prior to the onDrag event.  Overrides=20
 * YAHOO.util.DragDrop.
 */
YAHOO.util.DD.prototype.b4Drag =3D function(e) {
    this.setDragElPos(YAHOO.util.Event.getPageX(e),=20
                        YAHOO.util.Event.getPageY(e));
};

/////////////////////////////////////////////////////////////////////////=
//////
// Debugging ygDragDrop events that can be overridden
/////////////////////////////////////////////////////////////////////////=
//////
/*
YAHOO.util.DD.prototype.startDrag =3D function(x, y) {
};

YAHOO.util.DD.prototype.onDrag =3D function(e) {
};

YAHOO.util.DD.prototype.onDragEnter =3D function(e, id) {
};

YAHOO.util.DD.prototype.onDragOver =3D function(e, id) {
};

YAHOO.util.DD.prototype.onDragOut =3D function(e, id) {
};

YAHOO.util.DD.prototype.onDragDrop =3D function(e, id) {
};

YAHOO.util.DD.prototype.endDrag =3D function(e) {
};
*/

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

/**
 * A DragDrop implementation that inserts an empty, bordered div into
 * the document that follows the cursor during drag operations.  At the =
time of
 * the click, the frame div is resized to the dimensions of the linked =
html
 * element, and moved to the exact location of the linked element.
 *
 * References to the "frame" element refer to the single proxy element =
that
 * was created to be dragged in place of all DDProxy elements on the
 * page.
 *
 * @extends YAHOO.util.DD
 * @constructor
 * @param {String} id the id of the linked html element
 * @param {String} sGroup the group of related DragDrop objects
 */
YAHOO.util.DDProxy =3D function(id, sGroup) {
    if (id) {
        this.forceCssPosition =3D false;

        this.init(id, sGroup);
        this.initFrame();=20
    }
};

YAHOO.util.DDProxy.prototype =3D new YAHOO.util.DD();

/**
 * A reference to the one proxy div element we create for all instances =
of this=20
 * class
 *
 * @type HTMLElement
 */
YAHOO.util.DDProxy.frameDiv =3D null;

/**
 * the drag frame div id
 *
 * @type String
 */
YAHOO.util.DDProxy.dragElId =3D "ygddfdiv";

/**
 * The border width of the frame.  This is used when we resize the frame =
to
 * the size of the linked element.  We substract the border width to =
make
 * the div the correct size.
 *
 * @TODO find a better way to handle this
 *
 * @type int
 */
YAHOO.util.DDProxy.prototype.borderWidth =3D 2;

/**
 * By default we resize the drag frame to be the same size as the =
element
 * we want to drag (this is to get the frame effect).  We can turn it =
off
 * if we want a different behavior (ex: ygDDMy2)
 *
 * @type boolean
 */
YAHOO.util.DDProxy.prototype.resizeFrame =3D true;

/**
 * By default the frame is positioned exactly where the drag element is, =
so
 * we use the cursor offset provided by YAHOO.util.DD.  Another option =
that works only if
 * you do not have constraints on the obj is to have the drag frame =
centered
 * around the cursor.  Set centerFrame to true for this effect.  Ex:=20
 * ygDDMy2
 *
 * @type boolean
 */
YAHOO.util.DDProxy.prototype.centerFrame =3D false;

/**
 * Create the drag frame if needed
 */
YAHOO.util.DDProxy.createFrame =3D function() {
    var THIS =3D YAHOO.util.DDProxy;

    if (!document || !document.body) {
        setTimeout(THIS.createFrame, 50);
        return;
    }

    if (!THIS.frameDiv) {
        THIS.frameDiv =3D document.createElement("div");
        THIS.frameDiv.id =3D THIS.dragElId;
        var s =3D THIS.frameDiv.style;
        s.position =3D "absolute";
        s.visibility =3D "hidden";
        s.cursor =3D "move";
        s.border =3D "2px solid #aaa";
        s.zIndex =3D 999;
        document.body.appendChild(THIS.frameDiv);

    }
};

/**
 * Initialization for the drag frame element.  Must be called in the
 * constructor of all subclasses
 */
YAHOO.util.DDProxy.prototype.initFrame =3D function() {
    YAHOO.util.DDProxy.createFrame();
    this.setDragElId(YAHOO.util.DDProxy.dragElId);
    this.useAbsMath =3D true;

};

/**
 * Resizes the drag frame to the dimensions of the clicked object, =
positions=20
 * it over the object, and finally displays it
 *
 * @param {int} iPageX X click position
 * @param {int} iPageY Y click position
 * @private
 */
YAHOO.util.DDProxy.prototype.showFrame =3D function(iPageX, iPageY) {
    var el =3D this.getEl();

    var s =3D this.getDragEl().style;

    if (this.resizeFrame) {
        s.width =3D (parseInt(el.offsetWidth, 10) - =
(2*this.borderWidth)) + "px";
        s.height =3D (parseInt(el.offsetHeight, 10) - =
(2*this.borderWidth)) + "px";
    }

    if (this.centerFrame) {
        this.setDelta(Math.round(parseInt(s.width, 10)/2),=20
                Math.round(parseInt(s.width, 10)/2));
    }

    this.setDragElPos(iPageX, iPageY);

    s.visibility =3D "";
};

// overrides YAHOO.util.DragDrop
YAHOO.util.DDProxy.prototype.b4MouseDown =3D function(e) {
    var x =3D YAHOO.util.Event.getPageX(e);
    var y =3D YAHOO.util.Event.getPageY(e);
    this.autoOffset(x, y);
    this.setDragElPos(x, y);
};

// overrides YAHOO.util.DragDrop
YAHOO.util.DDProxy.prototype.b4StartDrag =3D function(x, y) {
    // show the drag frame
    this.showFrame(x, y);
};

// overrides YAHOO.util.DragDrop
YAHOO.util.DDProxy.prototype.b4EndDrag =3D function(e) {

    // hide the drag frame
    var s =3D this.getDragEl().style;
    s.visibility =3D "hidden";
};

// overrides YAHOO.util.DragDrop
// By default we try to move the element to the last location of the =
frame. =20
// This is so that the default behavior mirrors that of YAHOO.util.DD. =20
YAHOO.util.DDProxy.prototype.endDrag =3D function(e) {
    var lel =3D this.getEl();
    var del =3D this.getDragEl();

    // Show the drag frame briefly so we can get its position
    del.style.visibility =3D "";

    // Hide the linked element before the move to get around a Safari=20
    // rendering bug.
    lel.style.visibility =3D "hidden";
    YAHOO.util.DDM.moveToEl(lel, del);
    del.style.visibility =3D "hidden";
    lel.style.visibility =3D "";
};

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

/**
 * A DragDrop implementation that does not move, but can be a drop=20
 * target.  You would get the same result by simply omitting =
implementation=20
 * for the event callbacks, but this way we reduce the processing cost =
of the=20
 * event listener and the callbacks.
 *
 * @extends YAHOO.util.DragDrop=20
 * @constructor
 * @param {String} id the id of the element that is a drop target
 * @param {String} sGroup the group of related DragDrop objects
 */
=20
YAHOO.util.DDTarget =3D function(id, sGroup) {
    if (id) {
        this.initTarget(id, sGroup);
    }
};

YAHOO.util.DDTarget.prototype =3D new YAHOO.util.DragDrop();


------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/container.js

/*
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 0.10.0
*/
/**
* @class=20
* Config is a utility used within an object to allow the implementer to =
maintain a list of local configuration properties and listen for changes =
to those properties dynamically using CustomEvent. The initial values =
are also maintained so that the configuration can be reset at any given =
point to its initial state.
* @param {object}	owner	The owner object to which this Config object =
belongs
* @constructor
*/
YAHOO.util.Config =3D function(owner) {
	if (owner) {
		this.init(owner);
	}
}

YAHOO.util.Config.prototype =3D {
=09
	/**
	* Object reference to the owner of this Config object
	* @type object
	*/
	owner : null,

	/**
	* Object reference to the owner of this Config object
	* args: key, value
	* @type YAHOO.util.CustomEvent
	*/
	configChangedEvent : null,

	/**
	* Boolean flag that specifies whether a queue is currently being =
executed
	* @type boolean
	*/
	queueInProgress : false,

	/**
	* Adds a property to the Config object's private config hash.=20
	* @param {string}	key	The configuration property's name
	* @param {object}	propertyObject	The object containing all of this =
property's arguments
	*/
	addProperty : function(key, propertyObject){},

	/**
	* Returns a key-value configuration map of the values currently set in =
the Config object.
	* @return {object} The current config, represented in a key-value map
	*/
	getConfig : function(){},

	/**
	* Returns the value of specified property.
	* @param {key}		The name of the property
	* @return {object}	The value of the specified property
	*/
	getProperty : function(key){},

	/**
	* Resets the specified property's value to its initial value.
	* @param {key}		The name of the property
	*/
	resetProperty : function(key){},

	/**
	* Sets the value of a property. If the silent property is passed as =
true, the property's event will not be fired.
	* @param {key}		The name of the property
	* @param {value}	The value to set the property to
	* @param {boolean}	Whether the value should be set silently, without =
firing the property event.
	* @return {boolean}	true, if the set was successful, false if it =
failed.
	*/
	setProperty : function(key,value,silent){},

	/**
	* Sets the value of a property and queues its event to execute. If the =
event is already scheduled to execute, it is
	* moved from its current position to the end of the queue.
	* @param {key}		The name of the property
	* @param {value}	The value to set the property to
	* @return {boolean}	true, if the set was successful, false if it =
failed.
	*/=09
	queueProperty : function(key,value){},

	/**
	* Fires the event for a property using the property's current value.
	* @param {key}		The name of the property
	*/
	refireEvent : function(key){},

	/**
	* Applies a key-value object literal to the configuration, replacing =
any existing values, and queueing the property events.
	* Although the values will be set, fireQueue() must be called for their =
associated events to execute.
	* @param {object}	userConfig	The configuration object literal
	* @param {boolean}	init		When set to true, the initialConfig will be =
set to the userConfig passed in, so that calling a reset will reset the =
properties to the passed values.
	*/
	applyConfig : function(userConfig,init){},

	/**
	* Refires the events for all configuration properties using their =
current values.
	*/
	refresh : function(){},

	/**
	* Fires the normalized list of queued property change events
	*/
	fireQueue : function(){},

	/**
	* Subscribes an external handler to the change event for any given =
property.=20
	* @param {string}	key			The property name
	* @param {Function}	handler		The handler function to use subscribe to =
the property's event
	* @param {object}	obj			The object to use for scoping the event handler =
(see CustomEvent documentation)
	* @param {boolean}	override	Optional. If true, will override "this" =
within the handler to map to the scope object passed into the method.
	*/=09
	subscribeToConfigEvent : function(key,handler,obj,override){},

	/**
	* Unsubscribes an external handler from the change event for any given =
property.=20
	* @param {string}	key			The property name
	* @param {Function}	handler		The handler function to use subscribe to =
the property's event
	* @param {object}	obj			The object to use for scoping the event handler =
(see CustomEvent documentation)
	*/
	unsubscribeFromConfigEvent: function(key,handler,obj){},

	/**
	* Validates that the value passed in is a boolean.
	* @param	{object}	val	The value to validate
	* @return	{boolean}	true, if the value is valid
	*/=09
	checkBoolean: function(val) {
		if (typeof val =3D=3D 'boolean') {
			return true;
		} else {
			return false;
		}
	},

	/**
	* Validates that the value passed in is a number.
	* @param	{object}	val	The value to validate
	* @return	{boolean}	true, if the value is valid
	*/
	checkNumber: function(val) {
		if (isNaN(val)) {
			return false;
		} else {
			return true;
		}
	}
}


/**
* Initializes the configuration object and all of its local members.
* @param {object}	owner	The owner object to which this Config object =
belongs
*/
YAHOO.util.Config.prototype.init =3D function(owner) {

	this.owner =3D owner;
	this.configChangedEvent =3D new =
YAHOO.util.CustomEvent("configChanged");
	this.queueInProgress =3D false;

	/* Private Members */

	var config =3D {};
	var initialConfig =3D {};
	var eventQueue =3D [];

	/**
	* @private
	* Fires a configuration property event using the specified value.=20
	* @param {string}	key			The configuration property's name
	* @param {value}	object		The value of the correct type for the property
	*/=20
	var fireEvent =3D function( key, value ) {
		key =3D key.toLowerCase();

		var property =3D config[key];

		if (typeof property !=3D 'undefined' && property.event) {
			property.event.fire(value);
		}=09
	}
	/* End Private Members */

	this.addProperty =3D function( key, propertyObject ) {
		key =3D key.toLowerCase();

		config[key] =3D propertyObject;

		propertyObject.event =3D new YAHOO.util.CustomEvent(key);
		propertyObject.key =3D key;

		if (propertyObject.handler) {
			propertyObject.event.subscribe(propertyObject.handler, this.owner, =
true);
		}

		this.setProperty(key, propertyObject.value, true);
	=09
		if (! propertyObject.suppressEvent) {
			this.queueProperty(key, propertyObject.value);
		}
	}

	this.getConfig =3D function() {
		var cfg =3D {};
		=09
		for (var prop in config) {
			var property =3D config[prop]
			if (typeof property !=3D 'undefined' && property.event) {
				cfg[prop] =3D property.value;
			}
		}
	=09
		return cfg;
	}

	this.getProperty =3D function(key) {
		key =3D key.toLowerCase();

		var property =3D config[key];
		if (typeof property !=3D 'undefined' && property.event) {
			return property.value;
		} else {
			return undefined;
		}
	}


	this.resetProperty =3D function(key) {
		key =3D key.toLowerCase();

		var property =3D config[key];
		if (typeof property !=3D 'undefined' && property.event) {
			this.setProperty(key, initialConfig[key].value);
		} else {
			return undefined;
		}
	}


	this.setProperty =3D function(key, value, silent) {
		key =3D key.toLowerCase();

		if (this.queueInProgress && ! silent) {
			this.queueProperty(key,value); // Currently running through a =
queue...=20
			return true;
		} else {
			var property =3D config[key];
			if (typeof property !=3D 'undefined' && property.event) {
				if (property.validator && ! property.validator(value)) { // =
validator
					return false;
				} else {
					property.value =3D value;
					if (! silent) {
						fireEvent(key, value);
						this.configChangedEvent.fire([key, value]);
					}
					return true;
				}
			} else {
				return false;
			}
		}
	}

	this.queueProperty =3D function(key, value) {
		key =3D key.toLowerCase();

		var property =3D config[key];
						=09
		if (typeof property !=3D 'undefined' && property.event) {
			if (typeof value !=3D 'undefined' && property.validator && ! =
property.validator(value)) { // validator
				return false;
			} else {

				if (typeof value !=3D 'undefined') {
					property.value =3D value;
				} else {
					value =3D property.value;
				}

				var foundDuplicate =3D false;

				for (var i=3D0;i<eventQueue.length;i++) {
					var queueItem =3D eventQueue[i];

					if (queueItem) {
						var queueItemKey =3D queueItem[0];
						var queueItemValue =3D queueItem[1];
					=09
						if (queueItemKey.toLowerCase() =3D=3D key) {
							// found a dupe... push to end of queue, null current item, and =
break
							eventQueue[i] =3D null;
							eventQueue.push([key, (typeof value !=3D 'undefined' ? value : =
queueItemValue)]);
							foundDuplicate =3D true;
							break;
						}
					}
				}
			=09
				if (! foundDuplicate && typeof value !=3D 'undefined') { // this is =
a refire, or a new property in the queue
					eventQueue.push([key, value]);
				}
			}

			if (property.supercedes) {
				for (var s=3D0;s<property.supercedes.length;s++) {
					var supercedesCheck =3D property.supercedes[s];

					for (var q=3D0;q<eventQueue.length;q++) {
						var queueItemCheck =3D eventQueue[q];

						if (queueItemCheck) {
							var queueItemCheckKey =3D queueItemCheck[0];
							var queueItemCheckValue =3D queueItemCheck[1];
						=09
							if ( queueItemCheckKey.toLowerCase() =3D=3D =
supercedesCheck.toLowerCase() ) {
								eventQueue.push([queueItemCheckKey, queueItemCheckValue]);
								eventQueue[q] =3D null;
								break;
							}
						}
					}
				}
			}

			return true;
		} else {
			return false;
		}
	}

	this.refireEvent =3D function(key) {
		key =3D key.toLowerCase();

		var property =3D config[key];
		if (typeof property !=3D 'undefined' && property.event && typeof =
property.value !=3D 'undefined') {
			if (this.queueInProgress) {
				this.queueProperty(key);
			} else {
				fireEvent(key, property.value);
			}
		}
	}

	this.applyConfig =3D function(userConfig, init) {
		if (init) {
			initialConfig =3D userConfig;
		}
		for (var prop in userConfig) {
			this.queueProperty(prop, userConfig[prop]);
		}
	}

	this.refresh =3D function() {
		for (var prop in config) {
			this.refireEvent(prop);
		}
	}

	this.fireQueue =3D function() {
		this.queueInProgress =3D true;
		for (var i=3D0;i<eventQueue.length;i++) {
			var queueItem =3D eventQueue[i];
			if (queueItem) {
				var key =3D queueItem[0];
				var value =3D queueItem[1];
			=09
				var property =3D config[key];
				property.value =3D value;

				fireEvent(key,value);
			}
		}
	=09
		this.queueInProgress =3D false;
		eventQueue =3D new Array();
	}

	this.subscribeToConfigEvent =3D function(key, handler, obj, override) {
		key =3D key.toLowerCase();

		var property =3D config[key];
		if (typeof property !=3D 'undefined' && property.event) {
			if (! YAHOO.util.Config.alreadySubscribed(property.event, handler, =
obj)) {
				property.event.subscribe(handler, obj, override);
			}
			return true;
		} else {
			return false;
		}
	}


	this.unsubscribeFromConfigEvent =3D function(key, handler, obj) {
		key =3D key.toLowerCase();

		var property =3D config[key];
		if (typeof property !=3D 'undefined' && property.event) {
			return property.event.unsubscribe(handler, obj);
		} else {
			return false;
		}
	}

	// TODO: REMOVE
	this.outputEventQueue =3D function() {
		var output =3D "";
		for (var q=3D0;q<eventQueue.length;q++) {
			var queueItem =3D eventQueue[q];
			if (queueItem) {
				output +=3D queueItem[0] + "=3D" + queueItem[1] + ", ";
			}
		}
		return output;
	}
}

/**
* Checks to determine if a particular function/object pair are already =
subscribed to the specified CustomEvent
* @param {YAHOO.util.CustomEvent} evt	The CustomEvent for which to check =
the subscriptions
* @param {Function}	fn	The function to look for in the subscribers list
* @param {object}	obj	The execution scope object for the subscription
* @return {boolean}	true, if the function/object pair is already =
subscribed to the CustomEvent passed in
*/
YAHOO.util.Config.alreadySubscribed =3D function(evt, fn, obj) {
	for (var e=3D0;e<evt.subscribers.length;e++) {
		var subsc =3D evt.subscribers[e];
		if (subsc && subsc.obj =3D=3D obj && subsc.fn =3D=3D fn) {
			return true;
			break;
		}
	}
	return false;
}/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class=20
* Module is a JavaScript representation of the Standard Module Format. =
Standard Module Format is a simple standard for markup containers where =
child nodes representing the header, body, and footer of the content are =
denoted using the CSS classes "hd", "bd", and "ft" respectively. Module =
is the base class for all other classes in the YUI Container package.
* @param {string}	el	The element ID representing the Module <em>OR</em>
* @param {Element}	el	The element representing the Module
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this module. See configuration =
documentation for more details.
* @constructor
*/
YAHOO.widget.Module =3D function(el, userConfig) {
	if (el) {=20
		this.init(el, userConfig);=20
	}
}

/**
* Constant representing the prefix path to use for non-secure images
* @type string
*/
YAHOO.widget.Module.IMG_ROOT =3D "http://us.i1.yimg.com/us.yimg.com/i/";

/**
* Constant representing the prefix path to use for securely served =
images
* @type string
*/
YAHOO.widget.Module.IMG_ROOT_SSL =3D =
"https://a248.e.akamai.net/sec.yimg.com/i/";

/**
* Constant for the default CSS class name that represents a Module
* @type string
* @final
*/
YAHOO.widget.Module.CSS_MODULE =3D "module";

/**
* Constant representing the module header
* @type string
* @final
*/
YAHOO.widget.Module.CSS_HEADER =3D "hd";

/**
* Constant representing the module body
* @type string
* @final
*/
YAHOO.widget.Module.CSS_BODY   =3D "bd";

/**
* Constant representing the module footer
* @type string
* @final
*/
YAHOO.widget.Module.CSS_FOOTER =3D "ft";

YAHOO.widget.Module.prototype =3D {

	/**
	* The class's constructor function
	* @type function
	*/
	constructor : YAHOO.widget.Module,

	/**
	* The main module element that contains the header, body, and footer
	* @type Element
	*/
	element : null,=20

	/**
	* The header element, denoted with CSS class "hd"
	* @type Element
	*/
	header : null,

	/**
	* The body element, denoted with CSS class "bd"
	* @type Element
	*/
	body : null,

	/**
	* The footer element, denoted with CSS class "ft"
	* @type Element
	*/
	footer : null,

	/**
	* The id of the element
	* @type string
	*/
	id : null,

	/**
	* Array of elements
	* @type Element[]
	*/
	childNodesInDOM : null,

	/**
	* The string representing the image root
	* @type string
	*/
	imageRoot : YAHOO.widget.Module.IMG_ROOT,

	/**
	* CustomEvent fired prior to class initalization.
	* args: class reference of the initializing class, such as =
this.beforeInitEvent.fire(YAHOO.widget.Module)
	* @type YAHOO.util.CustomEvent
	*/
	beforeInitEvent : null,

	/**
	* CustomEvent fired after class initalization.
	* args: class reference of the initializing class, such as =
this.initEvent.fire(YAHOO.widget.Module)
	* @type YAHOO.util.CustomEvent
	*/
	initEvent : null,

	/**
	* CustomEvent fired when the Module is appended to the DOM
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	appendEvent : null,

	/**
	* CustomEvent fired before the Module is rendered
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	beforeRenderEvent : null,

	/**
	* CustomEvent fired after the Module is rendered
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	renderEvent : null,

	/**
	* CustomEvent fired when the header content of the Module is modified
	* args: string/element representing the new header content
	* @type YAHOO.util.CustomEvent
	*/
	changeHeaderEvent : null,

	/**
	* CustomEvent fired when the body content of the Module is modified
	* args: string/element representing the new body content
	* @type YAHOO.util.CustomEvent
	*/
	changeBodyEvent : null,

	/**
	* CustomEvent fired when the footer content of the Module is modified
	* args: string/element representing the new footer content
	* @type YAHOO.util.CustomEvent
	*/
	changeFooterEvent : null,

	/**
	* CustomEvent fired when the content of the Module is modified
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	changeContentEvent : null,

	/**
	* CustomEvent fired when the Module is destroyed
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	destroyEvent : null,

	/**
	* CustomEvent fired before the Module is shown
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	beforeShowEvent : null,

	/**
	* CustomEvent fired after the Module is shown
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	showEvent : null,

	/**
	* CustomEvent fired before the Module is hidden
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	beforeHideEvent : null,
=09
	/**
	* CustomEvent fired after the Module is hidden
	* args: none
	* @type YAHOO.util.CustomEvent
	*/
	hideEvent : null,
	=09
	/**
	* Initializes the custom events for Module which are fired =
automatically at appropriate times by the Module class.
	*/
	initEvents : function() {

		this.beforeInitEvent		=3D new YAHOO.util.CustomEvent("beforeInit");
		this.initEvent				=3D new YAHOO.util.CustomEvent("init");

		this.appendEvent			=3D new YAHOO.util.CustomEvent("append");

		this.beforeRenderEvent		=3D new =
YAHOO.util.CustomEvent("beforeRender");
		this.renderEvent			=3D new YAHOO.util.CustomEvent("render");

		this.changeHeaderEvent		=3D new =
YAHOO.util.CustomEvent("changeHeader");
		this.changeBodyEvent		=3D new YAHOO.util.CustomEvent("changeBody");
		this.changeFooterEvent		=3D new =
YAHOO.util.CustomEvent("changeFooter");

		this.changeContentEvent		=3D new =
YAHOO.util.CustomEvent("changeContent");

		this.destroyEvent			=3D new YAHOO.util.CustomEvent("destroy");
		this.beforeShowEvent		=3D new YAHOO.util.CustomEvent("beforeShow");
		this.showEvent				=3D new YAHOO.util.CustomEvent("show");
		this.beforeHideEvent		=3D new YAHOO.util.CustomEvent("beforeHide");
		this.hideEvent				=3D new YAHOO.util.CustomEvent("hide");
	},=20

	/**
	* String representing the current user-agent platform
	* @type string
	*/
	platform : function() {
					var ua =3D navigator.userAgent.toLowerCase();
					if (ua.indexOf("windows") !=3D -1 || ua.indexOf("win32") !=3D -1) {
						return "windows";
					} else if (ua.indexOf("macintosh") !=3D -1) {
						return "mac";
					} else {
						return false;
					}
				}(),

	/**
	* String representing the current user-agent browser
	* @type string
	*/
	browser : function() {
			var ua =3D navigator.userAgent.toLowerCase();
				  if (ua.indexOf('opera')!=3D-1) { // Opera (check first in case of =
spoof)
					 return 'opera';
				  } else if (ua.indexOf('msie 7')!=3D-1) { // IE7
					 return 'ie7';
				  } else if (ua.indexOf('msie') !=3D-1) { // IE
					 return 'ie';
				  } else if (ua.indexOf('safari')!=3D-1) { // Safari (check before =
Gecko because it includes "like Gecko")
					 return 'safari';
				  } else if (ua.indexOf('gecko') !=3D -1) { // Gecko
					 return 'gecko';
				  } else {
					 return false;
				  }
			}(),

	/**
	* Boolean representing whether or not the current browsing context is =
secure (https)
	* @type boolean
	*/
	isSecure : function() {
		if (window.location.href.toLowerCase().indexOf("https") =3D=3D 0) {
			this.imageRoot =3D YAHOO.widget.Module.IMG_ROOT_SSL;
			return true;
		} else {
			return false;
		}
	}(),

	/**
	* Initializes the custom events for Module which are fired =
automatically at appropriate times by the Module class.
	*/
	initDefaultConfig : function() {
		// Add properties //

		this.cfg.addProperty("visible", { value:true, =
handler:this.configVisible, validator:this.cfg.checkBoolean } );
		this.cfg.addProperty("effect", { suppressEvent:true, =
supercedes:["visible"] } );
		this.cfg.addProperty("monitorresize", { value:true, =
handler:this.configMonitorResize } );
	},

	/**
	* The Module class's initialization method, which is executed for =
Module and all of its subclasses. This method is automatically called by =
the constructor, and  sets up all DOM references for pre-existing =
markup, and creates required markup if it is not already present.
	* @param {string}	el	The element ID representing the Module <em>OR</em>
	* @param {Element}	el	The element representing the Module
	* @param {object}	userConfig	The configuration object literal =
containing the configuration that should be set for this module. See =
configuration documentation for more details.
	*/
	init : function(el, userConfig) {

		this.initEvents();

		this.beforeInitEvent.fire(YAHOO.widget.Module);

		this.cfg =3D new YAHOO.util.Config(this);
	=09
		if (typeof el =3D=3D "string") {
			var elId =3D el;

			el =3D document.getElementById(el);
			if (! el) {
				el =3D document.createElement("DIV");
				el.id =3D elId;
			}
		}

		this.element =3D el;
	=09
		if (el.id) {
			this.id =3D el.id;
		}=20

		var childNodes =3D this.element.childNodes;

		if (childNodes) {
			for (var i=3D0;i<childNodes.length;i++) {
				var child =3D childNodes[i];
				switch (child.className) {
					case YAHOO.widget.Module.CSS_HEADER:
						this.header =3D child;
						break;
					case YAHOO.widget.Module.CSS_BODY:
						this.body =3D child;
						break;
					case YAHOO.widget.Module.CSS_FOOTER:
						this.footer =3D child;
						break;
				}
			}
		}

		this.initDefaultConfig();

		YAHOO.util.Dom.addClass(this.element, YAHOO.widget.Module.CSS_MODULE);

		if (userConfig) {
			this.cfg.applyConfig(userConfig, true);
		}

		// Subscribe to the fireQueue() method of Config so that any queued =
configuration changes are
		// excecuted upon render of the Module
		if (! YAHOO.util.Config.alreadySubscribed(this.renderEvent, =
this.cfg.fireQueue, this.cfg)) {
			this.renderEvent.subscribe(this.cfg.fireQueue, this.cfg, true);
		}

		this.initEvent.fire(YAHOO.widget.Module);
	},

	/**
	* Initialized an empty DOM element that is placed out of the visible =
area that can be used to detect text resize.
	*/
	initResizeMonitor : function() {
		var resizeMonitor =3D document.getElementById("_yuiResizeMonitor");
		if (! resizeMonitor) {
			resizeMonitor =3D document.createElement("DIV");
			resizeMonitor.style.position =3D "absolute";
			resizeMonitor.id =3D "_yuiResizeMonitor";
			resizeMonitor.style.width =3D "1em";
			resizeMonitor.style.height =3D "1em";
			resizeMonitor.style.top =3D "-1000px";
			resizeMonitor.style.left =3D "-1000px";
			resizeMonitor.innerHTML =3D "&nbsp;";
			document.body.appendChild(resizeMonitor);
		}
		this.resizeMonitor =3D resizeMonitor;
		YAHOO.util.Event.addListener(this.resizeMonitor, "resize", =
this.onDomResize, this, true);
	},

	/**
	* Event handler fired when the resize monitor element is resized.
	*/
	onDomResize : function(e, obj) { },

	/**
	* Sets the Module's header content to the HTML specified, or appends =
the passed element to the header. If no header is present, one will be =
automatically created.
	* @param {string}	headerContent	The HTML used to set the header =
<em>OR</em>
	* @param {Element}	headerContent	The Element to append to the header
	*/=09
	setHeader : function(headerContent) {
		if (! this.header) {
			this.header =3D document.createElement("DIV");
			this.header.className =3D YAHOO.widget.Module.CSS_HEADER;
		}
	=09
		if (typeof headerContent =3D=3D "string") {
			this.header.innerHTML =3D headerContent;
		} else {
			this.header.innerHTML =3D "";
			this.header.appendChild(headerContent);
		}

		this.changeHeaderEvent.fire(headerContent);
		this.changeContentEvent.fire();
	},

	/**
	* Appends the passed element to the header. If no header is present, =
one will be automatically created.
	* @param {Element}	element	The element to append to the header
	*/=09
	appendToHeader : function(element) {
		if (! this.header) {
			this.header =3D document.createElement("DIV");
			this.header.className =3D YAHOO.widget.Module.CSS_HEADER;
		}
	=09
		this.header.appendChild(element);
		this.changeHeaderEvent.fire(element);
		this.changeContentEvent.fire();
	},

	/**
	* Sets the Module's body content to the HTML specified, or appends the =
passed element to the body. If no body is present, one will be =
automatically created.
	* @param {string}	bodyContent	The HTML used to set the body <em>OR</em>
	* @param {Element}	bodyContent	The Element to append to the body
	*/	=09
	setBody : function(bodyContent) {
		if (! this.body) {
			this.body =3D document.createElement("DIV");
			this.body.className =3D YAHOO.widget.Module.CSS_BODY;
		}

		if (typeof bodyContent =3D=3D "string")
		{
			this.body.innerHTML =3D bodyContent;
		} else {
			this.body.innerHTML =3D "";
			this.body.appendChild(bodyContent);
		}

		this.changeBodyEvent.fire(bodyContent);
		this.changeContentEvent.fire();
	},

	/**
	* Appends the passed element to the body. If no body is present, one =
will be automatically created.
	* @param {Element}	element	The element to append to the body
	*/
	appendToBody : function(element) {
		if (! this.body) {
			this.body =3D document.createElement("DIV");
			this.body.className =3D YAHOO.widget.Module.CSS_BODY;
		}

		this.body.appendChild(element);
		this.changeBodyEvent.fire(element);
		this.changeContentEvent.fire();
	},

	/**
	* Sets the Module's footer content to the HTML specified, or appends =
the passed element to the footer. If no footer is present, one will be =
automatically created.
	* @param {string}	footerContent	The HTML used to set the footer =
<em>OR</em>
	* @param {Element}	footerContent	The Element to append to the footer
	*/=09
	setFooter : function(footerContent) {
		if (! this.footer) {
			this.footer =3D document.createElement("DIV");
			this.footer.className =3D YAHOO.widget.Module.CSS_FOOTER;
		}

		if (typeof footerContent =3D=3D "string") {
			this.footer.innerHTML =3D footerContent;
		} else {
			this.footer.innerHTML =3D "";
			this.footer.appendChild(footerContent);
		}

		this.changeFooterEvent.fire(footerContent);
		this.changeContentEvent.fire();
	},

	/**
	* Appends the passed element to the footer. If no footer is present, =
one will be automatically created.
	* @param {Element}	element	The element to append to the footer
	*/
	appendToFooter : function(element) {
		if (! this.footer) {
			this.footer =3D document.createElement("DIV");
			this.footer.className =3D YAHOO.widget.Module.CSS_FOOTER;
		}

		this.footer.appendChild(element);
		this.changeFooterEvent.fire(element);
		this.changeContentEvent.fire();
	},

	/**
	* Renders the Module by inserting the elements that are not already in =
the main Module into their correct places. Optionally appends the Module =
to the specified node prior to the render's execution. NOTE: For Modules =
without existing markup, the appendToNode argument is REQUIRED. If this =
argument is ommitted and the current element is not present in the =
document, the function will return false, indicating that the render was =
a failure.
	* @param {string}	appendToNode	The element id to which the Module =
should be appended to prior to rendering <em>OR</em>
	* @param {Element}	appendToNode	The element to which the Module should =
be appended to prior to rendering=09
	* @param {Element}	moduleElement	OPTIONAL. The element that represents =
the actual Standard Module container.=20
	* @return {boolean} Success or failure of the render
	*/
	render : function(appendToNode, moduleElement) {
		this.beforeRenderEvent.fire();

		if (! moduleElement) {
			moduleElement =3D this.element;
		}

		var me =3D this;
		var appendTo =3D function(element) {
			if (typeof element =3D=3D "string") {
				element =3D document.getElementById(element);
			}
		=09
			if (element) {
				element.appendChild(me.element);
				me.appendEvent.fire();
			}
		}

		if (appendToNode) {
			appendTo(appendToNode);
		} else { // No node was passed in. If the element is not pre-marked =
up, this fails
			if (! YAHOO.util.Dom.inDocument(this.element)) {
				return false;
			}
		}

		// Need to get everything into the DOM if it isn't already
	=09
		if (this.header && ! YAHOO.util.Dom.inDocument(this.header)) {
			// There is a header, but it's not in the DOM yet... need to add it
			var firstChild =3D moduleElement.firstChild;
			if (firstChild) { // Insert before first child if exists
				moduleElement.insertBefore(this.header, firstChild);
			} else { // Append to empty body because there are no children
				moduleElement.appendChild(this.header);
			}
		}

		if (this.body && ! YAHOO.util.Dom.inDocument(this.body)) {
			// There is a body, but it's not in the DOM yet... need to add it
			if (this.footer && YAHOO.util.Dom.isAncestor(this.moduleElement, =
this.footer)) { // Insert before footer if exists in DOM
				moduleElement.insertBefore(this.body, this.footer);
			} else { // Append to element because there is no footer
				moduleElement.appendChild(this.body);
			}
		}

		if (this.footer && ! YAHOO.util.Dom.inDocument(this.footer)) {
			// There is a footer, but it's not in the DOM yet... need to add it
			moduleElement.appendChild(this.footer);
		}

		this.renderEvent.fire();
		return true;
	},

	/**
	* Removes the Module element from the DOM and sets all child elements =
to null.
	*/
	destroy : function() {
		if (this.element) {
			var parent =3D this.element.parentNode;
		}
		if (parent) {
			parent.removeChild(this.element);
		}

		this.element =3D null;
		this.header =3D null;
		this.body =3D null;
		this.footer =3D null;

		this.destroyEvent.fire();
	},

	/**
	* Shows the Module element by setting the visible configuration =
property to true. Also fires two events: beforeShowEvent prior to the =
visibility change, and showEvent after.
	*/
	show : function() {
		this.cfg.setProperty("visible", true);
	},

	/**
	* Hides the Module element by setting the visible configuration =
property to false. Also fires two events: beforeHideEvent prior to the =
visibility change, and hideEvent after.
	*/
	hide : function() {
		this.cfg.setProperty("visible", false);
	},

	// BUILT-IN EVENT HANDLERS FOR MODULE //

	/**
	* Default event handler for changing the visibility property of a =
Module. By default, this is achieved by switching the "display" style =
between "block" and "none".
	* This method is responsible for firing showEvent and hideEvent.
	*/
	configVisible : function(type, args, obj) {
		var visible =3D args[0];
		if (visible) {
			this.beforeShowEvent.fire();
			YAHOO.util.Dom.setStyle(this.element, "display", "block");
			this.showEvent.fire();
		} else {
			this.beforeHideEvent.fire();
			YAHOO.util.Dom.setStyle(this.element, "display", "none");
			this.hideEvent.fire();
		}
	},

	/**
	* Default event handler for the "monitorresize" configuration property
	*/
	configMonitorResize : function(type, args, obj) {
		var monitor =3D args[0];
		if (monitor) {
			this.initResizeMonitor();
		} else {
			YAHOO.util.Event.removeListener(this.resizeMonitor, "resize", =
this.onDomResize);
			this.resizeMonitor =3D null;
		}
	}
}
/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class Overlay is a Module that is absolutely positioned above the =
page flow. It has convenience methods for positioning and sizing, as =
well as options for controlling zIndex and constraining the Overlay's =
position to the current visible viewport. Overlay also contains a =
dynamicly generated IFRAME which is placed beneath it for Internet =
Explorer 6 and 5.x so that it will be properly rendered above SELECT =
elements.
* @param {string}	el	The element ID representing the Overlay <em>OR</em>
* @param {Element}	el	The element representing the Overlay
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Overlay. See configuration =
documentation for more details.
* @constructor
*/
YAHOO.widget.Overlay =3D function(el, userConfig) {
	if (arguments.length > 0) {
		YAHOO.widget.Overlay.superclass.constructor.call(this, el, =
userConfig);
	}
}

YAHOO.widget.Overlay.prototype =3D new YAHOO.widget.Module();
YAHOO.widget.Overlay.prototype.constructor =3D YAHOO.widget.Overlay;

/**
* Reference to the Overlay's superclass, Module
* @type class
* @final
*/
YAHOO.widget.Overlay.superclass =3D YAHOO.widget.Module.prototype;

/**
* The URL of the blank image that will be placed in the iframe
* @type string
* @final
*/
YAHOO.widget.Overlay.IFRAME_SRC =3D "promo/m/irs/blank.gif";

/**
* Constant representing the top left corner of an element, used for =
configuring the context element alignment
* @type string
* @final
*/
YAHOO.widget.Overlay.TOP_LEFT =3D "tl";

/**
* Constant representing the top right corner of an element, used for =
configuring the context element alignment
* @type string
* @final
*/
YAHOO.widget.Overlay.TOP_RIGHT =3D "tr";

/**
* Constant representing the top bottom left corner of an element, used =
for configuring the context element alignment
* @type string
* @final
*/
YAHOO.widget.Overlay.BOTTOM_LEFT =3D "bl";

/**
* Constant representing the bottom right corner of an element, used for =
configuring the context element alignment
* @type string
* @final
*/
YAHOO.widget.Overlay.BOTTOM_RIGHT =3D "br";

/**
* Constant representing the default CSS class used for an Overlay
* @type string
* @final
*/
YAHOO.widget.Overlay.CSS_OVERLAY =3D "overlay";

/**
* CustomEvent fired before the Overlay is moved.
* args: x,y that the Overlay will be moved to
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Overlay.prototype.beforeMoveEvent =3D null;

/**
* CustomEvent fired after the Overlay is moved.
* args: x,y that the Overlay was moved to
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Overlay.prototype.moveEvent =3D null;

/*
* The Overlay initialization method, which is executed for Overlay and =
all of its subclasses. This method is automatically called by the =
constructor, and  sets up all DOM references for pre-existing markup, =
and creates required markup if it is not already present.
* @param {string}	el	The element ID representing the Overlay <em>OR</em>
* @param {Element}	el	The element representing the Overlay
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Overlay. See configuration =
documentation for more details.
*/
YAHOO.widget.Overlay.prototype.init =3D function(el, userConfig) {
	YAHOO.widget.Overlay.superclass.init.call(this, el/*, userConfig*/);  =
// Note that we don't pass the user config in here yet because we only =
want it executed once, at the lowest subclass level
=09
	this.beforeInitEvent.fire(YAHOO.widget.Overlay);

	YAHOO.util.Dom.addClass(this.element, =
YAHOO.widget.Overlay.CSS_OVERLAY);

	if (userConfig) {
		this.cfg.applyConfig(userConfig, true);
	}

	if (this.platform =3D=3D "mac" && this.browser =3D=3D "gecko") {
		if (! =
YAHOO.util.Config.alreadySubscribed(this.showEvent,this.showMacGeckoScrol=
lbars,this)) {
			this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);
		}
		if (! =
YAHOO.util.Config.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrol=
lbars,this)) {
			this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);
		}
	}

	this.initEvent.fire(YAHOO.widget.Overlay);

}

/**
* Initializes the custom events for Overlay which are fired =
automatically at appropriate times by the Overlay class.
*/
YAHOO.widget.Overlay.prototype.initEvents =3D function() {
	YAHOO.widget.Overlay.superclass.initEvents.call(this);

	this.beforeMoveEvent =3D new YAHOO.util.CustomEvent("beforeMove", =
this);
	this.moveEvent =3D new YAHOO.util.CustomEvent("move", this);
}

/**
* Initializes the class's configurable properties which can be changed =
using the Overlay's Config object (cfg).
*/
YAHOO.widget.Overlay.prototype.initDefaultConfig =3D function() {
	YAHOO.widget.Overlay.superclass.initDefaultConfig.call(this);

	// Add overlay config properties //
	this.cfg.addProperty("x", { handler:this.configX, =
validator:this.cfg.checkNumber, suppressEvent:true, =
supercedes:["iframe"] } );
	this.cfg.addProperty("y", { handler:this.configY, =
validator:this.cfg.checkNumber, suppressEvent:true, =
supercedes:["iframe"] } );
	this.cfg.addProperty("xy",{ handler:this.configXY, suppressEvent:true, =
supercedes:["iframe"] } );

	this.cfg.addProperty("context",	{ handler:this.configContext, =
suppressEvent:true, supercedes:["iframe"] } );
	this.cfg.addProperty("fixedcenter", { value:false, =
handler:this.configFixedCenter, validator:this.cfg.checkBoolean, =
supercedes:["iframe","visible"] } );

	this.cfg.addProperty("width", { handler:this.configWidth, =
suppressEvent:true, supercedes:["iframe"] } );
	this.cfg.addProperty("height", { handler:this.configHeight, =
suppressEvent:true, supercedes:["iframe"] } );

	this.cfg.addProperty("zIndex", { value:null, handler:this.configzIndex =
} );

	this.cfg.addProperty("constraintoviewport", { value:false, =
handler:this.configConstrainToViewport, validator:this.cfg.checkBoolean, =
supercedes:["iframe","x","y","xy"] } );
	this.cfg.addProperty("iframe", { value:(this.browser =3D=3D "ie" ? true =
: false), handler:this.configIframe, validator:this.cfg.checkBoolean, =
supercedes:["zIndex"] } );
}

/**
* Moves the Overlay to the specified position. This function is =
identical to calling this.cfg.setProperty("xy", [x,y]);
* @param {int}	x	The Overlay's new x position
* @param {int}	y	The Overlay's new y position
*/
YAHOO.widget.Overlay.prototype.moveTo =3D function(x, y) {
	this.cfg.setProperty("xy",[x,y]);
}

/**
* Adds a special CSS class to the Overlay when Mac/Gecko is in use, to =
work around a Gecko bug where
* scrollbars cannot be hidden. See =
https://bugzilla.mozilla.org/show_bug.cgi?id=3D187435
*/
YAHOO.widget.Overlay.prototype.hideMacGeckoScrollbars =3D function() {
	YAHOO.util.Dom.removeClass(this.element, "show-scrollbars");
	YAHOO.util.Dom.addClass(this.element, "hide-scrollbars");
}

/**
* Removes a special CSS class from the Overlay when Mac/Gecko is in use, =
to work around a Gecko bug where
* scrollbars cannot be hidden. See =
https://bugzilla.mozilla.org/show_bug.cgi?id=3D187435
*/
YAHOO.widget.Overlay.prototype.showMacGeckoScrollbars =3D function() {
	YAHOO.util.Dom.removeClass(this.element, "hide-scrollbars");
	YAHOO.util.Dom.addClass(this.element, "show-scrollbars");
}

// BEGIN BUILT-IN PROPERTY EVENT HANDLERS //

/**
* The default event handler fired when the "visible" property is =
changed. This method is responsible for firing showEvent and hideEvent.
*/
YAHOO.widget.Overlay.prototype.configVisible =3D function(type, args, =
obj) {
	var visible =3D args[0];
	var currentVis =3D YAHOO.util.Dom.getStyle(this.element, "visibility");

	var effect =3D this.cfg.getProperty("effect");

	var effectInstances =3D new Array();
	if (effect) {
		if (effect instanceof Array) {
			for (var i=3D0;i<effect.length;i++) {
				var eff =3D effect[i];
				effectInstances[effectInstances.length] =3D eff.effect(this, =
eff.duration);
			}
		} else {
			effectInstances[effectInstances.length] =3D effect.effect(this, =
effect.duration);
		}
	}

	var isMacGecko =3D (this.platform =3D=3D "mac" && this.browser =3D=3D =
"gecko");

	if (visible) { // Show
		if (isMacGecko) {
			this.showMacGeckoScrollbars();
		}=09

		if (effect) { // Animate in
			if (visible) { // Animate in if not showing
				if (currentVis !=3D "visible") {
					this.beforeShowEvent.fire();
					for (var i=3D0;i<effectInstances.length;i++) {
						var e =3D effectInstances[i];
						if (i =3D=3D 0 && ! =
YAHOO.util.Config.alreadySubscribed(e.animateInCompleteEvent,this.showEve=
nt.fire,this.showEvent)) {
							=
e.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,tru=
e); // Delegate showEvent until end of animateInComplete
						}
						e.animateIn();
					}
				}
			}
		} else { // Show
			if (currentVis !=3D "visible") {
				this.beforeShowEvent.fire();
				YAHOO.util.Dom.setStyle(this.element, "visibility", "visible");
				this.cfg.refireEvent("iframe");
				this.showEvent.fire();
			}
		}

	} else { // Hide
		if (isMacGecko) {
			this.hideMacGeckoScrollbars();
		}=09

		if (effect) { // Animate out if showing
			if (currentVis !=3D "hidden") {
				this.beforeHideEvent.fire();
				for (var i=3D0;i<effectInstances.length;i++) {
					var e =3D effectInstances[i];
					if (i =3D=3D 0 && ! =
YAHOO.util.Config.alreadySubscribed(e.animateOutCompleteEvent,this.hideEv=
ent.fire,this.hideEvent)) {			=09
						=
e.animateOutCompleteEvent.subscribe(this.hideEvent.fire,this.hideEvent,tr=
ue); // Delegate hideEvent until end of animateOutComplete
					}
					e.animateOut();
				}
			}
		} else { // Simple hide
			if (currentVis !=3D "hidden") {
				this.beforeHideEvent.fire();
				YAHOO.util.Dom.setStyle(this.element, "visibility", "hidden");
				this.cfg.refireEvent("iframe");
				this.hideEvent.fire();
			}
		}=09
	}
}

/**
* Center event handler used for centering on scroll/resize, but only if =
the Overlay is visible
*/
YAHOO.widget.Overlay.prototype.doCenterOnDOMEvent =3D function() {
	if (this.cfg.getProperty("visible")) {
		this.center();
	}
}

/**
* The default event handler fired when the "fixedcenter" property is =
changed.
*/
YAHOO.widget.Overlay.prototype.configFixedCenter =3D function(type, =
args, obj) {
	var val =3D args[0];

	if (val) {
		this.center();
		=09
		if (! YAHOO.util.Config.alreadySubscribed(this.beforeShowEvent, =
this.center, this)) {
			this.beforeShowEvent.subscribe(this.center, this, true);
		}
	=09
		if (! =
YAHOO.util.Config.alreadySubscribed(YAHOO.widget.Overlay.windowResizeEven=
t, this.doCenterOnDOMEvent, this)) {
			=
YAHOO.widget.Overlay.windowResizeEvent.subscribe(this.doCenterOnDOMEvent,=
 this, true);
		}

		if (! =
YAHOO.util.Config.alreadySubscribed(YAHOO.widget.Overlay.windowScrollEven=
t, this.doCenterOnDOMEvent, this)) {
			YAHOO.widget.Overlay.windowScrollEvent.subscribe( =
this.doCenterOnDOMEvent, this, true);
		}
	} else {
		=
YAHOO.widget.Overlay.windowResizeEvent.unsubscribe(this.doCenterOnDOMEven=
t, this);
		=
YAHOO.widget.Overlay.windowScrollEvent.unsubscribe(this.doCenterOnDOMEven=
t, this);
	}
}

/**
* The default event handler fired when the "height" property is changed.
*/
YAHOO.widget.Overlay.prototype.configHeight =3D function(type, args, =
obj) {
	var height =3D args[0];
	var el =3D this.element;
	YAHOO.util.Dom.setStyle(el, "height", height);
	this.cfg.refireEvent("iframe");
}

/**
* The default event handler fired when the "width" property is changed.
*/
YAHOO.widget.Overlay.prototype.configWidth =3D function(type, args, obj) =
{
	var width =3D args[0];
	var el =3D this.element;
	YAHOO.util.Dom.setStyle(el, "width", width);
	this.cfg.refireEvent("iframe");
}

/**
* The default event handler fired when the "zIndex" property is changed.
*/
YAHOO.widget.Overlay.prototype.configzIndex =3D function(type, args, =
obj) {
	var zIndex =3D args[0];

	var el =3D this.element;

	if (! zIndex) {
		zIndex =3D YAHOO.util.Dom.getStyle(el, "zIndex");
		if (! zIndex || isNaN(zIndex)) {
			zIndex =3D 0;
		}
	}

	if (this.iframe) {
		if (zIndex <=3D 0) {
			zIndex =3D 1;
		}
		YAHOO.util.Dom.setStyle(this.iframe, "zIndex", (zIndex-1));
	}

	YAHOO.util.Dom.setStyle(el, "zIndex", zIndex);
	this.cfg.setProperty("zIndex", zIndex, true);
}

/**
* The default event handler fired when the "xy" property is changed.
*/
YAHOO.widget.Overlay.prototype.configXY =3D function(type, args, obj) {
	var pos =3D args[0];
	var x =3D pos[0];
	var y =3D pos[1];

	this.cfg.setProperty("x", x);
	this.cfg.setProperty("y", y);

	this.beforeMoveEvent.fire([x,y]);

	x =3D this.cfg.getProperty("x");
	y =3D this.cfg.getProperty("y");

	this.cfg.refireEvent("iframe");
	this.moveEvent.fire([x,y]);
}

/**
* The default event handler fired when the "x" property is changed.
*/
YAHOO.widget.Overlay.prototype.configX =3D function(type, args, obj) {
	var x =3D args[0];
	var y =3D this.cfg.getProperty("y");

	this.cfg.setProperty("x", x, true);
	this.cfg.setProperty("y", y, true);

	this.beforeMoveEvent.fire([x,y]);

	x =3D this.cfg.getProperty("x");
	y =3D this.cfg.getProperty("y");

	YAHOO.util.Dom.setX(this.element, x, true);
=09
	this.cfg.setProperty("xy", [x, y], true);

	this.cfg.refireEvent("iframe");
	this.moveEvent.fire([x, y]);
}

/**
* The default event handler fired when the "y" property is changed.
*/
YAHOO.widget.Overlay.prototype.configY =3D function(type, args, obj) {
	var x =3D this.cfg.getProperty("x");
	var y =3D args[0];

	this.cfg.setProperty("x", x, true);
	this.cfg.setProperty("y", y, true);

	this.beforeMoveEvent.fire([x,y]);

	x =3D this.cfg.getProperty("x");
	y =3D this.cfg.getProperty("y");

	YAHOO.util.Dom.setY(this.element, y, true);

	this.cfg.setProperty("xy", [x, y], true);

	this.cfg.refireEvent("iframe");
	this.moveEvent.fire([x, y]);
}

/**
* The default event handler fired when the "iframe" property is changed.
*/
YAHOO.widget.Overlay.prototype.configIframe =3D function(type, args, =
obj) {
	var val =3D args[0];

	var el =3D this.element;

	if (val) {
		var x =3D this.cfg.getProperty("x");
		var y =3D this.cfg.getProperty("y");

		if (! x || ! y) {
			this.syncPosition();
			x =3D this.cfg.getProperty("x");
			y =3D this.cfg.getProperty("y");
		}

		if (! isNaN(x) && ! isNaN(y)) {
			if (! this.iframe) {
				this.iframe =3D document.createElement("iframe");
			=09
				var parent =3D el.parentNode;
				if (parent) {
					parent.appendChild(this.iframe);
				} else {
					document.body.appendChild(this.iframe);
				}

				this.iframe.src =3D this.imageRoot + =
YAHOO.widget.Overlay.IFRAME_SRC;
				YAHOO.util.Dom.setStyle(this.iframe, "position", "absolute");
				YAHOO.util.Dom.setStyle(this.iframe, "border", "none");
				YAHOO.util.Dom.setStyle(this.iframe, "margin", "0");
				YAHOO.util.Dom.setStyle(this.iframe, "padding", "0");
				YAHOO.util.Dom.setStyle(this.iframe, "opacity", "0");
			}

			YAHOO.util.Dom.setStyle(this.iframe, "left", x-2 + "px");
			YAHOO.util.Dom.setStyle(this.iframe, "top", y-2 + "px");

			var width =3D el.clientWidth;
			var height =3D el.clientHeight;

			YAHOO.util.Dom.setStyle(this.iframe, "width", (width+2) + "px");
			YAHOO.util.Dom.setStyle(this.iframe, "height", (height+2) + "px");

			if (! this.cfg.getProperty("visible")) {
				this.iframe.style.display =3D "none";
			} else {
				this.iframe.style.display =3D "block";
			}
		}
	} else {
		if (this.iframe) {
			this.iframe.style.display =3D "none";
		}
	}
}

/**
* The default event handler fired when the "constraintoviewport" =
property is changed.
*/
YAHOO.widget.Overlay.prototype.configConstrainToViewport =3D =
function(type, args, obj) {
	var val =3D args[0];
	if (val) {
		if (! YAHOO.util.Config.alreadySubscribed(this.beforeMoveEvent, =
this.enforceConstraints, this)) {
			this.beforeMoveEvent.subscribe(this.enforceConstraints, this, true);
		}
	} else {
		this.beforeMoveEvent.unsubscribe(this.enforceConstraints, this);
	}
}

/**
* The default event handler fired when the "context" property is =
changed.
*/
YAHOO.widget.Overlay.prototype.configContext =3D function(type, args, =
obj) {
	var contextArgs =3D args[0];

	if (contextArgs) {
		var contextEl =3D contextArgs[0];
		var elementMagnetCorner =3D contextArgs[1];
		var contextMagnetCorner =3D contextArgs[2];

		if (contextEl) {
			if (typeof contextEl =3D=3D "string") {
				this.cfg.setProperty("context", =
[document.getElementById(contextEl),elementMagnetCorner,contextMagnetCorn=
er], true);
			}
		=09
			if (elementMagnetCorner && contextMagnetCorner) {
				this.align(elementMagnetCorner, contextMagnetCorner);
			}
		}=09
	}
}


// END BUILT-IN PROPERTY EVENT HANDLERS //

/**
* Aligns the Overlay to its context element using the specified corner =
points (represented by the constants TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, =
and BOTTOM_RIGHT.
* @param {string} elementAlign		The string representing the corner of =
the Overlay that should be aligned to the context element
* @param {string} contextAlign		The corner of the context element that =
the elementAlign corner should stick to.
*/
YAHOO.widget.Overlay.prototype.align =3D function(elementAlign, =
contextAlign) {
	var contextArgs =3D this.cfg.getProperty("context");
	if (contextArgs) {
		var context =3D contextArgs[0];
	=09
		var element =3D this.element;
		var me =3D this;

		if (! elementAlign) {
			elementAlign =3D contextArgs[1];
		}

		if (! contextAlign) {
			contextAlign =3D contextArgs[2];
		}

		if (element && context) {
			var elementRegion =3D YAHOO.util.Dom.getRegion(element);
			var contextRegion =3D YAHOO.util.Dom.getRegion(context);

			var doAlign =3D function(v,h) {
				switch (elementAlign) {
					case YAHOO.widget.Overlay.TOP_LEFT:
						me.moveTo(h,v);
						break;
					case YAHOO.widget.Overlay.TOP_RIGHT:
						me.moveTo(h-element.offsetWidth,v);
						break;
					case YAHOO.widget.Overlay.BOTTOM_LEFT:
						me.moveTo(h,v-element.offsetHeight);
						break;
					case YAHOO.widget.Overlay.BOTTOM_RIGHT:
						me.moveTo(h-element.offsetWidth,v-element.offsetHeight);
						break;
				}
			}

			switch (contextAlign) {
				case YAHOO.widget.Overlay.TOP_LEFT:
					doAlign(contextRegion.top, contextRegion.left);
					break;
				case YAHOO.widget.Overlay.TOP_RIGHT:
					doAlign(contextRegion.top, contextRegion.right);
					break;	=09
				case YAHOO.widget.Overlay.BOTTOM_LEFT:
					doAlign(contextRegion.bottom, contextRegion.left);
					break;
				case YAHOO.widget.Overlay.BOTTOM_RIGHT:
					doAlign(contextRegion.bottom, contextRegion.right);
					break;
			}
		}
	}
}

/**
* The default event handler executed when the moveEvent is fired, if the =
"constraintoviewport" is set to true.
*/
YAHOO.widget.Overlay.prototype.enforceConstraints =3D function(type, =
args, obj) {
	var pos =3D args[0];

	var x =3D pos[0];
	var y =3D pos[1];

	var width =3D parseInt(this.cfg.getProperty("width"));

	if (isNaN(width)) {
		width =3D 0;
	}

	var offsetHeight =3D this.element.offsetHeight;
	var offsetWidth =3D (width>0?width:this.element.offsetWidth); =
//this.element.offsetWidth;

	var viewPortWidth =3D YAHOO.util.Dom.getViewportWidth();
	var viewPortHeight =3D YAHOO.util.Dom.getViewportHeight();

	var scrollX =3D window.scrollX || document.documentElement.scrollLeft;
	var scrollY =3D window.scrollY || document.documentElement.scrollTop;

	var topConstraint =3D scrollY + 10;
	var leftConstraint =3D scrollX + 10;
	var bottomConstraint =3D scrollY + viewPortHeight - offsetHeight - 10;
	var rightConstraint =3D scrollX + viewPortWidth - offsetWidth - 10;
=09
	if (x < leftConstraint) {
		x =3D leftConstraint;
	} else if (x > rightConstraint) {
		x =3D rightConstraint;
	}

	if (y < topConstraint) {
		y =3D topConstraint;
	} else if (y > bottomConstraint) {
		y =3D bottomConstraint;
	}

	this.cfg.setProperty("x", x, true);
	this.cfg.setProperty("y", y, true);
	this.cfg.setProperty("xy", [x,y], true);
}

/**
* Centers the container in the viewport.
*/
YAHOO.widget.Overlay.prototype.center =3D function() {
	var scrollX =3D window.scrollX || document.documentElement.scrollLeft;
	var scrollY =3D window.scrollY || document.documentElement.scrollTop;

	var viewPortWidth =3D YAHOO.util.Dom.getClientWidth();
	var viewPortHeight =3D YAHOO.util.Dom.getClientHeight();

	var elementWidth =3D this.element.offsetWidth;
	var elementHeight =3D this.element.offsetHeight;

	var x =3D (viewPortWidth / 2) - (elementWidth / 2) + scrollX;
	var y =3D (viewPortHeight / 2) - (elementHeight / 2) + scrollY;
=09
	this.element.style.left =3D parseInt(x) + "px";
	this.element.style.top =3D parseInt(y) + "px";
	this.syncPosition();

	this.cfg.refireEvent("iframe");
}

/**
* Synchronizes the Panel's "xy", "x", and "y" properties with the =
Panel's position in the DOM. This is primarily used to update position =
information during drag & drop.
*/
YAHOO.widget.Overlay.prototype.syncPosition =3D function() {
	var pos =3D YAHOO.util.Dom.getXY(this.element);
	this.cfg.setProperty("x", pos[0], true);
	this.cfg.setProperty("y", pos[1], true);
	this.cfg.setProperty("xy", pos, true);
}

/**
* Event handler fired when the resize monitor element is resized.
*/
YAHOO.widget.Overlay.prototype.onDomResize =3D function(e, obj) {
	YAHOO.widget.Overlay.superclass.onDomResize.call(this, e, obj);
	this.cfg.refireEvent("iframe");
}

/**
* A singleton CustomEvent used for reacting to the DOM event for window =
scroll
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Overlay.windowScrollEvent =3D new =
YAHOO.util.CustomEvent("windowScroll");

/**
* A singleton CustomEvent used for reacting to the DOM event for window =
resize
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Overlay.windowResizeEvent =3D new =
YAHOO.util.CustomEvent("windowResize");

/**
* The DOM event handler used to fire the CustomEvent for window scroll
* @type Function
*/
YAHOO.widget.Overlay.windowScrollHandler =3D function(e) {
	YAHOO.widget.Overlay.windowScrollEvent.fire();
}

/**
* The DOM event handler used to fire the CustomEvent for window resize
* @type Function
*/
YAHOO.widget.Overlay.windowResizeHandler =3D function(e) {
	YAHOO.widget.Overlay.windowResizeEvent.fire();
}


if (YAHOO.widget.Overlay._initialized =3D=3D undefined) {
	YAHOO.util.Event.addListener(window, "scroll", =
YAHOO.widget.Overlay.windowScrollHandler);
	YAHOO.util.Event.addListener(window, "resize", =
YAHOO.widget.Overlay.windowResizeHandler);
	/**
	* @private
	*/
	YAHOO.widget.Overlay._initialized =3D true;
}
/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class
* OverlayManager is used for maintaining the focus status of multiple =
Overlays.
* @param {Array}	overlays	Optional. A collection of Overlays to register =
with the manager.
* @param {object}	userConfig		The object literal representing the user =
configuration of the OverlayManager
* @constructor
*/
YAHOO.widget.OverlayManager =3D function(userConfig) {
	this.init(userConfig);
}

/**
* The CSS class representing a focused Overlay
* @type string
*/
YAHOO.widget.OverlayManager.CSS_FOCUSED =3D "focused";

YAHOO.widget.OverlayManager.prototype =3D {

	constructor : YAHOO.widget.OverlayManager,

	/**
	* The array of Overlays that are currently registered
	* @type Array
	*/
	overlays : new Array(),

	/**
	* Initializes the default configuration of the OverlayManager
	*/=09
	initDefaultConfig : function() {
		this.cfg.addProperty("overlays", { suppressEvent:true } );
		this.cfg.addProperty("focusevent", { value:"mousedown" } );
	},=20

	/**
	* Returns the currently focused Overlay
	* @return {Overlay}	The currently focused Overlay
	*/
	getActive : function() {},

	/**
	* Focuses the specified Overlay
	* @param {Overlay}	The Overlay to focus
	* @param {string}	The id of the Overlay to focus
	*/
	focus : function(overlay) {},

	/**
	* Removes the specified Overlay from the manager
	* @param {Overlay}	The Overlay to remove
	* @param {string}	The id of the Overlay to remove
	*/
	remove: function(overlay) {},

	/**
	* Removes focus from all registered Overlays in the manager
	*/
	blurAll : function() {},

	/**
	* Initializes the OverlayManager
	* @param {Array}	overlays	Optional. A collection of Overlays to =
register with the manager.
	* @param {object}	userConfig		The object literal representing the user =
configuration of the OverlayManager
	*/
	init : function(userConfig) {
		this.cfg =3D new YAHOO.util.Config(this);

		this.initDefaultConfig();

		if (userConfig) {
			this.cfg.applyConfig(userConfig, true);
		}
		this.cfg.fireQueue();

		var activeOverlay =3D null;

		this.getActive =3D function() {
			return activeOverlay;
		}

		this.focus =3D function(overlay) {
			var o =3D this.find(overlay);
			if (o) {
				this.blurAll();
				activeOverlay =3D o;
				YAHOO.util.Dom.addClass(activeOverlay.element, =
YAHOO.widget.OverlayManager.CSS_FOCUSED);
				this.overlays.sort(this.compareZIndexDesc);
				var topZIndex =3D YAHOO.util.Dom.getStyle(this.overlays[0].element, =
"zIndex");
				if (! isNaN(topZIndex) && this.overlays[0] !=3D overlay) {
					activeOverlay.cfg.setProperty("zIndex", (parseInt(topZIndex) + 1));
				}
				this.overlays.sort(this.compareZIndexDesc);
			}
		}

		this.remove =3D function(overlay) {
			var o =3D this.find(overlay);
			if (o) {
				var originalZ =3D YAHOO.util.Dom.getStyle(o.element, "zIndex");
				o.cfg.setProperty("zIndex", -1000, true);
				this.overlays.sort(this.compareZIndexDesc);
				this.overlays =3D this.overlays.slice(0, this.overlays.length-1);
				o.cfg.setProperty("zIndex", originalZ, true);

				o.cfg.setProperty("manager", null);
				o.focusEvent =3D null
				o.blurEvent =3D null;
				o.focus =3D null;
				o.blur =3D null;
			}
		}

		this.blurAll =3D function() {
			activeOverlay =3D null;
			for (var o=3D0;o<this.overlays.length;o++) {
				YAHOO.util.Dom.removeClass(this.overlays[o].element, =
YAHOO.widget.OverlayManager.CSS_FOCUSED);
			}	=09
		}

		var overlays =3D this.cfg.getProperty("overlays");

		if (overlays) {
			this.register(overlays);
			this.overlays.sort(this.compareZIndexDesc);
		}
	},

	/**
	* Registers an Overlay or an array of Overlays with the manager. Upon =
registration, the Overlay receives functions for focus and blur, along =
with CustomEvents for each.
	* @param {Overlay}	overlay		An Overlay to register with the manager.
	* @param {Overlay[]}	overlay		An array of Overlays to register with the =
manager.
	* @return	{boolean}	True if any Overlays are registered.
	*/
	register : function(overlay) {
		if (overlay instanceof YAHOO.widget.Overlay) {
			overlay.cfg.addProperty("manager", { value:this } );

			overlay.focusEvent =3D new YAHOO.util.CustomEvent("focus");
			overlay.blurEvent =3D new YAHOO.util.CustomEvent("blur");
		=09
			var mgr=3Dthis;

			overlay.focus =3D function() {
				mgr.focus(this);
				this.focusEvent.fire();
			}=20

			overlay.blur =3D function() {
				mgr.blurAll();
				this.blurEvent.fire();
			}

			var focusOnDomEvent =3D function(e,obj) {
				mgr.focus(overlay);
			}
		=09
			var focusevent =3D this.cfg.getProperty("focusevent");
			=
YAHOO.util.Event.addListener(overlay.element,focusevent,focusOnDomEvent,t=
his,true);

			var zIndex =3D YAHOO.util.Dom.getStyle(overlay.element, "zIndex");
			if (! isNaN(zIndex)) {
				overlay.cfg.setProperty("zIndex", parseInt(zIndex));
			} else {
				overlay.cfg.setProperty("zIndex", 0);
			}
		=09
			this.overlays.push(overlay);
			return true;
		} else if (overlay instanceof Array) {
			var regcount =3D 0;
			for (var i=3D0;i<overlay.length;i++) {
				if (this.register(overlay[i])) {
					regcount++;
				}
			}
			if (regcount > 0) {
				return true;
			}
		} else {
			return false;
		}
	},

	/**
	* Attempts to locate an Overlay by instance or ID.
	* @param {Overlay}	overlay		An Overlay to locate within the manager
	* @param {string}	overlay		An Overlay id to locate within the manager
	* @return	{Overlay}	The requested Overlay, if found, or null if it =
cannot be located.
	*/
	find : function(overlay) {
		if (overlay instanceof YAHOO.widget.Overlay) {
			for (var o=3D0;o<this.overlays.length;o++) {
				if (this.overlays[o] =3D=3D overlay) {
					return this.overlays[o];
				}
			}
		} else if (typeof overlay =3D=3D "string") {
			for (var o=3D0;o<this.overlays.length;o++) {
				if (this.overlays[o].id =3D=3D overlay) {
					return this.overlays[o];
				}
			}		=09
		}
		return null;
	},

	/**
	* Used for sorting the manager's Overlays by z-index.
	* @private
	*/
	compareZIndexDesc : function(o1, o2) {
		var zIndex1 =3D o1.cfg.getProperty("zIndex");
		var zIndex2 =3D o2.cfg.getProperty("zIndex");

		if (zIndex1 > zIndex2) {
			return -1;
		} else if (zIndex1 < zIndex2) {
			return 1;
		} else {
			return 0;
		}
	},

	/**
	* Shows all Overlays in the manager.
	*/
	showAll : function() {
		for (var o=3D0;o<this.overlays.length;o++) {
			this.overlays[o].show();
		}
	},

	/**
	* Hides all Overlays in the manager.
	*/
	hideAll : function() {
		for (var o=3D0;o<this.overlays.length;o++) {
			this.overlays[o].hide();
		}
	}

}/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class=20
* KeyListener is a utility that provides an easy interface for listening =
for keydown/keyup events fired against DOM elements.
* @param {Element}	attachTo	The element or element ID to which the key =
event should be attached
* @param {string}	attachTo	The element or element ID to which the key =
event should be attached
* @param (object}	keyData		The object literal representing the key(s) to =
detect. Possible attributes are shift(boolean), alt(boolean), =
ctrl(boolean) and keys(either an int or an array of ints representing =
keycodes).
* @param {function}	handler		The CustomEvent handler to fire when the =
key event is detected
* @param {object}	handler		An object literal representing the handler.=20
* @param {string}	event		Optional. The event (keydown or keyup) to =
listen for. Defaults automatically to keydown.
* @constructor
*/
YAHOO.util.KeyListener =3D function(attachTo, keyData, handler, event) {
	if (! event) {
		event =3D YAHOO.util.KeyListener.KEYDOWN;
	}

	var keyEvent =3D new YAHOO.util.CustomEvent("keyPressed");
=09
	this.enabledEvent =3D new YAHOO.util.CustomEvent("enabled");
	this.disabledEvent =3D new YAHOO.util.CustomEvent("disabled");

	if (typeof attachTo =3D=3D 'string') {
		attachTo =3D document.getElementById(attachTo);
	}

	if (typeof handler =3D=3D 'function') {
		keyEvent.subscribe(handler);
	} else {
		keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
	}

	/**
	* Handles the key event when a key is pressed.
	* @private
	*/
	var handleKeyPress =3D function(e, obj) {
		var keyPressed =3D e.charCode || e.keyCode;
	=09
		if (! keyData.shift)	keyData.shift =3D false;
		if (! keyData.alt)		keyData.alt =3D false;
		if (! keyData.ctrl)		keyData.ctrl =3D false;

		// check held down modifying keys first
		if (e.shiftKey =3D=3D keyData.shift &&=20
			e.altKey   =3D=3D keyData.alt &&
			e.ctrlKey  =3D=3D keyData.ctrl) { // if we pass this, all modifiers =
match

			if (keyData.keys instanceof Array) {
				for (var i=3D0;i<keyData.keys.length;i++) {
					if (keyPressed =3D=3D keyData.keys[i]) {
						keyEvent.fire(keyPressed, e);
						break;
					}
				}
			} else {
				if (keyPressed =3D=3D keyData.keys) {
					keyEvent.fire(keyPressed, e);
				}
			}
		}
	}

	this.enable =3D function() {
		if (! this.enabled) {
			YAHOO.util.Event.addListener(attachTo, event, handleKeyPress);
			this.enabledEvent.fire(keyData);
		}
		this.enabled =3D true;
	}

	this.disable =3D function() {
		if (this.enabled) {
			YAHOO.util.Event.removeListener(attachTo, event, handleKeyPress);
			this.disabledEvent.fire(keyData);
		}
		this.enabled =3D false;
	}

}

/**
* Constant representing the DOM "keydown" event.
* @final
*/
YAHOO.util.KeyListener.KEYDOWN =3D "keydown";

/**
* Constant representing the DOM "keyup" event.
* @final
*/
YAHOO.util.KeyListener.KEYUP =3D "keyup";

/**
* Enables the KeyListener, by dynamically attaching the key event to the =
appropriate DOM element.
*/
YAHOO.util.KeyListener.prototype.enable =3D function() {};

/**
* Disables the KeyListener, by dynamically removing the key event from =
the appropriate DOM element.
*/
YAHOO.util.KeyListener.prototype.disable =3D function() {};

/**
* CustomEvent fired when the KeyListener is enabled
* args: keyData
* @type YAHOO.util.CustomEvent
*/
YAHOO.util.KeyListener.prototype.enabledEvent =3D null;

/**
* CustomEvent fired when the KeyListener is disabled
* args: keyData
* @type YAHOO.util.CustomEvent
*/
YAHOO.util.KeyListener.prototype.disabledEvent =3D null;
/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class
* Tooltip is an implementation of Overlay that behaves like an OS =
tooltip, displaying when the user mouses over a particular element, and =
disappearing on mouse out.
* @param {string}	el	The element ID representing the Tooltip <em>OR</em>
* @param {Element}	el	The element representing the Tooltip
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Overlay. See configuration =
documentation for more details.
* @constructor
*/
YAHOO.widget.Tooltip =3D function(el, userConfig) {
	if (arguments.length > 0) {
		YAHOO.widget.Tooltip.superclass.constructor.call(this, el, =
userConfig);
	}
}

YAHOO.widget.Tooltip.prototype =3D new YAHOO.widget.Overlay();
YAHOO.widget.Tooltip.prototype.constructor =3D YAHOO.widget.Tooltip;

/**
* Reference to the Tooltip's superclass, Overlay
* @type class
* @final
*/
YAHOO.widget.Tooltip.superclass =3D YAHOO.widget.Overlay.prototype;

/**
* Constant representing the Tooltip CSS class
* @type string
* @final
*/
YAHOO.widget.Tooltip.CSS_TOOLTIP =3D "tt";

/*
* The Tooltip initialization method. This method is automatically called =
by the constructor. A Tooltip is automatically rendered by the init =
method, and it also is set to be invisible by default, and constrained =
to viewport by default as well.
* @param {string}	el	The element ID representing the Tooltip <em>OR</em>
* @param {Element}	el	The element representing the Tooltip
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Tooltip. See configuration =
documentation for more details.
*/
YAHOO.widget.Tooltip.prototype.init =3D function(el, userConfig) {
	if (document.readyState && document.readyState !=3D "complete") {
		var deferredInit =3D function() {
			this.init(el, userConfig);
		}
		YAHOO.util.Event.addListener(window, "load", deferredInit, this, =
true);
	} else {
		YAHOO.widget.Tooltip.superclass.init.call(this, el);

		this.beforeInitEvent.fire(YAHOO.widget.Tooltip);

		YAHOO.util.Dom.addClass(this.element, =
YAHOO.widget.Tooltip.CSS_TOOLTIP);

		if (userConfig) {
			this.cfg.applyConfig(userConfig, true);
		}
	=09
		this.cfg.queueProperty("visible",false);
		this.cfg.queueProperty("constraintoviewport",true);

		this.setBody("");
		this.render(this.cfg.getProperty("container"));

		this.initEvent.fire(YAHOO.widget.Tooltip);
	}
}

/**
* Initializes the class's configurable properties which can be changed =
using the Overlay's Config object (cfg).
*/
YAHOO.widget.Tooltip.prototype.initDefaultConfig =3D function() {
	YAHOO.widget.Tooltip.superclass.initDefaultConfig.call(this);

	this.cfg.addProperty("preventoverlap",		{ value:true, =
handler:this.configPreventOverlap, validator:this.cfg.checkBoolean, =
supercedes:["x","y","xy"] } );

	this.cfg.addProperty("showdelay",			{ value:200, =
handler:this.configShowDelay, validator:this.cfg.checkNumber } );
	this.cfg.addProperty("autodismissdelay",	{ value:5000, =
handler:this.configAutoDismissDelay, validator:this.cfg.checkNumber } );
	this.cfg.addProperty("hidedelay",			{ value:250, =
handler:this.configHideDelay, validator:this.cfg.checkNumber } );

	this.cfg.addProperty("text",				{ handler:this.configText, =
suppressEvent:true } );
	this.cfg.addProperty("container",			{ value:document.body, =
handler:this.configContainer } );
}

// BEGIN BUILT-IN PROPERTY EVENT HANDLERS //

/**
* The default event handler fired when the "text" property is changed.
*/
YAHOO.widget.Tooltip.prototype.configText =3D function(type, args, obj) =
{
	var text =3D args[0];
	if (text) {
		this.setBody(text);
	}
}

/**
* The default event handler fired when the "container" property is =
changed.
*/
YAHOO.widget.Tooltip.prototype.configContainer =3D function(type, args, =
obj) {
	var container =3D args[0];
	if (typeof container =3D=3D 'string') {
		this.cfg.setProperty("container", document.getElementById(container), =
true);
	}
}

/**
* The default event handler fired when the "preventoverlap" property is =
changed.
*/
YAHOO.widget.Tooltip.prototype.configPreventOverlap =3D function(type, =
args, obj) {
	var preventoverlap =3D args[0];
	if (preventoverlap) {
		if (! YAHOO.util.Config.alreadySubscribed(this.moveEvent, =
this.preventOverlap, this)) {
			this.moveEvent.subscribe(this.preventOverlap, this, true);
		}
	} else {
		this.moveEvent.unsubscribe(this.preventOverlap, this);
	}
}

/**
* The default event handler fired when the "context" property is =
changed.
*/
YAHOO.widget.Tooltip.prototype.configContext =3D function(type, args, =
obj) {
	var context =3D args[0];
	if (context) {
		if (typeof context =3D=3D "string") {
			this.cfg.setProperty("context", document.getElementById(context), =
true);
		}
	=09
		var contextElement =3D this.cfg.getProperty("context");

		if (contextElement && contextElement.title && ! =
this.cfg.getProperty("text")) {
			this.cfg.setProperty("text", contextElement.title);
		}

		YAHOO.util.Event.addListener(contextElement, "mouseover", =
this.onContextMouseOver, this);
		YAHOO.util.Event.addListener(contextElement, "mouseout", =
this.onContextMouseOut, this);
	}
}

// END BUILT-IN PROPERTY EVENT HANDLERS //

// BEGIN BUILT-IN DOM EVENT HANDLERS //

/**
* The default event handler fired when the user mouses over the context =
element.
* @param {DOMEvent} e	The current DOM event
* @param {object}	obj	The object argument
*/
YAHOO.widget.Tooltip.prototype.onContextMouseOver =3D function(e, obj) {
	if (! obj) {
		obj =3D this;
	}
=09
	var context =3D obj.cfg.getProperty("context");
=09
	if (context.title) {
		obj.tempTitle =3D context.title;
		context.title =3D "";
	}

	/**
	* The unique process ID associated with the thread responsible for =
showing the Tooltip.
	* @type int
	*/
	this.procId =3D obj.doShow(e);
}

/**
* The default event handler fired when the user mouses out of the =
context element.
* @param {DOMEvent} e	The current DOM event
* @param {object}	obj	The object argument
*/
YAHOO.widget.Tooltip.prototype.onContextMouseOut =3D function(e, obj) {
	if (! obj) {
		obj =3D this;
	}

	var context =3D obj.cfg.getProperty("context");

	if (obj.tempTitle) {
		context.title =3D obj.tempTitle;
	}
=09
	if (this.procId) {
		clearTimeout(this.procId);
	}

	setTimeout(function() {
				obj.hide();
				}, obj.cfg.getProperty("hidedelay"));
}

// END BUILT-IN DOM EVENT HANDLERS //

/**
* Processes the showing of the Tooltip by setting the timeout delay and =
offset of the Tooltip.
* @param {DOMEvent} e	The current DOM event
* @return {int}	The process ID of the timeout function associated with =
doShow
*/
YAHOO.widget.Tooltip.prototype.doShow =3D function(e) {

	var pageX =3D YAHOO.util.Event.getPageX(e);
	var pageY =3D YAHOO.util.Event.getPageY(e);
=09
	var context =3D this.cfg.getProperty("context");
	var yOffset =3D 25;
	if (this.browser =3D=3D "opera" && context.tagName =3D=3D "A") {
		yOffset +=3D 12;
	}

	var me =3D this;
	return setTimeout(
		function() {
			me.moveTo(pageX, pageY + yOffset);
			me.show();
			me.doHide();
		},
	this.cfg.getProperty("showdelay"));
}

/**
* Sets the timeout for the auto-dismiss delay, which by default is 5 =
seconds, meaning that a tooltip will automatically dismiss itself after =
5 seconds of being displayed.
*/
YAHOO.widget.Tooltip.prototype.doHide =3D function() {
	var me =3D this;
	setTimeout(
		function() {
			me.hide();
		},
		this.cfg.getProperty("autodismissdelay"));
}

/**
* Fired when the Tooltip is moved, this event handler is used to prevent =
the Tooltip from overlapping with its context element.
*/
YAHOO.widget.Tooltip.prototype.preventOverlap =3D function(type, args, =
obj) {
	var pos =3D args[0];
	var x =3D pos[0];
	var y =3D pos[1];

	var elementRegion =3D YAHOO.util.Dom.getRegion(this.element);
	var contextRegion =3D =
YAHOO.util.Dom.getRegion(this.cfg.getProperty("context"));
=09
	var intersection =3D contextRegion.intersect(elementRegion);
	if (intersection) { // they overlap
		var overlapHeight =3D intersection.bottom - intersection.top;
		y =3D (y - overlapHeight - 10);
		this.cfg.setProperty("y", y);
	}
}
/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class
* Panel is an implementation of Overlay that behaves like an OS window, =
with a draggable header and an optional close icon at the top right.
* @param {string}	el	The element ID representing the Panel <em>OR</em>
* @param {Element}	el	The element representing the Panel
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Panel. See configuration =
documentation for more details.
* @constructor
*/
YAHOO.widget.Panel =3D function(el, userConfig) {
	if (arguments.length > 0) {
		YAHOO.widget.Panel.superclass.constructor.call(this, el, userConfig);
	}
}

YAHOO.widget.Panel.prototype =3D new YAHOO.widget.Overlay();
YAHOO.widget.Panel.prototype.constructor =3D YAHOO.widget.Panel;

/**
* Reference to the Panel's superclass, Overlay
* @type class
* @final
*/
YAHOO.widget.Panel.superclass =3D YAHOO.widget.Overlay.prototype;

/**
* Constant representing the default CSS class used for a Panel
* @type string
* @final
*/
YAHOO.widget.Panel.CSS_PANEL =3D "panel";

/**
* Constant representing the default CSS class used for a Panel's =
wrapping container
* @type string
* @final
*/
YAHOO.widget.Panel.CSS_PANEL_CONTAINER =3D "panel-container";

/**
* CustomEvent fired after the modality mask is shown
* args: none
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Panel.prototype.showMaskEvent =3D null;

/**
* CustomEvent fired after the modality mask is hidden
* args: none
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Panel.prototype.hideMaskEvent =3D null;

/*
* The Overlay initialization method, which is executed for Overlay and =
all of its subclasses. This method is automatically called by the =
constructor, and  sets up all DOM references for pre-existing markup, =
and creates required markup if it is not already present.
* @param {string}	el	The element ID representing the Overlay <em>OR</em>
* @param {Element}	el	The element representing the Overlay
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Overlay. See configuration =
documentation for more details.
*/
YAHOO.widget.Panel.prototype.init =3D function(el, userConfig) {
	YAHOO.widget.Panel.superclass.init.call(this, el/*, userConfig*/);  // =
Note that we don't pass the user config in here yet because we only want =
it executed once, at the lowest subclass level
=09
	this.beforeInitEvent.fire(YAHOO.widget.Panel);

	YAHOO.util.Dom.addClass(this.element, YAHOO.widget.Panel.CSS_PANEL);

	this.buildWrapper();		=09
=09
	if (userConfig) {
		this.cfg.applyConfig(userConfig, true);
	}

	this.beforeRenderEvent.subscribe(function() {
		var draggable =3D this.cfg.getProperty("draggable");
		if (draggable) {
			if (! this.header) {
				this.setHeader("&nbsp;");
			}
		}
	}, this, true);

	this.initEvent.fire(YAHOO.widget.Panel);

}

/**
* Initializes the custom events for Module which are fired automatically =
at appropriate times by the Module class.
*/
YAHOO.widget.Panel.prototype.initEvents =3D function() {
	YAHOO.widget.Panel.superclass.initEvents.call(this);

	this.showMaskEvent =3D new YAHOO.util.CustomEvent("showMask");
	this.hideMaskEvent =3D new YAHOO.util.CustomEvent("hideMask");
}

/**
* Initializes the class's configurable properties which can be changed =
using the Panel's Config object (cfg).
*/
YAHOO.widget.Panel.prototype.initDefaultConfig =3D function() {
	YAHOO.widget.Panel.superclass.initDefaultConfig.call(this);

	// Add panel config properties //

	this.cfg.addProperty("close", { value:true, handler:this.configClose, =
validator:this.cfg.checkBoolean, supercedes:["visible"] } );
	this.cfg.addProperty("draggable", { value:true,	=
handler:this.configDraggable, validator:this.cfg.checkBoolean, =
supercedes:["visible"] } );

	this.cfg.addProperty("underlay", { value:"shadow", =
handler:this.configUnderlay, supercedes:["visible"] } );
	this.cfg.addProperty("modal",	{ value:false, handler:this.configModal, =
validator:this.cfg.checkBoolean, supercedes:["visible"] } );

	this.cfg.addProperty("keylisteners", { handler:this.configKeyListeners, =
suppressEvent:true, supercedes:["visible"] } );
}

// BEGIN BUILT-IN PROPERTY EVENT HANDLERS //

/**
* The default event handler fired when the "close" property is changed. =
The method controls the appending or hiding of the close icon at the top =
right of the Panel.
*/
YAHOO.widget.Panel.prototype.configClose =3D function(type, args, obj) {
	var val =3D args[0];

	var doHide =3D function(e, obj) {
		obj.hide();
	}

	if (val) {
		if (! this.close) {
			this.close =3D document.createElement("DIV");
			YAHOO.util.Dom.addClass(this.close, "close");

			if (this.isSecure) {
				YAHOO.util.Dom.addClass(this.close, "secure");
			} else {
				YAHOO.util.Dom.addClass(this.close, "nonsecure");
			}

			this.close.innerHTML =3D "&nbsp;";
			this.innerElement.appendChild(this.close);
			YAHOO.util.Event.addListener(this.close, "click", doHide, this);=09
		} else {
			this.close.style.display =3D "block";
		}
	} else {
		if (this.close) {
			this.close.style.display =3D "none";
		}
	}
}

/**
* The default event handler fired when the "draggable" property is =
changed.
*/
YAHOO.widget.Panel.prototype.configDraggable =3D function(type, args, =
obj) {
	var val =3D args[0];
	if (val) {
		if (this.header) {
			YAHOO.util.Dom.setStyle(this.header,"cursor","move");
			this.registerDragDrop();
		}
	} else {
		if (this.dd) {
			this.dd.unreg();
		}
		if (this.header) {
			YAHOO.util.Dom.setStyle(this.header,"cursor","auto");
		}
	}
}

/**
* The default event handler fired when the "underlay" property is =
changed.
*/
YAHOO.widget.Panel.prototype.configUnderlay =3D function(type, args, =
obj) {
	var val =3D args[0];

	switch (val.toLowerCase()) {
		case "shadow":
			YAHOO.util.Dom.removeClass(this.element, "matte");
			YAHOO.util.Dom.addClass(this.element, "shadow");

			if (! this.underlay) { // create if not already in DOM
				this.underlay =3D document.createElement("DIV");
				this.underlay.className =3D "underlay";
				this.underlay.innerHTML =3D "&nbsp;";
				this.element.appendChild(this.underlay);
			}=20

			this.sizeUnderlay();
			break;
		case "matte":
			YAHOO.util.Dom.removeClass(this.element, "shadow");
			YAHOO.util.Dom.addClass(this.element, "matte");
			break;
		case "none":
		default:
			YAHOO.util.Dom.removeClass(this.element, "shadow");
			YAHOO.util.Dom.removeClass(this.element, "matte");
			break;
	}
}

/**
* The default event handler fired when the "modal" property is changed. =
This handler subscribes or unsubscribes to the show and hide events to =
handle the display or hide of the modality mask.
*/
YAHOO.widget.Panel.prototype.configModal =3D function(type, args, obj) {
	var modal =3D args[0];

	if (modal) {
		this.buildMask();

		if (! YAHOO.util.Config.alreadySubscribed( this.showEvent, =
this.showMask, this ) ) {
			this.showEvent.subscribe(this.showMask, this, true);
		}
		if (! YAHOO.util.Config.alreadySubscribed( this.hideEvent, =
this.hideMask, this) ) {
			this.hideEvent.subscribe(this.hideMask, this, true);
		}
		if (! YAHOO.util.Config.alreadySubscribed( =
YAHOO.widget.Overlay.windowResizeEvent, this.sizeMask, this ) ) {
			YAHOO.widget.Overlay.windowResizeEvent.subscribe(this.sizeMask, this, =
true);
		}
	} else {
		this.beforeShowEvent.unsubscribe(this.showMask, this);
		this.hideEvent.unsubscribe(this.hideMask, this);
		YAHOO.widget.Overlay.windowResizeEvent.unsubscribe(this.sizeMask);
	}
}

YAHOO.widget.Panel.prototype.configKeyListeners =3D function(type, args, =
obj) {
	var listeners =3D args[0];

	if (listeners) {
		if (listeners instanceof Array) {
			for (var i=3D0;i<listeners.length;i++) {
				var listener =3D listeners[i];

				if (! YAHOO.util.Config.alreadySubscribed(this.showEvent, =
listener.enable, listener)) {
					this.showEvent.subscribe(listener.enable, listener, true);
				}
				if (! YAHOO.util.Config.alreadySubscribed(this.hideEvent, =
listener.disable, listener)) {
					this.hideEvent.subscribe(listener.disable, listener, true);
				}
			}
		} else {
			if (! YAHOO.util.Config.alreadySubscribed(this.showEvent, =
listeners.enable, listeners)) {
				this.showEvent.subscribe(listeners.enable, listeners, true);
			}
			if (! YAHOO.util.Config.alreadySubscribed(this.hideEvent, =
listeners.disable, listeners)) {
				this.hideEvent.subscribe(listeners.disable, listeners, true);
			}
		}
	}=20
}

// END BUILT-IN PROPERTY EVENT HANDLERS //


/**
* Builds the wrapping container around the Panel that is used for =
positioning the shadow and matte underlays. The container element is =
assigned to a  local instance variable called container, and the element =
is reinserted inside of it.
*/
YAHOO.widget.Panel.prototype.buildWrapper =3D function() {
	var elementParent =3D this.element.parentNode;

	var elementClone =3D this.element.cloneNode(true);
	this.innerElement =3D elementClone;
	this.innerElement.style.visibility =3D "inherit";

	YAHOO.util.Dom.addClass(this.innerElement, "panel");

	var wrapper =3D document.createElement("DIV");
	wrapper.className =3D YAHOO.widget.Panel.CSS_PANEL_CONTAINER;
	wrapper.id =3D elementClone.id + "_c";
=09
	wrapper.appendChild(elementClone);
=09
	if (elementParent) {
		elementParent.replaceChild(wrapper, this.element);
	}

	this.element =3D wrapper;

	// Resynchronize the local field references

	var childNodes =3D this.innerElement.childNodes;
	if (childNodes) {
		for (var i=3D0;i<childNodes.length;i++) {
			var child =3D childNodes[i];
			switch (child.className) {
				case YAHOO.widget.Module.CSS_HEADER:
					this.header =3D child;
					break;
				case YAHOO.widget.Module.CSS_BODY:
					this.body =3D child;
					break;
				case YAHOO.widget.Module.CSS_FOOTER:
					this.footer =3D child;
					break;
			}
		}
	}

	this.initDefaultConfig(); // We've changed the DOM, so the =
configuration must be re-tooled to get the DOM references right
}

/**
* Adjusts the size of the shadow based on the size of the element.
*/
YAHOO.widget.Panel.prototype.sizeUnderlay =3D function() {
	if (this.underlay && this.browser !=3D "gecko" && this.browser !=3D =
"safari") {
		this.underlay.style.width =3D this.innerElement.offsetWidth + "px";
		this.underlay.style.height =3D this.innerElement.offsetHeight + "px";
	}
}

/**
* Event handler fired when the resize monitor element is resized.
*/
YAHOO.widget.Panel.prototype.onDomResize =3D function(e, obj) {=20
	YAHOO.widget.Panel.superclass.onDomResize.call(this, e, obj);
	var me =3D this;
	setTimeout(function() {
		me.sizeUnderlay();
	}, 0);
};

/**
* Registers the Panel's header for drag & drop capability.
*/
YAHOO.widget.Panel.prototype.registerDragDrop =3D function() {
	if (this.header) {
		this.dd =3D new YAHOO.util.DD(this.element.id, "panel");

		if (! this.header.id) {
			this.header.id =3D this.id + "_h";
		}
	=09
		var me =3D this;

		this.dd.startDrag =3D function() {
			if (me.browser =3D=3D "ie") {
				YAHOO.util.Dom.addClass(me.element,"drag");
			}

			if (me.cfg.getProperty("constraintoviewport")) {
				var offsetHeight =3D me.element.offsetHeight;
				var offsetWidth =3D me.element.offsetWidth;

				var viewPortWidth =3D YAHOO.util.Dom.getViewportWidth();
				var viewPortHeight =3D YAHOO.util.Dom.getViewportHeight();

				var scrollX =3D window.scrollX || =
document.documentElement.scrollLeft;
				var scrollY =3D window.scrollY || =
document.documentElement.scrollTop;

				var topConstraint =3D scrollY + 10;
				var leftConstraint =3D scrollX + 10;
				var bottomConstraint =3D scrollY + viewPortHeight - offsetHeight - =
10;
				var rightConstraint =3D scrollX + viewPortWidth - offsetWidth - 10;

				this.minX =3D leftConstraint
				this.maxX =3D rightConstraint;
				this.constrainX =3D true;

				this.minY =3D topConstraint;
				this.maxY =3D bottomConstraint;
				this.constrainY =3D true;
			} else {
				this.constrainX =3D false;
				this.constrainY =3D false;
			}
	=09
		}
	=09
		this.dd.onDrag =3D function() {
			me.syncPosition();
			me.cfg.refireEvent("iframe");
			if (this.platform =3D=3D "mac" && this.browser =3D=3D "gecko") {
				this.showMacGeckoScrollbars();
			}
		}

		this.dd.endDrag =3D function() {
			if (me.browser =3D=3D "ie") {
				YAHOO.util.Dom.removeClass(me.element,"drag");
			}
		}

		this.dd.setHandleElId(this.header.id);
		this.dd.addInvalidHandleType("INPUT");
		this.dd.addInvalidHandleType("SELECT");
		this.dd.addInvalidHandleType("TEXTAREA");
	}
}

/**
* Builds the mask that is laid over the document when the Panel is =
configured to be modal.
*/
YAHOO.widget.Panel.prototype.buildMask =3D function() {
	if (! this.mask) {
		this.mask =3D document.createElement("DIV");
		this.mask.id =3D this.id + "_mask";
		this.mask.className =3D "mask";
		this.mask.innerHTML =3D "&nbsp;";

		var maskClick =3D function(e, obj) {
			YAHOO.util.Event.stopEvent(e);
		}

		YAHOO.util.Event.addListener(this.mask, maskClick, this);

		if (this.browser =3D=3D "opera") {
			this.mask.style.backgroundColor =3D "transparent";
		}
		document.body.appendChild(this.mask);
	}
}

/**
* Hides the modality mask.
*/
YAHOO.widget.Panel.prototype.hideMask =3D function() {
	if (this.cfg.getProperty("modal") && this.mask) {
		this.mask.tabIndex =3D -1;
		this.mask.style.display =3D "none";
		this.hideMaskEvent.fire();
		YAHOO.util.Dom.removeClass(document.body, "masked");
	}
}

/**
* Shows the modality mask.
*/
YAHOO.widget.Panel.prototype.showMask =3D function() {
	if (this.cfg.getProperty("modal") && this.mask) {
		YAHOO.util.Dom.addClass(document.body, "masked");
		this.sizeMask();
		this.mask.style.display =3D "block";
		this.mask.tabIndex =3D 0;
		this.showMaskEvent.fire();
	}
}

/**
* Sets the size of the modality mask to cover the entire scrollable area =
of the document
*/
YAHOO.widget.Panel.prototype.sizeMask =3D function() {
	if (this.mask) {
		this.mask.style.height =3D YAHOO.util.Dom.getDocumentHeight()+"px";
		this.mask.style.width =3D YAHOO.util.Dom.getDocumentWidth()+"px";
	}
}

/**
* The default event handler fired when the "height" property is changed.
*/
YAHOO.widget.Panel.prototype.configHeight =3D function(type, args, obj) =
{
	var height =3D args[0];
	var el =3D this.innerElement;
	YAHOO.util.Dom.setStyle(el, "height", height);
	this.cfg.refireEvent("underlay");
	this.cfg.refireEvent("iframe");
}

/**
* The default event handler fired when the "width" property is changed.
*/
YAHOO.widget.Panel.prototype.configWidth =3D function(type, args, obj) {
	var width =3D args[0];
	var el =3D this.innerElement;
	YAHOO.util.Dom.setStyle(el, "width", width);
	this.cfg.refireEvent("underlay");
	this.cfg.refireEvent("iframe");
}

/**
* Renders the Panel by inserting the elements that are not already in =
the main Panel into their correct places. Optionally appends the Panel =
to the specified node prior to the render's execution. NOTE: For Panels =
without existing markup, the appendToNode argument is REQUIRED. If this =
argument is ommitted and the current element is not present in the =
document, the function will return false, indicating that the render was =
a failure.
* @param {string}	appendToNode	The element id to which the Module should =
be appended to prior to rendering <em>OR</em>
* @param {Element}	appendToNode	The element to which the Module should =
be appended to prior to rendering=09
* @return {boolean} Success or failure of the render
*/
YAHOO.widget.Panel.prototype.render =3D function(appendToNode) {
	return YAHOO.widget.Panel.superclass.render.call(this, appendToNode, =
this.innerElement);
}
/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class
* Dialog is an implementation of Panel that can be used to submit form =
data. Built-in functionality for buttons with event handlers is =
included, and button sets can be build dynamically, or the preincluded =
ones for Submit/Cancel and OK/Cancel can be utilized. Forms can be =
processed in 3 ways -- via an asynchronous Connection utility call, a =
simple form POST or GET, or manually.
* @param {string}	el	The element ID representing the Dialog <em>OR</em>
* @param {Element}	el	The element representing the Dialog
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Dialog. See configuration =
documentation for more details.
* @constructor
*/
YAHOO.widget.Dialog =3D function(el, userConfig) {
	if (arguments.length > 0) {
		YAHOO.widget.Dialog.superclass.constructor.call(this, el, userConfig);
	}
}

YAHOO.widget.Dialog.prototype =3D new YAHOO.widget.Panel();
YAHOO.widget.Dialog.prototype.constructor =3D YAHOO.widget.Dialog;

/**
* Reference to the Dialog's superclass, Panel
* @type class
* @final
*/
YAHOO.widget.Dialog.superclass =3D YAHOO.widget.Panel.prototype;

/**
* Constant representing the default CSS class used for a Dialog
* @type string
* @final
*/
YAHOO.widget.Dialog.CSS_DIALOG =3D "dialog";


/**
* CustomEvent fired prior to submission
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Dialog.prototype.beforeSubmitEvent =3D null;

/**
* CustomEvent fired after submission
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Dialog.prototype.submitEvent =3D null;

/**
* CustomEvent fired prior to manual submission
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Dialog.prototype.manualSubmitEvent =3D null;

/**
* CustomEvent fired prior to asynchronous submission
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Dialog.prototype.asyncSubmitEvent =3D null;

/**
* CustomEvent fired prior to form-based submission
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Dialog.prototype.formSubmitEvent =3D null;

/**
* CustomEvent fired after cancel
* @type YAHOO.util.CustomEvent
*/
YAHOO.widget.Dialog.prototype.cancelEvent =3D null;


/**
* Initializes the class's configurable properties which can be changed =
using the Dialog's Config object (cfg).
*/
YAHOO.widget.Dialog.prototype.initDefaultConfig =3D function() {
	YAHOO.widget.Dialog.superclass.initDefaultConfig.call(this);

	/**
	* The internally maintained callback object for use with the Connection =
utility
	* @type object
	* @private
	*/
	var callback =3D {
		success : null,
		failure : null,
		argument: null,
		scope : this
	}

	this.configOnSuccess =3D function(type, args, obj) {
		var fn =3D args[0];
		callback.success =3D fn;
	}

	this.configOnFailure =3D function(type, args, obj) {
		var fn =3D args[0];
		callback.failure =3D fn;
	}


	this.doSubmit =3D function() {
		var method =3D this.cfg.getProperty("postmethod");
		switch (method) {
			case "async":
				YAHOO.util.Connect.setForm(this.form.name);
				var cObj =3D YAHOO.util.Connect.asyncRequest('POST', =
this.form.action, callback);
				this.asyncSubmitEvent.fire();
				break;
			case "form":
				this.form.submit();
				this.formSubmitEvent.fire();
				break;
			case "none":
			case "manual":
				this.manualSubmitEvent.fire();
				break;
		}
	}

	// Add form dialog config properties //
	this.cfg.addProperty("postmethod", { value:"async", =
validator:function(val) {=20
													if (val !=3D "form" && val !=3D "async" && val !=3D "none" =
&& val !=3D "manual") {
														return false;
													} else {
														return true;
													}
												} });

	this.cfg.addProperty("onsuccess",	{ handler:this.configOnSuccess, =
suppressEvent:true } );
	this.cfg.addProperty("onfailure",	{ handler:this.configOnFailure, =
suppressEvent:true } );

	this.cfg.addProperty("buttons",		{ value:"none",	=
handler:this.configButtons } );
}

/**
* Initializes the custom events for Dialog which are fired automatically =
at appropriate times by the Dialog class.
*/
YAHOO.widget.Dialog.prototype.initEvents =3D function() {
	YAHOO.widget.Dialog.superclass.initEvents.call(this);
=09
	this.beforeSubmitEvent	=3D new YAHOO.util.CustomEvent("beforeSubmit");
	this.submitEvent		=3D new YAHOO.util.CustomEvent("submit");

	this.manualSubmitEvent	=3D new YAHOO.util.CustomEvent("manualSubmit");
	this.asyncSubmitEvent	=3D new YAHOO.util.CustomEvent("asyncSubmit");
	this.formSubmitEvent	=3D new YAHOO.util.CustomEvent("formSubmit");

	this.cancelEvent		=3D new YAHOO.util.CustomEvent("cancel");
}

/*
* The Dialog initialization method, which is executed for Dialog and all =
of its subclasses. This method is automatically called by the =
constructor, and  sets up all DOM references for pre-existing markup, =
and creates required markup if it is not already present.
* @param {string}	el	The element ID representing the Dialog <em>OR</em>
* @param {Element}	el	The element representing the Dialog
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this Dialog. See configuration =
documentation for more details.
*/
YAHOO.widget.Dialog.prototype.init =3D function(el, userConfig) {
	YAHOO.widget.Dialog.superclass.init.call(this, el/*, userConfig*/);  // =
Note that we don't pass the user config in here yet because we only want =
it executed once, at the lowest subclass level
=09
	this.beforeInitEvent.fire(YAHOO.widget.Dialog);

	YAHOO.util.Dom.addClass(this.element, YAHOO.widget.Dialog.CSS_DIALOG);

	if (userConfig) {
		this.cfg.applyConfig(userConfig, true);
	}

	this.renderEvent.subscribe(this.registerForm, this, true);

	this.showEvent.subscribe(this.focusFirst, this, true);
	this.beforeHideEvent.subscribe(this.blurButtons, this, true);

	this.beforeRenderEvent.subscribe(function() {
		var buttonCfg =3D this.cfg.getProperty("buttons");
		if (buttonCfg && buttonCfg !=3D "none") {
			if (! this.footer) {
				this.setFooter("");
			}
		}
	}, this, true);

	this.initEvent.fire(YAHOO.widget.Dialog);
}

/**
* Prepares the Dialog's internal FORM object, creating one if one is not =
currently present.
*/
YAHOO.widget.Dialog.prototype.registerForm =3D function() {
	var form =3D this.element.getElementsByTagName("FORM")[0];

	if (! form) {
		var formHTML =3D "<form name=3D\"frm_" + this.id + "\" =
action=3D\"\"></form>";
		this.body.innerHTML +=3D formHTML;
		form =3D this.element.getElementsByTagName("FORM")[0];
	}

	this.firstFormElement =3D function() {
		for (var f=3D0;f<form.elements.length;f++ ) {
			var el =3D form.elements[f];
			if (el.focus) {
				if (el.type && el.type !=3D "hidden") {
					return el;
					break;
				}
			}
		}
		return null;
	}();

	this.lastFormElement =3D function() {
		for (var f=3Dform.elements.length-1;f>=3D0;f-- ) {
			var el =3D form.elements[f];
			if (el.focus) {
				if (el.type && el.type !=3D "hidden") {
					return el;
					break;
				}
			}
		}
		return null;
	}();

	this.form =3D form;

	if (this.cfg.getProperty("modal") && this.form) {

		var me =3D this;
	=09
		var firstElement =3D this.firstFormElement || this.firstButton;
		if (firstElement) {
			this.preventBackTab =3D new YAHOO.util.KeyListener(firstElement, { =
shift:true, keys:9 }, {fn:me.focusLast, scope:me, correctScope:true} );
			this.showEvent.subscribe(this.preventBackTab.enable, =
this.preventBackTab, true);
			this.hideEvent.subscribe(this.preventBackTab.disable, =
this.preventBackTab, true);
		}

		var lastElement =3D this.lastButton || this.lastFormElement;
		if (lastElement) {
			this.preventTabOut =3D new YAHOO.util.KeyListener(lastElement, { =
shift:false, keys:9 }, {fn:me.focusFirst, scope:me, correctScope:true} =
);
			this.showEvent.subscribe(this.preventTabOut.enable, =
this.preventTabOut, true);
			this.hideEvent.subscribe(this.preventTabOut.disable, =
this.preventTabOut, true);
		}
	}
}

// BEGIN BUILT-IN PROPERTY EVENT HANDLERS //

/**
* The default event handler for the "buttons" configuration property
*/
YAHOO.widget.Dialog.prototype.configButtons =3D function(type, args, =
obj) {
	var buttons =3D args[0];
	if (buttons !=3D "none") {
		this.buttonSpan =3D null;
		this.buttonSpan =3D document.createElement("SPAN");
		this.buttonSpan.className =3D "button-group";

		for (var b=3D0;b<buttons.length;b++) {
			var button =3D buttons[b];

			var htmlButton =3D document.createElement("BUTTON");

			if (button.isDefault) {
				htmlButton.className =3D "default";
				this.defaultHtmlButton =3D htmlButton;
			}

			htmlButton.appendChild(document.createTextNode(button.text));
			YAHOO.util.Event.addListener(htmlButton, "click", button.handler, =
this, true);

			this.buttonSpan.appendChild(htmlButton);	=09
			button.htmlButton =3D htmlButton;

			if (b =3D=3D 0) {
				this.firstButton =3D button.htmlButton;
			}

			if (b =3D=3D (buttons.length-1)) {
				this.lastButton =3D button.htmlButton;
			}

		}

		this.setFooter(this.buttonSpan);

		this.cfg.refireEvent("iframe");
		this.cfg.refireEvent("underlay");
	}
}

/**
* The default handler fired when the "success" property is changed. Used =
for asynchronous submission only.
*/=20
YAHOO.widget.Dialog.prototype.configOnSuccess =3D =
function(type,args,obj){};

/**
* The default handler fired when the "failure" property is changed. Used =
for asynchronous submission only.
*/=20
YAHOO.widget.Dialog.prototype.configOnFailure =3D =
function(type,args,obj){};

/**
* Executes a submission of the form based on the value of the postmethod =
property.
*/
YAHOO.widget.Dialog.prototype.doSubmit =3D function() {};

/**
* The default event handler used to focus the first field of the form =
when the Dialog is shown.
*/
YAHOO.widget.Dialog.prototype.focusFirst =3D function(type,args,obj) {
	if (args) {
		var e =3D args[1];
		if (e) {
			YAHOO.util.Event.stopEvent(e);
		}
	}

	if (this.firstFormElement) {
		this.firstFormElement.focus();
	} else {
		this.focusDefaultButton();
	}
}

/**
* Sets the focus to the last button in the button or form element in the =
Dialog
*/
YAHOO.widget.Dialog.prototype.focusLast =3D function(type,args,obj) {
	if (args) {
		var e =3D args[1];
		if (e) {
			YAHOO.util.Event.stopEvent(e);
		}
	}

	var buttons =3D this.cfg.getProperty("buttons");
	if (buttons && buttons instanceof Array) {
		this.focusLastButton();
	} else {
		if (this.lastFormElement) {
			this.lastFormElement.focus();
		}
	}
}

/**
* Sets the focus to the button that is designated as the default. By =
default, his handler is executed when the show event is fired.
*/
YAHOO.widget.Dialog.prototype.focusDefaultButton =3D function() {
	if (this.defaultHtmlButton) {
		this.defaultHtmlButton.focus();
	}
}

/**
* Blurs all the html buttons
*/
YAHOO.widget.Dialog.prototype.blurButtons =3D function() {
	var buttons =3D this.cfg.getProperty("buttons");
	if (buttons && buttons instanceof Array) {
		var html =3D buttons[0].htmlButton;
		if (html) {
			html.blur();
		}
	}
}

/**
* Sets the focus to the first button in the button list
*/
YAHOO.widget.Dialog.prototype.focusFirstButton =3D function() {
	var buttons =3D this.cfg.getProperty("buttons");
	if (buttons && buttons instanceof Array) {
		var html =3D buttons[0].htmlButton;
		if (html) {
			html.focus();
		}
	}
}

/**
* Sets the focus to the first button in the button list
*/
YAHOO.widget.Dialog.prototype.focusLastButton =3D function() {
	var buttons =3D this.cfg.getProperty("buttons");
	if (buttons && buttons instanceof Array) {
		var html =3D buttons[buttons.length-1].htmlButton;
		if (html) {
			html.focus();
		}
	}
}

// END BUILT-IN PROPERTY EVENT HANDLERS //

/**
* Built-in function hook for writing a validation function that will be =
checked for a "true" value prior to a submit. This function, as =
implemented by default, always returns true, so it should be overridden =
if validation is necessary.
*/
YAHOO.widget.Dialog.prototype.validate =3D function() {
	return true;
}

/**
* Executes a submit of the Dialog followed by a hide, if validation is =
successful.
*/
YAHOO.widget.Dialog.prototype.submit =3D function() {
	if (this.validate()) {
		this.beforeSubmitEvent.fire();
		this.doSubmit();
		this.submitEvent.fire();
		this.hide();
		return true;
	} else {
		return false;
	}
}

/**
* Executes the cancel of the Dialog followed by a hide.
*/
YAHOO.widget.Dialog.prototype.cancel =3D function() {
	this.cancelEvent.fire();
	this.hide();=09
}

/**
* Returns a JSON-compatible data structure representing the data =
currently contained in the form.
* @return {object} A JSON object reprsenting the data of the current =
form.
*/
YAHOO.widget.Dialog.prototype.getData =3D function() {
	var form =3D this.form;
	var data =3D {};

	if (form) {
		for (var i in this.form) {
			var formItem =3D form[i];
			if (formItem) {
				if (formItem.tagName) { // Got a single form item
					switch (formItem.tagName) {
						case "INPUT":
							switch (formItem.type) {
								case "checkbox":=20
									data[i] =3D formItem.checked;
									break;
								case "textbox":
								case "text":
								case "hidden":
									data[i] =3D formItem.value;
									break;
							}
							break;
						case "TEXTAREA":
							data[i] =3D formItem.value;
							break;
						case "SELECT":
							var val =3D new Array();
							for (var x=3D0;x<formItem.options.length;x++)	{
								var option =3D formItem.options[x];
								if (option.selected) {
									var selval =3D option.value;
									if (! selval || selval =3D=3D "") {
										selval =3D option.text;
									}
									val[val.length] =3D selval;
								}
							}
							data[i] =3D val;
							break;
					}
				} else if (formItem[0] && formItem[0].tagName) { // this is an array =
of form items
					switch (formItem[0].tagName) {
						case "INPUT" :
							switch (formItem[0].type) {
								case "radio":
									for (var r=3D0; r<formItem.length; r++) {
										var radio =3D formItem[r];
										if (radio.checked) {
											data[radio.name] =3D radio.value;
											break;
										}
									}
									break;
								case "checkbox":
									var cbArray =3D new Array();
									for (var c=3D0; c<formItem.length; c++) {
										var check =3D formItem[c];
										if (check.checked) {
											cbArray[cbArray.length] =3D check.value;
										}
									}
									data[formItem[0].name] =3D cbArray;
									break;
							}
					}
				}
			}
		}=09
	}
	return data;
}/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class
* SimpleDialog is a simple implementation of Dialog that can be used to =
submit a single value. Forms can be processed in 3 ways -- via an =
asynchronous Connection utility call, a simple form POST or GET, or =
manually.
* @param {string}	el	The element ID representing the SimpleDialog =
<em>OR</em>
* @param {Element}	el	The element representing the SimpleDialog
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this SimpleDialog. See =
configuration documentation for more details.
* @constructor
*/
YAHOO.widget.SimpleDialog =3D function(el, userConfig) {
	if (arguments.length > 0) {
		YAHOO.widget.SimpleDialog.superclass.constructor.call(this, el, =
userConfig);
	}
}

YAHOO.widget.SimpleDialog.prototype =3D new YAHOO.widget.Dialog();
YAHOO.widget.SimpleDialog.prototype.constructor =3D =
YAHOO.widget.SimpleDialog;

/**
* Reference to the SimpleDialog's superclass, Dialog
* @type class
* @final
*/
YAHOO.widget.SimpleDialog.superclass =3D YAHOO.widget.Dialog.prototype;

/**
* Constant for the standard network icon for a blocking action
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.ICON_BLOCK =3D "nt/ic/ut/bsc/blck16_1.gif";

/**
* Constant for the standard network icon for alarm
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.ICON_ALARM =3D "nt/ic/ut/bsc/alrt16_1.gif";

/**
* Constant for the standard network icon for help
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.ICON_HELP  =3D "nt/ic/ut/bsc/hlp16_1.gif";

/**
* Constant for the standard network icon for info
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.ICON_INFO  =3D "nt/ic/ut/bsc/info16_1.gif";

/**
* Constant for the standard network icon for warn
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.ICON_WARN  =3D "nt/ic/ut/bsc/warn16_1.gif";

/**
* Constant for the standard network icon for a tip
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.ICON_TIP   =3D "nt/ic/ut/bsc/tip16_1.gif";

/**
* Constant representing the default CSS class used for a SimpleDialog
* @type string
* @final
*/
YAHOO.widget.SimpleDialog.CSS_SIMPLEDIALOG =3D "simple-dialog";

/**
* Initializes the class's configurable properties which can be changed =
using the SimpleDialog's Config object (cfg).
*/
YAHOO.widget.SimpleDialog.prototype.initDefaultConfig =3D function() {
	YAHOO.widget.SimpleDialog.superclass.initDefaultConfig.call(this);

	// Add dialog config properties //
	this.cfg.addProperty("icon",	{ value:"none",	handler:this.configIcon, =
suppressEvent:true } );
	this.cfg.addProperty("text",	{ value:"", handler:this.configText, =
suppressEvent:true, supercedes:["icon"] } );
}


/*
* The SimpleDialog initialization method, which is executed for =
SimpleDialog and all of its subclasses. This method is automatically =
called by the constructor, and  sets up all DOM references for =
pre-existing markup, and creates required markup if it is not already =
present.
* @param {string}	el	The element ID representing the SimpleDialog =
<em>OR</em>
* @param {Element}	el	The element representing the SimpleDialog
* @param {object}	userConfig	The configuration object literal containing =
the configuration that should be set for this SimpleDialog. See =
configuration documentation for more details.
*/
YAHOO.widget.SimpleDialog.prototype.init =3D function(el, userConfig) {
	YAHOO.widget.SimpleDialog.superclass.init.call(this, el/*, =
userConfig*/);  // Note that we don't pass the user config in here yet =
because we only want it executed once, at the lowest subclass level

	this.beforeInitEvent.fire(YAHOO.widget.SimpleDialog);

	YAHOO.util.Dom.addClass(this.element, =
YAHOO.widget.SimpleDialog.CSS_SIMPLEDIALOG);

	this.cfg.queueProperty("postmethod", "manual");

	if (userConfig) {
		this.cfg.applyConfig(userConfig, true);
	}

	this.beforeRenderEvent.subscribe(function() {
		if (! this.body) {
			this.setBody("");
		}
	}, this, true);

	this.initEvent.fire(YAHOO.widget.SimpleDialog);

}
/**
* Prepares the SimpleDialog's internal FORM object, creating one if one =
is not currently present, and adding the value hidden field.
*/
YAHOO.widget.SimpleDialog.prototype.registerForm =3D function() {
	YAHOO.widget.SimpleDialog.superclass.registerForm.call(this);
	this.form.innerHTML +=3D "<input type=3D\"hidden\" name=3D\"" + this.id =
+ "\" value=3D\"\"/>";
}

// BEGIN BUILT-IN PROPERTY EVENT HANDLERS //

/**
* Fired when the "icon" property is set.
*/
YAHOO.widget.SimpleDialog.prototype.configIcon =3D =
function(type,args,obj) {
	var icon =3D args[0];
	if (icon && icon !=3D "none") {
		var iconHTML =3D "<img src=3D\"" + this.imageRoot + icon + "\" =
class=3D\"icon\" />";
		this.body.innerHTML =3D iconHTML + this.body.innerHTML;
	}
}

/**
* Fired when the "text" property is set.
*/
YAHOO.widget.SimpleDialog.prototype.configText =3D =
function(type,args,obj) {
	var text =3D args[0];
	if (text) {
		this.setBody(text);
	}
}
// END BUILT-IN PROPERTY EVENT HANDLERS //
/**
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
* @class
* ContainerEffect encapsulates animation transitions that are executed =
when an Overlay is shown or hidden.
* @param {Overlay}	overlay		The Overlay that the animation should be =
associated with
* @param {object}	attrIn		The object literal representing the animation =
arguments to be used for the animate-in transition. The arguments for =
this literal are: attributes(object, see YAHOO.util.Anim for =
description), duration(float), and method(i.e. =
YAHOO.util.Easing.easeIn).
* @param {object}	attrOut		The object literal representing the animation =
arguments to be used for the animate-out transition. The arguments for =
this literal are: attributes(object, see YAHOO.util.Anim for =
description), duration(float), and method(i.e. =
YAHOO.util.Easing.easeIn).
* @param {Element}	targetElement	Optional. The target element that =
should be animated during the transition. Defaults to overlay.element.
* @constructor
*/
YAHOO.widget.ContainerEffect =3D function(overlay, attrIn, attrOut, =
targetElement) {
	this.overlay =3D overlay;

	this.attrIn =3D attrIn;
	this.attrOut =3D attrOut;

	this.targetElement =3D targetElement || overlay.element;

	this.beforeAnimateInEvent =3D new =
YAHOO.util.CustomEvent("beforeAnimateIn");
	this.beforeAnimateOutEvent =3D new =
YAHOO.util.CustomEvent("beforeAnimateOut");

	this.animateInCompleteEvent =3D new =
YAHOO.util.CustomEvent("animateInComplete");
	this.animateOutCompleteEvent =3D new =
YAHOO.util.CustomEvent("animateOutComplete");
}

/**
* Initializes the animation classes and events.
* @param {class}	Optional. The animation class to instantiate. Defaults =
to YAHOO.util.Anim. Other options include YAHOO.util.Motion.
*/
YAHOO.widget.ContainerEffect.prototype.init =3D function(animClass) {
	if (! animClass) {
		animClass =3D YAHOO.util.Anim;
	}
	this.animIn =3D new animClass(this.targetElement, =
this.attrIn.attributes, this.attrIn.duration, this.attrIn.method);
	this.animIn.onStart.subscribe(this.handleStartAnimateIn, this);
	this.animIn.onTween.subscribe(this.handleTweenAnimateIn, this);
	this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn, this);

	this.animOut =3D new animClass(this.targetElement, =
this.attrOut.attributes, this.attrOut.duration, this.attrOut.method);
	this.animOut.onStart.subscribe(this.handleStartAnimateOut, this);
	this.animOut.onTween.subscribe(this.handleTweenAnimateOut, this);
	this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut, this);
}

/**
* Triggers the in-animation.
*/
YAHOO.widget.ContainerEffect.prototype.animateIn =3D function() {
	this.beforeAnimateInEvent.fire();
	this.animIn.animate();
}

/**
* Triggers the out-animation.
*/
YAHOO.widget.ContainerEffect.prototype.animateOut =3D function() {
	this.beforeAnimateOutEvent.fire();
	this.animOut.animate();
}

/**
* The default onStart handler for the in-animation.
*/
YAHOO.widget.ContainerEffect.prototype.handleStartAnimateIn =3D =
function(type, args, obj) { }
/**
* The default onTween handler for the in-animation.
*/
YAHOO.widget.ContainerEffect.prototype.handleTweenAnimateIn =3D =
function(type, args, obj) { }
/**
* The default onComplete handler for the in-animation.
*/
YAHOO.widget.ContainerEffect.prototype.handleCompleteAnimateIn =3D =
function(type, args, obj) { }

/**
* The default onStart handler for the out-animation.
*/
YAHOO.widget.ContainerEffect.prototype.handleStartAnimateOut =3D =
function(type, args, obj) { }
/**
* The default onTween handler for the out-animation.
*/
YAHOO.widget.ContainerEffect.prototype.handleTweenAnimateOut =3D =
function(type, args, obj) { }
/**
* The default onComplete handler for the out-animation.
*/
YAHOO.widget.ContainerEffect.prototype.handleCompleteAnimateOut =3D =
function(type, args, obj) { }

/**
* A pre-configured ContainerEffect instance that can be used for fading =
an overlay in and out.
* @param {Overlay}	The Overlay object to animate
* @param {float}	The duration of the animation
* @type ContainerEffect
*/
YAHOO.widget.ContainerEffect.FADE =3D function(overlay, dur) {
	var fade =3D new YAHOO.widget.ContainerEffect(overlay, { =
attributes:{opacity: {from:0, to:1}}, duration:dur, =
method:YAHOO.util.Easing.easeIn }, { attributes:{opacity: {to:0}}, =
duration:dur, method:YAHOO.util.Easing.easeOut} );

	fade.handleStartAnimateIn =3D function(type,args,obj) {
		YAHOO.util.Dom.addClass(obj.overlay.element, "hide-select");
	=09
		if (! obj.overlay.underlay) {
			obj.overlay.cfg.refireEvent("underlay");
		}

		if (obj.overlay.underlay) {
			obj.initialUnderlayOpacity =3D =
YAHOO.util.Dom.getStyle(obj.overlay.underlay, "opacity");
			obj.overlay.underlay.style.filter =3D null;
		}

		YAHOO.util.Dom.setStyle(obj.overlay.element, "visibility", "visible"); =

		YAHOO.util.Dom.setStyle(obj.overlay.element, "opacity", 0);
	}

	fade.handleCompleteAnimateIn =3D function(type,args,obj) {
		YAHOO.util.Dom.removeClass(obj.overlay.element, "hide-select");

		if (obj.overlay.element.style.filter) {
			obj.overlay.element.style.filter =3D null;
		}		=09
	=09
		if (obj.overlay.underlay) {
			YAHOO.util.Dom.setStyle(obj.overlay.underlay, "opacity", =
obj.initialUnderlayOpacity);
		}

		obj.overlay.cfg.refireEvent("iframe");
		obj.animateInCompleteEvent.fire();
	}

	fade.handleStartAnimateOut =3D function(type, args, obj) {
		YAHOO.util.Dom.addClass(obj.overlay.element, "hide-select");

		if (obj.overlay.underlay) {
			obj.overlay.underlay.style.filter =3D null;
		}
	}

	fade.handleCompleteAnimateOut =3D  function(type, args, obj) {=20
		YAHOO.util.Dom.removeClass(obj.overlay.element, "hide-select");
		if (obj.overlay.element.style.filter) {
			obj.overlay.element.style.filter =3D null;
		}			=09
		YAHOO.util.Dom.setStyle(obj.overlay.element, "visibility", "hidden");
		YAHOO.util.Dom.setStyle(obj.overlay.element, "opacity", 1);=20

		obj.overlay.cfg.refireEvent("iframe");

		obj.animateOutCompleteEvent.fire();
	};=09

	fade.init();
	return fade;
};


/**
* A pre-configured ContainerEffect instance that can be used for sliding =
an overlay in and out.
* @param {Overlay}	The Overlay object to animate
* @param {float}	The duration of the animation
* @type ContainerEffect
*/
YAHOO.widget.ContainerEffect.SLIDE =3D function(overlay, dur) {
	var x =3D overlay.cfg.getProperty("x") || =
YAHOO.util.Dom.getX(overlay.element);
	var y =3D overlay.cfg.getProperty("y") || =
YAHOO.util.Dom.getY(overlay.element);

	var clientWidth =3D YAHOO.util.Dom.getClientWidth();
	var offsetWidth =3D overlay.element.offsetWidth;

	var slide =3D new YAHOO.widget.ContainerEffect(overlay, {=20
															attributes:{ points: { to:[x, y] } },=20
															duration:dur,=20
															method:YAHOO.util.Easing.easeIn=20
														},=20
														{=20
															attributes:{ points: { to:[(clientWidth+25), y] } },
															duration:dur,=20
															method:YAHOO.util.Easing.easeOut
														}=20
												);

	slide.handleStartAnimateIn =3D function(type,args,obj) {
		obj.overlay.element.style.left =3D (-25-offsetWidth) + "px";
		obj.overlay.element.style.top  =3D y + "px";
	}
=09
	slide.handleTweenAnimateIn =3D function(type, args, obj) {


		var pos =3D YAHOO.util.Dom.getXY(obj.overlay.element);

		var currentX =3D pos[0];
		var currentY =3D pos[1];

		if (YAHOO.util.Dom.getStyle(obj.overlay.element, "visibility") =3D=3D =
"hidden" && currentX < x) {
			YAHOO.util.Dom.setStyle(obj.overlay.element, "visibility", =
"visible");
		}

		obj.overlay.cfg.setProperty("xy", [currentX,currentY], true);
		obj.overlay.cfg.refireEvent("iframe");
	}
=09
	slide.handleCompleteAnimateIn =3D function(type, args, obj) {
		obj.overlay.cfg.setProperty("xy", [x,y], true);
		obj.startX =3D x;
		obj.startY =3D y;
		obj.overlay.cfg.refireEvent("iframe");
		obj.animateInCompleteEvent.fire();
	}

	slide.handleStartAnimateOut =3D function(type, args, obj) {
		var clientWidth =3D YAHOO.util.Dom.getViewportWidth();
	=09
		var pos =3D YAHOO.util.Dom.getXY(obj.overlay.element);

		var x =3D pos[0];
		var y =3D pos[1];

		var currentTo =3D obj.animOut.attributes.points.to;
		obj.animOut.attributes.points.to =3D [(clientWidth+25), y];
	}

	slide.handleTweenAnimateOut =3D function(type, args, obj) {
		var pos =3D YAHOO.util.Dom.getXY(obj.overlay.element);

		var x =3D pos[0];
		var y =3D pos[1];

		obj.overlay.cfg.setProperty("xy", [x,y], true);
		obj.overlay.cfg.refireEvent("iframe");
	}

	slide.handleCompleteAnimateOut =3D function(type, args, obj) {=20
		YAHOO.util.Dom.setStyle(obj.overlay.element, "visibility", "hidden");		=

		var offsetWidth =3D obj.overlay.element.offsetWidth;

		obj.overlay.cfg.setProperty("xy", [x,y]);
		obj.animateOutCompleteEvent.fire();
	};=09

	slide.init(YAHOO.util.Motion);
	return slide;
}

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/autocomplete.js

/**
 * Copyright (c) 2006, Yahoo! Inc. All rights reserved.
 */
/************************************************************************=
****/
/************************************************************************=
****/
/************************************************************************=
****/

/**
 * Class providing the customizable functionality of a plug-and-play =
DHTML
 * auto complete widget.  Some key features:
 * <ul>
 * <li>Navigate with up/down arrow keys and/or mouse to pick a =
selection</li>
 * <li>The drop down container can "roll down" or "fly out" via =
configurable
 * animation</li>
 * <li>UI look-and-feel customizable through CSS, including container
 * attributes, borders, position, fonts, etc</li>
 * </ul>
 *
 * requires YAHOO.util.Event Event utility
 * requires YAHOO.widget.DataSource Data source class
 * see YAHOO.util.Animation Animation utility
 * see JSON JSON library
 *
 * @constructor
 * @param {element | string} inputEl DOM element reference or string ID =
of the auto complete input field
 * @param {element | string} containerEl DOM element reference or string =
ID of the auto complete &lt;div&gt;
 *                              container
 * @param {object} oDataSource Instance of YAHOO.widget.DataSource for =
query/results
 * @param {object} oConfigs Optional object literal of config params
 */
YAHOO.widget.AutoComplete =3D =
function(inputEl,containerEl,oDataSource,oConfigs) {
    if(inputEl && containerEl && oDataSource) {
        // Validate data source
        if (oDataSource.getResults) {
            this.dataSource =3D oDataSource;
        }
        else {
            //YAHOO.log("Could not instantiate AutoComplete due to an =
invalid DataSource", "error");
            return;
        }
        // Validate input element
        if(YAHOO.util.Dom.inDocument(inputEl)) {
            if(typeof inputEl =3D=3D "string") {
                    this._sName =3D inputEl + =
YAHOO.widget.AutoComplete._nIndex;
                    this._oTextbox =3D document.getElementById(inputEl);
            }
            else {
                this._sName =3D (inputEl.id) ?
                    inputEl.id + YAHOO.widget.AutoComplete._nIndex :
                    "yac_inputEl" + YAHOO.widget.AutoComplete._nIndex;
                this._oTextbox =3D inputEl;
            }
        }
        else {
            //YAHOO.log("Could not instantiate AutoComplete due to an =
invalid input element", "error");
            return;
        }

        // Validate container element
        if(YAHOO.util.Dom.inDocument(containerEl)) {
            if(typeof containerEl =3D=3D "string") {
                    this._oContainer =3D =
document.getElementById(containerEl);
            }
            else {
                this._oContainer =3D containerEl;
            }
        }
        else {
            //YAHOO.log("Could not instantiate AutoComplete due to an =
invalid container element", "error");
            return;
        }

        // Set any config params passed in to override defaults
        if (typeof oConfigs =3D=3D "object") {
            for(var sConfig in oConfigs) {
                if (sConfig) {
                    this[sConfig] =3D oConfigs[sConfig];
                }
            }
        }

        // Initialization sequence
        var oSelf =3D this;
        var oTextbox =3D this._oTextbox;
        var oContainer =3D this._oContainer;

        =
YAHOO.util.Event.addListener(oTextbox,'keyup',oSelf._onTextboxKeyUp,oSelf=
);
        =
YAHOO.util.Event.addListener(oTextbox,'keydown',oSelf._onTextboxKeyDown,o=
Self);
        =
YAHOO.util.Event.addListener(oTextbox,'keypress',oSelf._onTextboxKeyPress=
,oSelf);
        =
YAHOO.util.Event.addListener(oTextbox,'focus',oSelf._onTextboxFocus,oSelf=
);
        =
YAHOO.util.Event.addListener(oTextbox,'blur',oSelf._onTextboxBlur,oSelf);=

        =
YAHOO.util.Event.addListener(oContainer,'mouseover',oSelf._onContainerMou=
seover,oSelf);
        =
YAHOO.util.Event.addListener(oContainer,'mouseout',oSelf._onContainerMous=
eout,oSelf);
        =
YAHOO.util.Event.addListener(oContainer,'scroll',oSelf._onContainerScroll=
,oSelf);
        if(oTextbox.form && this.allowBrowserAutocomplete) {
            =
YAHOO.util.Event.addListener(oTextbox.form,'submit',oSelf._onFormSubmit,o=
Self);
        }

        this.textboxFocusEvent =3D new =
YAHOO.util.CustomEvent("textboxFocus", this);
        this.textboxKeyEvent =3D new =
YAHOO.util.CustomEvent("textboxKey", this);
        this.dataRequestEvent =3D new =
YAHOO.util.CustomEvent("dataRequest", this);
        this.dataReturnEvent =3D new =
YAHOO.util.CustomEvent("dataReturn", this);
        this.dataErrorEvent =3D new YAHOO.util.CustomEvent("dataError", =
this);
        this.containerExpandEvent =3D new =
YAHOO.util.CustomEvent("containerExpand", this);
        this.typeAheadEvent =3D new YAHOO.util.CustomEvent("typeAhead", =
this);
        this.itemMouseOverEvent =3D new =
YAHOO.util.CustomEvent("itemMouseOver", this);
        this.itemMouseOutEvent =3D new =
YAHOO.util.CustomEvent("itemMouseOut", this);
        this.itemArrowToEvent =3D new =
YAHOO.util.CustomEvent("itemArrowTo", this);
        this.itemArrowFromEvent =3D new =
YAHOO.util.CustomEvent("itemArrowFrom", this);
        this.itemSelectEvent =3D new =
YAHOO.util.CustomEvent("itemSelect", this);
        this.selectionEnforceEvent =3D new =
YAHOO.util.CustomEvent("selectionEnforce", this);
        this.containerCollapseEvent =3D new =
YAHOO.util.CustomEvent("containerCollapse", this);
        this.textboxBlurEvent =3D new =
YAHOO.util.CustomEvent("textboxBlur", this);

        // Turn off autocomplete on textbox
        oTextbox.setAttribute("autocomplete","off");

        // Validate and initialize public configs
        this._initProps();
    }
    // Required arguments were not found
    else {
        //YAHOO.log("Could not instantiate AutoComplete due invalid =
arguments", "error");
    }
};


/************************************************************************=
***
 * Public member variables
 =
*************************************************************************=
**/
/**
 * The data source object that encapsulates the data used for auto =
completion.
 * This object should be an inherited object from =
YAHOO.widget.DataSource.
 *
 * @type object
 */
YAHOO.widget.AutoComplete.prototype.dataSource =3D null;

/**
 * Number of characters that must be entered before querying for =
results.
 * Default: 1.
 *
 * @type number
 */
YAHOO.widget.AutoComplete.prototype.minQueryLength =3D 1;

/**
 * Maximum number of results to display in auto complete container. =
Default: 10.
 *
 * @type number
 */
YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed =3D 10;

/**
 * Number of seconds to delay before submitting a query request.  If a =
query
 * request is received before a previous one has completed its delay, =
the
 * previous request is cancelled and the new request is set to the =
delay.
 * Default: 0.5.
 *
 * @type number
 */
YAHOO.widget.AutoComplete.prototype.queryDelay =3D 0.5;

/**
 * Class name of a highlighted item within the auto complete container.
 * Default: "highlight".
 *
 * @type string
 */
YAHOO.widget.AutoComplete.prototype.highlightClassName =3D "highlight";

/**
 * Query delimiter. A single character separator for multiple delimited
 * selections. Multiple delimiter characteres may be defined as an array =
of
 * strings. A null value or empty string indicates that query results =
cannot
 * be delimited. This feature is not recommended if you need =
forceSelection to
 * be true. Default: null.
 *
 * @type string or array
 */
YAHOO.widget.AutoComplete.prototype.delimChar =3D null;

/**
 * Whether or not the auto complete input field should be automatically =
updated
 * with the first query result as the user types, auto-selecting the =
substring
 * that the user has not typed. Default: false.
 *
 * @type boolean
 */
YAHOO.widget.AutoComplete.prototype.typeAhead =3D false;

/**
 * Whether or not to animate the expansion/collapse of the auto complete
 * container in the horizontal direction.  Default: false.
 *
 * @type boolean
 */
YAHOO.widget.AutoComplete.prototype.animHoriz =3D false;

/**
 * Whether or not to animate the expansion/collapse of the auto complete
 * container in the vertical direction.  Default: true.
 *
 * @type boolean
 */
YAHOO.widget.AutoComplete.prototype.animVert =3D true;

/**
 * Speed of container expand/collapse animation, in seconds. Default: =
0.3.
 *
 * @type number
 */
YAHOO.widget.AutoComplete.prototype.animSpeed =3D 0.3;

/**
 * Whether or not to force the user's selection to match one of the =
query
 * results. Enabling this feature essentially transforms the auto =
complete form
 * input field into a &lt;select&gt; field. This feature is not =
recommended
 * with delimiter character(s) defined. Default: false.
 *
 * @type boolean
 */
YAHOO.widget.AutoComplete.prototype.forceSelection =3D false;

/**
 * Whether or not to allow browsers to cache user typed input, which =
effectively
 * does not set the input attribute autocomplete=3D"off". When users =
click the
 * back button after form submission, typed input can be prefilled by =
the
 * browser. Default: true.
 *
 * @type boolean
 */
YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete =3D true;

/************************************************************************=
***
 * Public methods
 =
*************************************************************************=
**/
 /**
 * Public accessor to the unique name of the auto complete instance.
 *
 * @return {string} Unique name of the auto complete instance
 */
YAHOO.widget.AutoComplete.prototype.getName =3D function() {
    return this._sName;
};

/**
 * Public accessor to the internal array of DOM &lt;li&gt; element IDs =
that
 * display query results within the auto complete container.
 *
 * @return {array} Array of &lt;li&gt; element IDs within the auto =
complete
 *                 container
 */
YAHOO.widget.AutoComplete.prototype.getListIds =3D function() {
    return this._aListIds;
};

/**
 * Sets HTML markup for the auto complete container header. This markup =
will be
 * inserted within a &lt;div&gt; tag with a class of "ac_hd".
 *
 * @param {string} sHeader HTML markup for container header
 */
YAHOO.widget.AutoComplete.prototype.setHeader =3D function(sHeader) {
    if(sHeader) {
        this._oHeader.innerHTML =3D sHeader;
        this._oHeader.style.display =3D "block";
    }
};

/**
 * Sets HTML markup for the auto complete container footer. This markup =
will be
 * inserted within a &lt;div&gt; tag with a class of "ac_ft".
 *
 * @param {string} sFooter HTML markup for container footer
 */
YAHOO.widget.AutoComplete.prototype.setFooter =3D function(sFooter) {
    if(sFooter) {
        this._oFooter.innerHTML =3D sFooter;
        this._oFooter.style.display =3D "block";
    }
};

/**
 * Whether or not to use an iFrame to layer over Windows form elements =
in
 * IE. Set to true only when the auto complete container will be on top =
of a
 * &lt;select&gt; field in IE and thus exposed to the IE z-index bug =
(i.e.,
 * 5.5 < IE < 7). Default:false.
 *
 * @type boolean
 */
YAHOO.widget.AutoComplete.prototype.useIFrame =3D false;

/**
 * Overridable method that converts a result item object into HTML =
markup
 * for display. Return data values are accessible via the oResultItem =
object,
 * and the key return value will always be oResultItem[0]. Markup will =
be
 * displayed within &lt;li&gt; element tags in the container.
 *
 * @param {object} oResultItem Result item object representing one query =
result
 * @param {string} sQuery The current query string
 * @return {string} HTML markup of formatted result data
 */
YAHOO.widget.AutoComplete.prototype.formatResult =3D =
function(oResultItem, sQuery) {
    var sResult =3D oResultItem[0];
    if(sResult) {
        return sResult;
    }
    else {
        return "";
    }
};

/************************************************************************=
***
 * Events
 =
*************************************************************************=
**/
/**
 * Fired when the auto complete text input box receives focus. =
Subscribers
 * receive the following array:<br>
 *     -  args[0] The auto complete object instance
 */
YAHOO.widget.AutoComplete.prototype.textboxFocusEvent =3D null;

/**
 * Fired when the auto complete text input box receives key input. =
Subscribers
 * receive the following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The keycode number
 */
YAHOO.widget.AutoComplete.prototype.textboxKeyEvent =3D null;

/**
 * Fired when the auto complete instance makes a query to the data =
source.
 * Subscribers receive the following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The query string
 */
YAHOO.widget.AutoComplete.prototype.dataRequestEvent =3D null;

/**
 * Fired when the auto complete instance receives query results from the =
data
 * source. Subscribers receive the following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The query string
 *     - args[2] Results array
 */
YAHOO.widget.AutoComplete.prototype.dataReturnEvent =3D null;

/**
 * Fired when the auto complete instance does not receive query results =
from the
 * data source due to an error. Subscribers receive the following =
array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The query string
 */
YAHOO.widget.AutoComplete.prototype.dataErrorEvent =3D null;

/**
 * Fired when the auto complete container is expanded. Subscribers =
receive the
 * following array:<br>
 *     - args[0] The auto complete object instance
 */
YAHOO.widget.AutoComplete.prototype.containerExpandEvent =3D null;

/**
 * Fired when the auto complete textbox has been prefilled by the =
type-ahead
 * feature. Subscribers receive the following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The query string
 *     - args[2] The prefill string
 */
YAHOO.widget.AutoComplete.prototype.typeAheadEvent =3D null;

/**
 * Fired when result item has been moused over. Subscribers receive the =
following
 * array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The &lt;li&gt element item moused to
 */
YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent =3D null;

/**
 * Fired when result item has been moused out. Subscribers receive the
 * following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The &lt;li&gt; element item moused from
 */
YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent =3D null;

/**
 * Fired when result item has been arrowed to. Subscribers receive the =
following
 * array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The &lt;li&gt; element item arrowed to
 */
YAHOO.widget.AutoComplete.prototype.itemArrowToEvent =3D null;

/**
 * Fired when result item has been arrowed away from. Subscribers =
receive the
 * following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The &lt;li&gt; element item arrowed from
 */
YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent =3D null;

/**
 * Fired when an item is selected via mouse click, ENTER key, or TAB =
key.
 * Subscribers receive the following array:<br>
 *     - args[0] The auto complete object instance
 *     - args[1] The selected &lt;li&gt; element item
 */
YAHOO.widget.AutoComplete.prototype.itemSelectEvent =3D null;

/**
 * Fired if forceSelection is enabled and the user's input has been =
cleared
 * because it did not match one of the returned query results. =
Subscribers
 * receive the following array:<br>
 *     - args[0] The auto complete object instance
 */
YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent =3D null;

/**
 * Fired when the auto complete container is collapsed. Subscribers =
receive the
 * following array:<br>
 *     - args[0] The auto complete object instance
 */
YAHOO.widget.AutoComplete.prototype.containerCollapseEvent =3D null;

/**
 * Fired when the auto complete text input box loses focus. Subscribers =
receive
 * an array of the following array:<br>
 *     - args[0] The auto complete object instance
 */
YAHOO.widget.AutoComplete.prototype.textboxBlurEvent =3D null;

/************************************************************************=
***
 * Private member variables
 =
*************************************************************************=
**/
/**
 * Internal class variable to index multiple auto complete instances.
 *
 * @type number
 * @private
 */
YAHOO.widget.AutoComplete._nIndex =3D 0;

/**
 * Name of auto complete instance.
 *
 * @type string
 * @private
 */
YAHOO.widget.AutoComplete.prototype._sName =3D null;

/**
 * Text input box DOM element.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oTextbox =3D null;

/**
 * Whether or not the textbox is currently in focus. If query results =
come back
 * but the user has already moved on, do not proceed with auto complete =
behavior.
 *
 * @type boolean
 * @private
 */
YAHOO.widget.AutoComplete.prototype._bFocused =3D true;

/**
 * Animation instance for container expand/collapse.
 *
 * @type boolean
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oAnim =3D null;

/**
 * Container DOM element.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oContainer =3D null;

/**
 * Whether or not the auto complete container is currently open.
 *
 * @type boolean
 * @private
 */
YAHOO.widget.AutoComplete.prototype._bContainerOpen =3D false;

/**
 * Whether or not the mouse is currently over the auto complete
 * container. This is necessary in order to prevent clicks on container =
items
 * from being text input box blur events.
 *
 * @type boolean
 * @private
 */
YAHOO.widget.AutoComplete.prototype._bOverContainer =3D false;

/**
 * iFrame DOM element. Only used in IE for iframe trick.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oIFrame =3D null;

/**
 * Content DOM element. Only used in IE for iFrame trick.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oContent =3D null;

/**
 * Container header DOM element.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oHeader =3D null;

/**
 * Container footer DOM element.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oFooter =3D null;

/**
 * Array of &lt;li&gt; elements IDs used to display query results within =
the
 * auto complete container.
 *
 * @type array
 * @private
 */
YAHOO.widget.AutoComplete.prototype._aListIds =3D null;

/**
 * Number of &lt;li&gt; elements currently displayed in auto complete =
container.
 *
 * @type number
 * @private
 */
YAHOO.widget.AutoComplete.prototype._nDisplayedItems =3D 0;

/**
 * Current query string
 *
 * @type string
 * @private
 */
YAHOO.widget.AutoComplete.prototype._sCurQuery =3D null;

/**
 * Past queries this session (for saving delimited queries).
 *
 * @type string
 * @private
 */
YAHOO.widget.AutoComplete.prototype._sSavedQuery =3D null;

/**
 * Pointer to the currently highlighted &lt;li&gt; element in the =
container.
 *
 * @type object
 * @private
 */
YAHOO.widget.AutoComplete.prototype._oCurItem =3D null;

/**
 * Whether or not an item has been selected since the container was =
populated
 * with results. Reset to false by _populateList, and set to true when =
item is
 * selected.
 *
 * @type boolean
 * @private
 */
YAHOO.widget.AutoComplete.prototype._bItemSelected =3D false;

/**
 * Key code of the last key pressed in textbox.
 *
 * @type number
 * @private
 */
YAHOO.widget.AutoComplete.prototype._nKeyCode =3D null;

/**
 * Delay timeout ID.
 *
 * @type number
 * @private
 */
YAHOO.widget.AutoComplete.prototype._nDelayID =3D -1;

/************************************************************************=
***
 * Private methods
 =
*************************************************************************=
**/
/**
 * Updates and validates latest public config properties.
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._initProps =3D function() {
    // Correct any invalid values
    var minQueryLength =3D this.minQueryLength;
    if(isNaN(minQueryLength) || (minQueryLength < 1)) {
        minQueryLength =3D 1;
    }
    var maxResultsDisplayed =3D this.maxResultsDisplayed;
    if(isNaN(this.maxResultsDisplayed) || (this.maxResultsDisplayed < =
1)) {
        this.maxResultsDisplayed =3D 10;
    }
    var queryDelay =3D this.queryDelay;
    if(isNaN(this.queryDelay) || (this.queryDelay < 0)) {
        this.queryDelay =3D 0.5;
    }
    var aDelimChar =3D (this.delimChar) ? this.delimChar : null;
    if(aDelimChar) {
        if(typeof aDelimChar =3D=3D "string") {
            this.delimChar =3D [aDelimChar];
        }
        else if(aDelimChar.constructor !=3D Array) {
            this.delimChar =3D null;
        }
    }
    var animSpeed =3D this.animSpeed;
    if(this.animHoriz || this.animVert) {
        if(isNaN(animSpeed) || (animSpeed < 0)) {
            animSpeed =3D 0.3;
        }

        if(!this._oAnim && YAHOO.util.Anim) {
            this._oAnim =3D new YAHOO.util.Anim(this._oContainer, {}, =
animSpeed);
        }
        else if(this._oAnim) {
            this._oAnim.duration =3D animSpeed;
        }
    }
    if(this.forceSelection && this.delimChar) {
        //YAHOO.log(oSelf.getName() + " has enabled force selection with =
delimiter character(s) defined.","warn");
    }
    if (!this._aListIds) {
        this._aListIds =3D [];
    }

    if(!this._aListIds || (this.maxResultsDisplayed !=3D =
this._aListIds.length)) {
        this._initContainer();
    }
};

/**
 * Initializes the auto complete container
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._initContainer =3D function() {
    // Create the max number of <li> elements, but hide them all
    this._aListIds =3D [];
    var aItemsMarkup =3D [];
    var sName =3D this._sName;
    var sPrefix =3D sName + "item";
    var sHeaderID =3D sName + "header";
    var sFooterID =3D sName + "footer";

    for(var i =3D this.maxResultsDisplayed-1; i >=3D 0 ; i--) {
        var sItemID =3D sPrefix + i;
        this._aListIds[i] =3D sItemID;
        aItemsMarkup.unshift("<li id=3D'" + sItemID + "'></li>\n");
    }

    var sList =3D "<ul id=3D'" + sName + "list'>" +
        aItemsMarkup.join("") + "</ul>";

    // Need this iFrame trick to make sure the container appears over =
form
    // elements to workaround IE z-index bug
    var sContent =3D (this.useIFrame) ?
            ["<div id=3D'",
            sName,
            "content'>",
            "<div id=3D'",
            sHeaderID,
            "' class=3D'ac_hd'></div><div class=3D'ac_bd'>",
            sList,
            "</div><div id=3D'",
            sFooterID,
            "' class=3D'ac_ft'></div>",
            "</div><iframe id=3D'",
            sName,
            "iframe' src=3D'about:blank' frameborder=3D'0' =
scrolling=3D'no'>",
            "</iframe>"] :

            ["<div id=3D'",
            sHeaderID,
            "' class=3D'ac_hd'></div><div class=3D'ac_bd'>",
            sList,
            "</div><div id=3D'",
            sFooterID,
            "' class=3D'ac_ft'></div>"];

    sContent =3D sContent.join("");
    this._oContainer.innerHTML =3D sContent;

    this._oHeader =3D document.getElementById(sHeaderID);
    this._oFooter =3D document.getElementById(sFooterID);

    if (this.useIFrame) {
        this._oContent =3D document.getElementById(sName + "content");
        this._oIFrame =3D document.getElementById(sName + "iframe");
        this._oContent.style.position =3D "relative";
        this._oIFrame.style.position =3D "relative";
        this._oContent.style.zIndex =3D 9050;
    }

    this._oContainer.style.display =3D "none";
    this._oHeader.style.display =3D "none";
    this._oFooter.style.display =3D "none";

    this._initItems();
};

/**
 * Initializes up to YAHOO.widget.AutoComplete#maxResultsDisplayed =
&lt;li&gt;
 * elements in the container.
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._initItems =3D function() {
    // set properties & events for each item now that they are in the =
DOM
    for(var i =3D this.maxResultsDisplayed-1; i >=3D 0 ; i--) {
        var oItem =3D document.getElementById(this._aListIds[i]);
        this._initItem(oItem, i);
    }
};

/**
 * Initializes each &lt;li&gt; element in the container .
 *
 * @param {object} oItem The &lt;li&gt; DOM element
 * @param {number} onItemIndex The index of the element
 * @private
 */
YAHOO.widget.AutoComplete.prototype._initItem =3D function(oItem, =
nItemIndex) {
    var oSelf =3D this;
    oItem.style.display =3D "none";
    oItem._nItemIndex =3D nItemIndex;
    oItem.mouseover =3D oItem.mouseout =3D oItem.onclick =3D null;
    =
YAHOO.util.Event.addListener(oItem,'mouseover',oSelf._onItemMouseover,oSe=
lf);
    =
YAHOO.util.Event.addListener(oItem,'mouseout',oSelf._onItemMouseout,oSelf=
);
    =
YAHOO.util.Event.addListener(oItem,'click',oSelf._onItemMouseclick,oSelf)=
;
};

/**
 * Handles &lt;li&gt; element mouseover events in the container.
 *
 * @param {event} v The mouseover event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onItemMouseover =3D =
function(v,oSelf) {
    oSelf._toggleHighlight(this,'mouseover');
    oSelf.itemMouseOverEvent.fire(oSelf, this);
    //YAHOO.log(oSelf.getName() + " moused over " + this.id);

};

/**
 * Handles &lt;li&gt; element mouseout events in the container.
 *
 * @param {event} v The mouseout event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onItemMouseout =3D =
function(v,oSelf) {
    oSelf._toggleHighlight(this,'mouseout');
    oSelf.itemMouseOutEvent.fire(oSelf, this);
    //YAHOO.log(oSelf.getName() + " moused out from " + this.id);
};

/**
 * Handles &lt;li&gt; element click events in the container.
 *
 * @param {event} v The click event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onItemMouseclick =3D =
function(v,oSelf) {
    // In case item has not been moused over
    oSelf._toggleHighlight(this,'mouseover');
    oSelf._selectItem(this);
};

/**
 * Handles container mouseover events.
 *
 * @param {event} v The mouseover event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onContainerMouseover =3D =
function(v,oSelf) {
    oSelf._bOverContainer =3D true;
};

/**
 * Handles container mouseout events.
 *
 * @param {event} v The mouseout event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onContainerMouseout =3D =
function(v,oSelf) {
    oSelf._bOverContainer =3D false;
    // If container is still active
    if(oSelf._oCurItem) {
        oSelf._toggleHighlight(oSelf._oCurItem,'mouseover');
    }
};

/**
 * Handles container scroll events.
 *
 * @param {event} v The scroll event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onContainerScroll =3D =
function(v,oSelf) {
    oSelf._oTextbox.focus();
};


/**
 * Handles textbox keydown events of functional keys, mainly for UI =
behavior.
 *
 * @param {event} v The keydown event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown =3D =
function(v,oSelf) {
    var nKeyCode =3D v.keyCode;

    switch (nKeyCode) {
        case 9: // tab
            if(oSelf.delimChar && (oSelf._nKeyCode !=3D nKeyCode)) {
                if(oSelf._bContainerOpen) {
                    YAHOO.util.Event.stopEvent(v);
                }
            }
            // select an item or clear out
            if(oSelf._oCurItem) {
                oSelf._selectItem(oSelf._oCurItem);
            }
            else {
                oSelf._clearList();
            }
            break;
        case 13: // enter
            if(oSelf._nKeyCode !=3D nKeyCode) {
                if(oSelf._bContainerOpen) {
                    YAHOO.util.Event.stopEvent(v);
                }
            }
            if(oSelf._oCurItem) {
                oSelf._selectItem(oSelf._oCurItem);
            }
            else {
                oSelf._clearList();
            }
            break;
        case 27: // esc
            oSelf._clearList();
            return;
        case 39: // right
            oSelf._jumpSelection();
            break;
        case 38: // up
            YAHOO.util.Event.stopEvent(v);
            oSelf._moveSelection(nKeyCode);
            break;
        case 40: // down
            YAHOO.util.Event.stopEvent(v);
            oSelf._moveSelection(nKeyCode);
            break;
        default:
            break;
    }
};

/**
 * Handles textbox keypress events, mainly for FF.
 *
 * @param {event} v The keyup event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress =3D =
function(v,oSelf) {
    var nKeyCode =3D v.keyCode;

    // for FF < 1.0
    switch (nKeyCode) {
    case 9: // tab
    case 13: // enter
        if(oSelf.delimChar && (oSelf._nKeyCode !=3D nKeyCode)) {
            if(oSelf._bContainerOpen) {
                YAHOO.util.Event.stopEvent(v);
            }
        }
        break;
    case 38: // up
    case 40: // down
        YAHOO.util.Event.stopEvent(v);
        break;
    default:
        break;
    }
};

/**
 * Handles textbox keyup events that trigger queries.
 *
 * @param {event} v The keyup event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp =3D =
function(v,oSelf) {
    // Check to see if any of the public properties have been updated
    oSelf._initProps();

    var nKeyCode =3D v.keyCode;
    oSelf._nKeyCode =3D nKeyCode;
    var sChar =3D String.fromCharCode(nKeyCode);
    var sText =3D this.value; //string in textbox

    // Filter out chars that don't trigger queries
    if (oSelf._isIgnoreKey(nKeyCode) || (sText.toLowerCase() =3D=3D =
this._sCurQuery)) {
        return;
    }
    else {
        oSelf.textboxKeyEvent.fire(oSelf, nKeyCode);
        //YAHOO.log(oSelf.getName() + " received key input " + =
nKeyCode);
    }

    // Set timeout on the request
    if (oSelf.queryDelay > 0) {
        var nDelayID =3D
            =
setTimeout(function(){oSelf._sendQuery(sText);},(oSelf.queryDelay * =
1000));

        if (oSelf._nDelayID !=3D -1) {
            clearTimeout(oSelf._nDelayID);
        }

        oSelf._nDelayID =3D nDelayID;
    }
    else {
        // No delay so send request immediately
        oSelf._sendQuery(sText);
    }
};

/**
 * Whether or not key is functional or should be ignored. Note that the =
right
 * arrow key is NOT an ignored key since it triggers queries for certain =
intl
 * charsets.
 *
 * @param {number} nKeycode Code of key pressed
 * @return {boolean} Whether or not to be ignore key
 * @private
 */
YAHOO.widget.AutoComplete.prototype._isIgnoreKey =3D function(nKeyCode) =
{
    if(this.typeAhead) { // fewer query triggers when type ahead is on
        if((nKeyCode =3D=3D 8) || // backspace
        (nKeyCode =3D=3D 39) || // right
        (nKeyCode =3D=3D 46)) { // delete
            return true;
        }
    }
    if ((nKeyCode =3D=3D 9) || (nKeyCode =3D=3D 13)  || // tab, enter
            (nKeyCode =3D=3D 16) || (nKeyCode =3D=3D 17) || // shift, =
ctl
            (nKeyCode >=3D 18 && nKeyCode <=3D 20) || // =
alt,pause/break,caps lock
            (nKeyCode =3D=3D 27) || // esc
            (nKeyCode >=3D 33 && nKeyCode <=3D 35) || // page up,page =
down,end
            (nKeyCode >=3D 36 && nKeyCode <=3D 38) || // home,left,up
            (nKeyCode =3D=3D 40) || // down
            (nKeyCode >=3D 44 && nKeyCode <=3D 45)) { // print =
screen,insert
        return true;
    }
    return false;
};

/**
 * Handles text input box receiving focus.
 *
 * @param {event} v The focus event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onTextboxFocus =3D function =
(v,oSelf) {
    oSelf._oTextbox.setAttribute("autocomplete","off");
    oSelf._bFocused =3D true;
    oSelf.textboxFocusEvent.fire(oSelf);
    //YAHOO.log(oSelf.getName() + " textbox focused");
};

/**
 * Handles text input box losing focus.
 *
 * @param {event} v The focus event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onTextboxBlur =3D function =
(v,oSelf) {
    // Don't treat as a blur if it was a selection via mouse click
    if(!oSelf._bOverContainer || (oSelf._nKeyCode =3D=3D 9)) {
        // Current query needs to be validated
        if(oSelf.forceSelection && !oSelf._bItemSelected) {
            if(!oSelf._bContainerOpen || (oSelf._bContainerOpen && =
!oSelf._textMatchesOption())) {
                oSelf._clearSelection();
            }
        }

        if(oSelf._bContainerOpen) {
            oSelf._clearList();
        }
        oSelf._bFocused =3D false;
        oSelf.textboxBlurEvent.fire(oSelf);
        //YAHOO.log(oSelf.getName() + " textbox blurred");
    }
};

/**
 * Handles form submission event.
 *
 * @param {event} v The submit event
 * @param {object} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._onFormSubmit =3D function(v,oSelf) =
{
    oSelf._oTextbox.setAttribute("autocomplete","on");
};

/**
 * Makes query request to the data source.
 *
 * @param {string} sQuery Query string.
 * @private
 */
YAHOO.widget.AutoComplete.prototype._sendQuery =3D function(sQuery) {
    // Delimiter has been enabled
    var aDelimChar =3D (this.delimChar) ? this.delimChar : null;
    if(aDelimChar) {
        // Loop through all possible delimiters and find the latest one
        // A " " may be a false positive if they are defined as =
delimiters AND
        // are used to separate delimited queries
        var nDelimIndex =3D -1;
        for(var i =3D aDelimChar.length-1; i >=3D 0; i--) {
            var nNewIndex =3D sQuery.lastIndexOf(aDelimChar[i]);
            if(nNewIndex > nDelimIndex) {
                nDelimIndex =3D nNewIndex;
            }
        }
        // If we think the last delimiter is a space (" "), make sure it =
is NOT
        // a false positive by also checking the char directly before it
        if(aDelimChar[i] =3D=3D " ") {
            for (var j =3D aDelimChar.length-1; j >=3D 0; j--) {
                if(sQuery[nDelimIndex - 1] =3D=3D aDelimChar[j]) {
                    nDelimIndex--;
                    break;
                }
            }
        }
        // A delimiter has been found so extract the latest query
        if (nDelimIndex > -1) {
            var nQueryStart =3D nDelimIndex + 1;
            // Trim any white space from the beginning...
            while(sQuery.charAt(nQueryStart) =3D=3D " ") {
                nQueryStart +=3D 1;
            }
            // ...and save the rest of the string for later
            this._sSavedQuery =3D sQuery.substring(0,nQueryStart);
            // Here is the query itself
            sQuery =3D sQuery.substr(nQueryStart);
        }
        else if(sQuery.indexOf(this._sSavedQuery) < 0){
            this._sSavedQuery =3D null;
        }
    }

    // Don't search queries that are too short
    if (sQuery.length < this.minQueryLength) {
        if (this._nDelayID !=3D -1) {
            clearTimeout(this._nDelayID);
        }
        this._clearList();
        return;
    }

    sQuery =3D encodeURI(sQuery);
    this._nDelayID =3D -1;    // Reset timeout ID because request has =
been made
    this.dataRequestEvent.fire(this, sQuery);
    //YAHOO.log(this.getName() + " requested data for query \"" + sQuery =
+ "\"");
    this.dataSource.getResults(this._populateList, sQuery, this);
};

/**
 * Hides all visuals related to the array of &lt;li&gt; elements in the =
container.
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._clearList =3D function() {
    this._oContainer.scrollTop =3D 0;
    var aItems =3D this._aListIds;

    for(var i =3D aItems.length-1; i >=3D 0 ; i--) {
        document.getElementById(aItems[i]).style.display =3D "none";
    }

    if (this._oCurItem) {
        this._toggleHighlight(this._oCurItem,'mouseout');
    }

    this._oCurItem =3D null;
    this._nDisplayedItems =3D 0;
    this._sCurQuery =3D null;
    this._toggleContainer(false);
};

/**
 * Populates the array of &lt;li&gt; elements in the container with =
query
 * results. This method is passed to YAHOO.widget.DataSource#getResults =
as a
 * callback function so results from the datasource are returned to the
 * auto complete instance.
 *
 * @param {string} sQuery The query string
 * @param {object} aResults An array of query result objects from the =
data source
 * @param {string} oSelf The auto complete instance
 * @private
 */
YAHOO.widget.AutoComplete.prototype._populateList =3D function(sQuery, =
aResults, oSelf) {
    if(aResults =3D=3D=3D null) {
        oSelf.dataErrorEvent.fire(oSelf, sQuery);
        //YAHOO.log(oSelf.getName() + " data error for query \"" + =
sQuery + "\"");
    }
    else {
        oSelf.dataReturnEvent.fire(oSelf, sQuery, aResults);
        //YAHOO.log(oSelf.getName() + " received " + aResults.length + " =
results for query \"" + sQuery + "\"");
    }

    if (!oSelf._bFocused || !aResults) {
        return;
    }

    var isOpera =3D (navigator.userAgent.toLowerCase().indexOf("opera") =
!=3D -1);
    oSelf._oContainer.style.width =3D (!isOpera) ? null : "";
    oSelf._oContainer.style.height =3D (!isOpera) ? null : "";

    var sCurQuery =3D decodeURI(sQuery);
    oSelf._sCurQuery =3D sCurQuery;
    var aItems =3D oSelf._aListIds;
    oSelf._bItemSelected =3D false;

    var nItems =3D Math.min(aResults.length,oSelf.maxResultsDisplayed);
    oSelf._nDisplayedItems =3D nItems;
    if (nItems > 0) {
        // Fill items with data
        for(var i =3D nItems-1; i >=3D 0 ; i--) {
            var oItemi =3D document.getElementById(aItems[i]);
            var oResultItemi =3D aResults[i];
            oItemi.innerHTML =3D oSelf.formatResult(oResultItemi, =
sCurQuery);
            oItemi.style.display =3D "list-item";
            oItemi._sResultKey =3D oResultItemi[0];
            oItemi._oResultData =3D oResultItemi;

        }

        // Empty out remaining items if any
        for(var j =3D aItems.length-1; j >=3D nItems ; j--) {
            var oItemj =3D document.getElementById(aItems[j]);
            oItemj.innerHTML =3D null;
            oItemj.style.display =3D "none";
            oItemj._sResultKey =3D null;
            oItemj._oResultData =3D null;
        }

        // Select first item and show UI
        var oFirstItem =3D document.getElementById(aItems[0]);
        oSelf._toggleHighlight(oFirstItem,'mouseover');
        oSelf._toggleContainer(true);
        oSelf.itemArrowToEvent.fire(oSelf, oFirstItem);
        //YAHOO.log(oSelf.getName() + " arrowed to item " + =
oFirstItem.id);
        oSelf._typeAhead(oFirstItem,sQuery);
        oSelf._oCurItem =3D oFirstItem;
    }
    else {
        oSelf._clearList();
    }
};

/**
 * When YAHOO.widget.AutoComplete#bForceSelection is true and the user =
attempts
 * leave the text input box without selecting an item from the query =
results,
 * the user selection is cleared.
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._clearSelection =3D function() {
    var sValue =3D this._oTextbox.value;
    var sChar =3D (this.delimChar) ? this.delimChar[0] : null;
    var nIndex =3D (sChar) ? sValue.lastIndexOf(sChar, sValue.length-2) =
: -1;
    if(nIndex > -1) {
        this._oTextbox.value =3D sValue.substring(0,nIndex);
    }
    else {
         this._oTextbox.value =3D "";
    }
    this._sSavedQuery =3D this._oTextbox.value;

    // Fire custom event
    this.selectionEnforceEvent.fire(this);
    //YAHOO.log(this.getName() + " cleared an invalid selection");
};

/**
 * Whether or not user-typed value in the text input box matches any of =
the
 * query results.
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._textMatchesOption =3D function() {
    var foundMatch =3D false;

    for(var i =3D this._nDisplayedItems-1; i >=3D 0 ; i--) {
        var oItem =3D document.getElementById(this._aListIds[i]);
        var sMatch =3D oItem._sResultKey.toLowerCase();
        if (sMatch =3D=3D this._sCurQuery.toLowerCase()) {
            foundMatch =3D true;
            break;
        }
    }
    return(foundMatch);
};

/**
 * Updates in the text input box with the first query result as the user =
types,
 * selecting the substring that the user has not typed.
 *
 * @param {object} oItem The &lt;li&gt; element item whose data =
populates the input field
 * @param {string} sQuery Query string
 * @private
 */
YAHOO.widget.AutoComplete.prototype._typeAhead =3D function(oItem, =
sQuery) {
    var oTextbox =3D this._oTextbox;
    var sValue =3D this._oTextbox.value; // any saved queries plus what =
user has typed

    // Don't update with type-ahead if turned off
    if (!this.typeAhead) {
        return;
    }

    // Don't update with type-ahead if text selection is not supported
    if(!oTextbox.setSelectionRange && !oTextbox.createTextRange) {
        return;
    }

    // Select the portion of text that the user has not typed
    var nStart =3D sValue.length;
    this._updateValue(oItem);
    var nEnd =3D oTextbox.value.length;
    this._selectText(oTextbox,nStart,nEnd);
    var sPrefill =3D oTextbox.value.substr(nStart,nEnd);
    this.typeAheadEvent.fire(this,sQuery,sPrefill);
    //YAHOO.log(this.getName() + " prefilled \"" + sPrefill + "\" for =
query " + sQuery + "\"");
};

/**
 * Selects text in a text input box.
 *
 * @param {object} oTextbox Text input box element in which to select =
text
 * @param {number} nStart Starting index of text string to select
 * @param {number} nEnd Ending index of text selection
 * @private
 */
YAHOO.widget.AutoComplete.prototype._selectText =3D function(oTextbox, =
nStart, nEnd) {
    if (oTextbox.setSelectionRange) { // For Mozilla
        oTextbox.setSelectionRange(nStart,nEnd);
    }
    else if (oTextbox.createTextRange) { // For IE
        var oTextRange =3D oTextbox.createTextRange();
        oTextRange.moveStart("character", nStart);
        oTextRange.moveEnd("character", nEnd-oTextbox.value.length);
        oTextRange.select();
    }
    else {
        oTextbox.select();
    }
};

/**
 * Animates expansion or collapse of the container.
 *
 * @param {boolean} bShow True if container should be expanded, false if
 *                        container should be collapsed
 * @private
 */
YAHOO.widget.AutoComplete.prototype._toggleContainer =3D function(bShow) =
{
    var oContainer =3D this._oContainer;
    // Don't animate if it's already closed && !bShow
    if (!bShow && !this._bContainerOpen) {
        oContainer.style.display =3D "none";
        return;
    }

    var oContent =3D this._oContent;
    var oIFrame =3D this._oIFrame;
    // Make the iframe used in the ie trick the same dimension as the =
content
    if (bShow && oContent && oIFrame) {
        var sDisplay =3D oContainer.style.display;
        oContainer.style.display =3D "block";
        oIFrame.style.width =3D oContent.offsetWidth+"px";
        oIFrame.style.height =3D oContent.offsetHeight+"px";
        oIFrame.style.marginTop =3D "-"+oContent.offsetHeight+"px";
        oContainer.style.display =3D sDisplay;
    }

    // If animation is enabled...
    var oAnim =3D this._oAnim;
    if (oAnim && oAnim.getEl() && (this.animHoriz || this.animVert)) {
        if(oAnim.isAnimated()) {
            oAnim.stop();
        }

        // Clone container to grab current size offscreen
        var oClone =3D oContainer.cloneNode(true);
        oContainer.parentNode.appendChild(oClone);
        oClone.style.top =3D "-9000px";
        oClone.style.display =3D "block";

        // Current size of the container is the EXPANDED size
        var wExp =3D oClone.offsetWidth;
        var hExp =3D oClone.offsetHeight;

        // Calculate COLLAPSED sizes based on horiz and vert anim
        var wColl =3D (this.animHoriz) ? 0 : wExp;
        var hColl =3D (this.animVert) ? 0 : hExp;

        // Set animation sizes
        oAnim.attributes =3D (bShow) ?
            {width: { to: wExp }, height: { to: hExp }} :
            {width: { to: wColl}, height: { to: hColl }};

        // If opening anew, set to a collapsed size...
        if(bShow && !this._bContainerOpen) {
            oContainer.style.width =3D wColl+"px";
            oContainer.style.height =3D hColl+"px";
        }
        // Else, set it to its last known size.
        else {
            oContainer.style.width =3D wExp+"px";
            oContainer.style.height =3D hExp+"px";
        }

        oContainer.parentNode.removeChild(oClone);
        oClone =3D null;

    	var oSelf =3D this;
    	var onAnimComplete =3D function() {
            // Finish the collapse
    		if(!bShow) {
                oContainer.style.display =3D "none";
    		}
    		oAnim.onComplete.unsubscribeAll();

            // Call event on expand/collapse (overridden by client)
            if(bShow) {
                oSelf.containerExpandEvent.fire(oSelf);
                //YAHOO.log(oSelf.getName() + " container expanded");
            }
            else {
                oSelf.containerCollapseEvent.fire(oSelf);
                //YAHOO.log(oSelf.getName() + " container collapsed");
            }
     	};

        // Display container and animate it
        oContainer.style.display =3D "block";
        oAnim.onComplete.subscribe(onAnimComplete);
        oAnim.animate();
        this._bContainerOpen =3D bShow;
    }
    // Else don't animate, just show or hide
    else {
        this._bContainerOpen =3D bShow;
        oContainer.style.display =3D (bShow) ? "block" : "none";

        // Call event on expand/collapse (overriden by client)
        if(bShow) {
            this.containerExpandEvent.fire(this);
            //YAHOO.log(this.getName() + " container expanded");
        }
        else {
            this.containerCollapseEvent.fire(this);
            //YAHOO.log(this.getName() + " container collapsed");
        }
    }
};

/**
 * Toggles the highlight on or off for an item in the container, and =
also cleans
 * up highlighting of any previous item.
 *
 * @param {object} oNewItem New The &lt;li&gt; element item to receive =
highlight
 *                              behavior
 * @param {string} sType "mouseover" will toggle highlight on, and =
"mouseout"
 *                       will toggle highlight off.
 * @private
 */
YAHOO.widget.AutoComplete.prototype._toggleHighlight =3D =
function(oNewItem, sType) {
    oNewItem.className =3D =
oNewItem.className.replace(this.highlightClassName,"");

    if(this._oCurItem) {
        this._oCurItem.className =3D
            =
this._oCurItem.className.replace(this.highlightClassName,"");
    }

    if(sType =3D=3D 'mouseover') {
        oNewItem.className +=3D " " + this.highlightClassName;
        this._oCurItem =3D oNewItem;
    }
};

/**
 * Updates the text input box value with selected query result. If a =
delimiter
 * has been defined, then the value gets appended with the delimiter.
 *
 * @param {object} oItem The &lt;li&gt; element item with which to =
update the value
 * @private
 */
YAHOO.widget.AutoComplete.prototype._updateValue =3D function(oItem) {
    var oTextbox =3D this._oTextbox;
    var sDelimChar =3D (this.delimChar) ? this.delimChar[0] : null;
    var sSavedQuery =3D this._sSavedQuery;
    var sResultKey =3D oItem._sResultKey;
    oTextbox.focus();

    // First clear text field
    oTextbox.value =3D "";
    // Grab data to put into text field
    if(sDelimChar) {
        if(sSavedQuery) {
            oTextbox.value =3D sSavedQuery;
        }
        oTextbox.value +=3D sResultKey + sDelimChar;
        if(sDelimChar !=3D " ") {
            oTextbox.value +=3D " ";
        }
    }
    else { oTextbox.value =3D sResultKey; }

    // scroll to bottom of textarea if necessary
    if(oTextbox.type =3D=3D "textarea") {
        oTextbox.scrollTop =3D oTextbox.scrollHeight;
    }
    // move cursor to end
    var end =3D oTextbox.value.length;
    this._selectText(oTextbox,end,end);

    this._oCurItem =3D oItem;
};

/**
 * Selects a result item from the container
 *
 * @param {object} oItem The selected &lt;li&gt; element item
 * @private
 */
YAHOO.widget.AutoComplete.prototype._selectItem =3D function(oItem) {
    this._bItemSelected =3D true;
    this._updateValue(oItem);
    this.itemSelectEvent.fire(this, oItem);
    //YAHOO.log(this.getName() + " selected item " + oItem.id);
    this._clearList();
};

/**
 * For values updated by type-ahead, the right arrow key jumps to the =
end
 * of the textbox, otherwise the container is closed.
 *
 * @private
 */
YAHOO.widget.AutoComplete.prototype._jumpSelection =3D function() {
    if(!this.typeAhead) {
        return;
    }
    else {
        this._clearList();
    }
};

/**
 * Triggered by up and down arrow keys, changes the current highlighted
 * &lt;li&gt; element item. Scrolls container if necessary.
 *
 * @param {number} nKeyCode Code of key pressed
 * @private
 */
YAHOO.widget.AutoComplete.prototype._moveSelection =3D =
function(nKeyCode) {
    if(this._bContainerOpen) {
        // determine current item's id number
        var oCurItem =3D this._oCurItem;
        var nCurItemIndex =3D -1;

        if (oCurItem) {
            nCurItemIndex =3D oCurItem._nItemIndex;
        }

        var nNewItemIndex =3D (nKeyCode =3D=3D 40) ?
                (nCurItemIndex + 1) : (nCurItemIndex - 1);

        // out of bounds
        if (nNewItemIndex < -2 || nNewItemIndex >=3D =
this._nDisplayedItems) {
            return;
        }

        if (oCurItem) {
            // Unhighlight current item
            this._toggleHighlight(oCurItem, 'mouseout');
            this.itemArrowFromEvent.fire(this, oCurItem);
            //YAHOO.log(this.getName() + " arrowed from " + =
oCurItem.id);

        }
        if (nNewItemIndex =3D=3D -1) {
           // go back to query (remove type-ahead string)
            if(this.delimChar && this._sSavedQuery) {
                if (!this._textMatchesOption()) {
                    this._oTextbox.value =3D this._sSavedQuery;
                }
                else {
                    this._oTextbox.value =3D this._sSavedQuery + =
this._sCurQuery;
                }
            }
            else {
                this._oTextbox.value =3D this._sCurQuery;
            }
            this._oCurItem =3D null;
            return;
        }
        if (nNewItemIndex =3D=3D -2) {
            // close container
            this._clearList();
            return;
        }

        var oNewItem =3D document.getElementById(this._sName + "item" + =
nNewItemIndex);

        // Scroll the container if necessary
        if((YAHOO.util.Dom.getStyle(this._oContainer,"overflow") =3D=3D =
"auto") &&
        (nNewItemIndex > -1) && (nNewItemIndex < this._nDisplayedItems)) =
{
            // User is keying down
            if(nKeyCode =3D=3D 40) {
                // Bottom of selected item is below scroll area...
                if((oNewItem.offsetTop+oNewItem.offsetHeight) > =
(this._oContainer.scrollTop + this._oContainer.offsetHeight)) {
                    // Set bottom of scroll area to bottom of selected =
item
                    this._oContainer.scrollTop =3D =
(oNewItem.offsetTop+oNewItem.offsetHeight) - =
this._oContainer.offsetHeight;
                }
                // Bottom of selected item is above scroll area...
                else if((oNewItem.offsetTop+oNewItem.offsetHeight) < =
this._oContainer.scrollTop) {
                    // Set top of selected item to top of scroll area
                    this._oContainer.scrollTop =3D oNewItem.offsetTop;

                }
            }
            // User is keying up
            else {
                // Top of selected item is above scroll area
                if(oNewItem.offsetTop < this._oContainer.scrollTop) {
                    // Set top of scroll area to top of selected item
                    this._oContainer.scrollTop =3D oNewItem.offsetTop;
                }
                // Top of selected item is below scroll area
                else if(oNewItem.offsetTop > (this._oContainer.scrollTop =
+ this._oContainer.offsetHeight)) {
                    // Set bottom of selected item to bottom of scroll =
area
                    this._oContainer.scrollTop =3D =
(oNewItem.offsetTop+oNewItem.offsetHeight) - =
this._oContainer.offsetHeight;
                }
            }
        }

        this._toggleHighlight(oNewItem, 'mouseover');
        this.itemArrowToEvent.fire(this, oNewItem);
        //YAHOO.log(this.getName() + " arrowed to " + oNewItem.id);
        if(this.typeAhead) {
            this._updateValue(oNewItem);
        }
    }
};

/************************************************************************=
****/
/************************************************************************=
****/
/************************************************************************=
****/

/**
 * Class providing encapsulation of a data source.
 *
 * @constructor
 *
 */
YAHOO.widget.DataSource =3D function() {
    /* abstract class */
};


/************************************************************************=
***
 * Public constants
 =
*************************************************************************=
**/
/**
 * Error message for null data responses.
 *
 * @type constant
 * @final
 */
YAHOO.widget.DataSource.prototype.ERROR_DATANULL =3D "Response data was =
null";

/**
 * Error message for data responses with parsing errors.
 *
 * @type constant
 * @final
 */
YAHOO.widget.DataSource.prototype.ERROR_DATAPARSE =3D "Response data =
could not be parsed";


/************************************************************************=
***
 * Public member variables
 =
*************************************************************************=
**/
/**
 * Max size of the local cache.  Set to 0 to turn off caching.  Caching =
is
 * useful to reduce the number of server connections.  Recommended only =
for data
 * sources that return comprehensive results for queries or when stale =
data is
 * not an issue. Default: 15.
 *
 * @type number
 */
YAHOO.widget.DataSource.prototype.maxCacheEntries =3D 15;

/**
 * Use this to equate cache matching with the type of matching done by =
your live
 * data source. If caching is on and queryMatchContains is true, the =
cache
 * returns results that "contain" the query string. By default,
 * queryMatchContains is set to false, meaning the cache only returns =
results
 * that "start with" the query string. Default: false.
 *
 * @type boolean
 */
YAHOO.widget.DataSource.prototype.queryMatchContains =3D false;

/**
 * Data source query subset matching. If caching is on and =
queryMatchSubset is
 * true, substrings of queries will return matching cached results. For
 * instance, if the first query is for "abc" susequent queries that =
start with
 * "abc", like "abcd", will be queried against the cache, and not the =
live data
 * source. Recommended only for data sources that return comprehensive =
results
 * for queries with very few characters. Default: false.
 *
 * @type boolean
 */
YAHOO.widget.DataSource.prototype.queryMatchSubset =3D false;

/**
 * Data source query case-sensitivity matching. If caching is on and
 * queryMatchCase is true, queries will only return results for =
case-sensitive
 * matches. Default: false.
 *
 * @type boolean
 */
YAHOO.widget.DataSource.prototype.queryMatchCase =3D false;


/************************************************************************=
***
 * Public methods
 =
*************************************************************************=
**/
/**
 * Retrieves query results, first checking the local cache, then making =
the
 * query request to the live data source as defined by the function =
doQuery.
 *
 * @param {object} oCallbackFn Callback function defined by oParent =
object to
 *                             which to return results
 * @param {string} sQuery Query string
 * @param {object} oParent The object instance that has requested data
 */
YAHOO.widget.DataSource.prototype.getResults =3D function(oCallbackFn, =
sQuery, oParent) {

    // First look in cache
    var aResults =3D this._doQueryCache(oCallbackFn,sQuery,oParent);

    // Not in cache, so get results from server
    if(aResults.length =3D=3D=3D 0) {
        this.queryEvent.fire(this, oParent, sQuery);
        //YAHOO.log("Data source for " + oParent.getName() + " made =
source query for '" + sQuery + "'.");
        this.doQuery(oCallbackFn, sQuery, oParent);
    }
};

/**
 * Abstract method implemented by subclasses to make a query to the live =
data
 * source. Must call the callback function with the response returned =
from the
 * query. Populates cache (if enabled).
 *
 * @param {object} oCallbackFn Callback function implemented by oParent =
to
 *                             which to return results
 * @param {string} sQuery Query string
 * @param {object} oParent The object instance that has requested data
 */
YAHOO.widget.DataSource.prototype.doQuery =3D function(oCallbackFn, =
sQuery, oParent) {
    /* override this */
};

/**
 * Flushes cache.
 */
YAHOO.widget.DataSource.prototype.flushCache =3D function() {
    if(this._aCache) {
        this._aCache =3D [];
    }
    if(this._aCacheHelper) {
        this._aCacheHelper =3D [];
    }
    this.cacheFlushEvent.fire(this);
    //YAHOO.log("Cache flushed");
};

/************************************************************************=
***
 * Events
 =
*************************************************************************=
**/
/**
 * Fired when a query is made to the live data source. Subscribers =
receive the
 * following array:<br>
 *     - args[0] The data source instance
 *     - args[1] The requesting object
 *     - args[2] The query string
 */
YAHOO.widget.DataSource.prototype.queryEvent =3D null;

/**
 * Fired when a query is made to the local cache. Subscribers receive =
the
 * following array:<br>
 *     - args[0] The data source instance
 *     - args[1] The requesting object
 *     - args[2] The query string
 */
YAHOO.widget.DataSource.prototype.cacheQueryEvent =3D null;

/**
 * Fired when data is retrieved from the live data source. Subscribers =
receive
 * the following array:<br>
 *     - args[0] The data source instance
 *     - args[1] The requesting object
 *     - args[2] The query string
 *     - args[3] Array of result objects
 */
YAHOO.widget.DataSource.prototype.getResultsEvent =3D null;

/**
 * Fired when data is retrieved from the local cache. Subscribers =
receive the
 * following array :<br>
 *     - args[0] The data source instance
 *     - args[1] The requesting object
 *     - args[2] The query string
 *     - args[3] Array of result objects
 */
YAHOO.widget.DataSource.prototype.getCachedResultsEvent =3D null;

/**
 * Fired when an error is encountered with the live data source. =
Subscribers
 * receive the following array:<br>
 *     - args[0] The data source instance
 *     - args[1] The requesting object
 *     - args[2] The query string
 *     - args[3] Error message string
 */
YAHOO.widget.DataSource.prototype.dataErrorEvent =3D null;

/**
 * Fired when the local cache is flushed. Subscribers receive the =
following
 * array :<br>
 *     - args[0] The data source instance
 */
YAHOO.widget.DataSource.prototype.cacheFlushEvent =3D null;

/************************************************************************=
***
 * Private member variables
 =
*************************************************************************=
**/
/**
 * Local cache of data result objects indexed chronologically.
 *
 * @type array
 * @private
 */
YAHOO.widget.DataSource.prototype._aCache =3D null;


/************************************************************************=
***
 * Private methods
 =
*************************************************************************=
**/
/**
 * Initializes data source instance.
 *
 * @private
 */
YAHOO.widget.DataSource.prototype._init =3D function() {
    // Validate and initialize public configs
    var maxCacheEntries =3D this.maxCacheEntries;
    if(isNaN(maxCacheEntries) || (maxCacheEntries < 0)) {
        maxCacheEntries =3D 0;
    }
    // Initialize local cache
    if(maxCacheEntries > 0 && !this._aCache) {
        this._aCache =3D [];
    }

    this.queryEvent =3D new YAHOO.util.CustomEvent("query", this);
    this.cacheQueryEvent =3D new YAHOO.util.CustomEvent("cacheQuery", =
this);
    this.getResultsEvent =3D new YAHOO.util.CustomEvent("getResults", =
this);
    this.getCachedResultsEvent =3D new =
YAHOO.util.CustomEvent("getCachedResults", this);
    this.dataErrorEvent =3D new YAHOO.util.CustomEvent("dataError", =
this);
    this.cacheFlushEvent =3D new YAHOO.util.CustomEvent("cacheFlush", =
this);
};

/**
 * Adds a result object to the local cache, evicting the oldest element =
if the
 * cache is full. Newer items will have higher indexes, the oldest item =
will have
 * index of 0.
 *
 * @param {object} resultObj  Object literal of data results, including =
internal
 *                            properties and an array of result objects
 * @private
 */
YAHOO.widget.DataSource.prototype._addCacheElem =3D function(resultObj) =
{
    var aCache =3D this._aCache;
    // Don't add if anything important is missing.
    if(!aCache || !resultObj || !resultObj.query || !resultObj.results) =
{
        return;
    }

    // If the cache is full, make room by removing from index=3D0
    if(aCache.length >=3D this.maxCacheEntries) {
        aCache.shift();
    }

    // Add to cache, at the end of the array
    aCache.push(resultObj);
};

/**
 * Queries the local cache for results. If query has been cached, the =
callback
 * function is called with the results, and the cached is refreshed so =
that it
 * is now the newest element.
 *
 * @param {object} oCallbackFn Callback function defined by oParent =
object to
 *                             which to return results
 * @param {string} sQuery Query string
 * @param {object} oParent The object instance that has requested data
 * @return {array} aResults Result object from local cache if found, =
otherwise
 *                          null
 * @private
 */
YAHOO.widget.DataSource.prototype._doQueryCache =3D =
function(oCallbackFn, sQuery, oParent) {
    var aResults =3D [];
    var bMatchFound =3D false;
    var aCache =3D this._aCache;
    var nCacheLength =3D (aCache) ? aCache.length : 0;
    var bMatchContains =3D this.queryMatchContains;

    // If cache is enabled...
    if((this.maxCacheEntries > 0) && aCache && (nCacheLength > 0)) {
        this.cacheQueryEvent.fire(this, oParent, sQuery);
        //YAHOO.log("Data source for " + oParent.getName() + " made =
cache query for '" + sQuery + "'.");
        // If case is unimportant, normalize query now instead of in =
loops
        if(!this.queryMatchCase) {
            var sOrigQuery =3D sQuery;
            sQuery =3D sQuery.toLowerCase();
        }

        // Loop through each cached element's query property...
        for(var i =3D nCacheLength-1; i >=3D 0; i--) {
            var resultObj =3D aCache[i];
            var aAllResultItems =3D resultObj.results;
            // If case is unimportant, normalize match key for =
comparison
            var matchKey =3D (!this.queryMatchCase) ?
                encodeURI(resultObj.query.toLowerCase()):
                encodeURI(resultObj.query);

            // If a cached match key exactly matches the query...
            if(matchKey =3D=3D sQuery) {
                    // Stash all result objects into aResult[] and stop =
looping through the cache.
                    bMatchFound =3D true;
                    aResults =3D aAllResultItems;

                    // The matching cache element was not the most =
recent,
                    // so now we need to refresh the cache.
                    if(i !=3D nCacheLength-1) {
                        // Remove element from its original location
                        aCache.splice(i,1);
                        // Add element as newest
                        this._addCacheElem(resultObj);
                    }
                    break;
            }
            // Else if this query is not an exact match and subset =
matching is enabled...
            else if(this.queryMatchSubset) {
                // Loop through substrings of each cached element's =
query property...
                for(var j =3D sQuery.length-1; j >=3D 0 ; j--) {
                    var subQuery =3D sQuery.substr(0,j);

                    // If a substring of a cached sQuery exactly matches =
the query...
                    if(matchKey =3D=3D subQuery) {
                        bMatchFound =3D true;

                        // Go through each cached result object to match =
against the query...
                        for(var k =3D aAllResultItems.length-1; k >=3D =
0; k--) {
                            var aRecord =3D aAllResultItems[k];
                            var sKeyIndex =3D (this.queryMatchCase) ?
                                encodeURI(aRecord[0]).indexOf(sQuery):
                                =
encodeURI(aRecord[0]).toLowerCase().indexOf(sQuery);

                            // A STARTSWITH match is when the query is =
found at the beginning of the key string...
                            if((!bMatchContains && (sKeyIndex =3D=3D=3D =
0)) ||
                            // A CONTAINS match is when the query is =
found anywhere within the key string...
                            (bMatchContains && (sKeyIndex > -1))) {
                                // Stash a match into aResults[].
                                aResults.unshift(aRecord);
                            }
                        }

                        // Add the subset match result set object as the =
newest element to cache,
                        // and stop looping through the cache.
                        resultObj =3D {};
                        resultObj.query =3D sQuery;
                        resultObj.results =3D aResults;
                        this._addCacheElem(resultObj);
                        break;
                    }
                }
                if(bMatchFound) {
                    break;
                }
            }
        }

        // If there was a match, send along the results.
        if(bMatchFound) {
            this.getCachedResultsEvent.fire(this, oParent, sOrigQuery, =
aResults);
            //YAHOO.log("Data source for " + oParent.getName() + " got " =
+ aResults.length + " results from cache.");
            oCallbackFn(sOrigQuery, aResults, oParent);
        }
    }
    return aResults;
};


/************************************************************************=
****/
/************************************************************************=
****/
/************************************************************************=
****/

/**
 * Implementation of YAHOO.widget.DataSource using XML HTTP requests =
that return
 * query results.
 * requires YAHOO.util.Connect XMLHTTPRequest library
 * extends YAHOO.widget.DataSource
 *
 * @constructor
 * @param {string} sScriptURI Absolute or relative URI to script that =
returns
 *                            query results as JSON, XML, or delimited =
flat data
 * @param {array} aSchema Data schema definition of results
 * @param {object} oConfigs Optional object literal of config params
 */
YAHOO.widget.DS_XHR =3D function(sScriptURI, aSchema, oConfigs) {
    // Set any config params passed in to override defaults
    if(typeof oConfigs =3D=3D "object") {
        for(var sConfig in oConfigs) {
            this[sConfig] =3D oConfigs[sConfig];
        }
    }

    // Initialization sequence
    if(!aSchema || (aSchema.constructor !=3D Array)) {
        //log this.ERROR_INIT
    }
    else {
        this.schema =3D aSchema;
    }
    this.scriptURI =3D sScriptURI;
    this._init();
};

YAHOO.widget.DS_XHR.prototype =3D new YAHOO.widget.DataSource();

/************************************************************************=
***
 * Public constants
 =
*************************************************************************=
**/
/**
 * JSON data type
 *
 * @type constant
 * @final
 */
YAHOO.widget.DS_XHR.prototype.TYPE_JSON =3D 0;

/**
 * XML data type
 *
 * @type constant
 * @final
 */
YAHOO.widget.DS_XHR.prototype.TYPE_XML =3D 1;

/**
 * Flat file data type
 *
 * @type constant
 * @final
 */
YAHOO.widget.DS_XHR.prototype.TYPE_FLAT =3D 2;

/**
 * Error message for XHR failure.
 *
 * @type constant
 * @final
 */
YAHOO.widget.DS_XHR.prototype.ERROR_DATAXHR =3D "XHR response failed";

/************************************************************************=
***
 * Public member variables
 =
*************************************************************************=
**/
/**
 * Absolute or relative URI to script that returns query results. For =
instance,
 * queries will be sent to
 *   <scriptURI>?<scriptQueryParam>=3Duserinput
 *
 * @type string
 */
YAHOO.widget.DS_XHR.prototype.scriptURI =3D null;

/**
 * Query string parameter name sent to scriptURI. For instance, queries =
will be
 * sent to
 *   <scriptURI>?<scriptQueryParam>=3Duserinput
 * Default: "query".
 *
 * @type string
 */
YAHOO.widget.DS_XHR.prototype.scriptQueryParam =3D "query";

/**
 * String of key/value pairs to append to requests made to scriptURI. =
Define
 * this string when you want to send additional query parameters to your =
script.
 * When defined, queries will be sent to
 *   <scriptURI>?<scriptQueryParam>=3Duserinput&<scriptQueryAppend>
 * Default: "".
 *
 * @type string
 */
YAHOO.widget.DS_XHR.prototype.scriptQueryAppend =3D "";

/**
 * XHR response data type. Other types that may be defined are TYPE_XML =
and
 * TYPE_FLAT. Default: TYPE_JSON.
 *
 * @type type
 */
YAHOO.widget.DS_XHR.prototype.responseType =3D =
YAHOO.widget.DS_XHR.prototype.TYPE_JSON;

/**
 * String after which to strip results. If the results from the XHR are =
sent
 * back as HTML, the gzip HTML comment appears at the end of the data =
and should
 * be ignored.  Default: "\n&lt;!--"
 *
 * @type string
 */
YAHOO.widget.DS_XHR.prototype.responseStripAfter =3D "\n<!--";

/************************************************************************=
***
 * Public methods
 =
*************************************************************************=
**/
/**
 * Queries the live data source defined by scriptURI for results. =
Results are
 * passed back to a callback function.
 *
 * @param {object} oCallbackFn Callback function defined by oParent =
object to
 *                             which to return results
 * @param {string} sQuery Query string
 * @param {object} oParent The object instance that has requested data
 */
YAHOO.widget.DS_XHR.prototype.doQuery =3D function(oCallbackFn, sQuery, =
oParent) {
    var isXML =3D (this.responseType =3D=3D this.TYPE_XML);
    var sUri =3D this.scriptURI+"?"+this.scriptQueryParam+"=3D"+sQuery;
    if(this.scriptQueryAppend.length > 0) {
        sUri +=3D "&" + this.scriptQueryAppend;
    }
    //YAHOO.log("Data source query URL is " + sUri);
    var oResponse =3D null;

    var oSelf =3D this;
    /**
     * Sets up ajax request callback
     *
     * @param {object} oReq          HTTPXMLRequest object
     * @private
     */
    var responseSuccess =3D function(oResp) {
        if(!isXML) {
            oResp =3D oResp.responseText;
        }
        else {
            oResp =3D oResp.responseXML;
        }
        if(oResp =3D=3D=3D null) {
            oSelf.dataErrorEvent.fire(oSelf, oParent, sQuery, =
oSelf.ERROR_DATANULL);
            //YAHOO.log("Data source for " + oParent.getName() +
            //    " experienced a data error for query \"" + sQuery +
            //    "\": " + oSelf.ERROR_DATANULL, "error");
            oCallbackFn(sQuery, null, oParent);
            return;
        }

        var resultObj =3D {};
        resultObj.query =3D decodeURI(sQuery);
        resultObj.results =3D oSelf.parseResponse(sQuery, oResp, =
oParent);
        oSelf._addCacheElem(resultObj);
        oCallbackFn(sQuery, resultObj.results, oParent);
    };

    var responseFailure =3D function(oResp) {
        oSelf.dataErrorEvent.fire(oSelf, oParent, sQuery, =
oSelf.ERROR_DATAXHR);
        //YAHOO.log("Data source for " + oParent.getName() +
        //        " experienced a data error for query \"" + sQuery +
        //        "\": " + oSelf.ERROR_DATAXHR, "error");
        oCallbackFn(sQuery, null, oParent);
        return;
    };

    var oCallback =3D {
        success:responseSuccess,
        failure:responseFailure
    };

    YAHOO.util.Connect.asyncRequest("GET", sUri, oCallback, null);
};

/**
 * Parses raw response data into an array of result objects. The result =
data key
 * is always stashed in the [0] element of each result object.
 *
 * @param {string} sQuery Query string
 * @param {object} oResponse The raw response data to parse
 * @param {object} oParent The object instance that has requested data
 * @returns {array} Array of result objects
 */
YAHOO.widget.DS_XHR.prototype.parseResponse =3D function(sQuery, =
oResponse, oParent) {
    var aSchema =3D this.schema;
    var aResults =3D [];
    var bError =3D false;

    // Strip out comment at the end of results
    var nEnd =3D ((this.responseStripAfter !=3D=3D "") && =
(oResponse.indexOf)) ?
        oResponse.indexOf(this.responseStripAfter) : -1;
    if(nEnd !=3D -1) {
        oResponse =3D oResponse.substring(0,nEnd);
    }

    switch (this.responseType) {
        case this.TYPE_JSON:
            if(window.JSON) {
                var jsonObjParsed =3D JSON.parse(oResponse);
                if(!jsonObjParsed) {
                    bError =3D true;
                    break;
                }
                else {
                    // eval is necessary here since aSchema[0] is of =
unknown depth
                    var jsonListParsed =3D eval("jsonObjParsed." + =
aSchema[0]);
                    for(var i =3D jsonListParsed.length-1; i >=3D 0 ; =
i--) {
                        // eval is necessary here since aSchema[1] is of =
unknown depth
                        jsonListParsed[i][0] =3D =
eval("jsonListParsed[i]." + aSchema[1]);
                        aResults[i] =3D jsonListParsed[i];
                    }
                    break;
                }
            }
            else {
                try {
                    // trim leading spaces
                    while (oResponse.substring(0,1) =3D=3D " ") {
                        oResponse =3D oResponse.substring(1, =
oResponse.length);
                    }

                    // zero response
                    if((oResponse.indexOf("{}") =3D=3D=3D 0) ||
                        (oResponse.indexOf("{") < 0)) {
                        break;
                    }

                    // eval is necessary here
                    var jsonObjRaw =3D eval('(' + oResponse + ')');

                    // eval is necessary here since aSchema[0] is of =
unknown depth
                    var jsonListRaw =3D eval("jsonObjRaw." + =
aSchema[0]);

                    for(var j =3D jsonListRaw.length-1; j >=3D 0 ; j--) =
{
                        // eval is probably not necessary here
                        //jsonListRaw[j][0] =3D eval("jsonListRaw[j]." + =
aSchema[1]);
                        jsonListRaw[j][0] =3D =
jsonListRaw[j][aSchema[1]];
                        aResults[j] =3D jsonListRaw[j];
                    }
                    break;
                }
                catch(e) {
                    bError =3D true;
                    break;
               }
            }
            break;
        case this.TYPE_XML:
           var xmlList =3D oResponse.getElementsByTagName(aSchema[0]);
             for(var k =3D xmlList.length-1; k >=3D 0 ; k--) {
                var result =3D xmlList.item(k);//doLog(k+' is =
'+result.attributes.item(0).firstChild.nodeValue);
                var aFieldSet =3D [];
                for(var m =3D aSchema.length-1; m >=3D 1 ; m--) =
{//doLog(aSchema[m]+' is =
'+result.attributes.getNamedItem(aSchema[m]).firstChild.nodeValue);
                    var sValue =3D null;
                    // Capture each data value into an array
                    // Data may be held in an attribute...
                    var xmlAttr =3D =
result.attributes.getNamedItem(aSchema[m]);
                    if(xmlAttr) {
                        sValue =3D xmlAttr.value;//doLog('attr'+sValue);
                    }
                    // Or in a node...
                    else {
                        var xmlNode =3D =
result.getElementsByTagName(aSchema[m]);
                        if(xmlNode) {
                            sValue =3D =
xmlNode.item(0).firstChild.nodeValue;// doLog('node'+sValue);
                        }
                    }
                    aFieldSet.unshift(sValue);
                }
                aResults.unshift(aFieldSet);
            }
            break;
        case this.TYPE_FLAT:
            if(oResponse.length > 0) {
                // Delete the last line delimiter at the end of the data =
if it exists
                var newLength =3D oResponse.length-aSchema[0].length;
                if(oResponse.substr(newLength) =3D=3D aSchema[0]) {
                    oResponse =3D oResponse.substr(0, newLength);
                }
                var aRecords =3D oResponse.split(aSchema[0]);
                for(var n =3D aRecords.length-1; n >=3D 0; n--) {
                    aResults[n] =3D aRecords[n].split(aSchema[1]);
                }
            }
            break;
        default:
            break;
    }
    if(bError) {
        this.dataErrorEvent.fire(this, oParent, sQuery, =
this.ERROR_DATAPARSE);
        //YAHOO.log("Data source for " + oParent.getName() +
        //        " experienced a data error for query \"" + sQuery +
        //        "\": " + this.ERROR_DATAPARSE, "error");
        return null;
    }
    else {
        this.getResultsEvent.fire(this, oParent, sQuery, aResults);
        //YAHOO.log("Data source for " + oParent.getName() + " got " + =
aResults.length + " results from source.");
        return aResults;
    }
};


/************************************************************************=
***
 * Private member variables
 =
*************************************************************************=
**/
/**
 * XHR connection object.
 *
 * @type object
 * @private
 */
YAHOO.widget.DS_XHR.prototype._oConn =3D null;


/************************************************************************=
****/
/************************************************************************=
****/
/************************************************************************=
****/

/**
 * Implementation of YAHOO.widget.DataSource using a native Javascript =
struct as
 * its live data source.
 *
 * @constructor
 * extends YAHOO.widget.DataSource
 *
 * @param {string} oFunction In-memory Javascript function that returns =
query
 *                           results as an array of objects
 * @param {object} oConfigs Optional object literal of config params
 */
YAHOO.widget.DS_JSFunction =3D function(oFunction, oConfigs) {
    // Set any config params passed in to override defaults
    if(typeof oConfigs =3D=3D "object") {
        for(var sConfig in oConfigs) {
            this[sConfig] =3D oConfigs[sConfig];
        }
    }

    // Initialization sequence
    this.dataFunction =3D oFunction;
    this._init();
};

YAHOO.widget.DS_JSFunction.prototype =3D new YAHOO.widget.DataSource();

/************************************************************************=
***
 * Public member variables
 =
*************************************************************************=
**/
/**
 * In-memory Javascript function that returns query results.
 *
 * @type function
 */
YAHOO.widget.DS_JSFunction.prototype.dataFunction =3D null;


/************************************************************************=
***
 * Public methods
 =
*************************************************************************=
**/
/**
 * Queries the live data source defined by function for results. Results =
are
 * passed back to a callback function.
 *
 * @param {object} oCallbackFn Callback function defined by oParent =
object to
 *                             which to return results
 * @param {string} sQuery Query string
 * @param {object} oParent The object instance that has requested data
 */
YAHOO.widget.DS_JSFunction.prototype.doQuery =3D function(oCallbackFn, =
sQuery, oParent) {
    var oFunction =3D this.dataFunction;
    var aResults =3D [];

    aResults =3D oFunction(sQuery);
    if(aResults =3D=3D=3D null) {
        this.dataErrorEvent.fire(this, oParent, sQuery, =
this.ERROR_DATANULL);
        //YAHOO.log("Data source for " + oParent.getName() +
        //        " experienced a data error for query \"" + sQuery +
        //        "\": " + oSelf.ERROR_DATANULL, "error");
        oCallbackFn(sQuery, null, oParent);
        return;
    }

    var resultObj =3D {};
    resultObj.query =3D decodeURI(sQuery);
    resultObj.results =3D aResults;
    this._addCacheElem(resultObj);

    this.getResultsEvent.fire(this, oParent, sQuery, aResults);
    //YAHOO.log("Data source for " + oParent.getName() + " got " + =
aResults.length + " results from source.");
    oCallbackFn(sQuery, aResults, oParent);
    return;
};

/************************************************************************=
****/
/************************************************************************=
****/
/************************************************************************=
****/

/**
 * Implementation of YAHOO.widget.DataSource using a native Javascript =
array as
 * its live data source.
 *
 * @constructor
 * extends YAHOO.widget.DataSource
 *
 * @param {string} aData In-memory Javascript array of simple string =
data
 * @param {object} oConfigs Optional object literal of config params
 */
YAHOO.widget.DS_JSArray =3D function(aData, oConfigs) {
    // Set any config params passed in to override defaults
    if(typeof oConfigs =3D=3D "object") {
        for(var sConfig in oConfigs) {
            this[sConfig] =3D oConfigs[sConfig];
        }
    }

    // Initialization sequence
    this.data =3D aData;
    this._init();
};

YAHOO.widget.DS_JSArray.prototype =3D new YAHOO.widget.DataSource();

/************************************************************************=
***
 * Public member variables
 =
*************************************************************************=
**/
/**
 * In-memory Javascript array of strings.
 *
 * @type array
 */
YAHOO.widget.DS_JSArray.prototype.data =3D null;

/************************************************************************=
***
 * Public methods
 =
*************************************************************************=
**/
/**
 * Queries the live data source defined by data for results. Results are =
passed
 * back to a callback function.
 *
 * @param {object} oCallbackFn Callback function defined by oParent =
object to
 *                             which to return results
 * @param {string} sQuery Query string
 * @param {object} oParent The object instance that has requested data
 */
YAHOO.widget.DS_JSArray.prototype.doQuery =3D function(oCallbackFn, =
sQuery, oParent) {
    var aData =3D this.data;
    var aResults =3D [];
    var bMatchFound =3D false;
    var bMatchContains =3D this.queryMatchContains;
    if(!this.queryMatchCase) {
        sQuery =3D sQuery.toLowerCase();
    }

    // Loop through each element of the array...
    for(var i =3D aData.length-1; i >=3D 0; i--) {
        var aDataset =3D [];
        if(typeof aData[i] =3D=3D "string") {
            aDataset[0] =3D aData[i];
        }
        else {
            aDataset =3D aData[i];
        }

        var sKeyIndex =3D (this.queryMatchCase) ?
            encodeURI(aDataset[0]).indexOf(sQuery):
            encodeURI(aDataset[0]).toLowerCase().indexOf(sQuery);

        // A STARTSWITH match is when the query is found at the =
beginning of the key string...
        if((!bMatchContains && (sKeyIndex =3D=3D=3D 0)) ||
        // A CONTAINS match is when the query is found anywhere within =
the key string...
        (bMatchContains && (sKeyIndex > -1))) {
            // Stash a match into aResults[].
            aResults.unshift(aDataset);
        }
    }

    this.getResultsEvent.fire(this, oParent, sQuery, aResults);
    //YAHOO.log("Data source for " + oParent.getName() + " got " + =
aResults.length + " results from source.");
    oCallbackFn(sQuery, aResults, oParent);
};

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/yui/connection.js

/*=0A=
Copyright (c) 2006, Yahoo! Inc. All rights reserved.=0A=
Code licensed under the BSD License:=0A=
http://developer.yahoo.net/yui/license.txt=0A=
*/=0A=
=0A=
/**=0A=
 * The Connection Manager provides a simplified interface to the =
XMLHttpRequest=0A=
 * object.  It handles cross-browser instantiantion of XMLHttpRequest, =
negotiates the=0A=
 * interactive states and server response, returning the results to a =
pre-defined=0A=
 * callback you create.=0A=
 * @ class=0A=
 */=0A=
YAHOO.util.Connect =3D=0A=
{=0A=
  /**=0A=
   * Array of MSFT ActiveX ids for XMLHttpRequest.=0A=
   * @private=0A=
   * @type array=0A=
   */=0A=
	_msxml_progid:[=0A=
		'MSXML2.XMLHTTP.5.0',=0A=
		'MSXML2.XMLHTTP.4.0',=0A=
		'MSXML2.XMLHTTP.3.0',=0A=
		'MSXML2.XMLHTTP',=0A=
		'Microsoft.XMLHTTP'=0A=
		],=0A=
=0A=
  /**=0A=
   * Array of HTTP header(s)=0A=
   * @private=0A=
   * @type array=0A=
   */=0A=
	_http_header:{},=0A=
=0A=
  /**=0A=
   * Determines if HTTP headers are set.=0A=
   * @private=0A=
   * @type boolean=0A=
   */=0A=
	_has_http_headers:false,=0A=
=0A=
 /**=0A=
  * Property modified by setForm() to determine if the data=0A=
  * should be submitted as an HTML form.=0A=
  * @private=0A=
  * @type boolean=0A=
  */=0A=
	_isFormSubmit:false,=0A=
=0A=
 /**=0A=
  * Property modified by setForm() to set the HTML form data=0A=
  * for each transaction.=0A=
  * @private=0A=
  * @type string=0A=
  */=0A=
	_sFormData:null,=0A=
=0A=
 /**=0A=
  * Collection of polling references to the polling mechanism in =
handleReadyState.=0A=
  * @private=0A=
  * @type string=0A=
  */=0A=
	_poll:[],=0A=
=0A=
  /**=0A=
   * The polling frequency, in milliseconds, for HandleReadyState.=0A=
   * when attempting to determine a transaction's XHR  readyState.=0A=
   * The default is 50 milliseconds.=0A=
   * @private=0A=
   * @type int=0A=
   */=0A=
	_polling_interval:50,=0A=
=0A=
  /**=0A=
   * A transaction counter that increments the transaction id for each =
transaction.=0A=
   * @private=0A=
   * @type int=0A=
   */=0A=
	_transaction_id:0,=0A=
=0A=
  /**=0A=
   * Member to add an ActiveX id to the existing xml_progid array.=0A=
   * In the event(unlikely) a new ActiveX id is introduced, it can be =
added=0A=
   * without internal code modifications.=0A=
   * @public=0A=
   * @param string id The ActiveX id to be added to initialize the XHR =
object.=0A=
   * @return void=0A=
   */=0A=
	setProgId:function(id)=0A=
	{=0A=
		this.msxml_progid.unshift(id);=0A=
	},=0A=
=0A=
  /**=0A=
   * Member to modify the default polling interval.=0A=
   * @public=0A=
   * @param {int} i The polling interval in milliseconds.=0A=
   * @return void=0A=
   */=0A=
	setPollingInterval:function(i)=0A=
	{=0A=
		if(typeof i =3D=3D 'number' && isFinite(i)){=0A=
			this._polling_interval =3D i;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * Instantiates a XMLHttpRequest object and returns an object with two =
properties:=0A=
   * the XMLHttpRequest instance and the transaction id.=0A=
   * @private=0A=
   * @param {int} transactionId Property containing the transaction id =
for this transaction.=0A=
   * @return connection object=0A=
   */=0A=
	createXhrObject:function(transactionId)=0A=
	{=0A=
		var obj,http;=0A=
		try=0A=
		{=0A=
			// Instantiates XMLHttpRequest in non-IE browsers and assigns to http.=0A=
			http =3D new XMLHttpRequest();=0A=
			//  Object literal with http and tId properties=0A=
			obj =3D { conn:http, tId:transactionId };=0A=
		}=0A=
		catch(e)=0A=
		{=0A=
			for(var i=3D0; i<this._msxml_progid.length; ++i){=0A=
				try=0A=
				{=0A=
					// Instantiates XMLHttpRequest for IE and assign to http.=0A=
					http =3D new ActiveXObject(this._msxml_progid[i]);=0A=
					if(http){=0A=
					//  Object literal with http and tId properties=0A=
						obj =3D { conn:http, tId:transactionId };=0A=
						break;=0A=
					}=0A=
				}=0A=
				catch(e){}=0A=
			}=0A=
		}=0A=
		finally=0A=
		{=0A=
			return obj;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * This method is called by asyncRequest to create a=0A=
   * valid connection object for the transaction.  It also passes a=0A=
   * transaction id and increments the transaction id counter.=0A=
   * @private=0A=
   * @return object=0A=
   */=0A=
	getConnectionObject:function()=0A=
	{=0A=
		var o;=0A=
		var tId =3D this._transaction_id;=0A=
=0A=
		try=0A=
		{=0A=
			o =3D this.createXhrObject(tId);=0A=
			if(o){=0A=
				this._transaction_id++;=0A=
			}=0A=
		}=0A=
		catch(e){}=0A=
		finally=0A=
		{=0A=
			return o;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * Method for initiating an asynchronous request via the XHR object.=0A=
   * @public=0A=
   * @param {string} method HTTP transaction method=0A=
   * @param {string} uri Fully qualified path of resource=0A=
   * @param callback User-defined callback function or object=0A=
   * @param {string} postData POST body=0A=
   * @return {object} Returns the connection object=0A=
   */=0A=
	asyncRequest:function(method, uri, callback, postData)=0A=
	{=0A=
		var o =3D this.getConnectionObject();=0A=
=0A=
		if(!o){=0A=
			return null;=0A=
		}=0A=
		else{=0A=
			if(this._isFormSubmit){=0A=
				//If the specified HTTP method is GET, setForm() will return an=0A=
				//encoded string that is concatenated to the uri to=0A=
				//create a querystring.=0A=
				if(method =3D=3D 'GET'){=0A=
					uri +=3D "?" +  this._sFormData;=0A=
				}=0A=
				else if(method =3D=3D 'POST'){=0A=
					postData =3D  this._sFormData;=0A=
				}=0A=
				this._sFormData =3D '';=0A=
				this._isFormSubmit =3D false;=0A=
			}=0A=
=0A=
			o.conn.open(method, uri, true);=0A=
=0A=
			if(postData){=0A=
				this.initHeader('Content-Type','application/x-www-form-urlencoded');=0A=
			}=0A=
=0A=
			//Verify whether the transaction has any user-defined HTTP headers=0A=
			//and set them.=0A=
			if(this._has_http_headers){=0A=
				this.setHeader(o);=0A=
			}=0A=
=0A=
			this.handleReadyState(o, callback);=0A=
			postData?o.conn.send(postData):o.conn.send(null);=0A=
=0A=
			return o;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * This method serves as a timer that polls the XHR object's readyState=0A=
   * property during a transaction, instead of binding a callback to the=0A=
   * onreadystatechange event.  Upon readyState 4, =
handleTransactionResponse=0A=
   * will process the response, and the timer will be cleared.=0A=
   *=0A=
   * @private=0A=
   * @param {object} o The connection object=0A=
   * @param callback User-defined callback object=0A=
   * @return void=0A=
   */=0A=
	handleReadyState:function(o, callback)=0A=
	{=0A=
		var oConn =3D this;=0A=
		try=0A=
		{=0A=
			this._poll[o.tId] =3D window.setInterval(=0A=
				function(){=0A=
					if(o.conn && o.conn.readyState =3D=3D 4){=0A=
						window.clearInterval(oConn._poll[o.tId]);=0A=
						oConn._poll.splice(o.tId);=0A=
						oConn.handleTransactionResponse(o, callback);=0A=
					}=0A=
				}=0A=
			,this._polling_interval);=0A=
		}=0A=
		catch(e)=0A=
		{=0A=
			window.clearInterval(oConn._poll[o.tId]);=0A=
			oConn._poll.splice(o.tId);=0A=
			oConn.handleTransactionResponse(o, callback);=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * This method attempts to interpret the server response and=0A=
   * determine whether the transaction was successful, or if an error or=0A=
   * exception was encountered.=0A=
   *=0A=
   * @private=0A=
   * @param {object} o The connection object=0A=
   * @param {function} callback - User-defined callback object=0A=
   * @return void=0A=
   */=0A=
	handleTransactionResponse:function(o, callback)=0A=
	{=0A=
		// If no valid callback is provided, then do not process any callback =
handling.=0A=
		if(!callback){=0A=
			this.releaseObject(o);=0A=
			return;=0A=
		}=0A=
=0A=
		var httpStatus;=0A=
		var responseObject;=0A=
=0A=
		try=0A=
		{=0A=
			httpStatus =3D o.conn.status;=0A=
		}=0A=
		catch(e){=0A=
			// 13030 is the custom code to indicate the condition -- in =
Mozilla/FF --=0A=
			// when the o object's status and statusText properties are=0A=
			// unavailable, and a query attempt throws an exception.=0A=
			httpStatus =3D 13030;=0A=
		}=0A=
=0A=
		if(httpStatus >=3D 200 && httpStatus < 300){=0A=
			responseObject =3D this.createResponseObject(o, callback.argument);=0A=
			if(callback.success){=0A=
				if(!callback.scope){=0A=
					callback.success(responseObject);=0A=
				}=0A=
				else{=0A=
					// If a scope property is defined, the callback will be fired from=0A=
					// the context of the object.=0A=
					callback.success.apply(callback.scope, [responseObject]);=0A=
				}=0A=
			}=0A=
		}=0A=
		else{=0A=
			switch(httpStatus){=0A=
				// The following case labels are wininet.dll error codes that may be =
encountered.=0A=
				// Server timeout=0A=
				case 12002:=0A=
				// 12029 to 12031 correspond to dropped connections.=0A=
				case 12029:=0A=
				case 12030:=0A=
				case 12031:=0A=
				// Connection closed by server.=0A=
				case 12152:=0A=
				// See above comments for variable status.=0A=
				case 13030:=0A=
					responseObject =3D this.createExceptionObject(o, callback.argument);=0A=
					if(callback.failure){=0A=
						if(!callback.scope){=0A=
							callback.failure(responseObject);=0A=
						}=0A=
						else{=0A=
							callback.failure.apply(callback.scope,[responseObject]);=0A=
						}=0A=
					}=0A=
					break;=0A=
				default:=0A=
					responseObject =3D this.createResponseObject(o, callback.argument);=0A=
					if(callback.failure){=0A=
						if(!callback.scope){=0A=
							callback.failure(responseObject);=0A=
						}=0A=
						else{=0A=
							callback.failure.apply(callback.scope,[responseObject]);=0A=
						}=0A=
					}=0A=
			}=0A=
		}=0A=
=0A=
		this.releaseObject(o);=0A=
	},=0A=
=0A=
  /**=0A=
   * This method evaluates the server response, creates and returns the =
results via=0A=
   * its properties.  Success and failure cases will differ in the =
response=0A=
   * object's property values.=0A=
   * @private=0A=
   * @param {object} o The connection object=0A=
   * @param {} callbackArg User-defined argument or arguments to be =
passed to the callback=0A=
   * @return object=0A=
   */=0A=
	createResponseObject:function(o, callbackArg)=0A=
	{=0A=
		var obj =3D {};=0A=
		var headerObj =3D {};=0A=
=0A=
		try=0A=
		{=0A=
			var headerStr =3D o.conn.getAllResponseHeaders();=0A=
			var header =3D headerStr.split("\n");=0A=
			for(var i=3D0; i < header.length; i++){=0A=
				var delimitPos =3D header[i].indexOf(':');=0A=
				if(delimitPos !=3D -1){=0A=
					headerObj[header[i].substring(0,delimitPos)] =3D =
header[i].substring(delimitPos+1);=0A=
				}=0A=
			}=0A=
=0A=
			obj.tId =3D o.tId;=0A=
			obj.status =3D o.conn.status;=0A=
			obj.statusText =3D o.conn.statusText;=0A=
			obj.getResponseHeader =3D headerObj;=0A=
			obj.getAllResponseHeaders =3D headerStr;=0A=
			obj.responseText =3D o.conn.responseText;=0A=
			obj.responseXML =3D o.conn.responseXML;=0A=
			if(typeof callbackArg !=3D=3D undefined){=0A=
				obj.argument =3D callbackArg;=0A=
			}=0A=
		}=0A=
		catch(e){}=0A=
		finally=0A=
		{=0A=
			return obj;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * If a transaction cannot be completed due to dropped or closed =
connections,=0A=
   * there may be not be enough information to build a full response =
object.=0A=
   * The failure callback will be fired and this specific condition can =
be identified=0A=
   * by a status property value of 0.=0A=
   * @private=0A=
   * @param {int} tId Transaction Id=0A=
   * @param callbackArg The user-defined arguments=0A=
   * @return object=0A=
   */=0A=
	createExceptionObject:function(tId, callbackArg)=0A=
	{=0A=
		var COMM_CODE =3D 0;=0A=
		var COMM_ERROR =3D 'communication failure';=0A=
=0A=
		var obj =3D {};=0A=
=0A=
		obj.tId =3D tId;=0A=
		obj.status =3D COMM_CODE;=0A=
		obj.statusText =3D COMM_ERROR;=0A=
		if(callbackArg){=0A=
			obj.argument =3D callbackArg;=0A=
		}=0A=
=0A=
		return obj;=0A=
	},=0A=
=0A=
  /**=0A=
   * Public method that stores the custom HTTP headers for each =
transaction.=0A=
   * @public=0A=
   * @param {string} label The HTTP header label=0A=
   * @param {string} value The HTTP header value=0A=
   * @return void=0A=
   */=0A=
	initHeader:function(label,value)=0A=
	{=0A=
		if(this._http_header[label] =3D=3D=3D undefined){=0A=
			this._http_header[label] =3D value;=0A=
		}=0A=
		else{=0A=
			this._http_header[label] =3D  value + "," + this._http_header[label];=0A=
		}=0A=
=0A=
		this._has_http_headers =3D true;=0A=
	},=0A=
=0A=
  /**=0A=
   * Accessor that sets the HTTP headers for each transaction.=0A=
   * @private=0A=
   * @param {object} o The connection object for the transaction.=0A=
   * @return void=0A=
   */=0A=
	setHeader:function(o)=0A=
	{=0A=
		for(var prop in this._http_header){=0A=
			o.conn.setRequestHeader(prop, this._http_header[prop]);=0A=
		}=0A=
		delete this._http_header;=0A=
=0A=
		this._http_header =3D {};=0A=
		this._has_http_headers =3D false;=0A=
	},=0A=
=0A=
  /**=0A=
   * This method assembles the form label and value pairs and=0A=
   * constructs an encoded string.=0A=
   * asyncRequest() will automatically initialize the=0A=
   * transaction with a HTTP header Content-Type of=0A=
   * application/x-www-form-urlencoded.=0A=
   * @public=0A=
   * @param {string || object} form id or name attribute, or form object.=0A=
   * @return void=0A=
   */=0A=
	setForm:function(formId)=0A=
	{=0A=
		this._sFormData =3D '';=0A=
		if(typeof formId =3D=3D 'string'){=0A=
			// Determine if the argument is a form id or a form name.=0A=
			// Note form name usage is deprecated by supported=0A=
			// here for legacy reasons.=0A=
			var oForm =3D (document.getElementById(formId) || =
document.forms[formId] );=0A=
		}=0A=
		else if(typeof formId =3D=3D 'object'){=0A=
			var oForm =3D formId;=0A=
		}=0A=
		else{=0A=
			return;=0A=
		}=0A=
		var oElement, oName, oValue, oDisabled;=0A=
		var hasSubmit =3D false;=0A=
=0A=
		// Iterate over the form elements collection to construct the=0A=
		// label-value pairs.=0A=
		for (var i=3D0; i<oForm.elements.length; i++){=0A=
			oDisabled =3D oForm.elements[i].disabled;=0A=
			// If the name attribute is not populated, the form field's=0A=
			// value will not be submitted.=0A=
			if(oForm.elements[i].name !=3D ""){=0A=
				oElement =3D oForm.elements[i];=0A=
				oName =3D oForm.elements[i].name;=0A=
				oValue =3D oForm.elements[i].value;=0A=
			}=0A=
=0A=
			// Do not submit fields that are disabled.=0A=
			if(!oDisabled)=0A=
			{=0A=
				switch (oElement.type)=0A=
				{=0A=
					case 'select-one':=0A=
					case 'select-multiple':=0A=
						for(var j=3D0; j<oElement.options.length; j++){=0A=
							if(oElement.options[j].selected){=0A=
								this._sFormData +=3D encodeURIComponent(oName) + '=3D' + =
encodeURIComponent(oElement.options[j].value || =
oElement.options[j].text) + '&';=0A=
							}=0A=
						}=0A=
						break;=0A=
					case 'radio':=0A=
					case 'checkbox':=0A=
						if(oElement.checked){=0A=
							this._sFormData +=3D encodeURIComponent(oName) + '=3D' + =
encodeURIComponent(oValue) + '&';=0A=
						}=0A=
						break;=0A=
					case 'file':=0A=
					//	this._sFormData +=3D encodeURIComponent(oName) + '=3D' + =
encodeURIComponent(oValue) + '&';=0A=
					// stub case as XMLHttpRequest will only send the file path as a =
string.=0A=
					case undefined:=0A=
					// stub case for fieldset element which returns undefined.=0A=
					case 'reset':=0A=
					// stub case for input type reset button.=0A=
					case 'button':=0A=
					// stub case for input type button elements.=0A=
						break;=0A=
					case 'submit':=0A=
						if(hasSubmit =3D=3D false){=0A=
							this._sFormData +=3D encodeURIComponent(oName) + '=3D' + =
encodeURIComponent(oValue) + '&';=0A=
							hasSubmit =3D true;=0A=
						}=0A=
						break;=0A=
					default:=0A=
						this._sFormData +=3D encodeURIComponent(oName) + '=3D' + =
encodeURIComponent(oValue) + '&';=0A=
						break;=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		this._isFormSubmit =3D true;=0A=
		this._sFormData =3D this._sFormData.substr(0, this._sFormData.length - =
1);=0A=
	},=0A=
=0A=
  /**=0A=
   * Public method to terminate a transaction, if it has not reached =
readyState 4.=0A=
   * @public=0A=
   * @param {object} o The connection object returned by asyncRequest.=0A=
   * @return void=0A=
   */=0A=
	abort:function(o)=0A=
	{=0A=
		if(this.isCallInProgress(o)){=0A=
			window.clearInterval(this._poll[o.tId]);=0A=
			this._poll.splice(o.tId);=0A=
			o.conn.abort();=0A=
			this.releaseObject(o);=0A=
=0A=
			return true;=0A=
		}=0A=
		else{=0A=
			return false;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * Public method to check if the transaction is still being processed.=0A=
   * @public=0A=
   * @param {object} o The connection object returned by asyncRequest=0A=
   * @return boolean=0A=
   */=0A=
	isCallInProgress:function(o)=0A=
	{=0A=
		// if the XHR object assigned to the transaction has not been =
dereferenced,=0A=
		// then check its readyState status.  Otherwise, return false.=0A=
		if(o.conn){=0A=
			return o.conn.readyState !=3D 4 && o.conn.readyState !=3D 0;=0A=
		}=0A=
		else{=0A=
			//The XHR object has been destroyed.=0A=
			return false;=0A=
		}=0A=
	},=0A=
=0A=
  /**=0A=
   * Dereference the XHR instance and the connection object after the =
transaction is completed.=0A=
   * @private=0A=
   * @param {object} o The connection object=0A=
   * @return void=0A=
   */=0A=
	releaseObject:function(o)=0A=
	{=0A=
		//dereference the XHR instance.=0A=
		o.conn =3D null;=0A=
		//dereference the connection object.=0A=
		o =3D null;=0A=
	}=0A=
};=0A=

------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/twa.js

 var req;=0A=
 var panel;=0A=
 var firstname, lastname, personId, photoId, photoref, watchListDogId;=0A=
 var mode;=0A=
 var role, dog_id, parentSex;=0A=
 var countrySelectHtml;=0A=
 var currUserId;=0A=
=0A=
	function expand(articleId) {=0A=
		var article=3Ddocument.getElementById(articleId);=0A=
		if (article !=3D null) {=0A=
			if (article.style.display=3D=3D'none') {=0A=
				article.style.display=3D'';=0A=
			} else {=0A=
				article.style.display=3D'none';=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
  function deleteImage(imageId) {=0A=
		url =3D "ajax/deleteUndeleteImage.php?imageId=3D" + =
escape(imageId)+"&removed=3D1"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processDeleteImage;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processDeleteImage;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processDeleteImage() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
     		if (req.status =3D=3D 200) { // OK response=0A=
					panel.setBody("");=0A=
					panel.hide();=0A=
					el =3D document.getElementById("photo_"+photoId);=0A=
					p_el =3D el.parentNode;=0A=
					p_el.removeChild(el);=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	=0A=
  function undeleteImage(imageId) {=0A=
		url =3D "ajax/deleteUndeleteImage.php?imageId=3D" + =
escape(imageId)+"&removed=3D0"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processUndeleteImage;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processUndeleteImage;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processUndeleteImage() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("removeImage_"+photoId);=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';						=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	=0A=
	function unapproveImage(imageId) {=0A=
		url =3D "ajax/approveUnapproveImage.php?imageId=3D" + =
escape(imageId)+"&approved=3D0"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processUnapproveImage;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processUnapproveImage;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processUnapproveImage() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("unapproveImage_"+photoId);=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("approveImage_"+photoId);=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	function approveImage(imageId) {=0A=
		url =3D "ajax/approveUnapproveImage.php?imageId=3D" + =
escape(imageId)+"&approved=3D1"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processApproveImage;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processApproveImage;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processApproveImage() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("approveImage_"+photoId);=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("unapproveImage_"+photoId);=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
=0A=
	=0A=
	function lockPerson(personId) {=0A=
		url =3D "ajax/lockUnLockPerson.php?personId=3D" + =
escape(personId)+"&lock=3D1"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processLockPerson;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processLockPerson;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processLockPerson() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("lockPerson");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("unlockPerson");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
       		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	function unlockPerson(personId) {=0A=
		url =3D "ajax/lockUnLockPerson.php?personId=3D" + =
escape(personId)+"&lock=3D0"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processUnlockPerson;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processUnlockPerson;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processUnlockPerson() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("unlockPerson");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("lockPerson");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	=0A=
	function lockDog(dogId) {=0A=
		url =3D "ajax/lockUnLockDog.php?dogId=3D" + =
escape(dogId)+"&lock=3D1"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processLockDog;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processLockDog;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processLockDog() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("lockDog");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("unlockDog");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
       		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	function unlockDog(dogId) {=0A=
		url =3D "ajax/lockUnLockDog.php?dogId=3D" + =
escape(dogId)+"&lock=3D0"+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processUnlockDog;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processUnlockDog;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processUnlockDog() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("unlockDog");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("lockDog");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
=0A=
	function addToWatchList(userId, dogId) {=0A=
		url =3D "ajax/addToWatchList.php?userId=3D" + escape(userId) + =
"&dogId=3D" + escape(dogId)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processAddToWatchList;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processAddToWatchList;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processAddToWatchList() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				var el =3D document.getElementById("addWatchList");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
				el =3D document.getElementById("deleteWatchList");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';		=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	=0A=
	function deleteFromWatchList(userId, dogId) {=0A=
		watchListDogId =3D dogId; =0A=
		url =3D "ajax/deleteFromWatchList.php?userId=3D" + escape(userId) + =
"&dogId=3D" + escape(dogId)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processDeleteFromWatchList;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processDeleteFromWatchList;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processDeleteFromWatchList() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				// for watchlist.php=0A=
				var el =3D document.getElementById("dogId_"+watchListDogId);=0A=
				if (el !=3D null) {=0A=
					var p_el =3D el.parentNode;=0A=
					p_el.removeChild(el);=0A=
				}=0A=
				// for details.php=0A=
				el =3D document.getElementById("addWatchList");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'';=0A=
				el =3D document.getElementById("deleteWatchList");=0A=
				if (el !=3D null) =0A=
					el.style.display=3D'none';=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function startViewPersonChangeLog(personId) {=0A=
		url =3D "ajax/getPersonChangeLog.php?personId=3D" + =
escape(personId)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processGetChangeLog;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processGetChangeLog;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  }=0A=
=0A=
	function startViewChangeLog(dogId) {=0A=
		url =3D "ajax/getChangeLog.php?dogId=3D" + =
escape(dogId)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processGetChangeLog;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processGetChangeLog;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  	}=0A=
	=0A=
  	function processGetChangeLog() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				if (document.getElementById("hidechangelog") !=3D null) {					=0A=
					document.getElementById("hidechangelog").style.display=3D'';=0A=
				    var logArray =3D req.responseText.split(';');=0A=
					var html=3D"";=0A=
					if (logArray.length <=3D 1) {=0A=
						html =3D html + 'no changelog data';=0A=
					} else {=0A=
						for (var i=3D0;i<logArray.length-1;i++) {=0A=
							var logentryArray =3D logArray[i].split(',');=0A=
							html =3D html + '<p>date: ' + logentryArray[0]+'<br>'; =0A=
							html =3D html + 'changed by: <a =
href=3D"php_users/htdocs/profile.php?id=3D'+logentryArray[1]+'">'+logentr=
yArray[2]+'</a>';=0A=
							html =3D html + ' (IP address: ' + logentryArray[3] + ') </p>';=0A=
						}=0A=
					}=0A=
					=0A=
					document.getElementById("changelogdata").innerHTML =3D html;=0A=
				}=0A=
				if (document.getElementById("viewchangelog") !=3D null) {=0A=
					document.getElementById("viewchangelog").style.display=3D'none';=0A=
				}=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
=0A=
=0A=
=0A=
	//	=0A=
	// AJAX calls for calculating the ancestor loss=0A=
	//=0A=
=0A=
	function startAncestorLoss(gen,dId) {=0A=
		url =3D "ajax/calculateAncestorLoss.php?dogId=3D" + =
escape(dId)+"&gen=3D"+gen+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processAncestorLoss;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processAncestorLoss;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  	}=0A=
  	function processAncestorLoss() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				if (document.getElementById("ancestorloss") !=3D null) {=0A=
					document.getElementById("ancestorloss").innerHTML =3D =
req.responseText;=0A=
				}=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
=0A=
	function deletionForbiddenDialog(adminwebaddress, objects) {=0A=
		html =3D "<b>You do not have permission to delete "+objects+"!</b>";=0A=
		html+=3D"<br> <div style=3D'padding:10px'> Please contact the TWA =
Administrator (<b>"+adminwebaddress+"</b>) with your request for =
deletion.</div>";=0A=
		var handleOK =3D function() { =0A=
	    	this.hide(); =0A=
		}; =0A=
		mySimpleDialog =3D new YAHOO.widget.SimpleDialog("simpledlg", { =0A=
	    width:"400px",  =0A=
	    fixedcenter: true,  =0A=
	    constraintoviewport: true,  =0A=
	    underlay:"shadow", =0A=
	    close:true,  =0A=
	    visible:false,  =0A=
	    draggable:true,=0A=
			modal:true,=0A=
			effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.30}=0A=
			} ); =0A=
		mySimpleDialog.setHeader("Deletion not allowed!"); =0A=
		mySimpleDialog.setBody(html); =0A=
		=
mySimpleDialog.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN=
); =0A=
		var myButtons =3D [ { text:" OK ", handler:handleOK, isDefault:true } =
]; =0A=
		mySimpleDialog.cfg.queueProperty("buttons", myButtons); =0A=
		mySimpleDialog.render(document.body);=0A=
		mySimpleDialog.show();	=0A=
	}=0A=
=0A=
	function startSetPrimaryPhoto(phId, dId) {=0A=
		url =3D "ajax/setPrimaryPhoto.php?photoId=3D" + escape(phId)+ =
"&dogId=3D" + escape(dId)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processSetPrimaryPhoto;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processSetPrimaryPhoto;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  	}=0A=
=0A=
  	function processSetPrimaryPhoto() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				//alert(req.responseText);=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	function editSaveCopyright(phId) {=0A=
		var el =3D document.getElementsByName('copyright_'+phId)[0];=0A=
		var btn =3D document.getElementsByName('editSave_'+phId)[0];=0A=
		if (btn.value =3D=3D 'edit') {=0A=
			el.removeAttribute('readOnly');=0A=
			btn.value=3D'save';=0A=
		} else {=0A=
			el.setAttribute('readOnly','readOnly');=0A=
			var cr =3D el.value;=0A=
			startSaveCopyright(cr, phId);=0A=
			btn.value=3D'edit';=0A=
		}=0A=
	}=0A=
	=0A=
	function startSaveCopyright(cr_text,phId) {=0A=
		url =3D "ajax/saveCopyright.php?photoId=3D" + escape(phId)+ "&text=3D" =
+ escape(cr_text)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processSaveCopyright;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processSaveCopyright;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  	}=0A=
=0A=
  	function processSaveCopyright() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				//alert(req.responseText);=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
=0A=
	//	=0A=
	// AJAX calls for saving Photo PostedBy changes=0A=
	//=0A=
	function editSavePhotoPostedBy(phId) {=0A=
		var el =3D document.getElementsByName('postedBy_'+phId)[0];=0A=
		var btn =3D =
document.getElementsByName('editSavePhotoPostedBy_'+phId)[0];=0A=
		if (btn.value =3D=3D 'edit') {=0A=
			el.removeAttribute('readOnly');=0A=
			btn.value=3D'save';=0A=
		} else {=0A=
			el.setAttribute('readOnly','readOnly');=0A=
			var cr =3D el.value;=0A=
			startSavePhotoPostedBy(cr, phId);=0A=
			btn.value=3D'edit';=0A=
		}=0A=
	}=0A=
	function startSavePhotoPostedBy(cr_text,phId) {=0A=
		url =3D "ajax/savePhotoPostedBy.php?photoId=3D" + escape(phId)+ =
"&text=3D" + escape(cr_text)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processSavePhotoPostedBy;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processSavePhotoPostedBy;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  	}=0A=
  	function processSavePhotoPostedBy() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				//alert(req.responseText);=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
=0A=
	//	=0A=
	// AJAX calls for saving Photonotes changes=0A=
	//=0A=
	function editSavePhotonotes(phId) {=0A=
		var el =3D document.getElementsByName('photonotes_'+phId)[0];=0A=
		var btn =3D document.getElementsByName('editSavePhotonotes_'+phId)[0];=0A=
		if (btn.value =3D=3D 'edit') {=0A=
			el.removeAttribute('readOnly');=0A=
			btn.value=3D'save';=0A=
		} else {=0A=
			el.setAttribute('readOnly','readOnly');=0A=
			var cr =3D el.value;=0A=
			startSavePhotonotes(cr, phId);=0A=
			btn.value=3D'edit';=0A=
		}=0A=
	}=0A=
	function startSavePhotonotes(cr_text,phId) {=0A=
		url =3D "ajax/savePhotonotes.php?photoId=3D" + escape(phId)+ =
"&text=3D" + escape(cr_text)+"&rand=3D"+new Date().getTime();=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
			req =3D new XMLHttpRequest();=0A=
			req.onreadystatechange =3D processSavePhotonotes;=0A=
			try {=0A=
				req.open("GET", url, true);=0A=
				document.body.style.cursor=3D"wait";=0A=
			} catch (e) {=0A=
				alert(e);=0A=
			}=0A=
			req.send(null);=0A=
		} else if (window.ActiveXObject) { // IE=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
			if (req) {=0A=
				req.onreadystatechange =3D processSavePhotonotes;=0A=
				req.open("GET", url, true);=0A=
				req.send();=0A=
				document.body.style.cursor=3D"wait";=0A=
			}=0A=
		}=0A=
  	}=0A=
  	function processSavePhotonotes() {=0A=
    	if (req.readyState =3D=3D 4) { // Complete=0A=
    		document.body.style.cursor=3D"auto";=0A=
      		if (req.status =3D=3D 200) { // OK response=0A=
				//alert(req.responseText);=0A=
			} else {=0A=
        		alert("Problem: " + req.statusText);      =0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
=0A=
	function switchUrlOrFileDisplay()=0A=
	{=0A=
	  if (document.getElementById("url").disabled) {=0A=
		//alert("make url available");=0A=
		document.getElementById("url").disabled=3D'';=0A=
		document.getElementById("file").disabled=3D'disabled';=0A=
	  } else {=0A=
		//alert("make file available");=0A=
		document.getElementById("file").disabled=3D'';=0A=
		document.getElementById("url").disabled=3D'disabled';  =0A=
	  }=0A=
	}=0A=
=0A=
=0A=
	function checkEmptyDamSireField() {=0A=
		if (document.getElementById("damInput").value=3D=3D"")=0A=
			document.getElementById("damId").value=3D"";=0A=
		if (document.getElementById("sireInput").value=3D=3D"")=0A=
			document.getElementById("sireId").value=3D"";=0A=
	} =0A=
=0A=
 	function changeBreederQuestion() {=0A=
=0A=
		var breederQuestion =3D document.getElementById('breederQuestion');=0A=
=0A=
  		if (document.getElementsByName('copytopersondb')[0].checked =3D=3D =
true) {=0A=
=0A=
    		var deactivated =3D false;=0A=
=0A=
			breederQuestion.removeAttribute("style");=0A=
=0A=
  		} else {=0A=
=0A=
    		var deactivated =3D true;=0A=
=0A=
			breederQuestion.style.color=3D"#aaaaaa";=0A=
=0A=
  		}=0A=
=0A=
		var radio =3D document.getElementsByName('breeder');=0A=
=0A=
		for(i=3D0; i<radio.length;i++) =0A=
=0A=
			radio[i].disabled=3Ddeactivated;=0A=
=0A=
	}=0A=
=0A=
/*=0A=
 	function deleteParent(parenttype, parent_id) {=0A=
=0A=
		html =3D '<p> Are you sure you want to remove the <b>' + parenttype + =
'</b> from this dog? </p>'=0A=
		parenttype =3D "'"+parenttype+"'";=0A=
		html =3D html + '<input type=3D"button" class=3D"button" =
name=3D"action" value=3D" OK " =
onClick=3D"clearParentField('+parenttype+','+parent_id+')" />'=0A=
=0A=
		panel.setHeader("Remove parent");=0A=
		=0A=
		panel.setBody(html);=0A=
	=0A=
	}=0A=
 =0A=
	function clearParentField(parenttype, parent_id) {=0A=
		panel.setBody("");=0A=
		panel.hide();=0A=
		// delete hidden field with id for sire/dam=0A=
		if (parenttype =3D=3D "dam")=0A=
			var hidden =3D document.getElementById("damId");=0A=
		else=0A=
			var hidden =3D document.getElementById("sireId");=0A=
		if (hidden !=3D null)=0A=
			hidden.value =3D "";=0A=
		// delete html text with sire/dam name=0A=
		var parentTxt =3D document.getElementById(parent_id);=0A=
		if (parentTxt !=3D null) {=0A=
			parentTxt.innerHTML =3D "<label>Please add the "+parenttype+" via the =
Pedigree Form!</label>";			=0A=
		}=0A=
		=0A=
	}=0A=
*/=0A=
=0A=
 	function deletePhoto(photo_id) {=0A=
=0A=
		photoId =3D photo_id;=0A=
=0A=
		html =3D '<p> Are you sure you want to remove this photo? </p>'=0A=
=0A=
		html =3D html + '<input type=3D"button" class=3D"button" =
name=3D"action" value=3D" OK " onClick=3D"deleteImage('+photo_id+')" />'=0A=
=0A=
		panel.setHeader("Remove this photo");=0A=
		=0A=
		panel.setBody(html);=0A=
		=0A=
		// if IE, scroll to top, because panel is opened there!=0A=
		if (document.all) =0A=
			  window.scrollTo(100, 100);=0A=
	=0A=
	}=0A=
	=0A=
	function deleteImagePermanently(photo_id) {=0A=
=0A=
		photoId =3D photo_id;=0A=
=0A=
		html =3D '<p> Are you sure you want to permanently remove this photo? =
</p>'=0A=
=0A=
		html =3D html + '<input type=3D"button" class=3D"button" =
name=3D"action" value=3D" OK " =
onClick=3D"startDeletePhoto('+photo_id+')" />'=0A=
=0A=
		panel.setHeader("Permanently remove this photo");=0A=
		=0A=
		panel.setBody(html);=0A=
		=0A=
		// if IE, scroll to top, because panel is opened there!=0A=
		if (document.all) =0A=
			  window.scrollTo(100, 100);=0A=
	=0A=
	}=0A=
=0A=
=0A=
	function addPhoto() {=0A=
=0A=
			panel.setHeader("Add Photo Reference");=0A=
=0A=
			body =3D '<div class=3D"content"><div align=3D"left"><p>Please =
specify a URL or a file from your filesystem: <br> </p></div>';=0A=
			body +=3D '<form method=3D"POST" action=3D"manage.php" =
enctype=3D"multipart/form-data">';=0A=
			//body +=3D '<input type=3D"hidden" name=3D"MAX_FILE_SIZE" =
value=3D"2000000">';=0A=
			body +=3D '<table border=3D"0" cellspacing=3D"0" =
cellpadding=3D"4"><tr>';=0A=
			body +=3D '<td width=3D"80px"><label><input type=3D"radio" =
class=3D"radio" name=3D"urlOrFile" value=3D"url" =
onclick=3D"switchUrlOrFileDisplay()">URL</label></td>';=0A=
			//body +=3D '<td width=3D"80px"><label><input type=3D"radio" =
class=3D"radio" name=3D"urlOrFile" value=3D"url" checked=3D"checked" =
onclick=3D"switchUrlOrFileDisplay()">URL</label></td>';=0A=
			body +=3D '<td><input type=3D"text" name=3D"url" size=3D"50" =
value=3D"" disabled=3D"disabled" id=3D"url"></td>';=0A=
			//body +=3D '<td><input type=3D"text" name=3D"url" size=3D"50" =
value=3D"" id=3D"url"></td>';=0A=
			body +=3D '</tr><tr>';=0A=
			body +=3D '<td width=3D"80px"><label><input type=3D"radio" =
class=3D"radio" name=3D"urlOrFile" value=3D"file" checked=3D"checked" =
onclick=3D"switchUrlOrFileDisplay()">Local File</label></td>';=0A=
			//body +=3D '<td width=3D"80px"><label><input type=3D"radio" =
disabled=3D"disabled" class=3D"radio" name=3D"urlOrFile" value=3D"file" =
onclick=3D"switchUrlOrFileDisplay()">Local File</label></td>';=0A=
			body +=3D '<td><input type=3D"file" name=3D"image" size=3D"30" =
value=3D"" id=3D"file" accept=3D"image/jpg, image/gif, image/jpeg, =
image/bmp, image/tiff, image/png"></td>';=0A=
			//body +=3D '<td><input type=3D"file" name=3D"image" =
disabled=3D"disabled" size=3D"30" value=3D"" id=3D"file" =
accept=3D"image/jpg, image/gif, image/jpeg, image/bmp, image/tiff, =
image/png"></td>';=0A=
			=0A=
			//body +=3D '</tr><tr><td colspan=3D"2"><label>Sorry, due to problems =
with the content provider\'s server, upload of local files is currently =
not possible!</label></td>';=0A=
=0A=
			body +=3D '</tr><tr>';=0A=
			body +=3D '<td colspan=3D"2" align=3D"center"><input =
type=3D"checkbox" name=3D"primary" ><label> Set as primary image =
</label></td></tr>';=0A=
			body +=3D '<tr><td width=3D"80px"><label><b>Copyright Owner: =
</b></label></td><td><input type=3D"text" name=3D"copyright" =
size=3D"50"></td></tr>';=0A=
			//body +=3D '<tr><td width=3D"80px"><label>Posted by: =
</label></td><td><input type=3D"text" name=3D"postedBy" =
size=3D"50"></td></tr>';=0A=
			body +=3D '<tr><td width=3D"80px"><label>Notes: =
</label></td><td><input type=3D"text" name=3D"notes" =
size=3D"50"></td></tr>';=0A=
			// copyright=0A=
			body +=3D '<tr><td colspan=3D"2"><hr></td><tr>';=0A=
			body +=3D "<tr><td colspan=3D'2'><label style=3D'color:red'>Please =
note that all uploaded pictures are put in the public domain. Please =
don't upload copyrighted pictures without permission.</label></td></tr>";=0A=
			body +=3D '<tr><td colspan=3D"2"><input type=3D"checkbox" =
name=3D"confirm_right" onClick=3D"if (this.checked) =
getElementById(\'submit_btn\').disabled=3Dfalse; else =
getElementById(\'submit_btn\').disabled=3Dtrue;" ><label><b> In =
uploading this image, I confirm that the above copyright owner has =
granted the right to use it for TWA.</b></label></td></tr>';	=0A=
			body +=3D '<input type=3D"hidden" name=3D"dogId" =
value=3D"'+dog_id+'"/>';=0A=
			body +=3D '<tr><td colspan=3D"2" align=3D"center"><input =
id=3D"submit_btn" type=3D"Submit" name=3D"Submit" value=3D"Submit" =
disabled=3D"disabled"></td>';=0A=
			body +=3D '</tr></table>';=0A=
			body +=3D '</form></div>';=0A=
			panel.setBody(body);=0A=
=0A=
	}=0A=
=0A=
/*=0A=
	function startCheckRegNr(regNr) {=0A=
		if (regNr !=3D null) {			=0A=
			url =3D "ajax/checkRegNr.php?regNr=3D" + escape(regNr)+"&rand=3D"+new =
Date().getTime();=0A=
			if (window.XMLHttpRequest) { // Non-IE browsers=0A=
				req =3D new XMLHttpRequest();=0A=
				req.onreadystatechange =3D processCheckRegNr;=0A=
				try {=0A=
					req.open("GET", url, true);=0A=
					document.body.style.cursor=3D"wait";=0A=
				} catch (e) {=0A=
					alert(e);=0A=
				}=0A=
				req.send(null);=0A=
			} else if (window.ActiveXObject) { // IE=0A=
				req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
				if (req) {=0A=
					req.onreadystatechange =3D processCheckRegNr;=0A=
					req.open("GET", url, true);=0A=
					req.send();=0A=
					document.body.style.cursor=3D"wait";=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
	=0A=
	function processCheckRegNr() {=0A=
	    if (req.readyState =3D=3D 4) { // Complete=0A=
	    	document.body.style.cursor=3D"auto";=0A=
	      if (req.status =3D=3D 200) { // OK response=0A=
					resp =3D req.responseText.split(';');=0A=
					if (resp[0] =3D=3D "ok" || resp[0] =3D=3D dog_id) {=0A=
						//document.getElementById("action").value=3D"Save";=0A=
						var actionBtn =3D document.createElement("input");						=0A=
						actionBtn.setAttribute('name','action');=0A=
						actionBtn.setAttribute('value','Save');				=0A=
						updateForm.appendChild(actionBtn);=0A=
						updateForm.submit();=0A=
					} else {					=0A=
						html=3D'<div class=3D"content"><div align=3D"left"><p>The dog with =
name </p><p><a href=3D"details.php?id=3D'+ escape(resp[0]) + =
'">'+resp[1]+'</a></p><p> already has this number. Please =
verify!</p></div>';		=0A=
						var handleOK =3D function() { =0A=
							this.hide(); =0A=
						}; =0A=
						mySimpleDialog =3D new YAHOO.widget.SimpleDialog("simpledlg", { =0A=
						width:"400px",  =0A=
						fixedcenter: true,  =0A=
						constraintoviewport: true,  =0A=
						underlay:"shadow", =0A=
						close:true,  =0A=
						visible:false,  =0A=
						draggable:true,=0A=
							modal:true,=0A=
							effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.30}=0A=
							} ); =0A=
						mySimpleDialog.setHeader("Duplicate Registration Number!"); =0A=
						mySimpleDialog.setBody(html); =0A=
						=
mySimpleDialog.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN=
); =0A=
						var myButtons =3D [ { text:" OK ", handler:handleOK, =
isDefault:true } ]; =0A=
						mySimpleDialog.cfg.queueProperty("buttons", myButtons); =0A=
						mySimpleDialog.render(document.body);=0A=
						mySimpleDialog.show();=0A=
/*						if (panel !=3D null) {=0A=
							panel.setHeader("Duplicate Registration Number!");=0A=
							body =3D '<div class=3D"content"><div align=3D"left"><p>The dog =
with name </p><a href=3D"details.php?id=3D'+ escape(resp[0]) + =
'">'+resp[1]+'</a><p> already has this number. Please verify!</p></div>';=0A=
							panel.setBody(body);=0A=
							panel.show();=0A=
						}*/ /*=0A=
					}=0A=
			} else {=0A=
		        alert("Problem: " + req.statusText);      =0A=
			}=0A=
    	}						=0A=
	}*/=0A=
=0A=
	function startDeletePhoto(photoId) {=0A=
=0A=
		url =3D "ajax/deletePhoto.php?photoId=3D" + =
escape(photoId)+"&rand=3D"+new Date().getTime();=0A=
=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
			req =3D new XMLHttpRequest();=0A=
=0A=
			req.onreadystatechange =3D processDeletePhoto;=0A=
=0A=
			try {=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			} catch (e) {=0A=
=0A=
				alert(e);=0A=
=0A=
			}=0A=
=0A=
			req.send(null);=0A=
=0A=
		} else if (window.ActiveXObject) { // IE=0A=
=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
			if (req) {=0A=
=0A=
				req.onreadystatechange =3D processDeletePhoto;=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				req.send();=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			}=0A=
=0A=
		}=0A=
=0A=
  }=0A=
=0A=
=0A=
=0A=
  function processDeletePhoto() {=0A=
=0A=
    if (req.readyState =3D=3D 4) { // Complete=0A=
=0A=
    	document.body.style.cursor=3D"auto";=0A=
=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
=0A=
				panel.setBody("");=0A=
=0A=
				panel.hide();=0A=
=0A=
				//  according entry from Form=0A=
				el =3D document.getElementById("photo_"+photoId);=0A=
				p_el =3D el.parentNode;=0A=
				p_el.removeChild(el);=0A=
=0A=
			} else {=0A=
=0A=
        alert("Problem: " + req.statusText);      =0A=
=0A=
			}=0A=
=0A=
    }=0A=
=0A=
  }=0A=
=0A=
=0A=
 	function setTestParentSex(s) {=0A=
=0A=
		parentSex =3D s;=0A=
=0A=
	}=0A=
=0A=
=0A=
 	function setRole(r) {=0A=
=0A=
		role =3D r;=0A=
=0A=
	}=0A=
=0A=
	=0A=
=0A=
	function setDogId(d) {=0A=
=0A=
		dog_id =3D d;=0A=
=0A=
	}=0A=
=0A=
 =0A=
=0A=
 	function createPanel(parentNode) {=0A=
=0A=
	 panel =3D new YAHOO.widget.Panel("panel", { =0A=
=0A=
	    width:"400px",  =0A=
=0A=
	    fixedcenter: true,  =0A=
=0A=
	    constraintoviewport: true,  =0A=
=0A=
	    underlay:"shadow", =0A=
=0A=
	    close:true,  =0A=
=0A=
	    visible:false,  =0A=
=0A=
	    draggable:true,=0A=
=0A=
			modal:true,=0A=
=0A=
			effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.30}=0A=
=0A=
			} ); =0A=
	 	panel.setBody("");=0A=
=0A=
		panel.render(parentNode);=0A=
=0A=
		return panel;=0A=
=0A=
	}=0A=
=0A=
=0A=
=0A=
	function startAddPhotoRef(url) {=0A=
=0A=
		photoref =3D url;=0A=
=0A=
		if (url =3D=3D null) {=0A=
=0A=
			alert("You have to specify the url!");	=0A=
=0A=
		} else {=0A=
=0A=
      url =3D "ajax/addPhoto.php?dogId=3D"+dog_id+"&photoref=3D" + =
escape(url)+"&rand=3D"+new Date().getTime();=0A=
=0A=
      if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
        req =3D new XMLHttpRequest();=0A=
=0A=
        req.onreadystatechange =3D processAddPhotoRef;=0A=
=0A=
        try {=0A=
=0A=
          req.open("GET", url, true);=0A=
=0A=
          document.body.style.cursor=3D"wait";=0A=
=0A=
        } catch (e) {=0A=
=0A=
          alert(e);=0A=
=0A=
        }=0A=
=0A=
        req.send(null);=0A=
=0A=
      } else if (window.ActiveXObject) { // IE=0A=
=0A=
        req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
        if (req) {=0A=
=0A=
          req.onreadystatechange =3D processAddPhotoRef;=0A=
=0A=
          req.open("GET", url, true);=0A=
=0A=
          req.send();=0A=
=0A=
          document.body.style.cursor=3D"wait";=0A=
=0A=
        }=0A=
=0A=
      }=0A=
=0A=
    }	=0A=
=0A=
	}=0A=
=0A=
	=0A=
=0A=
	function processAddPhotoRef() {=0A=
=0A=
    if (req.readyState =3D=3D 4) { // Complete=0A=
=0A=
    	document.body.style.cursor=3D"auto";=0A=
=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
=0A=
				photoId =3D req.responseText;=0A=
=0A=
				panel.setBody("");=0A=
=0A=
				panel.hide();=0A=
=0A=
				// create according entry in Form, if it does not yet exist=0A=
=0A=
				if  ((photoId !=3D null) && =
(document.getElementById("photo_"+photoId)=3D=3Dnull)) {=0A=
=0A=
					p_el =3D document.getElementById("photos");=0A=
=0A=
					div_el =3D document.createElement("div");=0A=
=0A=
					div_el.setAttribute("id", "photo_"+photoId);			=0A=
=0A=
					html =3D '<p><img src=3D"'+photoref+'" width=3D"250px" =
alt=3D"'+photoref+'">';=0A=
=0A=
					html =3D html + '<a =
href=3D"javascript:deletePhoto('+photoId+');panel.show();">Delete</a></p>=
';=0A=
=0A=
					div_el.innerHTML =3D html;=0A=
=0A=
					p_el.appendChild(div_el);=0A=
=0A=
					//alert (html);=0A=
=0A=
				}=0A=
=0A=
  	  } else {=0A=
=0A=
        alert("Problem: " + req.statusText);      =0A=
=0A=
			}=0A=
=0A=
    }	=0A=
=0A=
	}=0A=
=0A=
	function setChooseTestParent() {=0A=
		if (panel !=3D null) {=0A=
			panel.setHeader("Choose "+parentSex);=0A=
			body =3D '<div class=3D"content"><div align=3D"left"><p>Please enter =
the name (or part of the name) of the '+parentSex+': </p></div> <form =
name=3D"parentForm"><input type=3D"text" name=3D"test" =
style=3D"display:none"/> <table border=3D"0"> <tr> <td ><strong>Name: =
</strong></td> <td><input style=3D"width:180px" name=3D"parentName" =
value=3D"" ></td> </tr> <tr> <td>&nbsp;</td><td align=3D"right"> <input =
type=3D"button" class=3D"button" name=3D"action" value=3D"Submit" =
onClick=3D"startTestParentSearch(parentForm.parentName.value)" /></td> =
</tr> </table> </form> </div>';=0A=
			panel.setBody(body);=0A=
		}=0A=
	}=0A=
	=0A=
	function startTestParentSearch(parentName) {=0A=
		if (parentSex =3D=3D 'sire')=0A=
			sex =3D "male";=0A=
		else=0A=
			sex =3D "female";=0A=
=0A=
      url =3D "ajax/getTestParents.php?parentName=3D" + =
escape(parentName) + "&parentSex=3D" + escape(sex) + "&rand=3D"+new =
Date().getTime();=0A=
=0A=
      if (window.XMLHttpRequest) { // Non-IE browsers=0A=
        req =3D new XMLHttpRequest();=0A=
        req.onreadystatechange =3D processTestParentSearch;=0A=
        try {=0A=
          req.open("GET", url, true);=0A=
          document.body.style.cursor=3D"wait";=0A=
        } catch (e) {=0A=
          alert(e);=0A=
        }=0A=
        req.send(null);=0A=
      } else if (window.ActiveXObject) { // IE=0A=
        req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
        if (req) {=0A=
          req.onreadystatechange =3D processTestParentSearch;=0A=
          req.open("GET", url, true);=0A=
          req.send();=0A=
          document.body.style.cursor=3D"wait";=0A=
        }=0A=
      }=0A=
	}=0A=
	=0A=
	=0A=
function processTestParentSearch() {=0A=
    if (req.readyState =3D=3D 4) { // Complete=0A=
    	document.body.style.cursor=3D"auto";=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
   		//alert(req.responseXML.parseError.errorCode + "   " + =
req.responseXML.parseError.reason + "    " + =
req.getAllResponseHeaders());=0A=
		//alert(req.responseXML);=0A=
		var html =3D "";=0A=
	    var parentArray =3D req.responseText.split(';');=0A=
		if (parentArray.length <=3D 1) {=0A=
			html =3D html + '<p>Your dog has not been found in our =
database.<br>Testmatings can only be done with dogs available in our =
database.</p><a href=3D"#" onClick=3D"setChooseTestParent();">Try with =
another name</a>';=0A=
		} else {=0A=
			html =3D html + '<div style=3D"padding:10px;"><p>Please choose your =
'+parentSex+' from one of the following dogs found in our =
database:</p></div>';=0A=
			html =3D html + '<div style=3D"height:200px; overflow:auto; ">';					=0A=
			for (var i=3D0;i<parentArray.length-1;i++) {=0A=
				var attrArray =3D parentArray[i].split('$');=0A=
			    html =3D html + '<input type=3D"radio" class=3D"radio" =
name=3D"selectedTestParent" value=3D"' + attrArray[0] + '" =
onClick=3D"startTestMating(this.value);" ><span =
style=3D"font-weight:bold;font-size:11px">'+attrArray[1]+'</span><label> =
( '+attrArray[2]+', '+attrArray[3]+', '+attrArray[4]+', =
'+attrArray[5]+', '+attrArray[6]+')</label><br>'; =0A=
			}=0A=
			html =3D html + '</div>';	=0A=
		}=0A=
		panel.cfg.setProperty("width","600px");=0A=
		panel.setBody(html);				=0A=
      } else {=0A=
        alert("Problem: " + req.statusText);      =0A=
 	  }=0A=
    }=0A=
}=0A=
=0A=
function startTestMating(parentId) {=0A=
	var query =3D new PageQuery(document.location.search);=0A=
	if (parentSex =3D=3D "sire") {=0A=
		queryStr =3D parentSex+"=3D"+parentId;=0A=
		var existingMother =3D query.getValue('dam');=0A=
		if (existingMother) =0A=
			queryStr=3DqueryStr+"&dam=3D"+existingMother;=0A=
	} else { =0A=
		queryStr =3D parentSex+"=3D"+parentId;=0A=
		var existingFather =3D query.getValue('sire');=0A=
		if (existingFather) =0A=
			queryStr=3DqueryStr+"&sire=3D"+existingFather;=0A=
	}=0A=
	document.location.href =3D "testmating.php?"+queryStr;=0A=
}=0A=
=0A=
=0A=
function PageQuery(q) {=0A=
	if(q.length > 1) this.q =3D q.substring(1, q.length);=0A=
	else this.q =3D null;=0A=
	this.keyValuePairs =3D new Array();=0A=
	if(q) {=0A=
		for(var i=3D0; i < this.q.split("&").length; i++) {=0A=
			this.keyValuePairs[i] =3D this.q.split("&")[i];=0A=
		}=0A=
	}=0A=
	this.getKeyValuePairs =3D function() { =0A=
		return this.keyValuePairs; =0A=
	}=0A=
	this.getValue =3D function(s) {=0A=
		for(var j=3D0; j < this.keyValuePairs.length; j++) {=0A=
			if(this.keyValuePairs[j].split("=3D")[0] =3D=3D s)=0A=
				return this.keyValuePairs[j].split("=3D")[1];=0A=
		}=0A=
		return false;=0A=
	}=0A=
	this.getParameters =3D function() {=0A=
		var a =3D new Array(this.getLength());=0A=
		for(var j=3D0; j < this.keyValuePairs.length; j++) {=0A=
			a[j] =3D this.keyValuePairs[j].split("=3D")[0];=0A=
		}=0A=
		return a;=0A=
	}=0A=
	this.getLength =3D function() { =0A=
		return this.keyValuePairs.length; =0A=
	}=0A=
}=0A=
=0A=
=0A=
	function setSearchTextOnPersonPanel(m) {=0A=
=0A=
		mode =3D m;=0A=
=0A=
		if (panel !=3D null) {=0A=
=0A=
			panel.setHeader("Add Person");=0A=
=0A=
			body =3D '<div class=3D"content"><div align=3D"left"><p>Please enter =
the name of the person: <br> (We will first of all check if he/she is =
already available in our database.)</p></div> <form name=3D"nameForm"> =
<table border=3D"0"> <tr> <td ><strong>Firstname: </strong></td> =
<td><input style=3D"width:180px" name=3D"firstname" value=3D""></td> =
</tr> <tr> <td ><strong>Lastname: </strong></td> <td><input =
style=3D"width:180px" name=3D"lastname" value=3D""></td> </tr> <tr> =
<td>&nbsp;</td><td align=3D"right"><input type=3D"button" =
class=3D"button" name=3D"action" value=3D"Submit" =
onClick=3D"startPersonSearch(nameForm.firstname.value, =
nameForm.lastname.value)" /></td> </tr> </table> </form> </div>';=0A=
=0A=
			panel.setBody(body);=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
 =0A=
=0A=
  function startPersonSearch(fname, lname) {=0A=
=0A=
    firstname =3D fname;=0A=
=0A=
		lastname =3D lname;=0A=
=0A=
		if ((lastname =3D=3D null) || (lastname =3D=3D "")) {=0A=
=0A=
			alert("You have to specify the lastname!");	=0A=
=0A=
		} else {=0A=
=0A=
      url =3D "ajax/searchPerson.php?firstname=3D" + escape(firstname) + =
"&lastname=3D" + escape(lastname)+"&rand=3D"+new Date().getTime();=0A=
=0A=
      if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
        req =3D new XMLHttpRequest();=0A=
=0A=
        req.onreadystatechange =3D processPersonSearch;=0A=
=0A=
        try {=0A=
=0A=
          req.open("GET", url, true);=0A=
=0A=
          document.body.style.cursor=3D"wait";=0A=
=0A=
        } catch (e) {=0A=
=0A=
          alert(e);=0A=
=0A=
        }=0A=
=0A=
        req.send(null);=0A=
=0A=
      } else if (window.ActiveXObject) { // IE=0A=
=0A=
        req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
        if (req) {=0A=
=0A=
          req.onreadystatechange =3D processPersonSearch;=0A=
=0A=
          req.open("GET", url, true);=0A=
=0A=
          req.send();=0A=
=0A=
          document.body.style.cursor=3D"wait";=0A=
=0A=
        }=0A=
=0A=
      }=0A=
=0A=
    }=0A=
=0A=
  }=0A=
=0A=
=0A=
=0A=
  function processPersonSearch() {=0A=
=0A=
    if (req.readyState =3D=3D 4) { // Complete=0A=
=0A=
    	document.body.style.cursor=3D"auto";=0A=
=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
=0A=
     		//alert(req.responseXML.parseError.errorCode + "   " + =
req.responseXML.parseError.reason + "    " + =
req.getAllResponseHeaders());=0A=
=0A=
=0A=
		//alert(req.responseText);=0A=
		/*      xml =3D req.responseXML;=0A=
				f =3D xml.getElementsByTagName("firstname")[i];=0A=
=0A=
				alert (f);*/=0A=
=0A=
				var html =3D "";=0A=
=0A=
		    var personArray =3D req.responseText.split(';');=0A=
=0A=
				if (personArray.length <=3D 1) {=0A=
=0A=
					html =3D html + '<p>Your person has not been found in our =
database.</p><a href=3D"#" =
onClick=3D"setAddPersonTextOnPersonPanel();">Go on adding</a>';=0A=
=0A=
				} else {=0A=
=0A=
					html =3D html + '<div style=3D"padding:10px"><p>Please check =
whether your person is one of the following persons found in our =
database and select your person.</p></div>';=0A=
					html =3D html + '<div =
style=3D"width:390px;height:150px;overflow:auto">';=0A=
					html =3D html + '<table border=3D"0" cellpadding=3D"10px"><tr><td =
valign=3D"top"><strong>Found persons: </strong></td><td =
align=3D"left">';					=0A=
=0A=
					for (var i=3D0;i<personArray.length-1;i++) {=0A=
=0A=
						var attrArray =3D personArray[i].split('$');=0A=
=0A=
				    html =3D html + '<input type=3D"radio" class=3D"radio" =
name=3D"selectedPerson" value=3D"' + attrArray[0] + '" =
onClick=3D"getElementById(\'ok_btn\').removeAttribute(\'disabled\');" =
><label>'+attrArray[1]+' '+attrArray[2]+', '+attrArray[3]+', =
'+attrArray[4]+'</label><br>'; =0A=
=0A=
					}=0A=
					html =3D html + '</td></tr></table></div>';=0A=
					html =3D html + '<table border=3D"0" cellpadding=3D"10px">';=0A=
					html =3D html +	'<tr><td colspan=3D"2"><p>&nbsp;</p><p><b>Please =
look carefully at all persons listed above.<br>It is very important that =
you only select this if your \'' + firstname + ' ' + lastname + '\' is =
not one of the above persons.</b></p>';=0A=
=0A=
					html =3D html + '<p><input type=3D"radio" class=3D"radio" =
name=3D"selectedPerson" value=3D"new" =
onClick=3D"getElementById(\'ok_btn\').removeAttribute(\'disabled\');" =
\><label>I have checked that \'' + firstname + ' ' + lastname + '\' is =
not one of the above persons.</label></p>';=0A=
=0A=
					html =3D html + '</td></tr><tr><td colspan=3D"2" =
align=3D"center"><input id=3D"ok_btn" type=3D"button" class=3D"button" =
value=3D"OK" disabled=3D"disabled" =
onClick=3D"decideNewOrEdit(document.getElementsByName(\'selectedPerson\')=
);" /></td></tr></table>';=0A=
=0A=
				}=0A=
=0A=
				panel.setBody(html);				=0A=
=0A=
      } else {=0A=
=0A=
        alert("Problem: " + req.statusText);      =0A=
=0A=
			}=0A=
=0A=
    }=0A=
=0A=
  }=0A=
=0A=
	=0A=
=0A=
	function decideNewOrEdit(radioBtns) {=0A=
=0A=
		for (var i=3D0; i < radioBtns.length; i++) {=0A=
			if (radioBtns[i].checked)=0A=
			  var selPerson =3D radioBtns[i].value;=0A=
	   	}=0A=
=0A=
		if (selPerson =3D=3D "new") {=0A=
			setAddPersonTextOnPersonPanel();=0A=
		} else {=0A=
			//mode=3D"contextMode";=0A=
			startEditPerson(selPerson);=0A=
		}=0A=
	}=0A=
=0A=
	=0A=
=0A=
	function setAddPersonTextOnPersonPanel() {=0A=
=0A=
		var html =3D '<form id=3D"addForm" method=3D"POST" =
action=3D"managePerson.php" >';=0A=
=0A=
		html =3D html + '<table>';=0A=
=0A=
		html =3D html + '<tr><td><label>Firstname: </label></td><td><input =
name=3D"firstname" value=3D"'+firstname+'" ></td></tr>';=0A=
=0A=
		html =3D html + '<tr><td><label>Lastname: =
</label></td><td><label>'+lastname+'</label><input type=3D"hidden" =
name=3D"lastname" value=3D"'+lastname+'"></td></tr>';=0A=
=0A=
		/*html =3D html + '<tr><td><label>Street: </label></td><td><input =
name=3D"street" value=3D"" ></td></tr>';=0A=
=0A=
		html =3D html + '<tr><td><label>Postal Code: </label></td><td><input =
name=3D"postalcode" value=3D"" ></td></tr>';*/=0A=
=0A=
		html =3D html + '<tr><td><label>City: </label></td><td><input =
name=3D"city" value=3D"" ></td></tr>';=0A=
=0A=
		html =3D html + '<tr><td><label>Country: =
</label></td><td>'+getCountrySelectBox("")+'</td></tr>';=0A=
/*=0A=
		html =3D html + '<tr><td><label>Email: </label></td><td><input =
name=3D"email" value=3D"" ></td></tr>';=0A=
=0A=
		html =3D html + '<tr><td><label>Phone: </label></td><td><input =
name=3D"phone" value=3D"" ></td></tr>';*/=0A=
=0A=
		html =3D html + '<tr><td><label>Homepage: </label></td><td><input =
name=3D"homepage" value=3D"" ></td></tr>';=0A=
=0A=
		if (mode=3D=3D"normalMode") {=0A=
=0A=
			radiobtncode =3D '<input type=3D"radio" class=3D"radio" =
name=3D"breeder" value=3D"1" ><label>yes</label>' + '<input =
type=3D"radio" class=3D"radio" name=3D"breeder" value=3D"0" =
checked=3D"checked"><label>no</label>';=0A=
=0A=
			html =3D html + '<tr><td><label>Is Breeder? =
</label></td><td>'+radiobtncode+'</td></tr>';=0A=
=0A=
		}=0A=
=0A=
		html =3D html + '<tr><td colspan=3D"2" align=3D"center"><input =
name=3D"action" type=3D"submit" class=3D"button" value=3D"Add" =
onClick=3D"javascript: return =
checkModeforSave(\''+mode+'\',document.getElementById(\'addForm\'));"/></=
td></tr>';=0A=
=0A=
		html =3D html + '</table></form>';=0A=
=0A=
		panel.setBody(html);		=0A=
=0A=
	}=0A=
=0A=
	=0A=
=0A=
	function checkModeforSave(mode, form) {=0A=
=0A=
		if (mode =3D=3D "normalMode")=0A=
=0A=
			return true;=0A=
=0A=
		else {=0A=
=0A=
			startAddPerson(form, role);=0A=
=0A=
			return false;=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
														=0A=
=0A=
	function startAddPerson(form, addTo) {=0A=
=0A=
		panel.setHeader("Add Person");=0A=
=0A=
    firstname =3D form.firstname.value;=0A=
=0A=
		lastname =3D form.lastname.value;=0A=
=0A=
		url =3D =
"ajax/addPerson.php?currUserId=3D"+currUserId+"&dogId=3D"+dog_id+"&firstn=
ame=3D"+escape(form.firstname.value)+"&lastname=3D"+escape(form.lastname.=
value)/*+"&street=3D"+escape(form.street.value)+"&postalcode=3D"+escape(f=
orm.postalcode.value)*/+"&city=3D"+escape(form.city.value)+"&country=3D"+=
escape(form.country.value)/*+"&email=3D"+escape(form.email.value)+"&phone=
=3D"+escape(form.phone.value)*/+"&homepage=3D"+escape(form.homepage.value=
)+"&addTo=3D"+addTo+"&rand=3D"+new Date().getTime();=0A=
=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
			req =3D new XMLHttpRequest();=0A=
=0A=
			req.onreadystatechange =3D processAddPerson;=0A=
=0A=
			try {=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			} catch (e) {=0A=
=0A=
				alert(e);=0A=
=0A=
			}=0A=
=0A=
			req.send(null);=0A=
=0A=
		} else if (window.ActiveXObject) { // IE=0A=
=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
			if (req) {=0A=
=0A=
				req.onreadystatechange =3D processAddPerson;=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				req.send();=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			}=0A=
=0A=
		}	=0A=
=0A=
	}=0A=
=0A=
=0A=
=0A=
  function processAddPerson() {=0A=
=0A=
	if (req.readyState =3D=3D 4) { // Complete=0A=
=0A=
    	document.body.style.cursor=3D"auto";=0A=
=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
			=0A=
				persId =3D req.responseText;=0A=
=0A=
				panel.setBody("");=0A=
=0A=
				panel.hide();=0A=
=0A=
				// create according entry in Form, if it does not yet exist=0A=
=0A=
				//alert(persId);=0A=
=0A=
				p_el =3D document.getElementById(role);=0A=
=0A=
				//if not on "update-dog"-page,i.e. no "role" found, reload current =
webpage=0A=
=0A=
				if (p_el =3D=3D null) {=0A=
=0A=
					location.reload();=0A=
=0A=
				} else {=0A=
=0A=
					if  ((persId !=3D null) && =
(document.getElementById(role+persId)=3D=3Dnull)) {=0A=
=0A=
						span_el =3D document.createElement("span");=0A=
=0A=
						span_el.setAttribute("id", role+persId);=0A=
=0A=
						span_el.style.whitespace=3D"nowrap";=0A=
=0A=
						html =3D firstname + " " + lastname + "<a href=3D'#' =
onclick=3D'setDeleteTextOnPersonPanel("+persId+",\""+role+"\");panel.show=
();'><img src=3D'images/drop.gif' alt=3D''></a><br>";=0A=
=0A=
						span_el.innerHTML =3D html;=0A=
=0A=
						p_el.appendChild(span_el);		=0A=
=0A=
					}=0A=
=0A=
				}=0A=
=0A=
  	  } else {=0A=
=0A=
        alert("Problem: " + req.statusText);      =0A=
=0A=
			}=0A=
=0A=
    }=0A=
=0A=
  } =0A=
=0A=
=0A=
=0A=
=0A=
=0A=
	function setDeleteTextOnPersonPanel(person_id, rolename) {=0A=
=0A=
		personId =3D person_id;=0A=
=0A=
		role=3Drolename;=0A=
=0A=
		html =3D '<p> Are you sure you want to remove this person as '+ role =
+' for this dog?</p>'=0A=
=0A=
		html =3D html + '<input type=3D"button" class=3D"button" =
name=3D"action" value=3D" OK " =
onClick=3D"startDeletePerson('+personId+',\''+role+'\')" />'=0A=
=0A=
		panel.setHeader("Remove this person as "+role);=0A=
=0A=
		panel.setBody(html);=0A=
=0A=
	}=0A=
=0A=
=0A=
=0A=
  function startDeletePerson(personId,From) {=0A=
=0A=
		url =3D =
"ajax/removePersonFrom.php?currUserId=3D"+currUserId+"&dogId=3D"+dog_id+"=
&personId=3D" + escape(personId) + "&From=3D"+From+"&rand=3D"+new =
Date().getTime();=0A=
=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
			req =3D new XMLHttpRequest();=0A=
=0A=
			req.onreadystatechange =3D processDeletePerson;=0A=
=0A=
			try {=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			} catch (e) {=0A=
=0A=
				alert(e);=0A=
=0A=
			}=0A=
=0A=
			req.send(null);=0A=
=0A=
		} else if (window.ActiveXObject) { // IE=0A=
=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
			if (req) {=0A=
=0A=
				req.onreadystatechange =3D processDeletePerson;=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				req.send();=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			}=0A=
=0A=
		}=0A=
=0A=
  }=0A=
=0A=
=0A=
=0A=
  function processDeletePerson() {=0A=
=0A=
    if (req.readyState =3D=3D 4) { // Complete=0A=
=0A=
    	document.body.style.cursor=3D"auto";=0A=
=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
=0A=
				panel.setBody("");=0A=
=0A=
				panel.hide();=0A=
=0A=
				//  according entry from Form=0A=
//alert("xx"+role+personId+"xx");=0A=
				el =3D document.getElementById(role+personId);=0A=
//alert(el);=0A=
				p_el =3D el.parentNode;=0A=
=0A=
				p_el.removeChild(el);=0A=
=0A=
			} else {=0A=
=0A=
        alert("Problem: " + req.statusText);      =0A=
=0A=
			}=0A=
=0A=
    }=0A=
=0A=
  }=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
  function startEditPerson(personId) {=0A=
=0A=
		panel.setHeader("Edit Person");=0A=
=0A=
		// add changing parameter-value (I added the current time!), as IE =
caches page, if same url !!!!=0A=
		url =3D "ajax/editPerson.php?personId=3D" + escape(personId) + =
"&rand=3D"+new Date().getTime();=0A=
		//url =3D "ajax/editPerson.php?personId=3D" + escape(personId);=0A=
=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
			req =3D new XMLHttpRequest();=0A=
=0A=
			req.onreadystatechange =3D processEditPerson;=0A=
=0A=
			try {=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			} catch (e) {=0A=
=0A=
				alert(e);=0A=
=0A=
			}=0A=
=0A=
			req.send(null);=0A=
=0A=
		} else if (window.ActiveXObject) { // IE=0A=
=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
			if (req) {=0A=
=0A=
				req.onreadystatechange =3D processEditPerson;=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				req.send(null);=0A=
=0A=
				//document.body.style.cursor=3D"wait";=0A=
=0A=
			}=0A=
=0A=
		}=0A=
=0A=
  }=0A=
=0A=
=0A=
=0A=
  function processEditPerson() {=0A=
=0A=
    if (req.readyState =3D=3D 4) { // Complete=0A=
=0A=
    	document.body.style.cursor=3D"auto";=0A=
=0A=
      if (req.status =3D=3D 200) { // OK response=0A=
=0A=
		    var attrArray =3D req.responseText.split('%');=0A=
=0A=
				var html =3D '<form id=3D"editForm" method=3D"POST" =
action=3D"managePerson.php" ><input type=3D"hidden" name=3D"personId" =
value=3D"' + attrArray[0] + '"/>';=0A=
=0A=
				html =3D html + '<table>';=0A=
=0A=
		    html =3D html + '<tr><td><label>Firstname: </label></td><td><input =
name=3D"firstname" value=3D"' + attrArray[1] + '" ></td></tr>';=0A=
=0A=
		    html =3D html + '<tr><td><label>Lastname: </label></td><td><input =
name=3D"lastname" value=3D"' + attrArray[2] + '" ></td></tr>';=0A=
=0A=
		    /*html =3D html + '<tr><td><label>Street: </label></td><td><input =
name=3D"street" value=3D"' + attrArray[3] + '" ></td></tr>';=0A=
=0A=
		    html =3D html + '<tr><td><label>Postal Code: =
</label></td><td><input name=3D"postalcode" value=3D"' + attrArray[4] + =
'" ></td></tr>';=0A=
*/=0A=
		    html =3D html + '<tr><td><label>City: </label></td><td><input =
name=3D"city" value=3D"' + attrArray[5] + '" ></td></tr>';=0A=
=0A=
		    html =3D html + '<tr><td><label>Country: =
</label></td><td>'+getCountrySelectBox(attrArray[6])+'</td></tr>';=0A=
/*=0A=
		    html =3D html + '<tr><td><label>Email: </label></td><td><input =
name=3D"email" value=3D"' + attrArray[7] + '" ></td></tr>';=0A=
=0A=
		    html =3D html + '<tr><td><label>Phone: </label></td><td><input =
name=3D"phone" value=3D"' + attrArray[8] + '" ></td></tr>';*/=0A=
=0A=
		    html =3D html + '<tr><td><label>Homepage: </label></td><td><input =
name=3D"homepage" value=3D"' + attrArray[9] + '" ></td></tr>';=0A=
=0A=
			if (mode=3D=3D"normalMode") {=0A=
=0A=
				if (attrArray[10] =3D=3D "1")=0A=
=0A=
					radiobtncode =3D '<input type=3D"radio" class=3D"radio" =
name=3D"breeder" value=3D"1" checked=3D"checked"><label>yes</label>' + =
'<input type=3D"radio" class=3D"radio" name=3D"breeder" value=3D"0" =
><label>no</label>';=0A=
=0A=
				else=0A=
=0A=
					radiobtncode =3D '<input type=3D"radio" class=3D"radio" =
name=3D"breeder" value=3D"1" ><label>yes</label>' + '<input =
type=3D"radio" class=3D"radio" name=3D"breeder" value=3D"0" =
checked=3D"checked"><label>no</label>';=0A=
=0A=
				html =3D html + '<tr><td><label>Is Breeder? =
</label></td><td>'+radiobtncode+'</td></tr>';=0A=
=0A=
			}=0A=
=0A=
			html =3D html + '<tr><td>&nbsp;</td></tr>';=0A=
=0A=
				html =3D html + '<tr><td colspan=3D"2" align=3D"center"><input =
name=3D"action" type=3D"submit" class=3D"button" value=3D"Save" =
onClick=3D"javascript: return =
checkModeforUpdate(\''+mode+'\',document.getElementById(\'editForm\'));"/=
></td></tr>';=0A=
=0A=
				html =3D html + '</table></form>';=0A=
=0A=
				panel.setBody(html);				=0A=
=0A=
      } else {=0A=
=0A=
        alert("Problem: " + req.statusText);      =0A=
=0A=
			}=0A=
=0A=
    }=0A=
=0A=
  }=0A=
=0A=
	=0A=
=0A=
	function checkModeforUpdate(mode, form) {=0A=
=0A=
		if (mode =3D=3D "normalMode")=0A=
=0A=
			return true;=0A=
=0A=
		else {=0A=
=0A=
			startUpdatePerson(form,role);=0A=
=0A=
			return false;=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
	function startUpdatePerson(form, addTo) {=0A=
=0A=
		panel.setHeader("Add Person");=0A=
=0A=
    firstname =3D form.firstname.value;=0A=
=0A=
		lastname =3D form.lastname.value;=0A=
=0A=
		url =3D =
"ajax/updatePerson.php?currUserId=3D"+currUserId+"&dogId=3D"+dog_id + =
"&personId=3D"+escape(form.personId.value)+"&firstname=3D"+escape(form.fi=
rstname.value)+"&lastname=3D"+escape(form.lastname.value)/*+"&street=3D"+=
escape(form.street.value)+"&postalcode=3D"+escape(form.postalcode.value)*=
/+"&city=3D"+escape(form.city.value)+"&country=3D"+escape(form.country.va=
lue)/*+"&email=3D"+escape(form.email.value)+"&phone=3D"+escape(form.phone=
.value)*/+"&homepage=3D"+escape(form.homepage.value)+"&addTo=3D"+addTo+"&=
rand=3D"+new Date().getTime();=0A=
=0A=
		if (window.XMLHttpRequest) { // Non-IE browsers=0A=
=0A=
			req =3D new XMLHttpRequest();=0A=
=0A=
			req.onreadystatechange =3D processAddPerson;=0A=
=0A=
			try {=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			} catch (e) {=0A=
=0A=
				alert(e);=0A=
=0A=
			}=0A=
=0A=
			req.send(null);=0A=
=0A=
		} else if (window.ActiveXObject) { // IE=0A=
=0A=
			req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
=0A=
			if (req) {=0A=
=0A=
				req.onreadystatechange =3D processAddPerson;=0A=
=0A=
				req.open("GET", url, true);=0A=
=0A=
				req.send();=0A=
=0A=
				document.body.style.cursor=3D"wait";=0A=
=0A=
			}=0A=
=0A=
		}	=0A=
=0A=
	}=0A=
=0A=
=0A=
	function clickedClone() {=0A=
		simpleDialog =3D new YAHOO.widget.SimpleDialog("dlg", { =0A=
		width:"400px",  =0A=
		fixedcenter: true,  =0A=
		constraintoviewport: true,  =0A=
		underlay:"shadow", =0A=
		close:true,  =0A=
		visible:false,  =0A=
		draggable:true,=0A=
		modal:true,=0A=
		effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.30}=0A=
		} ); =0A=
		simpleDialog.setHeader("Clone Dog ?"); =0A=
		simpleDialog.setBody("You pressed the 'Clone'-button. Are you sure you =
want to make a copy of this dog?"); =0A=
		=
simpleDialog.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN);=
 =0A=
		var handleYes =3D function() { =0A=
			checkEmptyDamSireField();=0A=
			var actionBtn =3D document.createElement("input");						=0A=
			actionBtn.setAttribute('name','action');=0A=
			actionBtn.setAttribute('value','Clone');				=0A=
			updateForm.appendChild(actionBtn);=0A=
			updateForm.submit()=0A=
			this.hide();=0A=
		} =0A=
		var handleNo =3D function() { =0A=
			this.hide(); =0A=
		}=0A=
		var myButtons =3D [ { text:"Yes",  handler:handleYes }, { =
text:"Cancel", handler:handleNo, isDefault:true } ]; =0A=
		simpleDialog.cfg.queueProperty("buttons", myButtons); =0A=
		simpleDialog.render(document.body);=0A=
		simpleDialog.show();	=0A=
	}=0A=
	=0A=
=0A=
	function showDeleteDialog(deleteWhat, id) {=0A=
=0A=
		mySimpleDialog =3D new YAHOO.widget.SimpleDialog("dlg", { =0A=
=0A=
	    width:"400px",  =0A=
=0A=
	    fixedcenter: true,  =0A=
=0A=
	    constraintoviewport: true,  =0A=
=0A=
	    underlay:"shadow", =0A=
=0A=
	    close:true,  =0A=
=0A=
	    visible:false,  =0A=
=0A=
	    draggable:true,=0A=
=0A=
			modal:true,=0A=
=0A=
			effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.30}=0A=
=0A=
			} ); =0A=
=0A=
		mySimpleDialog.setHeader("Delete Dialog"); =0A=
=0A=
		mySimpleDialog.setBody("Are you sure you want to remove this =
"+deleteWhat+" from the archive?"); =0A=
=0A=
		=
mySimpleDialog.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN=
); =0A=
=0A=
		var handleYes =3D function() { =0A=
=0A=
			if (deleteWhat =3D=3D "person")=0A=
				=
window.location.href=3D"managePerson.php?action=3DDelete&personId=3D"+id;=0A=
			else if (deleteWhat =3D=3D "user")=0A=
				window.location.href=3D"users_edit.php?action=3DDelete&id=3D"+id;=0A=
			else=0A=
				window.location.href=3D"manage.php?action=3DDelete&id=3D"+id;=0A=
=0A=
			this.hide();=0A=
=0A=
		} =0A=
=0A=
		var handleNo =3D function() { =0A=
=0A=
			this.hide(); =0A=
=0A=
		}=0A=
=0A=
		var myButtons =3D [ { text:"Yes",  handler:handleYes }, { =
text:"Cancel", handler:handleNo, isDefault:true } ]; =0A=
=0A=
		mySimpleDialog.cfg.queueProperty("buttons", myButtons); =0A=
=0A=
		mySimpleDialog.render(document.body);=0A=
=0A=
		mySimpleDialog.show();=0A=
=0A=
	}=0A=
	=0A=
function setCountrySelectBox(html) {=0A=
	countrySelectHtml =3D html;=0A=
}=0A=
=0A=
function getCountrySelectBox(selCountry) {=0A=
	if (selCountry !=3Dnull) {=0A=
		oldVal =3D "value=3D'"+selCountry+"'";=0A=
		newVal =3D "value=3D'"+selCountry+"' selected=3D'selected' ";=0A=
		countrySelectHtml =3D countrySelectHtml.replace(oldVal,newVal);=0A=
	}	=0A=
	return countrySelectHtml;=0A=
}	=0A=
=0A=
/*function getCountrySelectBox(selValue) {=0A=
	html =3D '<select name=3D"country" size=3D1><option =
value=3D"">unknown</option>';=0A=
	if(selValue =3D=3D "Argentina")=0A=
		html +=3D '<option value=3D"Argentina" selected=3D"selected" =
>Argentina</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Argentina" >Argentina</option>';=0A=
	if(selValue =3D=3D "Australia")=0A=
		html +=3D '<option value=3D"Australia" selected=3D"selected" =
>Australia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Australia" >Australia</option>';=0A=
	if(selValue =3D=3D "Austria")=0A=
		html +=3D '<option value=3D"Austria" selected=3D"selected" =
>Austria</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Austria" >Austria</option>';=0A=
	if(selValue =3D=3D "Belarus")=0A=
		html +=3D '<option value=3D"Belarus" selected=3D"selected" =
>Belarus</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Belarus" >Belarus</option>';		=0A=
	if(selValue =3D=3D "Belgium")=0A=
		html +=3D '<option value=3D"Belgium" selected=3D"selected" =
>Belgium</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Belgium" >Belgium</option>';=0A=
	if(selValue =3D=3D "Brazil")=0A=
		html +=3D '<option value=3D"Brazil" selected=3D"selected" =
>Brazil</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Brazil" >Brazil</option>';=0A=
	if(selValue =3D=3D "Bulgaria")=0A=
		html +=3D '<option value=3D"Bulgaria" selected=3D"selected" =
>Bulgaria</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Bulgaria" >Bulgaria</option>';=0A=
	if(selValue =3D=3D "Canada")=0A=
		html +=3D '<option value=3D"Canada" selected=3D"selected" =
>Canada</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Canada" >Canada</option>';=0A=
	if(selValue =3D=3D "Chile")=0A=
		html +=3D '<option value=3D"Chile" selected=3D"selected" =
>Chile</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Chile" >Chile</option>';=0A=
	if(selValue =3D=3D "Colombia")=0A=
		html +=3D '<option value=3D"Colombia" selected=3D"selected" =
>Colombia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Colombia" >Colombia</option>';=0A=
	if(selValue =3D=3D "Croatia")=0A=
		html +=3D '<option value=3D"Croatia" selected=3D"selected" =
>Croatia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Croatia" >Croatia</option>';		=0A=
	if(selValue =3D=3D "Czech Republic")=0A=
		html +=3D '<option value=3D"Czech Republic" selected=3D"selected" =
>Czech Republic</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Czech Republic" >Czech Republic</option>';=0A=
	if(selValue =3D=3D "Denmark")=0A=
		html +=3D '<option value=3D"Denmark" selected=3D"selected" =
>Denmark</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Denmark" >Denmark</option>';=0A=
	if(selValue =3D=3D "Egypt")=0A=
		html +=3D '<option value=3D"Egypt" selected=3D"selected" =
>Egypt</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Egypt" >Egypt</option>';=0A=
	if(selValue =3D=3D "Estonia")=0A=
		html +=3D '<option value=3D"Estonia" selected=3D"selected" =
>Estonia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Estonia" >Estonia</option>';=0A=
	if(selValue =3D=3D "Finland")=0A=
		html +=3D '<option value=3D"Finland" selected=3D"selected" =
>Finland</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Finland" >Finland</option>';=0A=
	if(selValue =3D=3D "France")=0A=
		html +=3D '<option value=3D"France" selected=3D"selected" =
>France</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"France" >France</option>';=0A=
	if(selValue =3D=3D "Germany")=0A=
		html +=3D '<option value=3D"Germany" selected=3D"selected" =
>Germany</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Germany" >Germany</option>';=0A=
	if(selValue =3D=3D "Greece")=0A=
		html +=3D '<option value=3D"Greece" selected=3D"selected" =
>Greece</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Greece" >Greece</option>';=0A=
	if(selValue =3D=3D "Hungary")=0A=
		html +=3D '<option value=3D"Hungary" selected=3D"selected" =
>Hungary</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Hungary" >Hungary</option>';=0A=
	if(selValue =3D=3D "Iceland")=0A=
		html +=3D '<option value=3D"Iceland" selected=3D"selected" =
>Iceland</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Iceland" >Iceland</option>';=0A=
	if(selValue =3D=3D "India")=0A=
		html +=3D '<option value=3D"India" selected=3D"selected" =
>India</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"India" >India</option>';=0A=
	if(selValue =3D=3D "Indonesia")=0A=
		html +=3D '<option value=3D"Indonesia" selected=3D"selected" =
>Indonesia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Indonesia" >Indonesia</option>';=0A=
	if(selValue =3D=3D "Iran")=0A=
		html +=3D '<option value=3D"Iran" selected=3D"selected" =
>Iran</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Iran" >Iran</option>';=0A=
	if(selValue =3D=3D "Iraq")=0A=
		html +=3D '<option value=3D"Iraq" selected=3D"selected" =
>Iraq</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Iraq" >Iraq</option>';=0A=
	if(selValue =3D=3D "Ireland")=0A=
		html +=3D '<option value=3D"Ireland" selected=3D"selected" =
>Ireland</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Ireland" >Ireland</option>';=0A=
	if(selValue =3D=3D "Israel")=0A=
		html +=3D '<option value=3D"Israel" selected=3D"selected" =
>Israel</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Israel" >Israel</option>';=0A=
	if(selValue =3D=3D "Italy")=0A=
		html +=3D '<option value=3D"Italy" selected=3D"selected" =
>Italy</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Italy" >Italy</option>';=0A=
	if(selValue =3D=3D "Japan")=0A=
		html +=3D '<option value=3D"Japan" selected=3D"selected" =
>Japan</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Japan" >Japan</option>';		=0A=
	if(selValue =3D=3D "Korea")=0A=
		html +=3D '<option value=3D"Korea" selected=3D"selected" =
>Korea</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Korea" >Korea</option>';=0A=
	if(selValue =3D=3D "Kuweit")=0A=
		html +=3D '<option value=3D"Kuweit" selected=3D"selected" =
>Kuweit</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Kuweit" >Kuweit</option>';=0A=
	if(selValue =3D=3D "Latvia")=0A=
		html +=3D '<option value=3D"Latvia" selected=3D"selected" =
>Latvia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Latvia" >Latvia</option>';=0A=
	if(selValue =3D=3D "Lithuania")=0A=
		html +=3D '<option value=3D"Lithuania" selected=3D"selected" =
>Lithuania</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Lithuania" >Lithuania</option>';		=0A=
	if(selValue =3D=3D "Luxembourg")=0A=
		html +=3D '<option value=3D"Luxembourg" selected=3D"selected" =
>Luxembourg</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Luxembourg" >Luxembourg</option>';=0A=
	if(selValue =3D=3D "Macau")=0A=
		html +=3D '<option value=3D"Macau" selected=3D"selected" =
>Macau</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Macau" >Macau</option>';=0A=
	if(selValue =3D=3D "Malaysia")=0A=
		html +=3D '<option value=3D"Malaysia" selected=3D"selected" =
>Malaysia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Malaysia" >Malaysia</option>';		=0A=
	if(selValue =3D=3D "Mexico")=0A=
		html +=3D '<option value=3D"Mexico" selected=3D"selected" =
>Mexico</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Mexico" >Mexico</option>';=0A=
	if(selValue =3D=3D "Morocco")=0A=
		html +=3D '<option value=3D"Morocco" selected=3D"selected" =
>Morocco</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Morocco" >Morocco</option>';=0A=
	if(selValue =3D=3D "Netherlands")=0A=
		html +=3D '<option value=3D"Netherlands" selected=3D"selected" =
>Netherlands</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Netherlands" >Netherlands</option>';=0A=
	if(selValue =3D=3D "New Zealand")=0A=
		html +=3D '<option value=3D"New Zealand" selected=3D"selected" >New =
Zealand</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"New Zealand" >New Zealand</option>';=0A=
	if(selValue =3D=3D "Norway")=0A=
		html +=3D '<option value=3D"Norway" selected=3D"selected" =
>Norway</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Norway" >Norway</option>';=0A=
	if(selValue =3D=3D "Pakistan")=0A=
		html +=3D '<option value=3D"Pakistan" selected=3D"selected" =
>Pakistan</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Pakistan" >Pakistan</option>';=0A=
	if(selValue =3D=3D "Paraquay")=0A=
		html +=3D '<option value=3D"Paraquay" selected=3D"selected" =
>Paraquay</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Paraquay" >Paraquay</option>';=0A=
	if(selValue =3D=3D "Peru")=0A=
		html +=3D '<option value=3D"Peru" selected=3D"selected" =
>Peru</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Peru" >Peru</option>';=0A=
	if(selValue =3D=3D "Philippines")=0A=
		html +=3D '<option value=3D"Philippines" selected=3D"selected" =
>Philippines</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Philippines" >Philippines</option>';=0A=
	if(selValue =3D=3D "Poland")=0A=
		html +=3D '<option value=3D"Poland" selected=3D"selected" =
>Poland</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Poland" >Poland</option>';=0A=
	if(selValue =3D=3D "Portugal")=0A=
		html +=3D '<option value=3D"Portugal" selected=3D"selected" =
>Portugal</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Portugal" >Portugal</option>';=0A=
	if(selValue =3D=3D "Qatar")=0A=
		html +=3D '<option value=3D"Qatar" selected=3D"selected" =
>Qatar</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Qatar" >Qatar</option>';=0A=
	if(selValue =3D=3D "Romania")=0A=
		html +=3D '<option value=3D"Romania" selected=3D"selected" =
>Romania</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Romania" >Romania</option>';=0A=
	if(selValue =3D=3D "Russia")=0A=
		html +=3D '<option value=3D"Russia" selected=3D"selected" =
>Russia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Russia" >Russia</option>';=0A=
	if(selValue =3D=3D "Saudi Arabia")=0A=
		html +=3D '<option value=3D"Saudi Arabia" selected=3D"selected" >Saudi =
Arabia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Saudi Arabia" >Saudi Arabia</option>';=0A=
	if(selValue =3D=3D "Serbia")=0A=
		html +=3D '<option value=3D"Serbia" selected=3D"selected" =
>Serbia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Serbia" >Serbia</option>';		=0A=
	if(selValue =3D=3D "Singapore")=0A=
		html +=3D '<option value=3D"Singapore" selected=3D"selected" =
>Singapore</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Singapore" >Singapore</option>';=0A=
	if(selValue =3D=3D "Slovak Republic")=0A=
		html +=3D '<option value=3D"Slovak Republic" selected=3D"selected" =
>Slovak Republic</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Slovak Republic" >Slovak =
Republic</option>';=0A=
	if(selValue =3D=3D "Slovenia")=0A=
		html +=3D '<option value=3D"Slovenia" selected=3D"selected" =
>Slovenia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Slovenia" >Slovenia</option>';	=0A=
	if(selValue =3D=3D "South Africa")=0A=
		html +=3D '<option value=3D"South Africa" selected=3D"selected" >South =
Africa</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"South Africa" >South Africa</option>';=0A=
	if(selValue =3D=3D "Spain")=0A=
		html +=3D '<option value=3D"Spain" selected=3D"selected" =
>Spain</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Spain" >Spain</option>';			=0A=
	if(selValue =3D=3D "Sweden")=0A=
		html +=3D '<option value=3D"Sweden" selected=3D"selected" =
>Sweden</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Sweden" >Sweden</option>';	=0A=
	if(selValue =3D=3D "Switzerland")=0A=
		html +=3D '<option value=3D"Switzerland" selected=3D"selected" =
>Switzerland</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Switzerland" >Switzerland</option>';=0A=
	if(selValue =3D=3D "Tasmania")=0A=
		html +=3D '<option value=3D"Tasmania" selected=3D"selected" =
>Tasmania</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Tasmania" >Tasmania</option>';			=0A=
	if(selValue =3D=3D "Tunisia")=0A=
		html +=3D '<option value=3D"Tunisia" selected=3D"selected" =
>Tunisia</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Tunisia" >Tunisia</option>';	=0A=
	if(selValue =3D=3D "Ukraine")=0A=
		html +=3D '<option value=3D"Ukraine" selected=3D"selected" =
>Ukraine</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Ukraine" >Ukraine</option>';	=0A=
	if(selValue =3D=3D "United Arab Emirates")=0A=
		html +=3D '<option value=3D"United Arab Emirates" =
selected=3D"selected" >United Arab Emirates</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"United Arab Emirates" >United Arab =
Emirates</option>';	=0A=
	if(selValue =3D=3D "United Kingdom")=0A=
		html +=3D '<option value=3D"United Kingdom" selected=3D"selected" =
>United Kingdom</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"United Kingdom" >United Kingdom</option>';	=0A=
	if(selValue =3D=3D "Uruguay")=0A=
		html +=3D '<option value=3D"Uruguay" selected=3D"selected" =
>Uruguay</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"Uruguay" >Uruguay</option>';	=0A=
	if(selValue =3D=3D "USA")=0A=
		html +=3D '<option value=3D"USA" selected=3D"selected" >USA</option>';=0A=
	else=0A=
		html +=3D '<option value=3D"USA" >USA</option>';		=0A=
	html +=3D	'</select>';		=0A=
	return html;=0A=
}	=0A=
*/=0A=
=0A=
/*	function setPersonPanelCheckText() {=0A=
=0A=
		if (personPanel !=3D null) {=0A=
=0A=
			body =3D '=0A=
=0A=
				$query =3D "SELECT id,name,sex,dateofbirth,color,sire_id,dam_id FROM =
dog WHERE name LIKE '%$searchterm%'";=0A=
=0A=
	$result =3D mysql_query($query) or die('Query failed: ' . =
mysql_error());=0A=
=0A=
	if (mysql_num_rows($result) < 1) {=0A=
=0A=
	?>=0A=
=0A=
	<div align=3D"center" style=3D"padding:10px">=0A=
=0A=
		<p>Your dog has not been found in our database.</p>=0A=
=0A=
		<a href=3D"checkdog.php?step=3D2&searchname=3D<? echo =
stripslashes($searchterm) ?>&selectedDog=3Dnew">Go on adding</a>=0A=
=0A=
	</div>		=0A=
=0A=
	<?=0A=
=0A=
	} else {=0A=
=0A=
	?>=0A=
=0A=
	<form action=3D"checkdog.php" method=3D"get">=0A=
=0A=
	<div align=3D"left" style=3D"padding:10px">=0A=
=0A=
		<p>Please check whether your dog is one of the following dogs found in =
our database and select your dog.</p>=0A=
=0A=
	</div>		=0A=
=0A=
	<table border=3D"0" cellpadding=3D"10px">=0A=
=0A=
		<tr>=0A=
=0A=
			<td valign=3D"top"><strong>Found dogs: </strong></td>=0A=
=0A=
			<td>=0A=
=0A=
				<?php =0A=
=0A=
					while ($line =3D mysql_fetch_object($result)) {=0A=
=0A=
						?>=0A=
=0A=
						<input type=3D"radio" name=3D"selectedDog" value=3D"<?php echo =
$line -> id?>" =
onClick=3D"getElementById('ok_btn').removeAttribute('disabled');" >=0A=
=0A=
						<label><?php =0A=
=0A=
							echo $line->name; =0A=
=0A=
							// get sire and dam names=0A=
=0A=
							if ($line->sire_id) {=0A=
=0A=
								$r =3D mysql_query("SELECT name FROM dog WHERE =
id=3D$line->sire_id") or die ('Query failed: ' . mysql_error());=0A=
=0A=
								$l =3D mysql_fetch_object($r);=0A=
=0A=
								echo " ($l->name";=0A=
=0A=
							}=0A=
=0A=
							if ($line->dam_id) {							=0A=
=0A=
								$r =3D mysql_query("SELECT name FROM dog WHERE =
id=3D$line->dam_id") or die ('Query failed: ' . mysql_error());=0A=
=0A=
								$l =3D mysql_fetch_object($r);=0A=
=0A=
								echo " x $l->name)";							=0A=
=0A=
							}=0A=
=0A=
							echo ", $line->sex";=0A=
=0A=
							echo ", $line->color"; =0A=
=0A=
							echo ", "; echo substr($line->dateofbirth,0,4); =0A=
=0A=
						?></label><br>=0A=
=0A=
				<?php=0A=
=0A=
					}=0A=
=0A=
				?>=0A=
=0A=
				<input type=3D"hidden" name=3D"step" value=3D"2"/>=0A=
=0A=
				<input type=3D"hidden" name=3D"searchname" value=3D"<?php echo =
stripslashes($searchterm); ?>" />=0A=
=0A=
				<p>&nbsp;</p>=0A=
=0A=
				<p><b>Please look carefully at all dogs listed above.<br> =0A=
=0A=
				It is very important that you only select this if 'your <?php echo =
stripslashes($searchterm);?>' is not one of the above dogs.</b></p>=0A=
=0A=
				<p>=0A=
=0A=
					<input type=3D"radio" name=3D"selectedDog" value=3D"new" =
onClick=3D"getElementById('ok_btn').removeAttribute('disabled');" \>=0A=
=0A=
					<label>I have checked that '<?php echo =
stripslashes($searchterm);?>' is not one of the above dogs.</label>=0A=
=0A=
				</p>				=0A=
=0A=
			</td>=0A=
=0A=
		</tr>=0A=
=0A=
		<tr>=0A=
=0A=
  		<td colspan=3D"2" align=3D"center">=0A=
=0A=
			<input id=3D"ok_btn" type=3D"submit" class=3D"button" value=3D"OK" =
disabled=3D"disabled"/>=0A=
=0A=
  	</td>=0A=
=0A=
  </tr>=0A=
=0A=
	</table>=0A=
=0A=
	</form>=0A=
=0A=
			';=0A=
=0A=
			personPanel.setBody(body);=0A=
=0A=
		}=0A=
=0A=
	}*/=0A=
=0A=
																		
------=_NextPart_000_0000_01CA28F5.71E28690
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://thewhippetarchives.net/js/wz_tooltip.js

/* This notice must be untouched at all times.=0A=
=0A=
wz_tooltip.js	 v. 4.12=0A=
=0A=
The latest version is available at=0A=
http://www.walterzorn.com=0A=
or http://www.devira.com=0A=
or http://www.walterzorn.de=0A=
=0A=
Copyright (c) 2002-2007 Walter Zorn. All rights reserved.=0A=
Created 1.12.2002 by Walter Zorn (Web: http://www.walterzorn.com )=0A=
Last modified: 13.7.2007=0A=
=0A=
Easy-to-use cross-browser tooltips.=0A=
Just include the script at the beginning of the <body> section, and =
invoke=0A=
Tip('Tooltip text') from within the desired HTML onmouseover =
eventhandlers.=0A=
No container DIV, no onmouseouts required.=0A=
By default, width of tooltips is automatically adapted to content.=0A=
Is even capable of dynamically converting arbitrary HTML elements to =
tooltips=0A=
by calling TagToTip('ID_of_HTML_element_to_be_converted') instead of =
Tip(),=0A=
which means you can put important, search-engine-relevant stuff into =
tooltips.=0A=
Appearance of tooltips can be individually configured=0A=
via commands passed to Tip() or TagToTip().=0A=
=0A=
Tab Width: 4=0A=
LICENSE: LGPL=0A=
=0A=
This library is free software; you can redistribute it and/or=0A=
modify it under the terms of the GNU Lesser General Public=0A=
License (LGPL) as published by the Free Software Foundation; either=0A=
version 2.1 of the License, or (at your option) any later version.=0A=
=0A=
This library is distributed in the hope that it will be useful,=0A=
but WITHOUT ANY WARRANTY; without even the implied warranty of=0A=
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.=0A=
=0A=
For more details on the GNU Lesser General Public License,=0A=
see http://www.gnu.org/copyleft/lesser.html=0A=
*/=0A=
=0A=
var config =3D new Object();=0A=
=0A=
=0A=
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  GLOBAL =
TOOPTIP CONFIGURATION  =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
//=0A=
var  tt_Debug	=3D true		// false or true - recommended: false once you =
release your page to the public=0A=
var  tt_Enabled	=3D true		// Allows to (temporarily) suppress tooltips, =
e.g. by providing the user with a button that sets this global variable =
to false=0A=
var  TagsToTip	=3D true		// false or true - if true, the script is =
capable of converting HTML elements to tooltips=0A=
=0A=
// For each of the following config variables there exists a command, =
which is=0A=
// just the variablename in uppercase, to be passed to Tip() or =
TagToTip() to=0A=
// configure tooltips individually. Individual commands override global=0A=
// configuration. Order of commands is arbitrary.=0A=
// Example: onmouseover=3D"Tip('Tooltip text', LEFT, true, BGCOLOR, =
'#FF9900', FADEIN, 400)"=0A=
=0A=
config. Above			=3D false 	// false or true - tooltip above mousepointer?=0A=
config. BgColor 		=3D '#E4E7FF' // Background color=0A=
config. BgImg			=3D ''		// Path to background image, none if empty =
string ''=0A=
config. BorderColor 	=3D '#002299'=0A=
config. BorderStyle 	=3D 'solid'	// Any permitted CSS value, but I =
recommend 'solid', 'dotted' or 'dashed'=0A=
config. BorderWidth 	=3D 1=0A=
config. CenterMouse 	=3D false 	// false or true - center the tip =
horizontally below (or above) the mousepointer=0A=
config. ClickClose		=3D false 	// false or true - close tooltip if the =
user clicks somewhere=0A=
config. CloseBtn		=3D false 	// false or true - closebutton in titlebar=0A=
config. CloseBtnColors	=3D ['#990000', '#FFFFFF', '#DD3333', '#FFFFFF']	 =
 // [Background, text, hovered background, hovered text] - use empty =
strings '' to inherit title colors=0A=
config. CloseBtnText	=3D '&nbsp;X&nbsp;'	// Close button text (may also =
be an image tag)=0A=
config. CopyContent		=3D true		// When converting a HTML element to a =
tooltip, copy only the element's content, rather than converting the =
element by its own=0A=
config. Delay			=3D 400		// Time span in ms until tooltip shows up=0A=
config. Duration		=3D 0 		// Time span in ms after which the tooltip =
disappears; 0 for infinite duration=0A=
config. FadeIn			=3D 0 		// Fade-in duration in ms, e.g. 400; 0 for no =
animation=0A=
config. FadeOut 		=3D 0=0A=
config. FadeInterval	=3D 30		// Duration of each fade step in ms =
(recommended: 30) - shorter is smoother but causes more CPU-load=0A=
config. Fix 			=3D null		// Fixated position - x- an y-oordinates in =
brackets, e.g. [210, 480], or null for no fixation=0A=
config. FollowMouse		=3D true		// false or true - tooltip follows the =
mouse=0A=
config. FontColor		=3D '#000044'=0A=
config. FontFace		=3D 'Verdana,Geneva,sans-serif'=0A=
config. FontSize		=3D '8pt' 	// E.g. '9pt' or '12px' - unit is mandatory=0A=
config. FontWeight		=3D 'normal'	// 'normal' or 'bold';=0A=
config. Left			=3D false 	// false or true - tooltip on the left of the =
mouse=0A=
config. OffsetX 		=3D 14		// Horizontal offset of left-top corner from =
mousepointer=0A=
config. OffsetY 		=3D 8 		// Vertical offset=0A=
config. Opacity 		=3D 100		// Integer between 0 and 100 - opacity of =
tooltip in percent=0A=
config. Padding 		=3D 3 		// Spacing between border and content=0A=
config. Shadow			=3D false 	// false or true=0A=
config. ShadowColor 	=3D '#C0C0C0'=0A=
config. ShadowWidth 	=3D 5=0A=
config. Sticky			=3D false 	// Do NOT hide tooltip on mouseout? false or =
true=0A=
config. TextAlign		=3D 'left'	// 'left', 'right' or 'justify'=0A=
config. Title			=3D ''		// Default title text applied to all tips (no =
default title: empty string '')=0A=
config. TitleAlign		=3D 'left'	// 'left' or 'right' - text alignment =
inside the title bar=0A=
config. TitleBgColor	=3D ''		// If empty string '', BorderColor will be =
used=0A=
config. TitleFontColor	=3D '#ffffff'	// Color of title text - if '', =
BgColor (of tooltip body) will be used=0A=
config. TitleFontFace	=3D ''		// If '' use FontFace (boldified)=0A=
config. TitleFontSize	=3D ''		// If '' use FontSize=0A=
config. Width			=3D 0 		// Tooltip width; 0 for automatic adaption to =
tooltip content=0A=
//=3D=3D=3D=3D=3D=3D=3D  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING =
BELOW  =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D//=0A=
=0A=
=0A=
=0A=
=0A=
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =
PUBLIC  =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D//=0A=
function Tip()=0A=
{=0A=
	tt_Tip(arguments, null);=0A=
}=0A=
function TagToTip()=0A=
{=0A=
	if(TagsToTip)=0A=
	{=0A=
		var t2t =3D tt_GetElt(arguments[0]);=0A=
		if(t2t)=0A=
			tt_Tip(arguments, t2t);=0A=
	}=0A=
}=0A=
=0A=
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  PUBLIC =
EXTENSION API	=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D//=0A=
// Extension eventhandlers currently supported:=0A=
// OnLoadConfig, OnCreateContentString, OnSubDivsCreated, OnShow, =
OnMoveBefore,=0A=
// OnMoveAfter, OnHideInit, OnHide, OnKill=0A=
=0A=
var tt_aElt =3D new Array(10), // Container DIV, outer title & body =
DIVs, inner title & body TDs, closebutton SPAN, shadow DIVs, and IFRAME =
to cover windowed elements in IE=0A=
tt_aV =3D new Array(),	// Caches and enumerates config data for =
currently active tooltip=0A=
tt_sContent,			// Inner tooltip text or HTML=0A=
tt_scrlX =3D 0, tt_scrlY =3D 0,=0A=
tt_musX, tt_musY,=0A=
tt_over,=0A=
tt_x, tt_y, tt_w, tt_h; // Position, width and height of currently =
displayed tooltip=0A=
=0A=
function tt_Extension()=0A=
{=0A=
	tt_ExtCmdEnum();=0A=
	tt_aExt[tt_aExt.length] =3D this;=0A=
	return this;=0A=
}=0A=
function tt_SetTipPos(x, y)=0A=
{=0A=
	var css =3D tt_aElt[0].style;=0A=
=0A=
	tt_x =3D x;=0A=
	tt_y =3D y;=0A=
	css.left =3D x + "px";=0A=
	css.top =3D y + "px";=0A=
	if(tt_ie56)=0A=
	{=0A=
		var ifrm =3D tt_aElt[tt_aElt.length - 1];=0A=
		if(ifrm)=0A=
		{=0A=
			ifrm.style.left =3D css.left;=0A=
			ifrm.style.top =3D css.top;=0A=
		}=0A=
	}=0A=
}=0A=
function tt_Hide()=0A=
{=0A=
	if(tt_db && tt_iState)=0A=
	{=0A=
		if(tt_iState & 0x2)=0A=
		{=0A=
			tt_aElt[0].style.visibility =3D "hidden";=0A=
			tt_ExtCallFncs(0, "Hide");=0A=
		}=0A=
		tt_tShow.EndTimer();=0A=
		tt_tHide.EndTimer();=0A=
		tt_tDurt.EndTimer();=0A=
		tt_tFade.EndTimer();=0A=
		if(!tt_op && !tt_ie)=0A=
		{=0A=
			tt_tWaitMov.EndTimer();=0A=
			tt_bWait =3D false;=0A=
		}=0A=
		if(tt_aV[CLICKCLOSE])=0A=
			tt_RemEvtFnc(document, "mouseup", tt_HideInit);=0A=
		tt_AddRemOutFnc(false);=0A=
		tt_ExtCallFncs(0, "Kill");=0A=
		// In case of a TagToTip tooltip, hide converted DOM node and=0A=
		// re-insert it into document=0A=
		if(tt_t2t && !tt_aV[COPYCONTENT])=0A=
		{=0A=
			tt_t2t.style.display =3D "none";=0A=
			tt_MovDomNode(tt_t2t, tt_aElt[6], tt_t2tDad);=0A=
		}=0A=
		tt_iState =3D 0;=0A=
		tt_over =3D null;=0A=
		tt_ResetMainDiv();=0A=
		if(tt_aElt[tt_aElt.length - 1])=0A=
			tt_aElt[tt_aElt.length - 1].style.display =3D "none";=0A=
	}=0A=
}=0A=
function tt_GetElt(id)=0A=
{=0A=
	return(document.getElementById ? document.getElementById(id)=0A=
			: document.all ? document.all[id]=0A=
			: null);=0A=
}=0A=
function tt_GetDivW(el)=0A=
{=0A=
	return(el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0);=0A=
}=0A=
function tt_GetDivH(el)=0A=
{=0A=
	return(el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0);=0A=
}=0A=
function tt_GetScrollX()=0A=
{=0A=
	return(window.pageXOffset || (tt_db ? (tt_db.scrollLeft || 0) : 0));=0A=
}=0A=
function tt_GetScrollY()=0A=
{=0A=
	return(window.pageYOffset || (tt_db ? (tt_db.scrollTop || 0) : 0));=0A=
}=0A=
function tt_GetClientW()=0A=
{=0A=
	return(document.body && (typeof(document.body.clientWidth) !=3D tt_u) ? =
document.body.clientWidth=0A=
			: (typeof(window.innerWidth) !=3D tt_u) ? window.innerWidth=0A=
			: tt_db ? (tt_db.clientWidth || 0)=0A=
			: 0);=0A=
}=0A=
function tt_GetClientH()=0A=
{=0A=
	// Exactly this order seems to yield correct values in all major =
browsers=0A=
	return(document.body && (typeof(document.body.clientHeight) !=3D tt_u) =
? document.body.clientHeight=0A=
			: (typeof(window.innerHeight) !=3D tt_u) ? window.innerHeight=0A=
			: tt_db ? (tt_db.clientHeight || 0)=0A=
			: 0);=0A=
}=0A=
function tt_GetEvtX(e)=0A=
{=0A=
	return (e ? ((typeof(e.pageX) !=3D tt_u) ? e.pageX : (e.clientX + =
tt_scrlX)) : 0);=0A=
}=0A=
function tt_GetEvtY(e)=0A=
{=0A=
	return (e ? ((typeof(e.pageY) !=3D tt_u) ? e.pageY : (e.clientY + =
tt_scrlY)) : 0);=0A=
}=0A=
function tt_AddEvtFnc(el, sEvt, PFnc)=0A=
{=0A=
	if(el)=0A=
	{=0A=
		if(el.addEventListener)=0A=
			el.addEventListener(sEvt, PFnc, false);=0A=
		else=0A=
			el.attachEvent("on" + sEvt, PFnc);=0A=
	}=0A=
}=0A=
function tt_RemEvtFnc(el, sEvt, PFnc)=0A=
{=0A=
	if(el)=0A=
	{=0A=
		if(el.removeEventListener)=0A=
			el.removeEventListener(sEvt, PFnc, false);=0A=
		else=0A=
			el.detachEvent("on" + sEvt, PFnc);=0A=
	}=0A=
}=0A=
=0A=
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  =
PRIVATE  =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D//=0A=
var tt_aExt =3D new Array(),	// Array of extension objects=0A=
=0A=
tt_db, tt_op, tt_ie, tt_ie56, tt_bBoxOld,	// Browser flags=0A=
tt_body,=0A=
tt_flagOpa, 			// Opacity support: 1=3DIE, 2=3DKhtml, 3=3DKHTML, =
4=3DMoz, 5=3DW3C=0A=
tt_maxPosX, tt_maxPosY,=0A=
tt_iState =3D 0,			// Tooltip active |=3D 1, shown |=3D 2, move with =
mouse |=3D 4=0A=
tt_opa, 				// Currently applied opacity=0A=
tt_bJmpVert,			// Tip above mouse (or ABOVE tip below mouse)=0A=
tt_t2t, tt_t2tDad,		// Tag converted to tip, and its parent element in =
the document=0A=
tt_elDeHref,			// The tag from which Opera has removed the href attribute=0A=
// Timer=0A=
tt_tShow =3D new Number(0), tt_tHide =3D new Number(0), tt_tDurt =3D new =
Number(0),=0A=
tt_tFade =3D new Number(0), tt_tWaitMov =3D new Number(0),=0A=
tt_bWait =3D false,=0A=
tt_u =3D "undefined";=0A=
=0A=
=0A=
function tt_Init()=0A=
{=0A=
	tt_MkCmdEnum();=0A=
	// Send old browsers instantly to hell=0A=
	if(!tt_Browser() || !tt_MkMainDiv())=0A=
		return;=0A=
	tt_IsW3cBox();=0A=
	tt_OpaSupport();=0A=
	tt_AddEvtFnc(document, "mousemove", tt_Move);=0A=
	// In Debug mode we search for TagToTip() calls in order to notify=0A=
	// the user if they've forgotten to set the TagsToTip config flag=0A=
	if(TagsToTip || tt_Debug)=0A=
		tt_SetOnloadFnc();=0A=
	tt_AddEvtFnc(window, "scroll",=0A=
		function()=0A=
		{=0A=
			tt_scrlX =3D tt_GetScrollX();=0A=
			tt_scrlY =3D tt_GetScrollY();=0A=
			if(tt_iState && !(tt_aV[STICKY] && (tt_iState & 2)))=0A=
				tt_HideInit();=0A=
		} );=0A=
	// Ensure the tip be hidden when the page unloads=0A=
	tt_AddEvtFnc(window, "unload", tt_Hide);=0A=
	tt_Hide();=0A=
}=0A=
// Creates command names by translating config variable names to upper =
case=0A=
function tt_MkCmdEnum()=0A=
{=0A=
	var n =3D 0;=0A=
	for(var i in config)=0A=
		eval("window." + i.toString().toUpperCase() + " =3D " + n++);=0A=
	tt_aV.length =3D n;=0A=
}=0A=
function tt_Browser()=0A=
{=0A=
	var n, nv, n6, w3c;=0A=
=0A=
	n =3D navigator.userAgent.toLowerCase(),=0A=
	nv =3D navigator.appVersion;=0A=
	tt_op =3D (document.defaultView && typeof(eval("w" + "indow" + "." + =
"o" + "p" + "er" + "a")) !=3D tt_u);=0A=
	tt_ie =3D n.indexOf("msie") !=3D -1 && document.all && !tt_op;=0A=
	if(tt_ie)=0A=
	{=0A=
		var ieOld =3D (!document.compatMode || document.compatMode =3D=3D =
"BackCompat");=0A=
		tt_db =3D !ieOld ? document.documentElement : (document.body || null);=0A=
		if(tt_db)=0A=
			tt_ie56 =3D parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >=3D 5.5=0A=
					&& typeof document.body.style.maxHeight =3D=3D tt_u;=0A=
	}=0A=
	else=0A=
	{=0A=
		tt_db =3D document.documentElement || document.body ||=0A=
				(document.getElementsByTagName ? =
document.getElementsByTagName("body")[0]=0A=
				: null);=0A=
		if(!tt_op)=0A=
		{=0A=
			n6 =3D document.defaultView && typeof =
document.defaultView.getComputedStyle !=3D tt_u;=0A=
			w3c =3D !n6 && document.getElementById;=0A=
		}=0A=
	}=0A=
	tt_body =3D (document.getElementsByTagName ? =
document.getElementsByTagName("body")[0]=0A=
				: (document.body || null));=0A=
	if(tt_ie || n6 || tt_op || w3c)=0A=
	{=0A=
		if(tt_body && tt_db)=0A=
		{=0A=
			if(document.attachEvent || document.addEventListener)=0A=
				return true;=0A=
		}=0A=
		else=0A=
			tt_Err("wz_tooltip.js must be included INSIDE the body section,"=0A=
					+ " immediately after the opening <body> tag.");=0A=
	}=0A=
	tt_db =3D null;=0A=
	return false;=0A=
}=0A=
function tt_MkMainDiv()=0A=
{=0A=
	// Create the tooltip DIV=0A=
	if(tt_body.insertAdjacentHTML)=0A=
		tt_body.insertAdjacentHTML("afterBegin", tt_MkMainDivHtm());=0A=
	else if(typeof tt_body.innerHTML !=3D tt_u && document.createElement && =
tt_body.appendChild)=0A=
		tt_body.appendChild(tt_MkMainDivDom());=0A=
	// FireFox Alzheimer bug=0A=
	if(window.tt_GetMainDivRefs && tt_GetMainDivRefs())=0A=
		return true;=0A=
	tt_db =3D null;=0A=
	return false;=0A=
}=0A=
function tt_MkMainDivHtm()=0A=
{=0A=
	return('<div id=3D"WzTtDiV"></div>' +=0A=
			(tt_ie56 ? ('<iframe id=3D"WzTtIfRm" src=3D"javascript:false" =
scrolling=3D"no" frameborder=3D"0" =
style=3D"filter:Alpha(opacity=3D0);position:absolute;top:0px;left:0px;dis=
play:none;"></iframe>')=0A=
			: ''));=0A=
}=0A=
function tt_MkMainDivDom()=0A=
{=0A=
	var el =3D document.createElement("div");=0A=
	if(el)=0A=
		el.id =3D "WzTtDiV";=0A=
	return el;=0A=
}=0A=
function tt_GetMainDivRefs()=0A=
{=0A=
	tt_aElt[0] =3D tt_GetElt("WzTtDiV");=0A=
	if(tt_ie56 && tt_aElt[0])=0A=
	{=0A=
		tt_aElt[tt_aElt.length - 1] =3D tt_GetElt("WzTtIfRm");=0A=
		if(!tt_aElt[tt_aElt.length - 1])=0A=
			tt_aElt[0] =3D null;=0A=
	}=0A=
	if(tt_aElt[0])=0A=
	{=0A=
		var css =3D tt_aElt[0].style;=0A=
=0A=
		css.visibility =3D "hidden";=0A=
		css.position =3D "absolute";=0A=
		css.overflow =3D "hidden";=0A=
		return true;=0A=
	}=0A=
	return false;=0A=
}=0A=
function tt_ResetMainDiv()=0A=
{=0A=
	var w =3D (window.screen && screen.width) ? screen.width : 10000;=0A=
=0A=
	tt_SetTipPos(-w, 0);=0A=
	tt_aElt[0].innerHTML =3D "";=0A=
	tt_aElt[0].style.width =3D (w - 1) + "px";=0A=
}=0A=
function tt_IsW3cBox()=0A=
{=0A=
	var css =3D tt_aElt[0].style;=0A=
=0A=
	css.padding =3D "10px";=0A=
	css.width =3D "40px";=0A=
	tt_bBoxOld =3D (tt_GetDivW(tt_aElt[0]) =3D=3D 40);=0A=
	css.padding =3D "0px";=0A=
	tt_ResetMainDiv();=0A=
}=0A=
function tt_OpaSupport()=0A=
{=0A=
	var css =3D tt_body.style;=0A=
=0A=
	tt_flagOpa =3D (typeof(css.filter) !=3D tt_u) ? 1=0A=
				: (typeof(css.KhtmlOpacity) !=3D tt_u) ? 2=0A=
				: (typeof(css.KHTMLOpacity) !=3D tt_u) ? 3=0A=
				: (typeof(css.MozOpacity) !=3D tt_u) ? 4=0A=
				: (typeof(css.opacity) !=3D tt_u) ? 5=0A=
				: 0;=0A=
}=0A=
// Ported from http://dean.edwards.name/weblog/2006/06/again/=0A=
// (Dean Edwards et al.)=0A=
function tt_SetOnloadFnc()=0A=
{=0A=
	tt_AddEvtFnc(document, "DOMContentLoaded", tt_HideSrcTags);=0A=
	tt_AddEvtFnc(window, "load", tt_HideSrcTags);=0A=
	if(tt_body.attachEvent)=0A=
		tt_body.attachEvent("onreadystatechange",=0A=
			function() {=0A=
				if(tt_body.readyState =3D=3D "complete")=0A=
					tt_HideSrcTags();=0A=
			} );=0A=
	if(/WebKit|KHTML/i.test(navigator.userAgent))=0A=
	{=0A=
		var t =3D setInterval(function() {=0A=
					if(/loaded|complete/.test(document.readyState))=0A=
					{=0A=
						clearInterval(t);=0A=
						tt_HideSrcTags();=0A=
					}=0A=
				}, 10);=0A=
	}=0A=
}=0A=
function tt_HideSrcTags()=0A=
{=0A=
	if(!window.tt_HideSrcTags || window.tt_HideSrcTags.done)=0A=
		return;=0A=
	window.tt_HideSrcTags.done =3D true;=0A=
	if(!tt_HideSrcTagsRecurs(tt_body))=0A=
		tt_Err("To enable the capability to convert HTML elements to tooltips,"=0A=
				+ " you must set TagsToTip in the global tooltip configuration"=0A=
				+ " to true.");=0A=
}=0A=
function tt_HideSrcTagsRecurs(dad)=0A=
{=0A=
	var a, ovr, asT2t;=0A=
=0A=
	// Walk the DOM tree for tags that have an onmouseover attribute=0A=
	// containing a TagToTip('...') call.=0A=
	// (.childNodes first since .children is bugous in Safari)=0A=
	a =3D dad.childNodes || dad.children || null;=0A=
	for(var i =3D a ? a.length : 0; i;)=0A=
	{--i;=0A=
		if(!tt_HideSrcTagsRecurs(a[i]))=0A=
			return false;=0A=
		ovr =3D a[i].getAttribute ? a[i].getAttribute("onmouseover")=0A=
				: (typeof a[i].onmouseover =3D=3D "function") ? a[i].onmouseover=0A=
				: null;=0A=
		if(ovr)=0A=
		{=0A=
			asT2t =3D ovr.toString().match(/TagToTip\s*\(\s*'[^'.]+'\s*[\),]/);=0A=
			if(asT2t && asT2t.length)=0A=
			{=0A=
				if(!tt_HideSrcTag(asT2t[0]))=0A=
					return false;=0A=
			}=0A=
		}=0A=
	}=0A=
	return true;=0A=
}=0A=
function tt_HideSrcTag(sT2t)=0A=
{=0A=
	var id, el;=0A=
=0A=
	// The ID passed to the found TagToTip() call identifies an HTML element=0A=
	// to be converted to a tooltip, so hide that element=0A=
	id =3D sT2t.replace(/.+'([^'.]+)'.+/, "$1");=0A=
	el =3D tt_GetElt(id);=0A=
	if(el)=0A=
	{=0A=
		if(tt_Debug && !TagsToTip)=0A=
			return false;=0A=
		else=0A=
			el.style.display =3D "none";=0A=
	}=0A=
	else=0A=
		tt_Err("Invalid ID\n'" + id + "'\npassed to TagToTip()."=0A=
				+ " There exists no HTML element with that ID.");=0A=
	return true;=0A=
}=0A=
function tt_Tip(arg, t2t)=0A=
{=0A=
	if(!tt_db)=0A=
		return;=0A=
	if(tt_iState)=0A=
		tt_Hide();=0A=
	if(!tt_Enabled)=0A=
		return;=0A=
	tt_t2t =3D t2t;=0A=
	if(!tt_ReadCmds(arg))=0A=
		return;=0A=
	tt_iState =3D 0x1 | 0x4;=0A=
	tt_AdaptConfig1();=0A=
	tt_MkTipContent(arg);=0A=
	tt_MkTipSubDivs();=0A=
	tt_FormatTip();=0A=
	tt_bJmpVert =3D false;=0A=
	tt_maxPosX =3D tt_GetClientW() + tt_scrlX - tt_w - 1;=0A=
	tt_maxPosY =3D tt_GetClientH() + tt_scrlY - tt_h - 1;=0A=
	tt_AdaptConfig2();=0A=
	// We must fake the first mousemove in order to ensure the tip=0A=
	// be immediately shown and positioned=0A=
	tt_Move();=0A=
	tt_ShowInit();=0A=
}=0A=
function tt_ReadCmds(a)=0A=
{=0A=
	var i;=0A=
=0A=
	// First load the global config values, to initialize also values=0A=
	// for which no command has been passed=0A=
	i =3D 0;=0A=
	for(var j in config)=0A=
		tt_aV[i++] =3D config[j];=0A=
	// Then replace each cached config value for which a command has been=0A=
	// passed (ensure the # of command args plus value args be even)=0A=
	if(a.length & 1)=0A=
	{=0A=
		for(i =3D a.length - 1; i > 0; i -=3D 2)=0A=
			tt_aV[a[i - 1]] =3D a[i];=0A=
		return true;=0A=
	}=0A=
	tt_Err("Incorrect call of Tip() or TagToTip().\n"=0A=
			+ "Each command must be followed by a value.");=0A=
	return false;=0A=
}=0A=
function tt_AdaptConfig1()=0A=
{=0A=
	tt_ExtCallFncs(0, "LoadConfig");=0A=
	// Inherit unspecified title formattings from body=0A=
	if(!tt_aV[TITLEBGCOLOR].length)=0A=
		tt_aV[TITLEBGCOLOR] =3D tt_aV[BORDERCOLOR];=0A=
	if(!tt_aV[TITLEFONTCOLOR].length)=0A=
		tt_aV[TITLEFONTCOLOR] =3D tt_aV[BGCOLOR];=0A=
	if(!tt_aV[TITLEFONTFACE].length)=0A=
		tt_aV[TITLEFONTFACE] =3D tt_aV[FONTFACE];=0A=
	if(!tt_aV[TITLEFONTSIZE].length)=0A=
		tt_aV[TITLEFONTSIZE] =3D tt_aV[FONTSIZE];=0A=
	if(tt_aV[CLOSEBTN])=0A=
	{=0A=
		// Use title colors for non-specified closebutton colors=0A=
		if(!tt_aV[CLOSEBTNCOLORS])=0A=
			tt_aV[CLOSEBTNCOLORS] =3D new Array("", "", "", "");=0A=
		for(var i =3D 4; i;)=0A=
		{--i;=0A=
			if(!tt_aV[CLOSEBTNCOLORS][i].length)=0A=
				tt_aV[CLOSEBTNCOLORS][i] =3D (i & 1) ? tt_aV[TITLEFONTCOLOR] : =
tt_aV[TITLEBGCOLOR];=0A=
		}=0A=
		// Enforce titlebar be shown=0A=
		if(!tt_aV[TITLE].length)=0A=
			tt_aV[TITLE] =3D " ";=0A=
	}=0A=
	// Circumvents broken display of images and fade-in flicker in Geckos < =
1.8=0A=
	if(tt_aV[OPACITY] =3D=3D 100 && typeof tt_aElt[0].style.MozOpacity !=3D =
tt_u && !Array.every)=0A=
		tt_aV[OPACITY] =3D 99;=0A=
	// Smartly shorten the delay for fade-in tooltips=0A=
	if(tt_aV[FADEIN] && tt_flagOpa && tt_aV[DELAY] > 100)=0A=
		tt_aV[DELAY] =3D Math.max(tt_aV[DELAY] - tt_aV[FADEIN], 100);=0A=
}=0A=
function tt_AdaptConfig2()=0A=
{=0A=
	if(tt_aV[CENTERMOUSE])=0A=
		tt_aV[OFFSETX] -=3D ((tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0)) =
>> 1);=0A=
}=0A=
// Expose content globally so extensions can modify it=0A=
function tt_MkTipContent(a)=0A=
{=0A=
	if(tt_t2t)=0A=
	{=0A=
		if(tt_aV[COPYCONTENT])=0A=
			tt_sContent =3D tt_t2t.innerHTML;=0A=
		else=0A=
			tt_sContent =3D "";=0A=
	}=0A=
	else=0A=
		tt_sContent =3D a[0];=0A=
	tt_ExtCallFncs(0, "CreateContentString");=0A=
}=0A=
function tt_MkTipSubDivs()=0A=
{=0A=
	var sCss =3D =
'position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0=
px;line-height:normal;width:auto;',=0A=
	sTbTrTd =3D ' cellspacing=3D0 cellpadding=3D0 border=3D0 style=3D"' + =
sCss + '"><tbody style=3D"' + sCss + '"><tr><td ';=0A=
=0A=
	tt_aElt[0].innerHTML =3D=0A=
		(''=0A=
		+ (tt_aV[TITLE].length ?=0A=
			('<div id=3D"WzTiTl" style=3D"position:relative;z-index:1;">'=0A=
			+ '<table id=3D"WzTiTlTb"' + sTbTrTd + 'id=3D"WzTiTlI" style=3D"' + =
sCss + '">'=0A=
			+ tt_aV[TITLE]=0A=
			+ '</td>'=0A=
			+ (tt_aV[CLOSEBTN] ?=0A=
				('<td align=3D"right" style=3D"' + sCss=0A=
				+ 'text-align:right;">'=0A=
				+ '<span id=3D"WzClOsE" style=3D"padding-left:2px;padding-right:2px;'=0A=
				+ 'cursor:' + (tt_ie ? 'hand' : 'pointer')=0A=
				+ ';" onmouseover=3D"tt_OnCloseBtnOver(1)" =
onmouseout=3D"tt_OnCloseBtnOver(0)" onclick=3D"tt_HideInit()">'=0A=
				+ tt_aV[CLOSEBTNTEXT]=0A=
				+ '</span></td>')=0A=
				: '')=0A=
			+ '</tr></tbody></table></div>')=0A=
			: '')=0A=
		+ '<div id=3D"WzBoDy" style=3D"position:relative;z-index:0;">'=0A=
		+ '<table' + sTbTrTd + 'id=3D"WzBoDyI" style=3D"' + sCss + '">'=0A=
		+ tt_sContent=0A=
		+ '</td></tr></tbody></table></div>'=0A=
		+ (tt_aV[SHADOW]=0A=
			? ('<div id=3D"WzTtShDwR" =
style=3D"position:absolute;overflow:hidden;"></div>'=0A=
				+ '<div id=3D"WzTtShDwB" =
style=3D"position:relative;overflow:hidden;"></div>')=0A=
			: '')=0A=
		);=0A=
	tt_GetSubDivRefs();=0A=
	// Convert DOM node to tip=0A=
	if(tt_t2t && !tt_aV[COPYCONTENT])=0A=
	{=0A=
		// Store the tag's parent element so we can restore that DOM branch=0A=
		// once the tooltip is hidden=0A=
		tt_t2tDad =3D tt_t2t.parentNode || tt_t2t.parentElement || =
tt_t2t.offsetParent || null;=0A=
		if(tt_t2tDad)=0A=
		{=0A=
			tt_MovDomNode(tt_t2t, tt_t2tDad, tt_aElt[6]);=0A=
			tt_t2t.style.display =3D "block";=0A=
		}=0A=
	}=0A=
	tt_ExtCallFncs(0, "SubDivsCreated");=0A=
}=0A=
function tt_GetSubDivRefs()=0A=
{=0A=
	var aId =3D new Array("WzTiTl", "WzTiTlTb", "WzTiTlI", "WzClOsE", =
"WzBoDy", "WzBoDyI", "WzTtShDwB", "WzTtShDwR");=0A=
=0A=
	for(var i =3D aId.length; i; --i)=0A=
		tt_aElt[i] =3D tt_GetElt(aId[i - 1]);=0A=
}=0A=
function tt_FormatTip()=0A=
{=0A=
	var css, w, iOffY, iOffSh;=0A=
=0A=
	//--------- Title DIV ----------=0A=
	if(tt_aV[TITLE].length)=0A=
	{=0A=
		css =3D tt_aElt[1].style;=0A=
		css.background =3D tt_aV[TITLEBGCOLOR];=0A=
		css.paddingTop =3D (tt_aV[CLOSEBTN] ? 2 : 0) + "px";=0A=
		css.paddingBottom =3D "1px";=0A=
		css.paddingLeft =3D css.paddingRight =3D tt_aV[PADDING] + "px";=0A=
		css =3D tt_aElt[3].style;=0A=
		css.color =3D tt_aV[TITLEFONTCOLOR];=0A=
		css.fontFamily =3D tt_aV[TITLEFONTFACE];=0A=
		css.fontSize =3D tt_aV[TITLEFONTSIZE];=0A=
		css.fontWeight =3D "bold";=0A=
		css.textAlign =3D tt_aV[TITLEALIGN];=0A=
		// Close button DIV=0A=
		if(tt_aElt[4])=0A=
		{=0A=
			css.paddingRight =3D (tt_aV[PADDING] << 1) + "px";=0A=
			css =3D tt_aElt[4].style;=0A=
			css.background =3D tt_aV[CLOSEBTNCOLORS][0];=0A=
			css.color =3D tt_aV[CLOSEBTNCOLORS][1];=0A=
			css.fontFamily =3D tt_aV[TITLEFONTFACE];=0A=
			css.fontSize =3D tt_aV[TITLEFONTSIZE];=0A=
			css.fontWeight =3D "bold";=0A=
		}=0A=
		if(tt_aV[WIDTH] > 0)=0A=
			tt_w =3D tt_aV[WIDTH] + ((tt_aV[PADDING] + tt_aV[BORDERWIDTH]) << 1);=0A=
		else=0A=
		{=0A=
			tt_w =3D tt_GetDivW(tt_aElt[3]) + tt_GetDivW(tt_aElt[4]);=0A=
			// Some spacing between title DIV and closebutton=0A=
			if(tt_aElt[4])=0A=
				tt_w +=3D tt_aV[PADDING];=0A=
		}=0A=
		// Ensure the top border of the body DIV be covered by the title DIV=0A=
		iOffY =3D -tt_aV[BORDERWIDTH];=0A=
	}=0A=
	else=0A=
	{=0A=
		tt_w =3D 0;=0A=
		iOffY =3D 0;=0A=
	}=0A=
=0A=
	//-------- Body DIV ------------=0A=
	css =3D tt_aElt[5].style;=0A=
	css.top =3D iOffY + "px";=0A=
	if(tt_aV[BORDERWIDTH])=0A=
	{=0A=
		css.borderColor =3D tt_aV[BORDERCOLOR];=0A=
		css.borderStyle =3D tt_aV[BORDERSTYLE];=0A=
		css.borderWidth =3D tt_aV[BORDERWIDTH] + "px";=0A=
	}=0A=
	if(tt_aV[BGCOLOR].length)=0A=
		css.background =3D tt_aV[BGCOLOR];=0A=
	if(tt_aV[BGIMG].length)=0A=
		css.backgroundImage =3D "url(" + tt_aV[BGIMG] + ")";=0A=
	css.padding =3D tt_aV[PADDING] + "px";=0A=
	css.textAlign =3D tt_aV[TEXTALIGN];=0A=
	// TD inside body DIV=0A=
	css =3D tt_aElt[6].style;=0A=
	css.color =3D tt_aV[FONTCOLOR];=0A=
	css.fontFamily =3D tt_aV[FONTFACE];=0A=
	css.fontSize =3D tt_aV[FONTSIZE];=0A=
	css.fontWeight =3D tt_aV[FONTWEIGHT];=0A=
	css.background =3D "";=0A=
	css.textAlign =3D tt_aV[TEXTALIGN];=0A=
	if(tt_aV[WIDTH] > 0)=0A=
		w =3D tt_aV[WIDTH] + ((tt_aV[PADDING] + tt_aV[BORDERWIDTH]) << 1);=0A=
	else=0A=
		// We measure the width of the body's inner TD, because some browsers=0A=
		// expand the width of the container and outer body DIV to 100%=0A=
		w =3D tt_GetDivW(tt_aElt[6]) + ((tt_aV[PADDING] + tt_aV[BORDERWIDTH]) =
<< 1);=0A=
	if(w > tt_w)=0A=
		tt_w =3D w;=0A=
=0A=
	//--------- Shadow DIVs ------------=0A=
	if(tt_aV[SHADOW])=0A=
	{=0A=
		tt_w +=3D tt_aV[SHADOWWIDTH];=0A=
		iOffSh =3D Math.floor((tt_aV[SHADOWWIDTH] * 4) / 3);=0A=
		// Bottom shadow=0A=
		css =3D tt_aElt[7].style;=0A=
		css.top =3D iOffY + "px";=0A=
		css.left =3D iOffSh + "px";=0A=
		css.width =3D (tt_w - iOffSh - tt_aV[SHADOWWIDTH]) + "px";=0A=
		css.height =3D tt_aV[SHADOWWIDTH] + "px";=0A=
		css.background =3D tt_aV[SHADOWCOLOR];=0A=
		// Right shadow=0A=
		css =3D tt_aElt[8].style;=0A=
		css.top =3D iOffSh + "px";=0A=
		css.left =3D (tt_w - tt_aV[SHADOWWIDTH]) + "px";=0A=
		css.width =3D tt_aV[SHADOWWIDTH] + "px";=0A=
		css.background =3D tt_aV[SHADOWCOLOR];=0A=
	}=0A=
	else=0A=
		iOffSh =3D 0;=0A=
=0A=
	//-------- Container DIV -------=0A=
	tt_SetTipOpa(tt_aV[FADEIN] ? 0 : tt_aV[OPACITY]);=0A=
	tt_FixSize(iOffY, iOffSh);=0A=
}=0A=
// Fixate the size so it can't dynamically change while the tooltip is =
moving.=0A=
function tt_FixSize(iOffY, iOffSh)=0A=
{=0A=
	var wIn, wOut, i;=0A=
=0A=
	tt_aElt[0].style.width =3D tt_w + "px";=0A=
	tt_aElt[0].style.pixelWidth =3D tt_w;=0A=
	wOut =3D tt_w - ((tt_aV[SHADOW]) ? tt_aV[SHADOWWIDTH] : 0);=0A=
	// Body=0A=
	wIn =3D wOut;=0A=
	if(!tt_bBoxOld)=0A=
		wIn -=3D ((tt_aV[PADDING] + tt_aV[BORDERWIDTH]) << 1);=0A=
	tt_aElt[5].style.width =3D wIn + "px";=0A=
	// Title=0A=
	if(tt_aElt[1])=0A=
	{=0A=
		wIn =3D wOut - (tt_aV[PADDING] << 1);=0A=
		if(!tt_bBoxOld)=0A=
			wOut =3D wIn;=0A=
		tt_aElt[1].style.width =3D wOut + "px";=0A=
		tt_aElt[2].style.width =3D wIn + "px";=0A=
	}=0A=
	tt_h =3D tt_GetDivH(tt_aElt[0]) + iOffY;=0A=
	// Right shadow=0A=
	if(tt_aElt[8])=0A=
		tt_aElt[8].style.height =3D (tt_h - iOffSh) + "px";=0A=
	i =3D tt_aElt.length - 1;=0A=
	if(tt_aElt[i])=0A=
	{=0A=
		tt_aElt[i].style.width =3D tt_w + "px";=0A=
		tt_aElt[i].style.height =3D tt_h + "px";=0A=
	}=0A=
}=0A=
function tt_DeAlt(el)=0A=
{=0A=
	var aKid;=0A=
=0A=
	if(el.alt)=0A=
		el.alt =3D "";=0A=
	if(el.title)=0A=
		el.title =3D "";=0A=
	aKid =3D el.childNodes || el.children || null;=0A=
	if(aKid)=0A=
	{=0A=
		for(var i =3D aKid.length; i;)=0A=
			tt_DeAlt(aKid[--i]);=0A=
	}=0A=
}=0A=
// This hack removes the annoying native tooltips over links in Opera=0A=
function tt_OpDeHref(el)=0A=
{=0A=
	if(!tt_op)=0A=
		return;=0A=
	if(tt_elDeHref)=0A=
		tt_OpReHref();=0A=
	while(el)=0A=
	{=0A=
		if(el.hasAttribute("href"))=0A=
		{=0A=
			el.t_href =3D el.getAttribute("href");=0A=
			el.t_stats =3D window.status;=0A=
			el.removeAttribute("href");=0A=
			el.style.cursor =3D "hand";=0A=
			tt_AddEvtFnc(el, "mousedown", tt_OpReHref);=0A=
			window.status =3D el.t_href;=0A=
			tt_elDeHref =3D el;=0A=
			break;=0A=
		}=0A=
		el =3D el.parentElement;=0A=
	}=0A=
}=0A=
function tt_ShowInit()=0A=
{=0A=
	tt_tShow.Timer("tt_Show()", tt_aV[DELAY], true);=0A=
	if(tt_aV[CLICKCLOSE])=0A=
		tt_AddEvtFnc(document, "mouseup", tt_HideInit);=0A=
}=0A=
function tt_OverInit(e)=0A=
{=0A=
	tt_over =3D e.target || e.srcElement;=0A=
	tt_DeAlt(tt_over);=0A=
	tt_OpDeHref(tt_over);=0A=
	tt_AddRemOutFnc(true);=0A=
}=0A=
function tt_Show()=0A=
{=0A=
	var css =3D tt_aElt[0].style;=0A=
=0A=
	// Override the z-index of the topmost wz_dragdrop.js D&D item=0A=
	css.zIndex =3D Math.max((window.dd && dd.z) ? (dd.z + 2) : 0, 1010);=0A=
	if(tt_aV[STICKY] || !tt_aV[FOLLOWMOUSE])=0A=
		tt_iState &=3D ~0x4;=0A=
	if(tt_aV[DURATION] > 0)=0A=
		tt_tDurt.Timer("tt_HideInit()", tt_aV[DURATION], true);=0A=
	tt_ExtCallFncs(0, "Show")=0A=
	css.visibility =3D "visible";=0A=
	tt_iState |=3D 0x2;=0A=
	if(tt_aV[FADEIN])=0A=
		tt_Fade(0, 0, tt_aV[OPACITY], Math.round(tt_aV[FADEIN] / =
tt_aV[FADEINTERVAL]));=0A=
	tt_ShowIfrm();=0A=
}=0A=
function tt_ShowIfrm()=0A=
{=0A=
	if(tt_ie56)=0A=
	{=0A=
		var ifrm =3D tt_aElt[tt_aElt.length - 1];=0A=
		if(ifrm)=0A=
		{=0A=
			var css =3D ifrm.style;=0A=
			css.zIndex =3D tt_aElt[0].style.zIndex - 1;=0A=
			css.display =3D "block";=0A=
		}=0A=
	}=0A=
}=0A=
function tt_Move(e)=0A=
{=0A=
	e =3D window.event || e;=0A=
	if(e)=0A=
	{=0A=
		tt_musX =3D tt_GetEvtX(e);=0A=
		tt_musY =3D tt_GetEvtY(e);=0A=
	}=0A=
	if(tt_iState)=0A=
	{=0A=
		if(!tt_over && e)=0A=
			tt_OverInit(e);=0A=
		if(tt_iState & 0x4)=0A=
		{=0A=
			// Protect some browsers against jam of mousemove events=0A=
			if(!tt_op && !tt_ie)=0A=
			{=0A=
				if(tt_bWait)=0A=
					return;=0A=
				tt_bWait =3D true;=0A=
				tt_tWaitMov.Timer("tt_bWait =3D false;", 1, true);=0A=
			}=0A=
			if(tt_aV[FIX])=0A=
			{=0A=
				tt_iState &=3D ~0x4;=0A=
				tt_SetTipPos(tt_aV[FIX][0], tt_aV[FIX][1]);=0A=
			}=0A=
			else if(!tt_ExtCallFncs(e, "MoveBefore"))=0A=
				tt_SetTipPos(tt_PosX(), tt_PosY());=0A=
			tt_ExtCallFncs([tt_musX, tt_musY], "MoveAfter")=0A=
		}=0A=
	}=0A=
}=0A=
function tt_PosX()=0A=
{=0A=
	var x;=0A=
=0A=
	x =3D tt_musX;=0A=
	if(tt_aV[LEFT])=0A=
		x -=3D tt_w + tt_aV[OFFSETX] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : =
0);=0A=
	else=0A=
		x +=3D tt_aV[OFFSETX];=0A=
	// Prevent tip from extending past right/left clientarea boundary=0A=
	if(x > tt_maxPosX)=0A=
		x =3D tt_maxPosX;=0A=
	return((x < tt_scrlX) ? tt_scrlX : x);=0A=
}=0A=
function tt_PosY()=0A=
{=0A=
	var y;=0A=
=0A=
	// Apply some hysteresis after the tip has snapped to the other side of =
the=0A=
	// mouse. In case of insufficient space above and below the mouse, we =
place=0A=
	// the tip below.=0A=
	if(tt_aV[ABOVE] && (!tt_bJmpVert || tt_CalcPosYAbove() >=3D tt_scrlY + =
16))=0A=
		y =3D tt_DoPosYAbove();=0A=
	else if(!tt_aV[ABOVE] && tt_bJmpVert && tt_CalcPosYBelow() > tt_maxPosY =
- 16)=0A=
		y =3D tt_DoPosYAbove();=0A=
	else=0A=
		y =3D tt_DoPosYBelow();=0A=
	// Snap to other side of mouse if tip would extend past window boundary=0A=
	if(y > tt_maxPosY)=0A=
		y =3D tt_DoPosYAbove();=0A=
	if(y < tt_scrlY)=0A=
		y =3D tt_DoPosYBelow();=0A=
	return y;=0A=
}=0A=
function tt_DoPosYBelow()=0A=
{=0A=
	tt_bJmpVert =3D tt_aV[ABOVE];=0A=
	return tt_CalcPosYBelow();=0A=
}=0A=
function tt_DoPosYAbove()=0A=
{=0A=
	tt_bJmpVert =3D !tt_aV[ABOVE];=0A=
	return tt_CalcPosYAbove();=0A=
}=0A=
function tt_CalcPosYBelow()=0A=
{=0A=
	return(tt_musY + tt_aV[OFFSETY]);=0A=
}=0A=
function tt_CalcPosYAbove()=0A=
{=0A=
	var dy =3D tt_aV[OFFSETY] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0);=0A=
	if(tt_aV[OFFSETY] > 0 && dy <=3D 0)=0A=
		dy =3D 1;=0A=
	return(tt_musY - tt_h - dy);=0A=
}=0A=
function tt_OnOut()=0A=
{=0A=
	tt_AddRemOutFnc(false);=0A=
	if(!(tt_aV[STICKY] && (tt_iState & 0x2)))=0A=
		tt_HideInit();=0A=
}=0A=
function tt_HideInit()=0A=
{=0A=
	tt_ExtCallFncs(0, "HideInit");=0A=
	tt_iState &=3D ~0x4;=0A=
	if(tt_flagOpa && tt_aV[FADEOUT])=0A=
	{=0A=
		tt_tFade.EndTimer();=0A=
		if(tt_opa)=0A=
		{=0A=
			var n =3D Math.round(tt_aV[FADEOUT] / (tt_aV[FADEINTERVAL] * =
(tt_aV[OPACITY] / tt_opa)));=0A=
			tt_Fade(tt_opa, tt_opa, 0, n);=0A=
			return;=0A=
		}=0A=
	}=0A=
	tt_tHide.Timer("tt_Hide();", 1, false);=0A=
}=0A=
function tt_OpReHref()=0A=
{=0A=
	if(tt_elDeHref)=0A=
	{=0A=
		tt_elDeHref.setAttribute("href", tt_elDeHref.t_href);=0A=
		tt_RemEvtFnc(tt_elDeHref, "mousedown", tt_OpReHref);=0A=
		window.status =3D tt_elDeHref.t_stats;=0A=
		tt_elDeHref =3D null;=0A=
	}=0A=
}=0A=
function tt_Fade(a, now, z, n)=0A=
{=0A=
	if(n)=0A=
	{=0A=
		now +=3D Math.round((z - now) / n);=0A=
		if((z > a) ? (now >=3D z) : (now <=3D z))=0A=
			now =3D z;=0A=
		else=0A=
			tt_tFade.Timer("tt_Fade("=0A=
							+ a + "," + now + "," + z + "," + (n - 1)=0A=
							+ ")",=0A=
							tt_aV[FADEINTERVAL],=0A=
							true);=0A=
	}=0A=
	now ? tt_SetTipOpa(now) : tt_Hide();=0A=
}=0A=
// To circumvent the opacity nesting flaws of IE, we set the opacity=0A=
// for each sub-DIV separately, rather than for the container DIV.=0A=
function tt_SetTipOpa(opa)=0A=
{=0A=
	tt_SetOpa(tt_aElt[5].style, opa);=0A=
	if(tt_aElt[1])=0A=
		tt_SetOpa(tt_aElt[1].style, opa);=0A=
	if(tt_aV[SHADOW])=0A=
	{=0A=
		opa =3D Math.round(opa * 0.8);=0A=
		tt_SetOpa(tt_aElt[7].style, opa);=0A=
		tt_SetOpa(tt_aElt[8].style, opa);=0A=
	}=0A=
}=0A=
function tt_OnCloseBtnOver(iOver)=0A=
{=0A=
	var css =3D tt_aElt[4].style;=0A=
=0A=
	iOver <<=3D 1;=0A=
	css.background =3D tt_aV[CLOSEBTNCOLORS][iOver];=0A=
	css.color =3D tt_aV[CLOSEBTNCOLORS][iOver + 1];=0A=
}=0A=
function tt_Int(x)=0A=
{=0A=
	var y;=0A=
=0A=
	return(isNaN(y =3D parseInt(x)) ? 0 : y);=0A=
}=0A=
// Adds or removes the document.mousemove or HoveredElem.mouseout handler=0A=
// conveniently. Keeps track of those handlers to prevent them from being=0A=
// set or removed redundantly.=0A=
function tt_AddRemOutFnc(bAdd)=0A=
{=0A=
	var PSet =3D bAdd ? tt_AddEvtFnc : tt_RemEvtFnc;=0A=
=0A=
	if(bAdd !=3D tt_AddRemOutFnc.bOn)=0A=
	{=0A=
		PSet(tt_over, "mouseout", tt_OnOut);=0A=
		tt_AddRemOutFnc.bOn =3D bAdd;=0A=
		if(!bAdd)=0A=
			tt_OpReHref();=0A=
	}=0A=
}=0A=
tt_AddRemOutFnc.bOn =3D false;=0A=
Number.prototype.Timer =3D function(s, iT, bUrge)=0A=
{=0A=
	if(!this.value || bUrge)=0A=
		this.value =3D window.setTimeout(s, iT);=0A=
}=0A=
Number.prototype.EndTimer =3D function()=0A=
{=0A=
	if(this.value)=0A=
	{=0A=
		window.clearTimeout(this.value);=0A=
		this.value =3D 0;=0A=
	}=0A=
}=0A=
function tt_SetOpa(css, opa)=0A=
{=0A=
	tt_opa =3D opa;=0A=
	if(tt_flagOpa =3D=3D 1)=0A=
	{=0A=
		// Hack for bugs of IE:=0A=
		// A DIV cannot be made visible in a single step if an opacity < 100=0A=
		// has been applied while the DIV was hidden.=0A=
		// Moreover, in IE6, applying an opacity < 100 has no effect if the=0A=
		// concerned element has no layout (position, size, zoom, ...).=0A=
		if(opa < 100)=0A=
		{=0A=
			var bVis =3D css.visibility !=3D "hidden";=0A=
			css.zoom =3D "100%";=0A=
			if(!bVis)=0A=
				css.visibility =3D "visible";=0A=
			css.filter =3D "alpha(opacity=3D" + opa + ")";=0A=
			if(!bVis)=0A=
				css.visibility =3D "hidden";=0A=
		}=0A=
		else=0A=
			css.filter =3D "";=0A=
	}=0A=
	else=0A=
	{=0A=
		opa /=3D 100.0;=0A=
		switch(tt_flagOpa)=0A=
		{=0A=
		case 2:=0A=
			css.KhtmlOpacity =3D opa; break;=0A=
		case 3:=0A=
			css.KHTMLOpacity =3D opa; break;=0A=
		case 4:=0A=
			css.MozOpacity =3D opa; break;=0A=
		case 5:=0A=
			css.opacity =3D opa; break;=0A=
		}=0A=
	}=0A=
}=0A=
function tt_MovDomNode(el, dadFrom, dadTo)=0A=
{=0A=
	if(dadFrom)=0A=
		dadFrom.removeChild(el);=0A=
	if(dadTo)=0A=
		dadTo.appendChild(el);=0A=
}=0A=
function tt_Err(sErr)=0A=
{=0A=
	if(tt_Debug)=0A=
		alert("Tooltip Script Error Message:\n\n" + sErr);=0A=
}=0A=
=0A=
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D  DEALING WITH EXTENSIONS	=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D//=0A=
function tt_ExtCmdEnum()=0A=
{=0A=
	var s;=0A=
=0A=
	// Add new command(s) to the commands enum=0A=
	for(var i in config)=0A=
	{=0A=
		s =3D "window." + i.toString().toUpperCase();=0A=
		if(eval("typeof(" + s + ") =3D=3D tt_u"))=0A=
		{=0A=
			eval(s + " =3D " + tt_aV.length);=0A=
			tt_aV[tt_aV.length] =3D null;=0A=
		}=0A=
	}=0A=
}=0A=
function tt_ExtCallFncs(arg, sFnc)=0A=
{=0A=
	var b =3D false;=0A=
	for(var i =3D tt_aExt.length; i;)=0A=
	{--i;=0A=
		var fnc =3D tt_aExt[i]["On" + sFnc];=0A=
		// Call the method the extension has defined for this event=0A=
		if(fnc && fnc(arg))=0A=
			b =3D true;=0A=
	}=0A=
	return b;=0A=
}=0A=
=0A=
tt_Init();=0A=

------=_NextPart_000_0000_01CA28F5.71E28690--

