From: "Saved by Windows Internet Explorer 8"
Subject: Mat-Adore
Date: Mon, 23 Jan 2012 19:46:54 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CCDA07.C1F09EE0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6002.18463

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/?source=gg-branded&gclid=CNHnkca3560CFUHc4AodGF1-5Q

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Mat-Adore</TITLE>
<META content=3D"text/html; charset=3Dutf-8" http-equiv=3DContent-Type>
<META name=3Ddescription content=3D"">
<META name=3Dkeywords content=3D"">
<META name=3Drobots content=3DINDEX,FOLLOW><LINK rel=3Dicon =
type=3Dimage/x-icon=20
href=3D"http://www.buymatadore.com/media/favicon/default/favicon.ico"><LI=
NK=20
rel=3D"shortcut icon" type=3Dimage/x-icon=20
href=3D"http://www.buymatadore.com/media/favicon/default/favicon.ico"><!-=
-[if lt IE 7]>=0A=
<script type=3D"text/javascript">=0A=
//<![CDATA[=0A=
    var BLANK_URL =3D 'http://www.buymatadore.com/js/blank.html';=0A=
    var BLANK_IMG =3D 'http://www.buymatadore.com/js/spacer.gif';=0A=
//]]>=0A=
</script>=0A=
<![endif]--><LINK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.buymatadore.com/js/calendar/calendar-win2k-1.css"><LIN=
K=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.buymatadore.com/skin/frontend/matadore/default/css/sty=
les.css"=20
media=3Dall><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.buymatadore.com/skin/frontend/base/default/css/widgets=
.css"=20
media=3Dall><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.buymatadore.com/skin/frontend/matadore/default/css/mat=
adore.css"=20
media=3Dall><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.buymatadore.com/skin/frontend/matadore/default/css/pri=
nt.css"=20
media=3Dprint>
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/prototype/prototype.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/lib/ccard.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/prototype/validation.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/scriptaculous/builder.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/scriptaculous/effects.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/scriptaculous/dragdrop.js"></SCRIPT>=


<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/scriptaculous/controls.js"></SCRIPT>=


<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/scriptaculous/slider.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/varien/js.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/varien/form.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/varien/menu.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/mage/translate.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/mage/cookies.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/flash/flashdetect.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/flash/trackmovie.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/prototype/window.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/prototype/window_effects.js"></SCRIP=
T>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/varien/product.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/varien/configurable.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/calendar/calendar.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.buymatadore.com/js/calendar/calendar-setup.js"></SCRIPT=
>
<!--[if lt IE 8]>=0A=
<link rel=3D"stylesheet" type=3D"text/css" =
href=3D"http://www.buymatadore.com/skin/frontend/matadore/default/css/sty=
les-ie.css" media=3D"all" />=0A=
<![endif]--><!--[if lt IE 7]>=0A=
<script type=3D"text/javascript" =
src=3D"http://www.buymatadore.com/js/lib/ds-sleight.js"></script>=0A=
<script type=3D"text/javascript" =
src=3D"http://www.buymatadore.com/skin/frontend/base/default/js/ie6.js"><=
/script>=0A=
<![endif]-->
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
Mage.Cookies.path     =3D '/';=0A=
Mage.Cookies.domain   =3D '.www.buymatadore.com';=0A=
//]]>=0A=
</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
optionalZipCountries =3D ["HK","IE","MO","PA"];=0A=
//]]>=0A=
</SCRIPT>

<SCRIPT type=3Dtext/javascript>var Translator =3D new Translate({"Please =
use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this =
field, first character should be a letter.":"Please use only letters =
(a-z or A-Z), numbers (0-9) or underscores (_) in this field, first =
character must be a letter."});</SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.19170"></HEAD>
<BODY class=3D" catalog-product-view catalog-product-view =
product-mat-adore"><!-- BEGIN GOOGLE ANALYTICS CODE -->
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
    (function() {=0A=
        var ga =3D document.createElement('script'); ga.type =3D =
'text/javascript'; ga.async =3D true;=0A=
        ga.src =3D ('https:' =3D=3D document.location.protocol ? =
'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';=0A=
        (document.getElementsByTagName('head')[0] || =
document.getElementsByTagName('body')[0]).appendChild(ga);=0A=
    })();=0A=
=0A=
    var _gaq =3D _gaq || [];=0A=
=0A=
    _gaq.push(['_setAccount', 'UA-3488531-86']);=0A=
    _gaq.push(['_trackPageview']);=0A=
    _gaq.push(['_trackPageLoadTime']);=0A=
=0A=
=0A=
=0A=
//]]>=0A=
</SCRIPT>
<!-- END GOOGLE ANALYTICS CODE -->
<DIV id=3Dtop></DIV>
<DIV class=3Dwrapper><NOSCRIPT>
<DIV class=3Dnoscript>
<DIV class=3Dnoscript-inner>
<P><STRONG>JavaScript seem to be disabled in your browser.</STRONG></P>
<P>You must have JavaScript enabled in your browser to utilize the =
functionality=20
of this website.</P></DIV></DIV></NOSCRIPT>
<DIV class=3Dpage>
<DIV class=3Dheader-container>
<DIV class=3Dheader><A class=3Dlogo title=3DMat-Adore=20
href=3D"http://www.buymatadore.com/"><STRONG>Mat-Adore</STRONG><IMG =
alt=3DMat-Adore=20
src=3D"http://www.buymatadore.com/skin/frontend/matadore/default/images/l=
ogo.gif"></A>=20

<DIV class=3Dquick-access></DIV>
<DIV class=3Dordernow>Order now and get 2 Mat-Adores for the price of 1! =
Only=20
$19.95 plus S/H</DIV>
<UL class=3Dlinks>
  <LI class=3D"first last"><A title=3D"View Cart"=20
  href=3D"http://www.buymatadore.com/checkout/cart/">View =
Cart</A></LI></UL>
<DIV class=3Das-seen-on-tv-logo></DIV></DIV></DIV>
<DIV class=3D"main-container col1-layout">
<DIV class=3Dmain>
<DIV class=3Dcol-main>
<SCRIPT type=3Dtext/javascript>=0A=
    var optionsPrice =3D new Product.OptionsPrice([]);=0A=
</SCRIPT>

<DIV id=3Dmessages_product_view></DIV>
<DIV class=3Dproduct-view>
<DIV class=3Doffer-details>
<H3>Order your Mat-adore today and get:</H3>
<UL>
  <LI>2 Mat-Adores for the Price of 1 (plus s/h)</LI>
  <LI>LIFETIME Replacement Guarantee</LI>
  <LI>30 day Money Back Guarantee</LI></UL></DIV>
<DIV class=3Dproduct-essential>
<FORM id=3Dproduct_addtocart_form method=3Dpost=20
action=3Dhttp://www.buymatadore.com/checkout/cart/add/>
<DIV class=3Dno-display><INPUT value=3D1 type=3Dhidden name=3Dproduct> =
<INPUT=20
id=3Drelated-products-field type=3Dhidden name=3Drelated_product> </DIV>
<DIV class=3Dproduct-shop>
<DIV class=3Dproduct-name>
<H1>2 Mat-Adores</H1></DIV>
<P class=3Dno-rating><A=20
href=3D"http://www.buymatadore.com/review/product/list/id/1/#review-form"=
>Be the=20
first to review this product</A></P>
<P class=3D"availability in-stock">Availability: <SPAN>In =
stock</SPAN></P>
<DIV class=3Dprice-box><SPAN id=3Dproduct-price-1 =
class=3Dregular-price><SPAN=20
class=3Dprice>$19.95</SPAN> </SPAN></DIV>
<DIV class=3Dadd-to-box>
<DIV class=3Dbuynow-arrow></DIV>
<DIV class=3Dordernowandget>
<P>Order Now and Get 2 Mat-Adores for the price of 1!</P></DIV>
<DIV class=3Dcredit-cards></DIV>
<DIV class=3Dadd-to-cart><LABEL for=3Dqty>Qty:</LABEL> <INPUT id=3Dqty=20
class=3D"input-text qty" title=3DQty value=3D1 maxLength=3D12 =
type=3Dtext name=3Dqty> <INPUT=20
value=3D1 type=3Dhidden name=3Dproduct><BUTTON class=3D"button btn-cart" =

title=3D"Add to Cart" onclick=3DproductAddToCartForm.submit(this)=20
type=3Dbutton><SPAN><SPAN>Add to Cart</SPAN></SPAN></BUTTON> =
</DIV></DIV></DIV>
<DIV class=3Dproduct-img-box></DIV>
<DIV class=3Dclearer></DIV></FORM>
<SCRIPT type=3Dtext/javascript>=0A=
  //<![CDATA[=0A=
      var productAddToCartForm =3D new =
VarienForm('product_addtocart_form');=0A=
      productAddToCartForm.submit =3D function(button, url) {=0A=
          if (this.validator.validate()) {=0A=
              var form =3D this.form;=0A=
              var oldUrl =3D form.action;=0A=
=0A=
              if (url) {=0A=
                 form.action =3D url;=0A=
              }=0A=
              var e =3D null;=0A=
              try {=0A=
                  this.form.submit();=0A=
              } catch (e) {=0A=
              }=0A=
              this.form.action =3D oldUrl;=0A=
              if (e) {=0A=
                  throw e;=0A=
              }=0A=
=0A=
              if (button && button !=3D 'undefined') {=0A=
                  button.disabled =3D true;=0A=
              }=0A=
          }=0A=
      }.bind(productAddToCartForm);=0A=
=0A=
      productAddToCartForm.submitLight =3D function(button, url){=0A=
          if(this.validator) {=0A=
              var nv =3D Validation.methods;=0A=
              delete Validation.methods['required-entry'];=0A=
              delete Validation.methods['validate-one-required'];=0A=
              delete Validation.methods['validate-one-required-by-name'];=0A=
              if (this.validator.validate()) {=0A=
                  if (url) {=0A=
                      this.form.action =3D url;=0A=
                  }=0A=
                  this.form.submit();=0A=
              }=0A=
              Object.extend(Validation.methods, nv);=0A=
          }=0A=
      }.bind(productAddToCartForm);=0A=
  //]]>=0A=
  </SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
    var lifetime =3D 3600;=0A=
    var expireAt =3D Mage.Cookies.expires;=0A=
    if (lifetime > 0) {=0A=
        expireAt =3D new Date();=0A=
        expireAt.setTime(expireAt.getTime() + lifetime * 1000);=0A=
    }=0A=
    Mage.Cookies.set('external_no_cache', 1, expireAt);=0A=
</SCRIPT>

<DIV class=3Dvideo-placeholder>
<DIV class=3Dvideo-wrapper>
<SCRIPT language=3DJavaScript type=3Dtext/javascript>=0A=
  AC_FL_RunContent(=0A=
    'codebase', =
'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#vers=
ion=3D8,0,0,0',=0A=
    'width', '321',=0A=
    'height', '202',=0A=
    'wmode', 'opaque',=0A=
    'src', '/media/videos/matadore_120511',=0A=
    'movie', '/media/videos/matadore_120511',=0A=
    'id', 'video_default',=0A=
    'name', 'video_default',=0A=
    'quality', 'high',=0A=
    'allowScriptAccess','sameDomain',=0A=
    'pluginspage', 'http://www.adobe.com/go/getflashplayer'=0A=
  ); //end AC code=0A=
  </SCRIPT>
<NOSCRIPT>
<OBJECT id=3Dvideo_default=20
codeBase=3D"http://download.macromedia.com/pub/shockwave/cabs/flash/swfla=
sh.cab#version=3D8,0,0,0"=20
classid=3Dclsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=3D321 =
height=3D202><PARAM NAME=3D"movie" =
VALUE=3D"/media/videos/matadore_120511.swf"><PARAM NAME=3D"quality" =
VALUE=3D"high"><PARAM NAME=3D"allowScriptAccess" =
VALUE=3D"sameDomain"><PARAM NAME=3D"wmode" VALUE=3D"opaque">
                              <embed wmode=3D"opaque"=20
src=3D"/media/videos/matadore_120511.swf" width=3D"321" height=3D"202"=20
name=3D"video_default" quality=3D"high" allowScriptAccess=3D"sameDomain" =

type=3D"application/x-shockwave-flash"=20
pluginspage=3D"http://www.adobe.com/go/getflashplayer" />   =20
</OBJECT></NOSCRIPT></DIV></DIV>
<DIV class=3Dmatador-product-image></DIV>
<DIV class=3Dmiddle-wrap>
<DIV class=3Dleftwrap>
<DIV class=3Dlifetimereplacementwarranty-callout>Lifetime Replacement=20
Warranty</DIV>
<DIV class=3Dmoneybackguarantee>30 day money back guarantee</DIV></DIV>
<DIV class=3Dcertified-logo></DIV></DIV>
<DIV class=3Dbottom-wrap>
<DIV class=3Dtop>
<H3>Mat-Adore is the last mat you'll buy and the only mat you'll =
love</H3>
<DIV class=3D"box box-1">
<DIV class=3Dthumbnail></DIV>
<P>Cover that dirty table for a clean, safe family meal.</P></DIV>
<DIV class=3D"box box-2">
<DIV class=3Dthumbnail></DIV>
<P>Cushion your tush on hard benches and bleachers.</P></DIV>
<DIV class=3D"box box-3">
<DIV class=3Dthumbnail></DIV>
<P>Change that spare without knee pain or dirt stains.</P></DIV>
<DIV class=3D"box box-4">
<DIV class=3Dthumbnail></DIV>
<P>Use it as a yoga mat.</P></DIV>
<DIV class=3D"box box-5">
<DIV class=3Dthumbnail></DIV>
<P>It=E2=80=99s the perfect sunshade for your car.</P></DIV>
<DIV class=3D"box box-6">
<DIV class=3Dthumbnail></DIV>
<P>Keep baby safe, dry and protected from germy surfaces.</P></DIV>
<DIV class=3D"box box-7">
<DIV class=3Dthumbnail></DIV>
<P>Stay dry when you change snow or rain boots.</P></DIV>
<DIV class=3D"box box-8">
<DIV class=3Dthumbnail></DIV>
<P>Kneel on it in the garden to cushion your knees.</P></DIV>
<DIV class=3Dclear></DIV></DIV>
<DIV class=3Dbottom>
<DIV class=3Dleft-bg></DIV>
<DIV class=3Drightwrap>
<DIV class=3Dasseenontv-logo></DIV>
<H3 class=3Duseandabuse>Use it and abuse it guarantee</H3>
<P class=3Dfirst>If your Mat-Adore ever rips, tears or gets ruined send =
it back=20
for a full product replacement minus the expense of shipping and =
handling.
<H4></H4>
<P class=3Dsecond>Its hypoallergenic, washable polymer surface provides =
a=20
protective shell around its billion bubble center that provides =
incredible,=20
durable cushioning for years and years of use.</P>
<DIV class=3Dbuynow-bottom><BUTTON id=3Dbuynow-bottom-button =
class=3D"button btn-cart"=20
title=3D"Add to Cart" type=3Dbutton><SPAN><SPAN>Add to =
Cart</SPAN></SPAN></BUTTON>=20
</DIV>
<DIV class=3Dordernow>Order now and get 2 Mat-Adores for the price of 1! =
Only=20
$19.95 plus s/h</DIV></DIV>
<DIV class=3Dclear></DIV></DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
Event.observe(window, 'load', function() {=0A=
  $('buynow-bottom-button').observe('click', function(event){=0A=
    productAddToCartForm.submit(this);=0A=
  });=0A=
});  =0A=
</SCRIPT>
</DIV></DIV></DIV>
<DIV class=3Dfooter-container>
<DIV class=3Dfooter>
<DIV class=3Dseals>
<DIV class=3Dsecure-shopping></DIV>
<DIV class=3Dcredit-cards></DIV></DIV>
<UL class=3Dlinks>
  <LI><A class=3DwindowTrigger title=3D"About Us" =
rel=3Daboutus-window>About=20
  Us</A></LI>
  <LI><A class=3DwindowTrigger title=3D"Privacy Policy"=20
  rel=3Dprivacypolicy-window>Privacy Policy</A></LI>
  <LI><A class=3DwindowTrigger title=3D"What is Matadore"=20
  rel=3Dwhatismatadore-window>What is Matadore?</A></LI>
  <LI><A class=3DwindowTrigger title=3DFaqs =
rel=3Dfaqs-window>FAQs</A></LI>
  <LI><A class=3DwindowTrigger title=3D"Cleaning Instructions"=20
  rel=3Dcleaninginstructions-window>Cleaning Instructions</A></LI></UL>
<ADDRESS>Copyright =C2=A9 2011 STSO, Inc. All Rights =
Reserved.</ADDRESS></DIV></DIV>
<DIV id=3Dprivacypolicy-window class=3DwindowWrapper>
<DIV class=3DwindowHeader><A class=3Dclose>Close</A> </DIV>
<DIV class=3DwindowInner>
<H3>Privacy Policy</H3>
<P>STSO, Inc.</P>
<P>This privacy policy statement applies only to the information =
collected=20
online at http://www.buymatadore.com. Any information gathered on the =
Website=20
will be used by STSO, Inc. internally. The Company recognizes the =
importance of=20
protecting the privacy of information provided by users of our website. =
This=20
privacy policy is subject to revision at any time at STSO=E2=80=99s sole =
discretion. You=20
should check back every time you visit the website to review the current =
version=20
of the policy.</P>
<P>The Company collects information about users during their =
registration,=20
inquiries, participation in certain activities on our website, including =

contests and polls and through the use of cookies. When users request =
pages from=20
our server, our web server automatically collects some information about =
the=20
users, including their IP addresses. These addresses are used by =
computers to=20
send the requested pages to users. The Company may also utilize users' =
IP=20
addresses to help diagnose problems with our server and to administer =
our=20
website. STSO, Inc. may also use this information to gather broad =
demographic=20
information about our users in general and does not contain anything =
that can=20
personally identify users.</P>
<P>We will not sell or distribute user information to outside third =
parties.=20
Except as may be required by law or legal process, the Company will not =
reveal=20
to any third party any personal information that users provide to the =
Company=20
without the permission of the users. Using email addresses provided at=20
registration or otherwise, STSO, Inc. may periodically send out =
promotional=20
materials to our users about services or product offerings. Users can =
indicate=20
that they do not wish to receive e-mail information from the Company. =
Upon=20
request, STSO, Inc. will remove users (and their information) from our =
database=20
or permit them to "opt- out" of any further e-mail communications or=20
contact.</P>
<P>Notice to California Residents / Your California Privacy Rights: =
California=20
residents are entitled once a year to request and obtain certain =
information=20
regarding our disclosure, if any, of personal information to third =
parties for=20
their direct marketing purposes during the immediately prior calendar =
year (e.g.=20
requests made in 2006 will receive information about 2005 sharing =
activities).=20
As set forth in this Privacy Policy, we comply with this law by offering =
our=20
visitors the ability to tell us not to share your personally =
identifiable=20
information with third parties for their direct marketing purposes. To =
make a=20
request, please mail to STSO, Inc., P.O. Box 1135, Tacoma, WA 98401. =
Please=20
include your full name, phone number, e-mail, and return=20
address.</P></DIV></DIV>
<DIV id=3Daboutus-window class=3DwindowWrapper>
<DIV class=3DwindowHeader><A class=3Dclose>Close</A> </DIV>
<DIV class=3DwindowInner>
<H3>Mat-Adore=E2=80=94About Us</H3>
<P>We at Mat-Adore believe when function and imagination come together =
even the=20
most difficult problems can be solved with simple solutions. With that=20
philosophy Mat-Adore was born. If you like to be prepared at all times =
in every=20
aspect of your life then we have created this product for you. With its=20
versatility and hundreds of different uses, Mat-Adore will allow our =
customers=20
to always be prepared when difficult situations arise. In addition to =
providing=20
a multi-useful tool for our customers we are 100% committed to =
delivering the=20
highest standard of service, always. </P>
<P>"Think ahead. Be prepared for whatever comes your way."</P>
<P>That=E2=80=99s our motto and that=E2=80=99s what we strive to provide =
for our customers every=20
day.</P></DIV></DIV>
<DIV id=3Dwhatismatadore-window class=3DwindowWrapper>
<DIV class=3DwindowHeader><A class=3Dclose>Close</A> </DIV>
<DIV class=3DwindowInner>
<H3>What is Mat-Adore?</H3>
<P>We at Mat-Adore believe that when function and imagination come =
together even=20
the most difficult problems can be solved with the simplest products. If =
you're=20
someone who likes to be prepared in every aspect of your life, then we =
have=20
created a product for you. Mat-Adore is the most user-friendly, =
versatile,=20
lightweight folding mat that cushions, protects and covers in hundreds =
of=20
different ways. Use it at the gym, park, ball game, the garden, around =
your=20
house, in and under your car and much much more. Use it as a cushion for =

sitting, kneeling, standing or laying on uncomfortable surfaces. Use it =
to=20
protect yourself, your children, or your animals and from dirty surfaces =
or=20
protect surfaces you don't want damaged. Use Mat-Adore to cover the =
trunk of=20
your car when loading it, keep yourself dry when it's wet, or cool when =
it's=20
hot. Use it on your dashboard as a sunshade. Use your Mat-Adore to =
protect your=20
car seats from a dirty child or animal. There are countless ways to use =
your=20
Mat-Adore and we guarantee you'll find a new use for your Mat-Adore =
every=20
day.</P>
<P>Mat-Adore is the last mat you'll buy and the only mat you'll ever =
love. It is=20
soft enough to comfort you through an entire ball game, yet durable =
enough to=20
protect your knees while kneeling on rough, hard, uneven surfaces. It is =
compact=20
and easy to store. It can be taken with you anywhere. It can easily fit =
in a=20
drawer or a cargo bin in your car. The ability to change the size based =
on your=20
use is one of the many reasons your Mat-Adore is so versatile. The =
Mat-Adore is=20
made of proprietary, high density, durable foam. Because of its superior =

quality, we are able to provide a lifetime warranty! If your Mat-Adore =
ever=20
breaks, tears or rips =E2=80=93 even if it's your fault- just send it =
back for a full=20
product replacement. </P>
<P>When taking your Mat-Adore to the gym, beach, ball game or anywhere =
you go,=20
make sure you have the Mat-Adore Carrying Bag! This stylish carrying bag =
is big=20
enough to easily fit two Mat-Adores plus so much more. Use it to carry =
your=20
Mat-Adore and your gym clothes and shoes. It even has an extra pocket =
for a=20
water bottle or other items. When you are done using your Mat-Adore, =
just fold=20
it up and slip it into your Mat-Adore Carrying Bag and take it =
everywhere you=20
go.</P></DIV></DIV>
<DIV id=3Dfaqs-window class=3DwindowWrapper>
<DIV class=3DwindowHeader><A class=3Dclose>Close</A> </DIV>
<DIV class=3DwindowInner>
<DIV id=3DwindowTop></DIV>
<H3>Mat-Adore Frequently Asked Questions</H3>
<UL class=3Dfaq-questions>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_1">Can=20
  I do Yoga on my Mat-Adore?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_2">Is=20
  the Product easy to Use?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_3">Is=20
  there a warranty on the product?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_4">What=20
  payment methods are accepted?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_5">What=20
  do I do if I have an allergic reaction?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_6">How=20
  small does the Mat-Adore fold up?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_7">Does=20
  the Mat-Adore have any rubber or latex in the product?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_8">How=20
  long does it take to receive my online order?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_9">Can=20
  I cancel my online order?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_10">Once=20
  my order has been processed can I make changes?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_11">What=20
  do I do if I receive the wrong item or an item was missing from my=20
  shipment?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_12">Can=20
  I customize a Mat-Adore with my own design?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_13">What=20
  is your return policy?</A> </LI>
  <LI><A=20
  =
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#q1_14">What=20
  should I be aware of when using my Mat-Adore?</A> </LI></UL>
<DIV id=3Dq1_1 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Can I do Yoga on my Mat-Adore?</P></DIV>
<DIV class=3Danswer>Yes. Your Mat-Adore is designed to work in many ways =
and an=20
on-the-go YOGA mat is definitely a great way to use this product. When =
finished=20
with YOGA use your Mat-Adore to change into clean shoes and socks as =
well!=20
</DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_2 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Is the Product easy to Use?</P></DIV>
<DIV class=3Danswer>The product is very easy to use. There are literally =
thousands=20
of different applications to use this clean, lightweight, cushioned =
surface.=20
Only your own imagination can limit the number of uses for your =
Mat-Adore.=20
</DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_3 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Is there a warranty on the product?</P></DIV>
<DIV class=3Danswer>Mat-Adore has a lifetime "Use it and Abuse it" =
guarantee. If=20
your Mat-Adore ever rips, tears or gets ruined just send it back for a =
full=20
product replacement minus the expense of shipping and handling. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_4 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>What payment methods are accepted?</P></DIV>
<DIV class=3Danswer>We accept Visa and Mastercart. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_5 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>What do I do if I have an allergic reaction?</P></DIV>
<DIV class=3Danswer>Allergen avoidance is the best treatment for any =
allergic=20
disease. Avoid the allergen, and you'll avoid the allergic reaction. =
Diagnosis=20
and education are crucial steps in allergen avoidance. Educated allergy=20
sufferers fare much better than those who do not understand their =
disease.=20
</DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_6 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>How small does the Mat-Adore fold up?</P></DIV>
<DIV class=3Danswer>Mat-Adore folds up to a conveniently small size that =
can=20
easily be stowed in any number of places. Mat-Adore=E2=80=99s smallest =
folded size is=20
20"x 9"x1-5/8". </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_7 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Does the Mat-Adore have any rubber or latex in the product?</P></DIV>
<DIV class=3Danswer>No </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_8 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>How long does it take to receive my online order?</P></DIV>
<DIV class=3Danswer>We try our best to ensure that each online order is =
shipped=20
within 5 to 7 business days after the order has been processed. Transit =
times=20
may vary depending on the delivery address. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_9 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Can I cancel my online order?</P></DIV>
<DIV class=3Danswer>Unfortunately once an order has been placed online =
it is not=20
eligible for cancellation. However, if after you receive your Mat-Adore =
and you=20
are unsatisfied with the product, you can return the merchandise to us =
for up to=20
30 days from the date of your original purchase. You will then be =
refunded the=20
cost of the merchandise minus the processing and handling =
charges.<BR>Simply=20
return your product in the original packaging and mail to 26 Barnes =
Industrial=20
Road North Wallingford, CT 06492. Please be sure to include a copy of =
your=20
original order receipt which was provided at the time of purchase and =
include a=20
note stating that you would like a refund on your purchase. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_10 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Once my order has been processed can I make changes?</P></DIV>
<DIV class=3Danswer>All orders are processed based on the information =
provided=20
upon checkout. Please be sure to double check your ship-to address as =
well as=20
making sure the proper zip code is provided. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_11 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>What do I do if I receive the wrong item or an item was missing from =
my=20
shipment?</P></DIV>
<DIV class=3Danswer>Please call customer service at 1-866-347-9049. =
</DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_12 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>Can I customize a Mat-Adore with my own design?</P></DIV>
<DIV class=3Danswer>Yes and No. We do offer custom-branded Mat-Adores =
but there is=20
a minimum order required. Please call customer service for more =
information.=20
</DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_13 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>What is your return policy?</P></DIV>
<DIV class=3Danswer>We guarantee 100% satisfaction. If you are =
unsatisfied with=20
your Mat-Adore simply return the item for an exchange or refund within =
30 days=20
of receiving your order. Ask us about our life time use it and abuse it=20
guarantee. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<DIV id=3Dq1_14 class=3Dfaq-item>
<DIV class=3Dquestion>
<P>What should I be aware of when using my Mat-Adore?</P></DIV>
<DIV class=3Danswer>Care should be used at all times while using =
Mat-Adore.=20
Mat-Adore is not a toy and should be kept out of reach of unsupervised =
children.=20
Always be sure to consult your Physician/General Practitioner before =
performing=20
any fitness or exercise program. Always check Mat-Adore for worn or =
damaged=20
parts before use. If any defects are found do not use product. This=20
multi-purpose mat should be thoroughly cleaned between any changes of =
uses. Do=20
not use the same mat for direct skin contact or preparing food if =
chemicals have=20
come in contact with your Mat-Adore.<BR><BR>THIS PRODUCT CONTAINS =
NON-FLAME=20
RETARDANT POLYETHELENE FOAM. AVOID CONTACT WITH OPEN FLAME. </DIV>
<DIV class=3Dbtt><A=20
href=3D"http://www.buymatadore.com/?source=3Dgg-branded&amp;gclid=3DCNHnk=
ca3560CFUHc4AodGF1-5Q#windowTop">Back=20
to top</A></DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
    //<![CDATA[=0A=
    Event.observe(window, 'load', function(){=0A=
      $$('.faq-questions a').concat($$('.btt a')).concat($$('h2 =
a')).each(function(node){=0A=
        node.observe('click', function(e){=0A=
          new Effect.ScrollTo(node.href.replace(/.*#/, ''), =
{duration:'0.5'});=0A=
          Event.stop(e);=0A=
        })=0A=
      })=0A=
    });=0A=
    //]]>=0A=
    </SCRIPT>
</DIV></DIV>
<DIV id=3Dcleaninginstructions-window class=3DwindowWrapper>
<DIV class=3DwindowHeader><A class=3Dclose>Close</A> </DIV>
<DIV class=3DwindowInner>
<H3>Cleaning Instructions for your Mat-Adore</H3>
<P>Depending on how often you use your Mat-Adore will depend on how =
often you=20
will want to clean it between uses. Cleaning your Mat-Adore is simple =
and will=20
help prevent a collection of bacteria and dirt which will help maintain =
its=20
cleanliness and appearance.</P>
<H4>Spot Cleaning</H4>
<P>To wipe down your Mat-Adore you can use a mild detergent and a damp =
cloth to=20
clean your mat. For a cloth, you could use disinfectant wipes or a small =

washcloth. Allow Mat-Adore to air dry after you have cleaned it.</P>
<H4>Cleaning Whole Mat</H4>
<P>For light cleaning simply hose off your Mat-Adore and wipe it clean =
with a=20
dry towel or let it air dry. If your Mat-Adore is heavily soiled or =
dirty, or=20
you have been using it for a long time without ever cleaning it, you'll =
want to=20
clean your Mat-Adore more thoroughly. Submerge your Mat-adore in warm =
water with=20
very mild detergent and very little soap to avoid leaving a residue on =
the mat.=20
While the mat is submerged, agitate the water and scrub the mat with a =
small=20
washcloth or sponge. Remove the mat from the water and wipe off any =
excess=20
moisture. As with spot cleaning, allow the mat to air dry. Do not put =
your=20
Mat-Adore in a washing machine or dryer. </P></DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
Event.observe(window, 'load', function() {=0A=
  myWindows =3D {};=0A=
  $$('.windowTrigger').each(function(element){=0A=
    var windowSegs =3D element.rel.split('-');=0A=
    var windowPre =3D windowSegs[0];=0A=
    windowName =3D windowPre+'Win';=0A=
    myWindows[windowName] =3D new Window({=0A=
      id: windowPre+'-popup', className: =
'popup_window_wrapper',maximizable:false,minimizable:false,closable:true,=
resizable:true,hideEffect:Element.hide,showEffect:Element.show,destroyOnC=
lose:false=0A=
    });=0A=
    myWindows[windowName].setContent(windowPre+'-window', true, true);=0A=
    myWindows[windowName].setZIndex(9000);=0A=
  });=0A=
  $$('.windowTrigger').each(function(element){=0A=
    var windowSegs =3D element.rel.split('-');=0A=
    var windowPre =3D windowSegs[0];=0A=
    var windowName =3D windowPre+'Win';=0A=
    element.observe('click', function(e){=0A=
      if(windowName =3D=3D=3D 'privacypolicyWin' || windowName =3D=3D=3D =
'termsconditionsWin' || windowName =3D=3D=3D 'faqsWin' || windowName =
=3D=3D=3D 'whatismatadoreWin' || windowName =3D=3D=3D 'mediaWin' || =
windowName =3D=3D=3D 'cleaninginstructionsWin') {=0A=
        var docWidth =3D WindowUtilities.getPageSize().windowWidth;=0A=
        var docCenter =3D docWidth/2;=0A=
        var winWidth =3D myWindows[windowName].getSize().width;=0A=
        var winOffset =3D winWidth/2;=0A=
        myWindows[windowName].show(true);=0A=
        myWindows[windowName].setLocation(0, docCenter-winOffset);=0A=
        new Effect.ScrollTo('top', {duration:'0.5'});=0A=
      } else {=0A=
        myWindows[windowName].showCenter(true);=0A=
      }=0A=
      // myWindows[windowName].showCenter(true);=0A=
      Event.stop(e);=0A=
      =0A=
      $('overlay_modal').observe('click', function(e){=0A=
        Windows.closeAll();=0A=
        $('overlay_modal').hide();=0A=
        Event.stop(e);    =0A=
      });=0A=
             =0A=
    });    =0A=
  });=0A=
=0A=
});=0A=
=0A=
$$(".close").each(function(ele){=0A=
  ele.observe('click', function(e){=0A=
    Windows.closeAll();=0A=
    Event.stop(e);  =0A=
  }); =0A=
});=0A=
</SCRIPT>
</DIV></DIV></BODY></HTML>

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.buymatadore.com/skin/frontend/matadore/default/images/logo.gif

R0lGODlhVgF8APcAALzL2wErWdDj8LrR4xtSiMLZ6RdJfgAkYitildzp8g1Detvk7ZWuyFyLsyVY
i2KGrHefwaK81ImtyhRLglR8pGeQtLLK3ktymwA2cYOeubTN4CBXi5KzzgAybNXi7Zu60wAoZcDV
5SddkZ21zaXC2YqjvStcjUt5o83Y4zBilAA0bTttnOrw9fX4+3Obve3y91yErOLp8QAvanqbvAA1
blKCrG2Sts/e6yFShNLd6GqNsqK3zmqVuTNpmgQ6ckRslqnG3Imkwqq90fj6/PX5/Ep9qcHP3Qk/
d+Du9uXx+Pr8/gI4cdbk7gAtaHKTtKzA1e/2+0B0opO10BlNggM8eNHh7Y6ow0Z5ps7i74Cmxuju
8wAsZ+Hn7rHD1f3+/ubu9fr8/fL2+fP2+O7y9rPG2PD1+MnX5KjE2o6wzPz9/nOVuGaKse70+YWp
yPL5/PD2+wAuawE4dcbY526YvKO/1wAYWa3F2QY8ddnm78rc6TplkmKPtoKgwEt2oUJ2pMje7MPW
5cDR4TBll+Tq8YyvzK7K3sja6D5xofb8/ujy+GWRt+3z92GJsIOoxrfQ4jxplwU6c+Xs8o2tyuXw
9vT2+QA2bxBGf8bU4lJ3oJq30AApaP39/fj8/sXS4Nbg6kd1oAg/egAvbfv+/1uIruzv9BI+bIWi
wTJejEV3pWWNtP///+Ls8w06aa/H3GWNs4mqyNfn8gAsaw5Ffuz0+mKMslqAp1aFrlmGr/D090+A
q9Hg683b5/H1+SFPgRVOhQo2Zff5+0FxnxE0buvx9oquykVynr/T4/D5/O73/e71+urz+e7x9Qg3
cd/r9M7f7Dxvn6C/1zhnmRhPhi9fkAY7cwM2bww4ZwIvbPn8/f7///7+/wA3cAA2bgE2bv7+/gE1
bQE2bwE3cOz0+fH2+oCfv32XtDZol8LX5wAgYNHj773P4PD3+4ioxZmvxwQwXQI1cAIsaKnB1xVA
d4yryQYxbP7//u/y9uLv9/P8/+/0+Je40nGQsH6jw4Olw4imxClYiSH/C1hNUCBEYXRhWE1QPD94
cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1w
bWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4w
LWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4
bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8
cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5j
b20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0v
IiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNl
UmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1w
TU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBQUJFQzczRDMwMTIxMUUxOTZFOEE4NkI4NDQzQUM3RCIg
eG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBQUJFQzczRTMwMTIxMUUxOTZFOEE4NkI4NDQzQUM3
RCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkFBQkVDNzNC
MzAxMjExRTE5NkU4QTg2Qjg0NDNBQzdEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkFBQkVD
NzNDMzAxMjExRTE5NkU4QTg2Qjg0NDNBQzdEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpS
REY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s
6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSz
srGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6
eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JB
QD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkI
BwYFBAMCAQAAIfkEAAAAAAAsAAAAAFYBfAAACP8Auwkc2O2bwYMIEypcyLChw4cQI0qcSLGixYsY
M2rcyLHjQYIDK4kcSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypd
yhRpBxlQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNVVZzsQOBQlLdw48qdS7eu3bt48+rdy7ev
37+AAwseTLiw4bh+VshSWxIEo2aLXkieTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU09eZAhBE5Mg
KrhRRbu27du4c+vezbu379/AgwsfTry48ePIkytffhuPa9gVoKhqVgiI9evYs2vfzr279+/gw4v/
H0++vPnz6NOrX8+evYYwqpg8bxxdVSMFS3zo38+/v///AAYo4IAEFmjggQgmqOCCDDbo4IMQOljN
FAXENx9JsUmXxRGMiUTDhzQ0JeKIJJZoYk0ghjiSCgZUKN9r9GnI4UjhUOODjeGcqOOOPPZoFA35
2UgNSSy6eOFIGaqyIWM0PDLHkzwIIoOPVFZp5ZUsdRAMD0/OscGKLVoII4b1LSnSEc3YZgYzHWLp
5ptwjiiDLzHYNoAPIhUpJnQyqqUCBLeNw4MmcRZq6KFB0QAPMYjcVkyIer7Ip5Ic0jAFfLctMEEH
iHbq6acwNSHIKritckclkR4pUpJLqnDFJrix/xDMFqDWauutINAyDm5DEEBDqmMiWeaMHQxwWxrx
xKLircw2G2cHoKiTzW2ZcArspGbSIIgotq1iQrDOhituj9uAcMJstSmjQJ5hShojpYzJIEke9BrC
xwHj5quvjjR0MIIh9ObBA2PXvmumSHGIoPAGoLS578MQO6WAAwqLsGzBZPY5UgdNdNwEpxGHLPJQ
23DscYcYC6vxyCy33FTKqw7rsMs01wwUzJWwOqPNPPe8E846z+zz0DCp0MHRSC8bMdAyq9TBFh5H
LbXHIK8F9dRYf7xSyVlPPWVJKsjQ9dhdf32TCmRHzVLJV6dNdQdCF93EAQeEQsXdeGuCDggyKP+N
UthuT3203yhtI3bgY29RtUlMr2wSDeFM0AMClFdu+eUT/G3J5Jd3XvkEOabUgQKeey4NN0TeIYIg
pbfeuiAbhEN40Ues7nrlWfrC+e2Vi2BJHHCgo7hMKoAAhwg8CEGGOsw334UVthAAQhOz56k667xf
TkUcdPft9AbYZ996D5aEc8r5OByBA7tGgptz0yfRgEEteDBh//3459/AEo+rQEH9+Qvg/WzBv5Qc
oBYCFGArFicDHGgggRCMIB7mEYfFyWQLj6hCBO/nAUis5AD7AOAGOWiGThhhBM+gAgjidhIZqKAC
APAAunSTiBsIIQXDayEOLDDCAHrgEp0gAw//NjA9A45AhD1MIB5OgIEHdCEDKMhAO9i3J4Pt7HEY
0IFwoDGkknTgCPMQjiIKeBIVhMIUwBmCApYlg3/Agjm0eUIFa8KNLWgROA6onkgOUALkNAMFOgiF
DLaRJQcEIhnCwUMbMGBBkbTxjcdZhweEQMTZocMIzHkABmjQjlOgAAVTRFW7VPU+x5VEfmsQTjOO
4LcOTAAIwtkDGU3SAUvQIY3m6FAb0wFHVQhhjjRRARXYARwv3EKPlThABpRThg9MQROETIkKUrCA
4nDiEgYgXBsFsBxdwCAUM0MHAJgDg012sh3opKK7MgYvlKBSONpYV0ka+IdYzrIkW0gBL3+j/wQX
VG2XvfxlI18iAwJoADjZoAMLk7lM5YjiDAbYQjQf54BBIEcDHpznP7i5nEUwAl8lESc5N1nGUbov
aO7EQCqFYwKTNEEP2LBnSkDwgDQEZxdmAygcBVoTTfxghr6xxz1LokzmpOEDljBbSRSQg+RkAwKo
I8k24diMYoAgpONcTjln17h2xk+lwxlF6Dzkv+HI8m8qIIdwxrBGR/5jn8zhKU008QDhYMMBLCwq
c8DghF89jgfLacH6pLrRXu4AA20SqVZJyjiTYuuKpwSrcLIwSxUsoQJmHaojJ3DL4IRhBSDTaVyB
Sbw4qDU4YGjAQPfYUOak41smUUAZfDOMYf/4Rgptmioc8bACWo1EscrZaknb99i4vVM4JJjl6AiR
WZQ0wQT1DA42+PE10S5HrjKRwRRgGRwvnGG1DO2NN7xAXm9Mizfa0IEKlNYBF8BKN9kYgQKowYwN
GIM3lJgCGwu7G22Q1wve0IZvtBEEECwLuMkRbmOJa0XjSjY4aeiiSDowBWPJ9CQgwMR5b+ON994m
G+qAkXWVg92YvDQRufFCGjZsm0XEwYCt1U0NTGACczQgAmDojSNwoNQOVHM3ZJgjDTSxAjzsBgz+
HIludUMCczjAATWAAC+80JsIgKJqCMZNNsCADTB4+ctg/rKCwebYBqd0pcHRxpeUbAKg/ub/rIxT
gRp0I4cz7CpWdwiRDBxQAHv4+c/L4IVNdzOEPxvaHiMgbUzgUAvd3EAfX8gNL0QQN73uJgVkXQIj
csybH/gWVRsQw27SMAOQVuJoXdhNNuTwT/7qhhAKUMuHFGCH3gxgA2bL8m1eoIhc1ODXwA72r0cR
u7+VmZ0HwyKacwMGb3zYHFLVA260IeDdwNmLssiEbvjRgEjjZhGCAFm/qAKCDdxg1GjgG1XAyxJh
nhY3FiiCJ3IDDFqs1tK6wfSKFPCB3qzhHSrqQA2AsRsPCOLTlUDHCKqdGzFMQEVLzg2s2zQFTuvG
ECIYk65tEwNZuFAFIA+5yEGux64mO7LL/8bNALxtmz2oSH4wwA0eEsCba5PkuVXQjQ16QHPcEGEO
7ru5CM6tmzRwQKk5cSU0dEMMApghN0cNenh5o28PhSPmvJGEAkILjUHnxgzSUCoIRiGO3YihB6F1
tcRjTZIlHHQ3STjBVUWy8drEwBLsbonJIUuS4+qGB7vAjT5UpII7uAA3HOi3tTW7hT7sphZUaGpu
AkGolDRh6KM+ek9kMI005UYNcOiEbkhxDZTgOzdVd6S0eQOEKYAMDsvgDQAUrYkTkEo3Q1BEddWO
m4m3HVC7uccn5p7wrOrm7nlv97FV5lVl84YCxq8NHghmiaXfxh+SqPlQ+5Xy2mRDDweQPP9uIkEF
Fl6e6FDXPE+agIndPAAdZKAyboaxgYGeHjepr4QMTEAE3qTDAVNCA6DAArKnaOc3ah+wexz1amw3
EkvQAP5nDp9Wd7SBfGezfDFjSn33YLlBAa8QU7YBBl3UATgASbbhBDOgfbSkANmXG8gwDXUAAPJ3
GyzQA0gndOiHG0Z3gzZBA3EwZ1D3A+igCG+QG2FgCzx4f7eRfyQYXboBC/8wJSpAALG3G11gYDio
ambgWxHXew0oEkugCLzhCGH3W9GHGxZoE3vnYN1nG7WQC5NwG0OAACHSAaeAG9hAAfuggvO0AU54
GyGAAwcwB3d2G0QAAQhXEgdYdOqnE67/RAK60QzTcABXwHK2kQYkQHwkoYS2wYQ4gAW8IQp6MCUd
0AO4wBtCgA6KiAC6wBukwIW8dxu+RyP6wBt24HFmyBtpWBNreGa88QAi8GO1AQa54CfFgBvN4ADl
wIc39wO7IQEKAAK5YFuTp4mKiHmMqFRhgzTc2I1PITRtFIe54QjSIwI9N37XQDicWBue+Ie58QOv
0QFXgCm6kYp9GHi7oQV5pn+xaBuzWAk0cAcothtWsAUHdoa3EQNUcAAg0JAO+ZANyW69+FVtWBuM
AAriRxtpAAHr5QOMgBvnIAvLuHinpAIfqRszEAdNgAC3hxtc0DDOhY3pp1RH4AsTcJM4/5mTOXkE
Y6VkzqgbaKAAMhAHGWkbWlB/JrGOtMGEBnAGvQGPpzaPqKiKJNEBVKAOvMEC0qAWXSiLbAc4J6kb
bEABplZ8vLEMD4AJFLCWbNmWa4kDGCBNGFhKzYdyvLEGmoCPtVEPGuBCCsBctxEPoRBjuGFzqKIA
beB+RxMHwngbkSAlMZmDx6J+kPMJZ0AHmJmZmqmZqIAnfbcEtLAbasBImlCUtfEGt+A+SqkK+acC
CiABT/kaMsAD/bcb9liVcYCVu8ECvsCV/VgbbaACdKMCE1ALbnYbrXAEi0OBwuEEjLVgVYRsfDcS
fpcbOnAAT+B1tMEC78AijoAb7VAHff9EklUpDfelGz9AKCBgmrQxDntQeS4lkzqofiqAAUD4Gy7g
mfsmBe4HB8mUnVBnB2XJWr3RmgqABr3xCLTSBBxgcblxmxtzlVk5Ab65gLkxAE6gAzqQAZ21G/nQ
B9bInMGxBs9JZgwmnWzIGzqwBQ0wW7ZBCbLQAb0gHbcxA+LJjCIBB3pQm7hxD9PwGiBAB9rpfWQw
oCOxiDOZJ1kUHDygn46EA56HG4hwAVe1BYqwDrrBBelIVISJf2BzoL1xAVPSBMQAgvVIlRGqm7rB
mxXKHETACHDgMCIKHCRaPRPpfLuhAzIgCJFwGy1gg3d4G1BAATdKnmTVaLpRCGXYBIr/UIi34Qlx
IDRIOp9fU5939BtN2ncd8Ai7kQAp8BpNUATUiIYEYEGraaAI+oubRKZm+qBoOmES6qFox48Wehwa
UAtHYxJz+ht1amwnynwnt4EVSRs64EqNqQpDoFqOdxt5gACFqhs2pwKgkAW78QpXpn+H8AK6kQAi
wIOTOpmVuqTAkanUuQRYlxsaQACkuAF1khvDcAWJeKpfmqq7wQirWqZT6UWxqhu8cAVT0pXBMQQW
MAMwMAUg0AETlYvK0avDFZ3AOp0ewoG4oQMYcA3HmgYS8ELwZgnPmhs2R2HfqRujqRYdsAFaoBvr
UAHWKBLfeon0Ka6Y6qQqcASJCZTX/+qDx1obSjACAyqvRAKmvGGvNMCq+VqV+yppRfCvv/kbYCAH
MyACHYCFuoqQxcGw0LlOD5uieYoBBxB/t5ED22B9trEDHYAO4wmts9RGNJobDwAjlmVRuZENRXoS
LVsbO6ikl+ob5DphUwBXuDEDiLUqXLAbKAAHSuOz+0avuqFJQ4uvtvmqp3a03xZutOpUHmAHFBAL
jbSrvmG1JuqwGViXwqqiGAACc9ACt0EKE2CCtWEFB2C2zNgvF7AbbpCeSDJvurELkNBIdauRL5u3
vbG3p3YKLHYbOqAJKgICEaAEurEAvrA4iJsnQLsbYloJRPu4+qqmucGmlbscX2ADyv+CVcthAyVK
JHOJUhRJultwBYtAgyvgoKrgBmtAN2frsWRUeIf3hD86EpoQAUMqfaTUu6pwt6gCs3qrn5BTA7tB
BCA6ElZKj7eRCEWAcNF7mIr7jqCKBvB7GxAKq9obKxTavcsRBn1wAAnLnC0ADRwgBSzcwi4sBR+w
ArLjq6BLl8FKnRJrvIxEAH0agkyAG0wggXzEjB1gAG+XG0AwAR9zNCwKwbYxDjawsgJMwJbKpPo5
s4CZG7AwDQfLxOxbdDy7iV26hF8Km50mm4qAutiLm1RbG9wLsLVhDBUAAw/wAK7gjrgRAbtLEswZ
CRugALIQyII8yLJgCacil78aujf/HLHDqgoUazSD6xuB4AsyMMSG2gH/wKO4IQW+AAoK8MmgYAtO
7H1PALnWK5/girdWDCaGsBsDIAJU8MkKAAoIcLK6cQngNBIV7EqFEJtROcq20cGnZgmit5tbKcK5
EZT1iQFx0AutuBvpcHB83MYVKJTe6I0Ldad2ubU0AAJ6yRtPwEiWjLYRe4y7sQgLkM7p7AGRMIO4
0QmBm4XZqKQ2EBxzcMX/0Kq3EQYL4AHqnM4bXBueoK66PMad6EU4gMe3AZXyCMy1IcwCrApaEAd6
trSqAGsdACIdYAu8oQROUJbMuYvBdL7wg6e6QbE0sAVSoM+5sQP4Ms726yF3UM9w/6QL3XqNkumy
XwM55pAFEPDTQB3UQR0NBUQD27CszMECNQCfu4wDzsAbnDCKpyYIp7jGR4rKt6EFsFirXtkmltAb
VqAJHRLSeHeBiWzDEAuQOWwbKC0DRcALvYEIavDS9VuYBaQCsgCJcDQLo2CNU9yIleADR3AHhF3Y
hm3YCHwH/NBLXjAPptbUCl0bsACAqCINo5obXSDW8hy3xiBiFv2PlUANvTECjKSwx1fWakjSGojD
jYzSJUuAvJEAwUAoMG3XE9YLQ9BL2QDRWG23gJ0iwB3cH7IiltDKvQQAscAYFSwDp8C80EzZNPAO
tqwbs7c4l/fUuqEEUqCAvAHaov/NG4mGZdSsCiI9E9o8utzsmtPtaBmXTHV9G9fGqb2kCupggL3t
uzwYEyqAA+68HLtAyQRKdSURCvK9GySwKSKxBeuNG9WNIUVgibcBDKrlVlztj19YCZBw2bgR3qad
G+VNPKotuqxNuiGyBXC7Gw1e2/DNPzRADYA13zfQ3led076d3zCxDSsw36qwCldQedELJKHJG6+g
nI7EAf9bG4ZA0EhCC4ikG2JAucjshW3iA9ylGxxOd+P94fod4ous1q1NUjJACM5dj1io4i3HP65Z
5XAEBa6giX9t4y7R4vmr264b4JdGnUXslL+4XhNWBASnG3jQAwiHDjvAG/ZgCRD/99kX7gN6buWk
FdITUA0Ggsg1jL4mbZ1gbgt/Hrf3skfvfeaiNJDz3cFvfhM0cATnOd8AkMunug3bcCOyMOe6AQYK
uiLSANe7YQqm1gFxQAaqNgA5pehT3ui5ceVmuRu4wA+KwAPM3uzOzuxzYAsXDiZnbenbfNIk1QEr
4NCqoAy3MHdmXhtnRQPTwBtpoAVckO7qru6bnhsAQAVVU+o9aAC9YQ/rfu+UwBtJPiWrqQjBEAy2
AAFHvButx0A0XhvqkFRMXARRqoOK0GoVXhugzejg/ejjLRxYgAMDdd4jzs2i5KK5cQO45ukq6JGx
nQLooAkqv/KacAAk0N+2cQMI//Bp8l4TOG7utVAHLL/y6JAFY44bX1AEV7WawyEKDxAKSqMCQQ5k
DtALvYAKP3zOsrBfEU8bE0/sG27xzPEHvbDxXJ7W1TmxjLUF7Tp51+re2nfqYpsb5+AAQdcBxOBh
uJEItUB8NU8TPgB827oC8FmVqKDGulHnRC8chuD2JkENPawcbcBAwk4SFL8bpC3eW9/1DYu1igz2
a10bKO1IEQDztAEAUhvutCFLNGAJZbcb8TABPOgqLG0bDGBqdz8T1HAOvGEMG/D2PcDtqkAGRzP4
wEEER084KnALy6EMmUNYVX/Ri67meQzvHY4cXO/11V7S147pAQcBAe0FO4Cmov+vCqRvAr3hDyBX
RoKQ21YITLEfEzSgAK1fG62g+vFjCVWtG4AQdr7vG5xADELpTh8MEKoEDiRYcOCQCioqLVwo458A
gwQJKVDI0Ae0iAMHbJDBEB2AjCFD/unVgeFJFQYKqGKCoMnJhSAqQFGV5UhFmJVoYFgjUgcGGgtV
HAIWUZktEAwPlBC5J9ySXCJVmYoVNCeNKUNEGnLwslITETdCpuHQMedZtJUESWWgAifMDpREJggG
4kAGqXkFipKiYMs2tDSk5dAbEs3bhg9FTny7BILIEBu8VvpYOC9JkzlTrmw5maFMmjYRM9zZM+RP
qzQmtIjYWSnTkE6pSRGZZs3/gbTgxIicBQP317Bjy6YlzjCcIqlWqqKV4SFbSFHkDty1HPJLPwWa
AKftsCFQ9YFE2oGyetIhxJCMTy6xJTJRn9+UQYLPiPnsZpYuc4KueTMwBh1EsgGohWiARCuDPJEl
M8qsEEmRcBRIRiRE+kgKLRWckaodEIJqAgE8RPrArOLSWkIOqdRAhzsJpCIjFHRgo08gZ57AJBYZ
tiNOBkt2YMIyRNSxoQMGzfsnAZH6emsbE6QSQp7M0OlkxojSwaFIhvBzDSb+RPuPAkMAEXNMMQ2h
gMCFOsiETDHl4OAdnA7QIUw2xywinAnyqHNMOUiYxjOYVIBgTz77gcQkGTaI/0AOQkNwgcQSz7rD
GELF1GCFLdJSIRdKCZUDDVnQWYPOStk05gkhdsgAARUOKK9EGWIxhwE7nEEko0nkiMAGX0DAkiEZ
cICG0T3lmMO/k47QoFRHimBGoQMkIbZUagGR4wMDfq1ES/24nKm/0QoMRxYRNjD3XHNFkCWcVy1B
11wHfIG0A0vKffdcSyK8F10HJljiVZi4mWDfcx0g4A6FVLiDAAcI3mACgCM96Y6GHSYAWbRAcXgD
g4+g196N0SWAijhiQWeLDnSUWAVNDgAlBUZKKMGKHUawogQnThChVUivWrjie/td4qyBHRbBAf86
kAbokDc22IeIt1UpP0Ar6f8S47M6aGJrrrv+Veuut87xpG3ADptrk1Q4O2wZojZv7a7bzlIGuLfW
VuIC6xZbBZVzMhtuGfj+W2+uZSAyXLx16mCL6dABIY5W0TkAhCbuhokGuuvuIOrM65a7km06J3z0
zzWbesuTrkY8cdZbd/112GOXfXbaS6Shg9Vr1313lE7vNvVvveR9eOKLN/545JNXfnZuq1Z9eeij
l3566qtHvvn9gsfaeu679/578I3H3tvQtg//fPTTV//88YEvP/f145d/fvpjb/8z7eGvf3/++6//
/pjkz38DJGAB1wdAqwmwdSqg2xYMFygZRDAzDJTgqxjYhC04EGAdkGBFOCj/wQJ9sHSKk8EWmvBA
lIgwM7cDYetYGEEYbu4kL4Sh4RB3u8K9hYI1rGHCRMjDlKGkgZUrjwp+CMS+RYqBGTxh1C5owsCd
RIVzqyANeUiiK9rwdQh8XuLURgBFSAANLlgBkRYSjg1c4QpFWIHhDJCLNfaAIqDbgi9s0QZCoKEG
oFghNaKhRj9wJBwOgGMuRBAOej2jCGs8glVUgAFBzAENEuDBBuBglQ5MIQqLLIIDlqCwQ6hREOFg
nQosEUo1qhEVG4jDBI+gyFSu8RkTQCFDOhAHVEiAGK8ogixeQoNBwjGWqSyCNFQwBT8MU41F6IFZ
bieNBkiAA/zwQxw6csxk/yozjj0rUQdkUQQ0EKINVwAFpLaxBVnkIgtoaEQvK6KCVKJiZ8AkABzZ
eIQ79GCRyizCHWiwBG0eYgJGTGJxuKhAiXmTAy9oATbAQARc7MIBGKjEEhoQBox24gBbuABGw2AB
AsiAG5rQwSrCgA2HhoEUKxCKAjSA0XtU4AAYmIFHyYGBLSAgDx7tRUWkAYh8EAGlRBgDA8wIgk/A
wqNSsASPPIFRaAwtcU0QRBU8itFxvCAGRXhJsApwVYyWgRQhMAGJOhCFGPACpdgIQwzmAIcOYMAJ
YAUrBUJxCJPSNQwAwE0HqDCDYTQUDEPgRQJWwMBDxECvGCVDfCLVgVGw4P+k2BhCGJhQg0vqZAsn
SEAYhjDYMGghF/9SwQfKEAY2cKAJO6mFR+kQB19YYLFhMIAKIMELupZhGMYQQaa86DvnIbREKogF
OcAQkSoo4J/IEQgKNnoBjYQUBGuYkEEo4YBtKcAYAnEDD2bKh4EEAacgGkhPK3EEOTynIGCwAhxU
AIITJGEgzfhHEywxCIGcQap4a0IPmpGRYYwightAj0GywZWOdIAAMYhIM56xBZqKpBahiAIvMnIJ
V8HhAdhoDQ40EYV8hMQIK1rZM3DRmh68BAQXmEREWhCNbTVgEwLhAghUoIAWCWQHByDAAEJSW0iE
JBsDCOlvOfM7/L0Pb1v/EISGVLGOWhDgOwI5wRKWsIeBOJej0QUBKMggkGysgQAROK4qIJBdHz/Z
uxgAr0DEm9MfCaSnNDiBFwRyAxH0QRkC0YUgtgBf+YK5DzxisCr0y7r+IkkgrSABhwWygHJuAAsC
AYMc9FEFb4AZE5vThB2e4wV+TIMWA+nEJdWQhjTMeCCbQLVdQTwQVMfaCAcIVpoRoYYJfFkgjDgr
C1BNEC+gGgAkjpQMdCGQIbhABPwAcxdAIANQZGIgfJjAK4ggEBJQJAVlHkQrLfEBMKuhDj1edaxR
DWRtUFoOdMhDplXhjRk4drjAzZ6SJXYAJwyEqQeAwLVVwQMfXDnLz43u/wEcYAiB/AEHTVgwSi0A
jhuneR1rbrMq3oyAOKuipyqAxnPCYIsm4BjM8QY0QVywBFkU+tBn2UZBEz0QA3zDBOlWBQsOAQJJ
CyQRFHDZEwYygzt0ABSFTgMBTPlfVSxABDIwgAik4QpxCAQJFCCAumTghxCrYggO4LoDRECADmgC
ugKxwwTQMYpZCEQCRzhC1xEUhkp+/Vct1wwBTqwKXDT1HwMxAhVAYAKEqwIWKTiANMSiimxMwZSO
1gItceDkZnwCHeQWiJi7LgIfVAISNB9GFNDJgYGMAHd4O6i9bQcHBwlkQCCAwDiUoAQg3EHgzSW4
QIh8gBXEGQsOkMERiv9Qg1zkAs0CWYcNDvAOcoR3vBnv6TeKogpeoEIGGIDBQHYQi5IPpBCWSHl+
91sgSDggGtGYxhwZ8nKB1NYHNA/DHA6Qc1XsHAToSL0qJtJfFlAaagpwhEAW0YCkoAEQKIZ7EAhY
+JOguLqsAwYVoAEHfEAVCBCBYAAMOAAYSAQlSAMNyBYHVIHnywc/GKHsmobxw4Hv64AiYA1VsAfD
+Yc0yEAAoIIDqAVRwLYJaAJQMIOBCIZtAAdFY4HeMgE3EAg52AAeSzNVuIAOoYEGXIjNE4hhOIQm
4AnrwwDLMZ0jCy7TK464GoGBGJAt8ANi4AAO2IOAwzLa2zLbI4D3QxH/geADA/ABwzGjiCM+FxAG
BfAH5YOz8qKXD2wm6huIJ4iDA4gvgcAGOzuFofM+mJABE0A6N4CBC1kI9FMFS+gAaqC5cfAu+EuE
E5icdhiIB8CAJkCFRdA/GlCANHODGbiQASxAwZsGs1BAgQAGargDXJS9R1KDgaBAEDCHNpACKXAB
86OBDwzBQGkCGxiIAuA9W6oBFWTBlPgANNAHHoAEORkIErhBKtBBgbiFocmxfLgCENCDgegCnKI8
VcAEesjFzNM8znsGTZArMLMCVyE9eiMfcEkoKvBC1QOKH6ooNFQFLRs7VSAyEFAACyAIAeABHECW
Ony3BNAAY1iFPcS4/z7cgOdjgQmIq+oTiC6QQUNUBSD4EUywBJX7vhubB4JQhyKjxB5QNFWYAgUo
BppjgR7QBPhThlEQhhQABIHgBT0oIRfwNzDYPyQctpggQAOUxYbAOkpzAQiYSh4gABx8hV7EACOq
ofIwRoEAwZ6RAREIAYLgg6BrCClQAoFgQZ04oQgSwH3QRlqqDIFwAWqohBqoRRfYAgoAs3ZABxlQ
xw+Yg6mEgBXIvCdUhRfIBXnQA8irCyOjmnrbx2IjgP77x9GYPYKsvYMMqQN4gDIwCAnAgYRRRZG4
OObrjo30BY8cCEMQAXQYSX7ggDRoBALgAka0JT2oQYLIgA6BSZlsg/8zuBWByAFrgr9NYIIQuLYh
8AAYgBxNaAQEOcpUTEoSe8WmnEWoNIh8WAEQ+LastByvVAWwnKFYwAuCSICyaggOUMsV5KZH0kMb
lAG6VIU5oAYa2IBDVC1GID5GeDZ1LAgI8KfETAM8KADmXAAnCAX96Z0snEzhgRXL/EKtZMLDEciB
U8PObBs40AEm4M2BSIANYELTDAnUzMjVbE0idIDYDDRJKIIYgAURWIDcTJNecEP/s5Dzi8mMwIMa
OCH4K4gEqAVIUIjonE6kHAiltBqmjEXtzLqCWATvBM8JtEILHT3SOEZIoQG+HAeCaIUpyAwZaM+1
NAsjwp24kk9V2Eb/+pwP+8TPI1DBBegAQhAID+gBBwpQghhQA6G5gliFW6CGBnVQydTHCC0OGZiA
VqBQ21IARz0CcNDMgoyujhBAX2AAFPA3gdCATyrRNFgAADCCQrO45UNRgeBIFVUFYyCAFhUIKZiA
S1CFPsBNQ/u+SuiAT+CEgaCK8qjEGEiABNAFAEixSkiUSVOFNOCCS1gABMmEBdGELEDS6lTS62zS
A3xSgfACI9hWI3iC3rIEfQhPH1AAWZAFBdiv8SxPKYIENBgINviByZCBtCzTiiJXc12CDqg4Nq1P
u/wnIBAIT1AAjFAFdVAADlLHHOBWI7AF/CxQPDADT3BPOjDYyESd/ySjzG7CAAagUBlwgEYgQ0U4
www1SCILnAgCgTr4KzywM4FQvBKFglGogwPgRTcrVTlTsOcbhg1I1SeowJHUBwzogmywAAurVbiQ
hVe4hEugAwfwLeAciCgQBEGQBjjwCmMVCHG4BU0QARy9ALqhhTBARU8Vgt/ATid9yqxrAXRYW8nB
HVBgh6xsgimAAGF0AVmoiHRFRrIpRw1QWh44y4bgBwSRRgWYA2GEAFaVwDWlJU0wgoEAuH9ygUcT
hD8QiCeIBQZSRz2oA7bdgqBIzEUogg5wADdchweQN4PKR/fBWC7EgFAUiJ/YghXwtwGQPebaTA3d
CHQygWlIgSmgAf90QIXQVAUwiIKInLjvusjUvANVK4NDmL5aEESfDTR9iANaWAeCWDmG2Aa3AAVQ
sEKYqMQjgKLyuFpVSIITQIdQ8EdVGMUmeIZhoDR24T+BgAJFcEVrdcpi3U5gwB23+F96rFIQQABF
g4WSKBAtzQnujQPvBQod6YAriMYmOCZFWwUEqIM1qAeBoIMbBAUUGIgqAx1UoLEisMg0CIIVCUwk
VML/bcLEHIZnAIE7aIReJDYlUt2LPVTi4NKNrcslOIAriN81pYZwuIUsc5wfGAgL8IXY/ANYQII5
uAMZiAP8Il7RLVHkZTPlLS8jUjRe8IO/SIWB4JDs0wdQ8AUaHQj/7U0hLD2JSqytnDDfnTuAOIiA
gVgDDOjY/CPeoDuClVCFLygC3zLba0XbWsQARE7kb+gAxW0HQlwBRRuAbEHgr9TbyyGSNk6TZ4hG
rekF4ryBDUCHYog6VXAEaQCBbhyIaSgQHDhV0FOFSSiCpFDhgbiAWEhkDCClF5ZCH6BZVbACG563
BzVU80kLOfG3VT2ACEiDuvQBDGiS4mSGUPhIVdiBDjiAXMBeVSWAWAiGUxSIgcJiittiOXOLx9C6
LICDCdAA4vONMpYFEPhgNbbVEnnj0ZBjnosDIbhjreyANE6DFcAAB9DmBbjEpYTFQt7frEsDcmho
cuADHbgDEPiB/zcQiDyYBnSYAX8TnrzlpuJIxaINAwTogBUYCHV4hzpaSFVABviAZIGYBEtQCBqg
hi9QBS/wUlXYhSKjZYGIgBlwaD7AAXiEQimkQoEA5opFsgDaQkQlgDwYiAggh7tDBBMABxo4gjgr
A31gh8BbB0Y4gCbYgCoYiHggBzxQL0DoVIkb55rlw3LmBhFwT14whRFA66YqY0tAh3lAEKOdKh5N
v3vuRJ6DA/YdRS6l2WwwBn+wg4FAg99kUoTWX1qMiEEABftibIEAABdIY1UoBpzo6NbpADtGVkfw
hzRTAhuwsVCYAZOeATlg2X5diNkoCCOAk2LVU4II6F2eQsUtgf9gTt1hXl0d3mE4qAU2MAhRUAMH
rIRwOAFkiAh98BgaCAVG0FSCeE0mtITKFQj3wwA1nQcMAAFBqGmBIE2dSD6D+IIL0ASroQB8EAho
sAQQWIGw3VR6Lo7++mZVgONGdACkQ4QamL/XVYUZ8IEGjAM6iAgLoKXP+IRjEIgkSIFZvAL1MghI
64BQeIQQMQhJ8BjSGIhsuAKPNigCCLyCyASPOadeWFSDUAfFs4jbtVwSSxQcNQjdHggw8APetj5N
cJv7wOGlxliziSK/6QAKGAENgIVEMIZMeAAsdUAK4IABSAAkyAM6mIGFSxMVqIVMSPIkOAc7CIKl
25YjaAMNsID/MzgBEAgHGHAEC3AERgiHsNaHM99AmY6DNYiAAUiCiWSA9Q6KLTAHaNAADZgDBYC2
LrcAC4CA+94REfiAOjc/KZoCKSB0OniEP6uFVjhzCDDoDpiADIiHPECCKrADcugKN06BQdcAfcAB
s+gAQSABRZ91RdcADgAFt+iAR2CAAVByQ4gAJ5BiHaEBO1B0EhCEK0yLJpgGK0hyJHCGeFCDKfgL
0NGEXiAHOkiHRMgDCzAFoyuPcEiBM1f0VpDEhvAFM6f1WdcAE6gEH5h1OpBwXXdzDeCHBfGbriki
IE8g04OEcyGAOOAGBV4cKiAAcyiGDQAFG0MJTaCCDXiEFZgG/1mo2u0oG00ABQJ4hGIQgQkIhclY
ggkgAGmQBooYF5EngHVRmJCXBgJ4x1sFAVnYgGJ4BIDvcaE4ApYnAEsgrZWXBktwoTvwhZO/bxrw
gZAnAF+4CRoIepHfgEZqiFiwhGlYgRSYADhw2gI5AqFHevzM+pH/+q8nAH8JCi6Ngw04eBPwC24C
+6d3HZQxeKq3BDgYm4U4p1CQBUEohmmQF26iBpEfeV/AdfDrebBn+Ttg7q9Peia8gw1geWnYHhVw
+HPBidKjzA5QBEaRA2PQgQMoqFstIU2oJbgAfZSJGG7goC3QhBN6CxoKoinaFq4cfU1woCLh3hiy
ihpKdgyJ/f+zwBwY4hvbh6FXwZwmmH0ihyDhF6IsiiCBt6USohwZiuPftx/SF0GheP7Vvw8kIo0j
6qGGmH7YB//UmYEQyPzDEop9fx4asIREIAhdMGgDin/5n3/WYTLy5rPDl5rgzmH/AAgVmVQRJAiG
HQhulRYybOjwIcSIEidSrGjxIsaMGjdy7OjxI8iPKkLZyVaQ4JwOlVQYKKCKCYImD0FUgKIqyxEV
KlYQOUlw1YotIYcSLWr0KNKkSpdaBGGrjE9ViaTRYOkSpkyHNG3iVEFDRFRVMUTIYGr2LNq0ateq
1VQkUVQwsla2fBlzZs2bOSstQeOTExp4NNgSLmz4MGK0Kuj/kYmaarBVu1kbbtWrohKNKT0LclGg
MjHo0KJHk164RYSWk1WOLIyMFS/XvZUw3BpgW4MtoaV38+7tm2gTF45sG3s2mO7Vu1rzdmXoQwF0
BT6O/65u/Tp2FXeiK1jC0LVyysxlY9bplTr29OrXJ65qviH4yQwr40TP/j7+/KDjw1ZlTFEDAQo4
IIEFGnggggkquCCDDTr4IIQRSjghhRVaeKGFo8yximR4rRMWiCGKOCKJJZp4Ioopqrgiiy26+CKM
Mcr4mlauKIMNjjnquCOPPfr4I5BBCjkkkUUaeSSSSSq5JJNNOvmkjmBUER5DTazQCBrEaLkll116
+SWYYYo5kiaZZZp5Jpppqrkmm226+SaccW6JBgQEfNbQNh00sUUTffr5J6CBCjoooYUaeiiiiSq6
KKONOvoopJFKOimlfm4hw2X6abopp516+imooYo6KqmlshUAqqmqGoA7v7j6qjWxxsoKrbSWcmsp
rPziDq+9+vorsMH6uiqxxRp7LLLJKrsss806+yy00Uo7LbXVIhsQADs=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/calendar/calendar-win2k-1.css

.calendar {
	BORDER-BOTTOM: #000 2px solid; POSITION: relative; BORDER-LEFT: #fff =
2px solid; DISPLAY: none; FONT-FAMILY: tahoma, verdana, sans-serif; =
BACKGROUND: #d4d0c8; COLOR: #000; FONT-SIZE: 11px; BORDER-TOP: #fff 2px =
solid; CURSOR: default; BORDER-RIGHT: #000 2px solid
}
.calendar TABLE {
	BORDER-BOTTOM: #fff 1px solid; BORDER-LEFT: #000 1px solid; =
FONT-FAMILY: tahoma, verdana, sans-serif; BACKGROUND: #d4d0c8; COLOR: =
#000; FONT-SIZE: 11px; BORDER-TOP: #000 1px solid; CURSOR: default; =
BORDER-RIGHT: #fff 1px solid
}
.calendar .button {
	BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: center; BORDER-LEFT: #fff =
1px solid; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; =
BORDER-TOP: #fff 1px solid; BORDER-RIGHT: #000 1px solid; PADDING-TOP: =
1px
}
.calendar .nav {
	BACKGROUND: url(menuarrow.gif) no-repeat 100% 100%
}
.calendar THEAD .title {
	BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: center; BORDER-LEFT: #000 =
1px solid; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; =
BACKGROUND: #848078; COLOR: #fff; BORDER-TOP: #000 1px solid; =
FONT-WEIGHT: bold; BORDER-RIGHT: #000 1px solid; PADDING-TOP: 1px
}
.calendar THEAD .headrow {
=09
}
.calendar THEAD .daynames {
=09
}
.calendar THEAD .name {
	BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: center; PADDING-BOTTOM: 2px; =
PADDING-LEFT: 2px; PADDING-RIGHT: 2px; BACKGROUND: #f4f0e8; PADDING-TOP: =
2px
}
.calendar THEAD .weekend {
	COLOR: #f00
}
.calendar THEAD .hilite {
	BORDER-BOTTOM: #000 2px solid; BORDER-LEFT: #fff 2px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #e4e0d8; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; BORDER-TOP: #fff 2px solid; BORDER-RIGHT: #000 2px =
solid; PADDING-TOP: 0px
}
.calendar THEAD .active {
	BORDER-BOTTOM: #fff 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #c4c0b8; PADDING-LEFT: 2px; =
PADDING-RIGHT: 0px; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #fff 1px =
solid; PADDING-TOP: 2px
}
.calendar TBODY .day {
	TEXT-ALIGN: right; PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; WIDTH: 2em; =
PADDING-RIGHT: 4px; PADDING-TOP: 2px
}
.calendar TBODY .othermonth.day {
	COLOR: #aaa; FONT-SIZE: 80%
}
.calendar TBODY .oweekend.othermonth.day {
	COLOR: #faa
}
.calendar TABLE .wn {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; PADDING-RIGHT: 3px; BACKGROUND: =
#f4f0e8; BORDER-RIGHT: #000 1px solid; PADDING-TOP: 2px
}
.calendar TBODY .rowhilite TD {
	BACKGROUND: #e4e0d8
}
.calendar TBODY .rowhilite TD.wn {
	BACKGROUND: #d4d0c8
}
.calendar TBODY TD.hilite {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #fff 1px solid; =
PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 3px; BORDER-TOP: =
#fff 1px solid; BORDER-RIGHT: #000 1px solid; PADDING-TOP: 1px
}
.calendar TBODY TD.active {
	BORDER-BOTTOM: #fff 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; BORDER-TOP: =
#000 1px solid; BORDER-RIGHT: #fff 1px solid; PADDING-TOP: 2px
}
.calendar TBODY TD.selected {
	BORDER-BOTTOM: #fff 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; BACKGROUND: =
#e4e0d8; BORDER-TOP: #000 1px solid; FONT-WEIGHT: bold; BORDER-RIGHT: =
#fff 1px solid; PADDING-TOP: 2px
}
.calendar TBODY TD.weekend {
	COLOR: #f00
}
.calendar TBODY TD.today {
	COLOR: #00f; FONT-WEIGHT: bold
}
.calendar TBODY .disabled {
	COLOR: #999
}
.calendar TBODY .emptycell {
	VISIBILITY: hidden
}
.calendar TBODY .emptyrow {
	DISPLAY: none
}
.calendar TFOOT .footrow {
=09
}
.calendar TFOOT .ttip {
	BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: center; BORDER-LEFT: #000 =
1px solid; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; =
BACKGROUND: #848078; COLOR: #fff; BORDER-TOP: #000 1px solid; =
BORDER-RIGHT: #000 1px solid; PADDING-TOP: 1px
}
.calendar TFOOT .hilite {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #fff 1px solid; =
PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; BACKGROUND: =
#e4e0d8; BORDER-TOP: #fff 1px solid; BORDER-RIGHT: #000 1px solid; =
PADDING-TOP: 1px
}
.calendar TFOOT .active {
	BORDER-BOTTOM: #fff 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 0px; BORDER-TOP: =
#000 1px solid; BORDER-RIGHT: #fff 1px solid; PADDING-TOP: 2px
}
.calendar .combo {
	Z-INDEX: 100; BORDER-BOTTOM: #000 1px solid; POSITION: absolute; =
BORDER-LEFT: #fff 1px solid; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; =
WIDTH: 4em; PADDING-RIGHT: 1px; DISPLAY: none; BACKGROUND: #e4e0d8; =
FONT-SIZE: 90%; BORDER-TOP: #fff 1px solid; TOP: 0px; CURSOR: default; =
BORDER-RIGHT: #000 1px solid; PADDING-TOP: 1px; LEFT: 0px
}
.calendar .combo .label {
	TEXT-ALIGN: center; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; =
PADDING-RIGHT: 1px; PADDING-TOP: 1px
}
.calendar .combo .label-IEfix {
	TEXT-ALIGN: center; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; =
PADDING-RIGHT: 1px; PADDING-TOP: 1px
}
.calendar .combo .label-IEfix {
	WIDTH: 4em
}
.calendar .combo .active {
	BORDER-BOTTOM: #fff 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BACKGROUND: =
#c4c0b8; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #fff 1px solid; =
PADDING-TOP: 0px
}
.calendar .combo .hilite {
	BACKGROUND: #048; COLOR: #fea
}
.calendar TD.time {
	TEXT-ALIGN: center; PADDING-BOTTOM: 1px; BACKGROUND-COLOR: #f4f0e8; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: #000 1px solid; =
PADDING-TOP: 1px
}
.calendar TD.time .hour {
	BORDER-BOTTOM: #889 1px solid; BORDER-LEFT: #889 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; PADDING-LEFT: 4px; =
PADDING-RIGHT: 3px; BORDER-TOP: #889 1px solid; FONT-WEIGHT: bold; =
BORDER-RIGHT: #889 1px solid; PADDING-TOP: 0px
}
.calendar TD.time .minute {
	BORDER-BOTTOM: #889 1px solid; BORDER-LEFT: #889 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; PADDING-LEFT: 4px; =
PADDING-RIGHT: 3px; BORDER-TOP: #889 1px solid; FONT-WEIGHT: bold; =
BORDER-RIGHT: #889 1px solid; PADDING-TOP: 0px
}
.calendar TD.time .ampm {
	BORDER-BOTTOM: #889 1px solid; BORDER-LEFT: #889 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; PADDING-LEFT: 4px; =
PADDING-RIGHT: 3px; BORDER-TOP: #889 1px solid; FONT-WEIGHT: bold; =
BORDER-RIGHT: #889 1px solid; PADDING-TOP: 0px
}
.calendar TD.time .ampm {
	TEXT-ALIGN: center
}
.calendar TD.time .colon {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 2px; =
FONT-WEIGHT: bold; PADDING-TOP: 0px
}
.calendar TD.time SPAN.hilite {
	BORDER-BOTTOM-COLOR: #000; BACKGROUND-COLOR: #766; BORDER-TOP-COLOR: =
#000; COLOR: #fff; BORDER-RIGHT-COLOR: #000; BORDER-LEFT-COLOR: #000
}
.calendar TD.time SPAN.active {
	BORDER-BOTTOM-COLOR: #f00; BACKGROUND-COLOR: #000; BORDER-TOP-COLOR: =
#f00; COLOR: #0f0; BORDER-RIGHT-COLOR: #f00; BORDER-LEFT-COLOR: #f00
}

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/skin/frontend/matadore/default/css/styles.css

* {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
BODY {
	TEXT-ALIGN: center; FONT: 12px/1.35 Arial, Helvetica, sans-serif; =
BACKGROUND: #fff; COLOR: #000
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; VERTICAL-ALIGN: top; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
A {
	COLOR: #05c; TEXT-DECORATION: underline
}
A:hover {
	TEXT-DECORATION: none
}
:focus {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: 0px
}
H1 {
	LINE-HEIGHT: 1.15; FONT-SIZE: 20px; FONT-WEIGHT: normal
}
H2 {
	LINE-HEIGHT: 1.25; FONT-SIZE: 18px; FONT-WEIGHT: normal
}
H3 {
	LINE-HEIGHT: 1.25; FONT-SIZE: 16px; FONT-WEIGHT: bold
}
H4 {
	FONT-SIZE: 14px; FONT-WEIGHT: bold
}
H5 {
	FONT-SIZE: 12px; FONT-WEIGHT: bold
}
H6 {
	FONT-SIZE: 11px; FONT-WEIGHT: bold
}
FORM {
	DISPLAY: inline
}
FIELDSET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
LEGEND {
	DISPLAY: none
}
TABLE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-SPACING: 0; =
BORDER-COLLAPSE: collapse; EMPTY-CELLS: show; FONT-SIZE: 100%; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
CAPTION {
	TEXT-ALIGN: left; VERTICAL-ALIGN: top; FONT-WEIGHT: normal
}
TH {
	TEXT-ALIGN: left; VERTICAL-ALIGN: top; FONT-WEIGHT: normal
}
TD {
	TEXT-ALIGN: left; VERTICAL-ALIGN: top; FONT-WEIGHT: normal
}
STRONG {
	FONT-WEIGHT: bold
}
ADDRESS {
	FONT-STYLE: normal
}
CITE {
	FONT-STYLE: normal
}
Q {
	QUOTES: none
}
BLOCKQUOTE {
	QUOTES: none
}
Q:before {
	CONTENT: ''
}
Q:after {
	CONTENT: ''
}
SMALL {
	FONT-SIZE: 1em
}
BIG {
	FONT-SIZE: 1em
}
SUP {
	FONT-SIZE: 1em; VERTICAL-ALIGN: top
}
UL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
OL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
.hidden {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px !important; =
LINE-HEIGHT: 0 !important; MARGIN: 0px; PADDING-LEFT: 0px !important; =
WIDTH: 0px !important; PADDING-RIGHT: 0px !important; DISPLAY: block =
!important; HEIGHT: 0px !important; FONT-SIZE: 0px !important; OVERFLOW: =
hidden !important; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px =
!important
}
.nobr {
	WHITE-SPACE: nowrap !important
}
.wrap {
	WHITE-SPACE: normal !important
}
.a-left {
	TEXT-ALIGN: left !important
}
.a-center {
	TEXT-ALIGN: center !important
}
.a-right {
	TEXT-ALIGN: right !important
}
.v-top {
	VERTICAL-ALIGN: top
}
.v-middle {
	VERTICAL-ALIGN: middle
}
.f-left {
	FLOAT: left !important
}
.left {
	FLOAT: left !important
}
.f-right {
	FLOAT: right !important
}
.right {
	FLOAT: right !important
}
.f-none {
	FLOAT: none !important
}
.f-fix {
	WIDTH: 100%; FLOAT: left
}
.no-display {
	DISPLAY: none
}
.no-margin {
	MARGIN: 0px
}
.no-padding {
	PADDING-BOTTOM: 0px !important; PADDING-LEFT: 0px !important; =
PADDING-RIGHT: 0px !important; PADDING-TOP: 0px !important
}
.no-bg {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.wrapper {
=09
}
.page {
	TEXT-ALIGN: left; PADDING-BOTTOM: 10px; MARGIN: 0px auto; PADDING-LEFT: =
0px; WIDTH: 1000px; PADDING-RIGHT: 0px; PADDING-TOP: 10px
}
.page-print {
	TEXT-ALIGN: left; PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; =
PADDING-RIGHT: 20px; BACKGROUND: #fff; PADDING-TOP: 20px
}
.page-empty {
	TEXT-ALIGN: left; PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; =
PADDING-RIGHT: 20px; BACKGROUND: #fff; PADDING-TOP: 20px
}
.page-popup {
	TEXT-ALIGN: left; PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; =
PADDING-RIGHT: 20px; PADDING-TOP: 20px
}
.main-container {
=09
}
.main {
	MARGIN: 10px 0px
}
.col-left {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; WIDTH: 230px; PADDING-RIGHT: =
5px; FLOAT: left; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px =
solid; PADDING-TOP: 5px
}
.col-main {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 736px; PADDING-RIGHT: =
5px; FLOAT: left; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px =
solid; PADDING-TOP: 5px
}
.col-right {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; WIDTH: 230px; PADDING-RIGHT: =
5px; FLOAT: right; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px =
solid; PADDING-TOP: 5px
}
.col1-layout .col-main {
	WIDTH: auto; FLOAT: none
}
.col2-left-layout .col-main {
	FLOAT: right
}
.col2-right-layout .col-main {
=09
}
.col3-layout .col-main {
	WIDTH: 484px; MARGIN-LEFT: 10px
}
.col3-layout .col-wrapper {
	WIDTH: 748px; FLOAT: left
}
.col3-layout .col-wrapper .col-main {
	FLOAT: right
}
.col2-set .col-1 {
	WIDTH: 49%; FLOAT: left
}
.col2-set .col-2 {
	WIDTH: 49%; FLOAT: right
}
.col2-set .col-narrow {
	WIDTH: 33%
}
.col2-set .col-wide {
	WIDTH: 65%
}
.col3-set .col-1 {
	WIDTH: 32%; FLOAT: left
}
.col3-set .col-2 {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.col3-set .col-3 {
	WIDTH: 32%; FLOAT: right
}
.col4-set .col-1 {
	WIDTH: 23.5%; FLOAT: left
}
.col4-set .col-2 {
	MARGIN: 0px 2%; WIDTH: 23.5%; FLOAT: left
}
.col4-set .col-3 {
	WIDTH: 23.5%; FLOAT: left
}
.col4-set .col-4 {
	WIDTH: 23.5%; FLOAT: right
}
INPUT {
	FONT: 12px Arial, Helvetica, sans-serif; COLOR: #000; VERTICAL-ALIGN: =
middle
}
SELECT {
	FONT: 12px Arial, Helvetica, sans-serif; COLOR: #000; VERTICAL-ALIGN: =
middle
}
TEXTAREA {
	FONT: 12px Arial, Helvetica, sans-serif; COLOR: #000; VERTICAL-ALIGN: =
middle
}
BUTTON {
	FONT: 12px Arial, Helvetica, sans-serif; COLOR: #000; VERTICAL-ALIGN: =
middle
}
INPUT.input-text {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid
}
SELECT {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid
}
TEXTAREA {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid
}
INPUT.input-text {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; =
PADDING-TOP: 2px
}
TEXTAREA {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; =
PADDING-TOP: 2px
}
SELECT {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; =
PADDING-TOP: 1px
}
SELECT OPTION {
	PADDING-RIGHT: 10px
}
SELECT.multiselect OPTION {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; PADDING-TOP: 2px
}
TEXTAREA {
	OVERFLOW: auto
}
INPUT.radio {
	MARGIN-RIGHT: 3px
}
INPUT.checkbox {
	MARGIN-RIGHT: 3px
}
INPUT.qty {
	WIDTH: 2.5em !important
}
BUTTON.button {
	-webkit-border-fit: lines
}
BUTTON.button {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: auto; PADDING-RIGHT: 0px; BACKGROUND: none =
transparent scroll repeat 0% 0%; OVERFLOW: visible; BORDER-TOP: 0px; =
CURSOR: pointer; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BUTTON.button SPAN {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; PADDING-LEFT: 8px; =
PADDING-RIGHT: 0px; FONT: bold 12px/21px Arial, Helvetica, sans-serif; =
WHITE-SPACE: nowrap; BACKGROUND: url(../images/bkg_button.gif) no-repeat =
0px 0px; FLOAT: left; HEIGHT: 21px; COLOR: #fff; PADDING-TOP: 0px
}
BUTTON.button SPAN SPAN {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 4px; PADDING-RIGHT: 12px; =
BACKGROUND-POSITION: 100% 0px; PADDING-TOP: 0px
}
BUTTON.disabled {
=09
}
BUTTON.disabled SPAN {
=09
}
BUTTON.btn-checkout SPAN {
=09
}
BUTTON.no-checkout.btn-checkout {
=09
}
P.control INPUT.checkbox {
	MARGIN-RIGHT: 6px
}
P.control INPUT.radio {
	MARGIN-RIGHT: 6px
}
.form-list LI {
	MARGIN: 0px 0px 8px
}
.form-list LABEL {
	Z-INDEX: 0; POSITION: relative; FLOAT: left; COLOR: #111; FONT-WEIGHT: =
bold
}
.form-list LABEL.required {
=09
}
.form-list LABEL.required EM {
	POSITION: absolute; FONT-STYLE: normal; FLOAT: right; COLOR: #eb340a; =
TOP: 0px; RIGHT: -8px
}
.form-list LI.control LABEL {
	FLOAT: none
}
.form-list LI.control INPUT.radio {
	MARGIN-RIGHT: 6px
}
.form-list LI.control INPUT.checkbox {
	MARGIN-RIGHT: 6px
}
.form-list LI.control .input-box {
	WIDTH: auto; DISPLAY: inline; CLEAR: none
}
.form-list .input-box {
	WIDTH: 260px; DISPLAY: block; CLEAR: both
}
.form-list .field {
	WIDTH: 275px; FLOAT: left
}
.form-list INPUT.input-text {
	WIDTH: 254px
}
.form-list TEXTAREA {
	WIDTH: 254px; HEIGHT: 10em
}
.form-list SELECT {
	WIDTH: 260px
}
.form-list LI.wide .input-box {
	WIDTH: 535px
}
.form-list LI.wide INPUT.input-text {
	WIDTH: 529px
}
.form-list LI.wide TEXTAREA {
	WIDTH: 529px
}
.form-list LI.wide SELECT {
	WIDTH: 535px
}
.form-list LI.additional-row {
	MARGIN-TOP: 10px; BORDER-TOP: #ccc 1px solid; PADDING-TOP: 7px
}
.form-list LI.additional-row .btn-remove {
	MARGIN: 5px 0px 0px; FLOAT: right
}
.form-list .input-range INPUT.input-text {
	WIDTH: 74px
}
.form-list .customer-name-prefix .input-box {
	WIDTH: auto
}
.form-list .customer-name-suffix .input-box {
	WIDTH: auto
}
.form-list .customer-name-prefix-suffix .input-box {
	WIDTH: auto
}
.form-list .customer-name-prefix-middlename .input-box {
	WIDTH: auto
}
.form-list .customer-name-middlename-suffix .input-box {
	WIDTH: auto
}
.form-list .customer-name-prefix-middlename-suffix .input-box {
	WIDTH: auto
}
.form-list .name-prefix {
	WIDTH: 65px
}
.form-list .name-prefix SELECT {
	WIDTH: 55px
}
.form-list .name-prefix INPUT.input-text {
	WIDTH: 49px
}
.form-list .name-suffix {
	WIDTH: 65px
}
.form-list .name-suffix SELECT {
	WIDTH: 55px
}
.form-list .name-suffix INPUT.input-text {
	WIDTH: 49px
}
.form-list .name-middlename {
	WIDTH: 70px
}
.form-list .name-middlename INPUT.input-text {
	WIDTH: 49px
}
.form-list .customer-name-prefix-middlename-suffix .name-firstname {
	WIDTH: 140px
}
.form-list .customer-name-prefix-middlename .name-firstname {
	WIDTH: 140px
}
.form-list .customer-name-prefix-middlename-suffix .name-firstname =
INPUT.input-text {
	WIDTH: 124px
}
.form-list .customer-name-prefix-middlename .name-firstname =
INPUT.input-text {
	WIDTH: 124px
}
.form-list .customer-name-prefix-middlename-suffix .name-lastname {
	WIDTH: 205px
}
.form-list .customer-name-prefix-middlename-suffix .name-lastname =
INPUT.input-text {
	WIDTH: 189px
}
.form-list .customer-name-prefix-suffix .name-firstname {
	WIDTH: 210px
}
.form-list .customer-name-prefix-suffix .name-lastname {
	WIDTH: 205px
}
.form-list .customer-name-prefix-suffix .name-firstname INPUT.input-text =
{
	WIDTH: 189px
}
.form-list .customer-name-prefix-suffix .name-lastname INPUT.input-text =
{
	WIDTH: 189px
}
.form-list .customer-name-prefix-suffix .name-firstname {
	WIDTH: 210px
}
.form-list .customer-name-prefix-suffix .name-lastname {
	WIDTH: 205px
}
.form-list .customer-name-prefix-suffix .name-firstname INPUT.input-text =
{
	WIDTH: 189px
}
.form-list .customer-name-prefix-suffix .name-lastname INPUT.input-text =
{
	WIDTH: 189px
}
.form-list .customer-name-prefix .name-firstname {
	WIDTH: 210px
}
.form-list .customer-name-middlename .name-firstname {
	WIDTH: 210px
}
.form-list .customer-name-suffix .name-lastname {
	WIDTH: 205px
}
.form-list .customer-name-middlename .name-firstname {
	WIDTH: 205px
}
.form-list .customer-name-middlename-suffix .name-firstname {
	WIDTH: 205px
}
.form-list .customer-name-middlename-suffix .name-lastname {
	WIDTH: 205px
}
.form-list .customer-name-prefix .name-firstname INPUT.input-text {
	WIDTH: 189px
}
.form-list .customer-name-suffix .name-lastname INPUT.input-text {
	WIDTH: 189px
}
.form-list .customer-name-middlename .name-firstname INPUT.input-text {
	WIDTH: 189px
}
.form-list .customer-name-middlename-suffix .name-firstname =
INPUT.input-text {
	WIDTH: 189px
}
.form-list .customer-name-middlename-suffix .name-lastname =
INPUT.input-text {
	WIDTH: 189px
}
.form-list .customer-dob .dob-month {
	WIDTH: 85px; FLOAT: left
}
.form-list .customer-dob .dob-day {
	WIDTH: 85px; FLOAT: left
}
.form-list .customer-dob .dob-year {
	WIDTH: 85px; FLOAT: left
}
.form-list .customer-dob INPUT.input-text {
	WIDTH: 74px; DISPLAY: block
}
.form-list .customer-dob LABEL {
	COLOR: #888; FONT-SIZE: 10px; FONT-WEIGHT: normal
}
.form-list .customer-dob .dob-day {
	WIDTH: 60px
}
.form-list .customer-dob .dob-month {
	WIDTH: 60px
}
.form-list .customer-dob .dob-day INPUT.input-text {
	WIDTH: 46px
}
.form-list .customer-dob .dob-month INPUT.input-text {
	WIDTH: 46px
}
.form-list .customer-dob .dob-year {
	WIDTH: 140px
}
.form-list .customer-dob .dob-year INPUT.input-text {
	WIDTH: 134px
}
.buttons-set {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; MARGIN: 5px 0px 0px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; CLEAR: both; BORDER-TOP: #ddd 1px solid; =
BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 5px
}
.buttons-set .back-link {
	FLOAT: left
}
.buttons-set BUTTON.button {
	FLOAT: right
}
.buttons-set P.required {
	MARGIN: 0px 0px 5px
}
.buttons-set-order {
=09
}
.fieldset {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 12px; MARGIN: 28px 0px; PADDING-LEFT: 33px; =
PADDING-RIGHT: 25px; BACKGROUND: #fefefe; BORDER-TOP: #ddd 1px solid; =
BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 22px
}
.fieldset .legend {
	BORDER-BOTTOM: #fefefe 1px solid; POSITION: relative; BORDER-LEFT: =
#fefefe 1px solid; PADDING-BOTTOM: 0px; MARGIN: -33px 0px 0px -10px; =
PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #dedede; FLOAT: left; =
COLOR: #333; FONT-SIZE: 13px; BORDER-TOP: #fefefe 1px solid; =
FONT-WEIGHT: bold; BORDER-RIGHT: #fefefe 1px solid; PADDING-TOP: 0px
}
.validation-advice {
	LINE-HEIGHT: 13px; MARGIN: 3px 0px 0px; MIN-HEIGHT: 13px; PADDING-LEFT: =
17px; BACKGROUND: url(../images/validation_advice_bg.gif) no-repeat 2px =
1px; COLOR: #f00; CLEAR: both; FONT-SIZE: 10px
}
.validation-failed {
	BORDER-BOTTOM: #f00 1px dashed; BORDER-LEFT: #f00 1px dashed; =
BACKGROUND: #faebe7; BORDER-TOP: #f00 1px dashed; BORDER-RIGHT: #f00 1px =
dashed
}
.validation-passed {
=09
}
P.required {
	TEXT-ALIGN: right; COLOR: #f00; FONT-SIZE: 10px
}
.v-fix {
	FLOAT: left
}
.v-fix .validation-advice {
	POSITION: relative; WIDTH: 12em; DISPLAY: block; MARGIN-RIGHT: -12em
}
.success {
	COLOR: #3d6611; FONT-WEIGHT: bold
}
.error {
	COLOR: #f00; FONT-WEIGHT: bold
}
.notice {
	COLOR: #ccc
}
.messages {
	PADDING-BOTTOM: 0px !important; LIST-STYLE-TYPE: none !important; =
MARGIN: 0px; PADDING-LEFT: 0px !important; PADDING-RIGHT: 0px =
!important; LIST-STYLE-IMAGE: none !important; PADDING-TOP: 0px =
!important
}
.messages UL {
	PADDING-BOTTOM: 0px !important; LIST-STYLE-TYPE: none !important; =
MARGIN: 0px; PADDING-LEFT: 0px !important; PADDING-RIGHT: 0px =
!important; LIST-STYLE-IMAGE: none !important; PADDING-TOP: 0px =
!important
}
.messages {
	WIDTH: 100%; OVERFLOW: hidden
}
.messages LI {
	MARGIN: 0px 0px 10px
}
.messages LI LI {
	MARGIN: 0px 0px 3px
}
.error-msg {
	BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; PADDING-BOTTOM: 8px =
!important; MIN-HEIGHT: 24px !important; PADDING-LEFT: 32px !important; =
PADDING-RIGHT: 8px !important; BACKGROUND-REPEAT: no-repeat !important; =
BACKGROUND-POSITION: 10px 9px; FONT-SIZE: 11px !important; BORDER-TOP: =
1px solid; FONT-WEIGHT: bold !important; BORDER-RIGHT: 1px solid; =
PADDING-TOP: 8px !important
}
.success-msg {
	BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; PADDING-BOTTOM: 8px =
!important; MIN-HEIGHT: 24px !important; PADDING-LEFT: 32px !important; =
PADDING-RIGHT: 8px !important; BACKGROUND-REPEAT: no-repeat !important; =
BACKGROUND-POSITION: 10px 9px; FONT-SIZE: 11px !important; BORDER-TOP: =
1px solid; FONT-WEIGHT: bold !important; BORDER-RIGHT: 1px solid; =
PADDING-TOP: 8px !important
}
.note-msg {
	BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; PADDING-BOTTOM: 8px =
!important; MIN-HEIGHT: 24px !important; PADDING-LEFT: 32px !important; =
PADDING-RIGHT: 8px !important; BACKGROUND-REPEAT: no-repeat !important; =
BACKGROUND-POSITION: 10px 9px; FONT-SIZE: 11px !important; BORDER-TOP: =
1px solid; FONT-WEIGHT: bold !important; BORDER-RIGHT: 1px solid; =
PADDING-TOP: 8px !important
}
.notice-msg {
	BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; PADDING-BOTTOM: 8px =
!important; MIN-HEIGHT: 24px !important; PADDING-LEFT: 32px !important; =
PADDING-RIGHT: 8px !important; BACKGROUND-REPEAT: no-repeat !important; =
BACKGROUND-POSITION: 10px 9px; FONT-SIZE: 11px !important; BORDER-TOP: =
1px solid; FONT-WEIGHT: bold !important; BORDER-RIGHT: 1px solid; =
PADDING-TOP: 8px !important
}
.error-msg {
	BACKGROUND-IMAGE: url(../images/i_msg-error.gif); BORDER-BOTTOM-COLOR: =
#f16048; BACKGROUND-COLOR: #faebe7; BORDER-TOP-COLOR: #f16048; COLOR: =
#df280a; BORDER-RIGHT-COLOR: #f16048; BORDER-LEFT-COLOR: #f16048
}
.success-msg {
	BACKGROUND-IMAGE: url(../images/i_msg-success.gif); =
BORDER-BOTTOM-COLOR: #446423; BACKGROUND-COLOR: #eff5ea; =
BORDER-TOP-COLOR: #446423; COLOR: #3d6611; BORDER-RIGHT-COLOR: #446423; =
BORDER-LEFT-COLOR: #446423
}
.note-msg {
	BACKGROUND-IMAGE: url(../images/i_msg-note.gif); BORDER-BOTTOM-COLOR: =
#fcd344; BACKGROUND-COLOR: #fafaec; BORDER-TOP-COLOR: #fcd344; COLOR: =
#3d6611; BORDER-RIGHT-COLOR: #fcd344; BORDER-LEFT-COLOR: #fcd344
}
.notice-msg {
	BACKGROUND-IMAGE: url(../images/i_msg-note.gif); BORDER-BOTTOM-COLOR: =
#fcd344; BACKGROUND-COLOR: #fafaec; BORDER-TOP-COLOR: #fcd344; COLOR: =
#3d6611; BORDER-RIGHT-COLOR: #fcd344; BORDER-LEFT-COLOR: #fcd344
}
.breadcrumbs {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 10px; MARGIN: 0px 0px 10px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px =
solid; PADDING-TOP: 10px
}
.breadcrumbs LI {
	DISPLAY: inline
}
.page-title {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 5px; MARGIN: 0px 0px =
10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.page-title H1 {
	COLOR: #000; FONT-SIZE: 18px
}
.page-title H2 {
	COLOR: #000; FONT-SIZE: 18px
}
.page-title .separator {
	MARGIN: 0px 3px
}
.page-title .link-rss {
	FLOAT: right
}
.title-buttons {
	TEXT-ALIGN: right
}
.title-buttons H1 {
	FLOAT: left
}
.title-buttons H2 {
	FLOAT: left
}
.title-buttons H3 {
	FLOAT: left
}
.title-buttons H4 {
	FLOAT: left
}
.title-buttons H5 {
	FLOAT: left
}
.title-buttons H6 {
	FLOAT: left
}
.subtitle {
	CLEAR: both
}
.sub-title {
	CLEAR: both
}
.pager {
	BORDER-BOTTOM: #ddd 1px solid; TEXT-ALIGN: center; BORDER-LEFT: #ddd =
1px solid; PADDING-BOTTOM: 5px; MARGIN: 5px 0px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px =
solid; PADDING-TOP: 5px
}
.pager .amount {
	FLOAT: left
}
.pager .limiter {
	FLOAT: right
}
.pager .pages {
	MARGIN: 0px 135px
}
.pager .pages OL {
	DISPLAY: inline
}
.pager .pages LI {
	DISPLAY: inline
}
.pager .pages .current {
=09
}
.sorter {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; MARGIN: 5px 0px; PADDING-LEFT: 5px; PADDING-RIGHT: =
5px; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid; =
PADDING-TOP: 5px
}
.sorter .view-mode {
	FLOAT: left
}
.sorter .sort-by {
	FLOAT: right
}
.sorter .link-feed {
=09
}
.toolbar {
=09
}
.toolbar .pager {
=09
}
.toolbar .sorter {
=09
}
.toolbar-bottom {
=09
}
.data-table {
	WIDTH: 100%
}
.data-table TH {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; WHITE-SPACE: =
nowrap; BORDER-TOP: #ddd 1px solid; FONT-WEIGHT: bold; BORDER-RIGHT: =
#ddd 1px solid; PADDING-TOP: 5px
}
.data-table TD {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BORDER-TOP: =
#ddd 1px solid; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 5px
}
.data-table THEAD {
	BACKGROUND-COLOR: #f2f2f2
}
.data-table TBODY {
=09
}
.data-table TFOOT {
=09
}
.data-table TR.first {
=09
}
.data-table TR.last {
=09
}
.data-table TR.odd {
=09
}
.data-table TR.even {
	BACKGROUND-COLOR: #f6f6f6
}
.data-table TBODY.odd {
=09
}
.data-table TBODY.odd TD {
	BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 1px
}
.data-table TBODY.even {
	BACKGROUND-COLOR: #f6f6f6
}
.data-table TBODY.even TD {
	BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 1px
}
.data-table TBODY.odd TR.border TD {
	BORDER-BOTTOM-WIDTH: 1px
}
.data-table TBODY.even TR.border TD {
	BORDER-BOTTOM-WIDTH: 1px
}
.data-table TH .tax-flag {
	WHITE-SPACE: nowrap; FONT-WEIGHT: normal
}
.data-table TD.label {
	BACKGROUND-COLOR: #f6f6f6; FONT-WEIGHT: bold
}
.data-table TH.label {
	BACKGROUND-COLOR: #f6f6f6; FONT-WEIGHT: bold
}
.data-table TD.value {
=09
}
TR.summary-total {
	CURSOR: pointer
}
TR.summary-total TD {
=09
}
TR.summary-total .summary-collapse {
	TEXT-ALIGN: right; PADDING-LEFT: 20px; BACKGROUND: =
url(../images/bkg_collapse.gif) no-repeat 0px 4px; FLOAT: right; CURSOR: =
pointer
}
TR.show-details .summary-collapse {
	BACKGROUND-POSITION: 0px -53px
}
TR.show-details TD {
=09
}
TR.summary-details TD {
	BACKGROUND-COLOR: #dae1e4; COLOR: #626465; FONT-SIZE: 11px
}
TR.summary-details-first TD {
	BORDER-TOP: #d2d8db 1px solid
}
TR.summary-details-excluded {
	FONT-STYLE: italic
}
.cart-tax-info {
	DISPLAY: block
}
.cart-tax-info {
	PADDING-RIGHT: 20px
}
.cart-tax-info .cart-price {
	PADDING-RIGHT: 20px
}
.cart-tax-total {
	PADDING-RIGHT: 20px; DISPLAY: block; BACKGROUND: =
url(../images/bkg_collapse.gif) no-repeat 100% 4px; CURSOR: pointer
}
.cart-tax-info .price {
	DISPLAY: inline !important; FONT-WEIGHT: normal !important
}
.cart-tax-total .price {
	DISPLAY: inline !important; FONT-WEIGHT: normal !important
}
.cart-tax-total-expanded {
	BACKGROUND-POSITION: 100% -53px
}
.std .subtitle {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
.std OL.ol {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: decimal; PADDING-LEFT: =
1.5em
}
.std UL.disc {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: disc; MARGIN: 0px 0px =
10px; PADDING-LEFT: 18px
}
.std DL DT {
	FONT-WEIGHT: bold
}
.std DL DD {
	MARGIN: 0px 0px 10px
}
.links LI {
	DISPLAY: inline
}
.links LI.first {
	PADDING-LEFT: 0px !important
}
.links LI.last {
	PADDING-RIGHT: 0px !important; BACKGROUND: none transparent scroll =
repeat 0% 0%
}
.link-cart {
	COLOR: #f00; FONT-WEIGHT: bold
}
.link-wishlist {
	FONT-WEIGHT: bold
}
.link-reorder {
	FONT-WEIGHT: bold
}
.link-compare {
	FONT-WEIGHT: bold
}
.link-print {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 25px; PADDING-RIGHT: 0px; =
BACKGROUND: url(../images/i_print.gif) no-repeat 0px 2px; PADDING-TOP: =
2px
}
.link-rss {
	PADDING-LEFT: 18px; WHITE-SPACE: nowrap; BACKGROUND: =
url(../images/i_rss.gif) no-repeat 0px 1px
}
.btn-remove {
	LINE-HEIGHT: 0; TEXT-INDENT: -999em; WIDTH: 11px; DISPLAY: block; =
BACKGROUND: url(../images/btn_remove.gif) no-repeat 0px 0px; HEIGHT: =
11px; FONT-SIZE: 0px; OVERFLOW: hidden
}
.btn-remove2 {
	LINE-HEIGHT: 0; TEXT-INDENT: -999em; WIDTH: 16px; DISPLAY: block; =
BACKGROUND: url(../images/btn_trash.gif) no-repeat 0px 0px; HEIGHT: =
16px; FONT-SIZE: 0px; OVERFLOW: hidden
}
.btn-edit {
	LINE-HEIGHT: 0; TEXT-INDENT: -999em; WIDTH: 11px; DISPLAY: block; =
BACKGROUND: url(../images/btn_edit.gif) no-repeat 0px 0px; HEIGHT: 11px; =
FONT-SIZE: 0px; OVERFLOW: hidden
}
.cards-list DT {
	MARGIN: 5px 0px 0px
}
.cards-list .offset {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 20px; PADDING-RIGHT: 0px; =
PADDING-TOP: 2px
}
.separator {
	MARGIN: 0px 3px
}
.divider {
	LINE-HEIGHT: 0; TEXT-INDENT: -999em; MARGIN: 10px 0px; DISPLAY: block; =
BACKGROUND: #ddd; HEIGHT: 1px; CLEAR: both; FONT-SIZE: 0px; OVERFLOW: =
hidden
}
.noscript {
	BORDER-BOTTOM: #ddd 1px solid; TEXT-ALIGN: center; BORDER-LEFT: #ddd =
0px solid; LINE-HEIGHT: 1.25; BACKGROUND: #ffff90; COLOR: #2f2f2f; =
FONT-SIZE: 12px; BORDER-TOP: #ddd 0px solid; BORDER-RIGHT: #ddd 0px =
solid
}
.noscript .noscript-inner {
	PADDING-BOTTOM: 12px; MARGIN: 0px auto; PADDING-LEFT: 0px; WIDTH: =
1000px; PADDING-RIGHT: 0px; BACKGROUND: url(../images/i_notice.gif) =
no-repeat 20px 50%; PADDING-TOP: 12px
}
.noscript P {
	MARGIN: 0px
}
.demo-notice {
	TEXT-ALIGN: center; PADDING-BOTTOM: 6px; LINE-HEIGHT: 1.15; MARGIN: =
0px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BACKGROUND: #d75f07; =
COLOR: #fff; FONT-SIZE: 12px; PADDING-TOP: 6px
}
.logo {
	FLOAT: left
}
.header-container {
=09
}
.header {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: =
10px
}
.header .logo {
	FLOAT: left; TEXT-DECORATION: none !important
}
.header .logo STRONG {
	POSITION: absolute; LINE-HEIGHT: 0; TEXT-INDENT: -999em; WIDTH: 0px; =
HEIGHT: 0px; FONT-SIZE: 0px; OVERFLOW: hidden; TOP: -999em; LEFT: -999em
}
.header H1.logo {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.header .welcome-msg {
	TEXT-ALIGN: right; FONT-WEIGHT: bold
}
.header .welcome-msg A {
=09
}
.header .links {
	FLOAT: right
}
.header .form-search {
	TEXT-ALIGN: right
}
.header .form-search .search-autocomplete {
	Z-INDEX: 999
}
.header .form-search .search-autocomplete UL {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
BACKGROUND-COLOR: #fff; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd =
1px solid
}
.header .form-search .search-autocomplete LI {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 3px; PADDING-LEFT: 3px; =
PADDING-RIGHT: 3px; CURSOR: pointer; PADDING-TOP: 3px
}
.header .form-search .search-autocomplete LI .amount {
	FLOAT: right; FONT-WEIGHT: bold
}
.header .form-search .search-autocomplete LI.selected {
=09
}
.header .form-language {
	TEXT-ALIGN: right; CLEAR: both
}
.header-container .top-container {
	TEXT-ALIGN: right; CLEAR: both
}
.nav-container {
=09
}
#nav {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; MARGIN: 10px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 13px; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px =
solid; PADDING-TOP: 5px
}
#nav LI {
	POSITION: relative; TEXT-ALIGN: left
}
#nav LI.over {
	Z-INDEX: 998
}
#nav LI.parent {
=09
}
#nav LI A {
	DISPLAY: block; TEXT-DECORATION: none
}
#nav LI A:hover {
	TEXT-DECORATION: none
}
#nav LI A SPAN {
	DISPLAY: block; WHITE-SPACE: nowrap; CURSOR: pointer
}
#nav LI UL A SPAN {
	WHITE-SPACE: normal
}
#nav LI {
	FLOAT: left
}
#nav LI A {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; FLOAT: =
left; COLOR: #888; FONT-WEIGHT: bold; PADDING-TOP: 5px
}
#nav LI A:hover {
	COLOR: #000
}
#nav LI.over A {
	COLOR: #000
}
#nav LI.active A {
	COLOR: #000
}
#nav UL {
	BORDER-BOTTOM: #ddd 1px solid; POSITION: absolute; BORDER-LEFT: #ddd =
1px solid; WIDTH: 15em; BACKGROUND: #fafafa; BORDER-TOP: #ddd 1px solid; =
TOP: 25px; BORDER-RIGHT: #ddd 1px solid; LEFT: -10000px
}
#nav DIV {
	BORDER-BOTTOM: #ddd 1px solid; POSITION: absolute; BORDER-LEFT: #ddd =
1px solid; WIDTH: 15em; BACKGROUND: #fafafa; BORDER-TOP: #ddd 1px solid; =
TOP: 25px; BORDER-RIGHT: #ddd 1px solid; LEFT: -10000px
}
#nav DIV UL {
	BORDER-BOTTOM: medium none; POSITION: static; BORDER-LEFT: medium none; =
WIDTH: auto; BORDER-TOP: medium none; BORDER-RIGHT: medium none
}
#nav UL UL {
	TOP: 7px
}
#nav UL DIV {
	TOP: 7px
}
#nav UL LI {
	BORDER-BOTTOM: #ddd 1px solid; FLOAT: none
}
#nav UL LI.last {
	BORDER-BOTTOM: 0px
}
#nav UL LI A {
	PADDING-BOTTOM: 3px; PADDING-LEFT: 9px; PADDING-RIGHT: 9px; FLOAT: =
none; COLOR: #888 !important; FONT-WEIGHT: normal; PADDING-TOP: 3px
}
#nav UL LI A:hover {
	COLOR: #000 !important
}
#nav UL LI.active > A {
	COLOR: #000 !important
}
#nav UL LI.over > A {
	COLOR: #000 !important
}
#nav LI UL.shown-sub {
	Z-INDEX: 999; LEFT: 0px
}
#nav LI DIV.shown-sub {
	Z-INDEX: 999; LEFT: 0px
}
#nav LI .shown-sub UL.shown-sub {
	LEFT: 100px
}
#nav LI .shown-sub LI DIV.shown-sub {
	LEFT: 100px
}
.block {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; MARGIN: 0px =
0px 10px; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid
}
.block .block-title {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 3px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; PADDING-TOP: 3px
}
.block .block-title STRONG {
	FONT-SIZE: 14px; FONT-WEIGHT: bold
}
.block .block-title STRONG SPAN {
=09
}
.block .block-title A {
	TEXT-DECORATION: none !important
}
.block .block-subtitle {
	FONT-SIZE: 13px; FONT-WEIGHT: bold
}
.block .block-content {
	PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
PADDING-TOP: 10px
}
.block .block-content LI.item {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5px
}
.block .btn-remove {
	FLOAT: right
}
.block .btn-edit {
	FLOAT: right
}
.block .actions {
	TEXT-ALIGN: right
}
.block .actions A {
	FLOAT: left
}
.block .empty {
=09
}
.block LI.odd {
=09
}
.block LI.even {
	BACKGROUND-COLOR: #f6f6f6
}
.mini-products-list LI {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5px
}
.mini-products-list .product-image {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 50px; PADDING-RIGHT: 5px; =
FLOAT: left; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid; =
PADDING-TOP: 5px
}
.mini-products-list .product-details {
	MARGIN-LEFT: 75px
}
.mini-products-list .product-details H4 {
	MARGIN: 0px; FONT-SIZE: 1em; FONT-WEIGHT: bold
}
.block-account {
=09
}
.block-currency {
=09
}
.block-currency SELECT {
	BORDER-BOTTOM: #888 1px solid; BORDER-LEFT: #888 1px solid; WIDTH: =
100%; BORDER-TOP: #888 1px solid; BORDER-RIGHT: #888 1px solid
}
.block-layered-nav {
=09
}
.block-layered-nav DT {
	FONT-WEIGHT: bold
}
.block-layered-nav .currently {
=09
}
.block-layered-nav .btn-remove {
	MARGIN: 2px 3px 0px 0px; FLOAT: left
}
.block-cart {
=09
}
.block-cart .summary {
=09
}
.block-cart .amount {
=09
}
.block-cart .subtotal {
	TEXT-ALIGN: center
}
.block-cart .actions .paypal-logo {
	TEXT-ALIGN: right; MARGIN: 3px 0px 0px; WIDTH: 100%; FLOAT: left
}
.block-cart .actions .paypal-logo .paypal-or {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 55px; DISPLAY: =
block; CLEAR: both; PADDING-TOP: 0px
}
.block-wishlist {
=09
}
.block-related {
=09
}
.block-related LI {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5px
}
.block-related INPUT.checkbox {
	FLOAT: left; MARGIN-RIGHT: -20px
}
.block-related .product {
	MARGIN-LEFT: 20px
}
.block-related .product .product-image {
	FLOAT: left; MARGIN-RIGHT: -65px
}
.block-related .product .product-details {
	MARGIN-LEFT: 65px
}
.block-compare {
=09
}
.block-compare LI {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5px
}
.block-viewed {
=09
}
.block-compared {
=09
}
.block-poll LABEL {
=09
}
.block-poll INPUT.radio {
	MARGIN: 1px -18px 0px 0px; FLOAT: left
}
.block-poll .label {
	DISPLAY: block; MARGIN-LEFT: 18px
}
.block-poll LI {
	PADDING-BOTTOM: 3px; PADDING-LEFT: 9px; PADDING-RIGHT: 9px; =
PADDING-TOP: 3px
}
.block-poll .actions {
	MARGIN: 5px 0px 0px
}
.block-poll .answer {
	FONT-WEIGHT: bold
}
.block-poll .votes {
	FLOAT: right; MARGIN-LEFT: 10px
}
.block-tags UL {
	DISPLAY: inline
}
.block-tags LI {
	DISPLAY: inline
}
.block-subscribe {
=09
}
.block-reorder {
=09
}
.block-reorder LI {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5px
}
.block-reorder INPUT.checkbox {
	MARGIN: 3px -20px 0px 0px; FLOAT: left
}
.block-reorder .product-name {
	MARGIN-LEFT: 20px
}
.block-banner {
=09
}
.block-banner .block-content {
	TEXT-ALIGN: center
}
.block-login LABEL {
	COLOR: #666; FONT-WEIGHT: bold
}
.block-login INPUT.input-text {
	MARGIN: 3px 0px; WIDTH: 167px; DISPLAY: block
}
.sidebar .paypal-logo {
	TEXT-ALIGN: center; MARGIN: 10px 0px; DISPLAY: block
}
.sidebar .paypal-logo A {
	FLOAT: none
}
.category-title {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px 0px 7px; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
.category-image {
	TEXT-ALIGN: center; MARGIN: 0px 0px 10px; WIDTH: 100%; OVERFLOW: hidden
}
.category-image IMG {
=09
}
.category-description {
	MARGIN: 0px 0px 10px
}
.category-products {
=09
}
.products-grid {
	BORDER-BOTTOM: #ddd 1px solid; POSITION: relative
}
.last.products-grid {
	BORDER-BOTTOM: 0px
}
.products-grid LI.item {
	PADDING-BOTTOM: 80px; PADDING-LEFT: 10px; WIDTH: 138px; PADDING-RIGHT: =
10px; FLOAT: left; PADDING-TOP: 12px
}
.products-grid .product-image {
	MARGIN: 0px 0px 10px; WIDTH: 135px; DISPLAY: block; HEIGHT: 135px
}
.products-grid .product-name {
	MARGIN: 0px 0px 5px; FONT-SIZE: 13px; FONT-WEIGHT: bold
}
.products-grid .product-name A {
=09
}
.products-grid .price-box {
	MARGIN: 5px 0px
}
.products-grid .availability {
	LINE-HEIGHT: 21px
}
.products-grid .actions {
	POSITION: absolute; BOTTOM: 12px
}
.col2-left-layout .products-grid {
	MARGIN: 0px auto; WIDTH: 632px
}
.col2-right-layout .products-grid {
	MARGIN: 0px auto; WIDTH: 632px
}
.col1-layout .products-grid {
	MARGIN: 0px auto; WIDTH: 790px
}
.products-list LI.item {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 12px; PADDING-LEFT: =
10px; PADDING-RIGHT: 10px; PADDING-TOP: 12px
}
.products-list LI.last.item {
	BORDER-BOTTOM: 0px
}
.products-list .product-image {
	MARGIN: 0px 0px 10px; WIDTH: 135px; FLOAT: left; HEIGHT: 135px
}
.products-list .product-shop {
	MARGIN-LEFT: 150px
}
.products-list .product-name {
	MARGIN: 0px 0px 5px; FONT-SIZE: 13px; FONT-WEIGHT: bold
}
.products-list .product-name A {
=09
}
.products-list .price-box {
	MARGIN: 3px 13px 5px 0px; FLOAT: left
}
.products-list .availability {
	MARGIN: 3px 0px 0px; FLOAT: left
}
.products-list .desc {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.35; MARGIN: 0px 0px 15px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; CLEAR: both; PADDING-TOP: 6px
}
.products-list .desc .link-learn {
	FONT-SIZE: 11px
}
.products-list .add-to-links {
	CLEAR: both
}
.products-list .add-to-links LI {
	DISPLAY: inline
}
.products-list .add-to-links .separator {
	MARGIN: 0px 2px; DISPLAY: inline
}
.no-rating {
	MARGIN: 0px
}
.ratings {
	LINE-HEIGHT: 1.25; MARGIN: 7px 0px; FONT-SIZE: 11px
}
.ratings STRONG {
	MARGIN: 1px 3px 0px 0px; FLOAT: left
}
.ratings .rating-links {
	MARGIN: 0px
}
.ratings .rating-links .separator {
	MARGIN: 0px 2px
}
.ratings DT {
=09
}
.ratings DD {
=09
}
.rating-box {
	LINE-HEIGHT: 0; TEXT-INDENT: -999em; WIDTH: 69px; BACKGROUND: =
url(../images/bkg_rating.gif) repeat-x 0px 0px; HEIGHT: 13px; FONT-SIZE: =
0px; OVERFLOW: hidden
}
.rating-box .rating {
	BACKGROUND: url(../images/bkg_rating.gif) repeat-x 0px 100%; FLOAT: =
left; HEIGHT: 13px
}
.ratings .rating-box {
	FLOAT: left; MARGIN-RIGHT: 3px
}
.ratings .amount {
=09
}
.ratings-table TH {
	PADDING-BOTTOM: 3px; LINE-HEIGHT: 1.15; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; FONT-SIZE: 11px; PADDING-TOP: 3px
}
.ratings-table TD {
	PADDING-BOTTOM: 3px; LINE-HEIGHT: 1.15; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; FONT-SIZE: 11px; PADDING-TOP: 3px
}
.ratings-table TH {
	PADDING-RIGHT: 8px; FONT-WEIGHT: bold
}
.availability {
	MARGIN: 0px
}
.availability SPAN {
	FONT-WEIGHT: bold
}
.in-stock.availability SPAN {
=09
}
.out-of-stock.availability SPAN {
	COLOR: #d83820
}
.availability-only {
	MARGIN: 0px 0px 7px
}
.availability-only A {
	PADDING-RIGHT: 15px; BACKGROUND: =
url(../images/i_availability_only_arrow.gif) no-repeat 100% 0px; CURSOR: =
pointer
}
.availability-only .expanded {
	BACKGROUND-POSITION: 100% -15px
}
.availability-only STRONG {
=09
}
.availability-only-details {
	MARGIN: 0px 0px 7px
}
.availability-only-details TH {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#f2f2f2; FONT-SIZE: 10px; PADDING-TOP: 0px
}
.availability-only-details TD {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 1px; PADDING-LEFT: 8px; =
PADDING-RIGHT: 8px; FONT-SIZE: 11px; PADDING-TOP: 2px
}
.availability-only-details TR.odd TD.last {
=09
}
.email-friend {
=09
}
.alert-price {
=09
}
.alert-stock {
=09
}
.price {
	WHITE-SPACE: nowrap !important
}
.price-box {
=09
}
.price-box .price {
	FONT-WEIGHT: bold
}
.regular-price {
=09
}
.regular-price .price {
	FONT-WEIGHT: bold
}
.old-price {
=09
}
.old-price .price-label {
	WHITE-SPACE: nowrap
}
.old-price .price {
	FONT-WEIGHT: bold; TEXT-DECORATION: line-through
}
.special-price {
=09
}
.special-price .price-label {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.special-price .price {
	FONT-WEIGHT: bold
}
.minimal-price {
=09
}
.minimal-price .price-label {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.minimal-price-link {
	DISPLAY: block
}
.minimal-price-link .label {
=09
}
.minimal-price-link .price {
	FONT-WEIGHT: normal
}
.price-excluding-tax {
	DISPLAY: block
}
.price-excluding-tax .label {
	WHITE-SPACE: nowrap
}
.price-excluding-tax .price {
	FONT-WEIGHT: normal
}
.price-including-tax {
	DISPLAY: block
}
.price-including-tax .label {
	WHITE-SPACE: nowrap
}
.price-including-tax .price {
	FONT-WEIGHT: bold
}
.configured-price {
=09
}
.configured-price .price-label {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.configured-price .price {
	FONT-WEIGHT: bold
}
.weee {
	DISPLAY: block; COLOR: #444; FONT-SIZE: 11px
}
.weee .price {
	FONT-SIZE: 11px; FONT-WEIGHT: normal
}
.price-excl-tax {
	DISPLAY: block
}
.price-excl-tax .label {
	DISPLAY: block; WHITE-SPACE: nowrap
}
.price-excl-tax .price {
	DISPLAY: block
}
.price-incl-tax {
	DISPLAY: block
}
.price-incl-tax .label {
	DISPLAY: block; WHITE-SPACE: nowrap
}
.price-incl-tax .price {
	DISPLAY: block; FONT-WEIGHT: bold
}
.price-from {
=09
}
.price-from .price-label {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.price-to {
=09
}
.price-to .price-label {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.price-notice {
	PADDING-LEFT: 10px
}
.price-notice .price {
	FONT-WEIGHT: bold
}
.price-as-configured {
=09
}
.price-as-configured .price-label {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.price-box-bundle {
=09
}
.tier-prices .price {
	FONT-WEIGHT: bold
}
.tier-prices .benefit {
=09
}
.tier-prices-grouped {
=09
}
.add-to-links .separator {
	DISPLAY: none
}
.add-to-cart LABEL {
	FLOAT: left; MARGIN-RIGHT: 5px
}
.add-to-cart .qty {
	FLOAT: left
}
.add-to-cart BUTTON.button {
	FLOAT: left; MARGIN-LEFT: 5px
}
.add-to-cart .paypal-logo {
	TEXT-ALIGN: right; CLEAR: left
}
.add-to-cart .paypal-logo .paypal-or {
	MARGIN: 5px 60px 5px 0px; DISPLAY: block; CLEAR: both
}
.product-view .add-to-cart .paypal-logo {
	MARGIN: 0px
}
.add-to-box {
=09
}
.add-to-box .add-to-cart {
	FLOAT: left
}
.add-to-box .or {
	MARGIN: 0px 10px; FLOAT: left
}
.add-to-box .add-to-links {
	FLOAT: left
}
.product-view {
=09
}
.product-essential {
=09
}
.product-collateral .box-collateral {
	MARGIN: 0px 0px 15px
}
.product-view .product-img-box {
	WIDTH: 267px; FLOAT: left
}
.col3-layout .product-view .product-img-box {
	MARGIN: 0px auto; FLOAT: none
}
.product-view .product-img-box .product-image {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; BORDER-TOP: =
#ddd 1px solid; BORDER-RIGHT: #ddd 1px solid
}
.product-view .product-img-box .product-image-zoom {
	Z-INDEX: 9; POSITION: relative; WIDTH: 265px; HEIGHT: 265px; OVERFLOW: =
hidden
}
.product-view .product-img-box .product-image-zoom IMG {
	POSITION: absolute; TOP: 0px; CURSOR: move; LEFT: 0px
}
.product-view .product-img-box .zoom-notice {
	TEXT-ALIGN: center
}
.product-view .product-img-box .zoom {
	Z-INDEX: 9; POSITION: relative; PADDING-BOTTOM: 0px; MARGIN: 0px auto =
13px; PADDING-LEFT: 28px; PADDING-RIGHT: 28px; BACKGROUND: =
url(../images/slider_bg.gif) no-repeat 50% 50%; HEIGHT: 18px; CURSOR: =
pointer; PADDING-TOP: 0px
}
.product-view .product-img-box .disabled.zoom {
	FILTER: progid:DXImageTransform.Microsoft.Alpha(Opacity=3D30); =
-moz-opacity: .3; -webkit-opacity: .3; opacity: .3
}
.product-view .product-img-box .zoom #track {
	POSITION: relative; HEIGHT: 18px
}
.product-view .product-img-box .zoom #handle {
	POSITION: absolute; WIDTH: 9px; BACKGROUND: =
url(../images/magnifier_handle.gif) no-repeat 0px 0px; HEIGHT: 22px; =
TOP: -1px; LEFT: 0px
}
.product-view .product-img-box .zoom .btn-zoom-out {
	POSITION: absolute; TOP: 0px; LEFT: 2px
}
.product-view .product-img-box .zoom .btn-zoom-in {
	POSITION: absolute; TOP: 0px; RIGHT: 2px
}
.product-view .product-img-box .more-views UL {
	MARGIN-LEFT: -4px
}
.product-view .product-img-box .more-views LI {
	PADDING-BOTTOM: 1px; BACKGROUND-COLOR: #ddd; MARGIN: 0px 0px 8px 4px; =
PADDING-LEFT: 1px; PADDING-RIGHT: 1px; FLOAT: left; PADDING-TOP: 1px
}
.product-image-popup {
	MARGIN: 0px auto
}
.product-image-popup .buttons-set {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FLOAT: right; CLEAR: none; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
.product-image-popup .nav {
	TEXT-ALIGN: center; MARGIN: 0px 100px
}
.product-image-popup .image {
	DISPLAY: block
}
.product-image-popup .image-label {
=09
}
.product-view .product-shop {
	WIDTH: 445px; FLOAT: right
}
.col1-layout .product-view .product-shop {
	WIDTH: 700px; FLOAT: right
}
.col3-layout .product-view .product-shop {
	WIDTH: auto; FLOAT: none
}
.product-view .product-name {
=09
}
.product-view .short-description {
=09
}
.product-options {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #f6f6f6; MARGIN: 10px 0px 0px; =
PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #ddd 1px solid; =
BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 10px
}
.product-options DT LABEL {
	FONT-WEIGHT: bold
}
.product-options DT .qty-holder {
	FLOAT: right
}
.product-options DT .qty-holder LABEL {
	VERTICAL-ALIGN: middle
}
.product-options DT .qty-disabled {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 3px; =
PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BACKGROUND: none transparent =
scroll repeat 0% 0%; COLOR: #000; BORDER-TOP: 0px; BORDER-RIGHT: 0px; =
PADDING-TOP: 3px
}
.product-options DD {
	MARGIN: 10px 0px
}
.product-options DL.last DD.last {
=09
}
.product-options DD INPUT.input-text {
	WIDTH: 98%
}
.product-options DD INPUT.datetime-picker {
	WIDTH: 150px
}
.product-options DD .time-picker {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: =
inline-block; VERTICAL-ALIGN: middle; PADDING-TOP: 2px
}
.product-options DD TEXTAREA {
	WIDTH: 98%; HEIGHT: 8em
}
.product-options DD SELECT {
	WIDTH: 100%
}
.product-options .options-list {
=09
}
.product-options .options-list INPUT.radio {
	MARGIN: 3px -18px 0px 0px; FLOAT: left
}
.product-options .options-list INPUT.checkbox {
	MARGIN: 3px -20px 0px 0px; FLOAT: left
}
.product-options .options-list .label {
	DISPLAY: block; MARGIN-LEFT: 20px
}
.product-options UL.validation-failed {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; =
PADDING-TOP: 0px
}
.product-options P.required {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 15px
}
.product-options-bottom {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
BORDER-TOP: 0px; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 10px
}
.product-options-bottom .price-box {
	MARGIN: 10px 0px
}
.product-view .grouped-items-table {
=09
}
.product-view .box-description {
=09
}
.product-view .box-additional {
=09
}
.product-view .box-up-sell {
=09
}
.product-view .box-up-sell .products-grid TD {
	WIDTH: 25%
}
.product-view .box-tags {
=09
}
.product-view .box-tags .form-add LABEL {
	FLOAT: left
}
.product-view .box-tags .form-add .input-box {
	MARGIN: 0px 5px; WIDTH: 260px; FLOAT: left
}
.product-view .box-tags .form-add INPUT.input-text {
	WIDTH: 254px
}
.product-view .box-tags .form-add P {
	CLEAR: both
}
.product-view .box-reviews {
=09
}
.product-view .box-reviews .form-add {
=09
}
.send-friend {
=09
}
.product-name {
	FONT-SIZE: 1em; FONT-WEIGHT: normal
}
.product-name A {
=09
}
.tags-list LI {
	DISPLAY: inline
}
.advanced-search {
=09
}
.advanced-search-amount {
=09
}
.advanced-search-summary {
=09
}
.cms-home .subtitle {
=09
}
.cms-index-index .subtitle {
=09
}
.page-sitemap .links {
	TEXT-ALIGN: right; MARGIN: 0px 8px -22px 0px
}
.page-sitemap .links A {
	POSITION: relative; TEXT-DECORATION: none
}
.page-sitemap .links A:hover {
	TEXT-DECORATION: underline
}
.page-sitemap .sitemap {
	MARGIN: 12px
}
.page-sitemap .sitemap A {
=09
}
.page-sitemap .sitemap LI {
	MARGIN: 3px 0px
}
.page-sitemap .sitemap LI.level-0 {
	MARGIN: 10px 0px 0px; FONT-WEIGHT: bold
}
.page-sitemap .sitemap LI.level-0 A {
=09
}
.rss-title H1 {
	PADDING-LEFT: 27px; BACKGROUND: url(../images/i_rss-big.png) no-repeat =
0px 4px
}
.rss-table .link-rss {
	LINE-HEIGHT: 1.35; DISPLAY: block; BACKGROUND-POSITION: 0px 2px
}
.cart {
=09
}
.cart .checkout-types {
	TEXT-ALIGN: right; FLOAT: right
}
.cart .title-buttons .checkout-types LI {
	MARGIN: 0px 0px 5px 5px; FLOAT: left
}
.cart .checkout-types .paypal-or {
	LINE-HEIGHT: 2.3; MARGIN: 0px 8px
}
.cart .totals .checkout-types .paypal-or {
	PADDING-BOTTOM: 8px; LINE-HEIGHT: 1; PADDING-LEFT: 0px; PADDING-RIGHT: =
55px; DISPLAY: block; CLEAR: both; FONT-SIZE: 11px; PADDING-TOP: 3px
}
.cart-table .item-msg {
	FONT-SIZE: 10px
}
.cart .cart-collaterals {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 25px
}
.cart .cart-collaterals .col2-set {
	WIDTH: 700px; FLOAT: left
}
.cart .crosssell {
=09
}
.cart .crosssell H2 {
	FONT-SIZE: 13px; FONT-WEIGHT: bold
}
.cart .crosssell .product-image {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; WIDTH: =
75px; FLOAT: left; HEIGHT: 75px; BORDER-TOP: #ddd 1px solid; =
BORDER-RIGHT: #ddd 1px solid
}
.cart .crosssell .product-details {
	MARGIN-LEFT: 90px
}
.cart .crosssell LI.item {
	MARGIN: 12px 0px
}
.cart .discount {
=09
}
.cart .shipping {
=09
}
.cart .totals {
	FLOAT: right
}
.cart .totals TABLE {
	WIDTH: 100%
}
.cart .totals TABLE TH {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
PADDING-TOP: 5px
}
.cart .totals TABLE TD {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
PADDING-TOP: 5px
}
.cart .totals TABLE TH {
	FONT-WEIGHT: bold
}
.cart .totals TABLE TFOOT TH {
=09
}
.item-options DT {
	FONT-STYLE: italic; FONT-WEIGHT: bold
}
.item-options DD {
	PADDING-LEFT: 10px
}
.truncated {
	CURSOR: help
}
.truncated A.dots {
	CURSOR: help
}
.truncated A.details {
	CURSOR: help
}
.truncated .truncated_full_value {
	Z-INDEX: 999; POSITION: relative
}
.truncated .truncated_full_value .item-options {
	Z-INDEX: 999; BORDER-BOTTOM: #ddd 1px solid; POSITION: absolute; =
BORDER-LEFT: #ddd 1px solid; PADDING-BOTTOM: 8px; BACKGROUND-COLOR: =
#f6f6f6; PADDING-LEFT: 8px; WIDTH: 250px; PADDING-RIGHT: 8px; =
BORDER-TOP: #ddd 1px solid; TOP: -99999em; BORDER-RIGHT: #ddd 1px solid; =
PADDING-TOP: 8px; LEFT: -99999em
}
.truncated .truncated_full_value .item-options > P {
	TEXT-TRANSFORM: uppercase; FONT-WEIGHT: bold
}
.truncated .show .item-options {
	TOP: -20px; LEFT: 50%
}
.col-left .truncated .show .item-options {
	TOP: 7px; LEFT: 30px
}
.col-right .truncated .show .item-options {
	TOP: 7px; LEFT: -240px
}
.sp-methods DT {
	FONT-WEIGHT: bold
}
.sp-methods .price {
	FONT-WEIGHT: bold
}
.sp-methods .form-list {
	PADDING-LEFT: 20px
}
.sp-methods SELECT.month {
	WIDTH: 150px; MARGIN-RIGHT: 10px
}
.sp-methods SELECT.year {
	WIDTH: 96px
}
.sp-methods INPUT.cvv {
	WIDTH: 3em !important
}
.sp-methods .checkmo-list LI {
	MARGIN: 0px 0px 5px
}
.sp-methods .checkmo-list LABEL {
	TEXT-ALIGN: right; WIDTH: 135px; PADDING-RIGHT: 10px
}
.sp-methods .checkmo-list ADDRESS {
	FLOAT: left
}
.sp-methods .centinel-logos A {
	MARGIN-RIGHT: 3px
}
.sp-methods .centinel-logos IMG {
	VERTICAL-ALIGN: middle
}
.sp-methods .release-amounts {
	MARGIN: 0.5em 0px 1em
}
.sp-methods .release-amounts BUTTON {
	MARGIN: 5px 10px 0px 0px; FLOAT: left
}
.please-wait {
	FLOAT: right; MARGIN-RIGHT: 5px
}
.please-wait IMG {
	VERTICAL-ALIGN: middle
}
.cvv-what-is-this {
	MARGIN-LEFT: 5px; CURSOR: help
}
.tool-tip {
	Z-INDEX: 9999; BORDER-BOTTOM: #ddd 1px solid; POSITION: absolute; =
BORDER-LEFT: #ddd 1px solid; PADDING-BOTTOM: 5px; BACKGROUND-COLOR: =
#f6f6f6; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BORDER-TOP: #ddd 1px =
solid; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 5px
}
.tool-tip .btn-close {
	TEXT-ALIGN: right
}
.tool-tip .btn-close A {
	TEXT-ALIGN: left; TEXT-INDENT: -999em; MARGIN: 0px 0px 0px auto; WIDTH: =
15px; DISPLAY: block; BACKGROUND: url(../images/btn_window_close.gif) =
no-repeat 100% 0px; HEIGHT: 15px; OVERFLOW: hidden
}
.tool-tip .tool-tip-content {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
PADDING-TOP: 5px
}
.gift-messages {
=09
}
.gift-messages-form {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
BACKGROUND-COLOR: #f5f5f5; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: =
#ddd 1px solid
}
.gift-messages-form {
	POSITION: relative
}
.gift-messages-form LABEL {
	POSITION: static !important; FLOAT: none !important
}
.gift-messages-form H4 {
=09
}
.gift-messages-form .whole-order {
=09
}
.gift-messages-form .item {
	MARGIN: 0px 0px 10px
}
.gift-messages-form .item .product-img-box {
	WIDTH: 75px; FLOAT: left
}
.gift-messages-form .item .product-image {
	MARGIN: 0px 0px 7px
}
.gift-messages-form .item .number {
	TEXT-ALIGN: center; MARGIN: 0px; FONT-WEIGHT: bold
}
.gift-messages-form .item .details {
	MARGIN-LEFT: 90px
}
.gift-messages-form .item .details .product-name {
=09
}
.gift-message-link {
	PADDING-LEFT: 20px; DISPLAY: block; BACKGROUND: =
url(../images/bkg_collapse.gif) no-repeat 0px 4px
}
.expanded.gift-message-link {
	BACKGROUND-POSITION: 0px -53px
}
.gift-message-row {
=09
}
.gift-message-row .btn-close {
	FLOAT: right
}
.gift-message DT STRONG {
	FONT-WEIGHT: bold
}
.checkout-agreements {
=09
}
.checkout-agreements LI {
	MARGIN: 10px 0px
}
.checkout-agreements .agreement-content {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; BACKGROUND-COLOR: #f6f6f6; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; HEIGHT: 10em; OVERFLOW: auto; BORDER-TOP: #ddd 1px =
solid; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 5px
}
.checkout-agreements .agree {
	PADDING-BOTTOM: 6px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; =
PADDING-TOP: 6px
}
.centinel {
=09
}
.centinel .authentication {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid
}
.centinel .authentication IFRAME {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px !important; =
MARGIN: 0px; PADDING-LEFT: 0px !important; WIDTH: 99%; PADDING-RIGHT: =
0px !important; BACKGROUND: none transparent scroll repeat 0% 0%; =
HEIGHT: 400px; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px =
!important
}
.info-set {
=09
}
.block-progress {
=09
}
.block-progress DT {
	FONT-WEIGHT: bold
}
.block-progress DT.complete {
	BACKGROUND-COLOR: #f6f6f6
}
.block-progress DD.complete {
	BACKGROUND-COLOR: #f6f6f6
}
.opc {
	BORDER-BOTTOM: #ddd 1px solid; POSITION: relative
}
.opc LI.section {
	BORDER-BOTTOM: 0px; BORDER-LEFT: #ddd 1px solid; BORDER-TOP: #ddd 1px =
solid; BORDER-RIGHT: #ddd 1px solid
}
.opc .disabled.buttons-set BUTTON.button {
	DISPLAY: none
}
.opc .buttons-set .please-wait {
	LINE-HEIGHT: 21px; HEIGHT: 21px
}
.opc .step-title {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #f6f6f6; =
PADDING-LEFT: 5px; PADDING-RIGHT: 5px; PADDING-TOP: 0px
}
.opc .step-title .number {
	LINE-HEIGHT: 22px; FLOAT: left; MARGIN-RIGHT: 5px
}
.opc .step-title H2 {
	FLOAT: left
}
.opc .step-title A {
	DISPLAY: none; FLOAT: right
}
.opc .allow .step-title {
	CURSOR: pointer
}
.opc .active {
=09
}
.opc .active .step-title {
	BACKGROUND-COLOR: #ccc; CURSOR: default
}
.opc .step {
	POSITION: relative; PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; BORDER-TOP: #ddd 1px solid; PADDING-TOP: 10px
}
.opc .step .tool-tip {
	RIGHT: 10px
}
.opc .order-review {
=09
}
.opc .order-review .authentication {
=09
}
.opc .order-review .warning-message {
=09
}
.checkout-progress {
	PADDING-BOTTOM: 0px; MARGIN: 10px 0px; PADDING-LEFT: 50px; =
PADDING-RIGHT: 50px; PADDING-TOP: 0px
}
.checkout-progress LI {
	TEXT-ALIGN: center; WIDTH: 20%; FLOAT: left; COLOR: #ccc; BORDER-TOP: =
#ccc 5px solid
}
.checkout-progress LI.active {
	BORDER-TOP-COLOR: #000; COLOR: #000
}
.multiple-checkout {
	POSITION: relative
}
.multiple-checkout .tool-tip {
	MARGIN-TOP: -120px; TOP: 50%; RIGHT: 10px
}
.multiple-checkout .grand-total {
	TEXT-ALIGN: right; FONT-SIZE: 1.5em
}
.multiple-checkout .grand-total BIG {
=09
}
.multiple-checkout .grand-total .price {
=09
}
.account-login {
=09
}
.account-login .new-users {
=09
}
.account-login .registered-users {
=09
}
.account-create {
=09
}
.window-overlay {
	Z-INDEX: 990; POSITION: absolute; WIDTH: 100%; BACKGROUND: =
url(../images/window_overlay.png); HEIGHT: 100%; TOP: 0px; LEFT: 0px
}
.remember-me LABEL {
=09
}
.remember-me-popup {
=09
}
.remember-me-popup H3 {
=09
}
.remember-me-popup .remember-me-popup-head {
=09
}
.remember-me-popup .remember-me-popup-head .remember-me-popup-close {
=09
}
.remember-me-popup .remember-me-popup-body {
=09
}
.remember-me-popup .remember-me-popup-body A {
=09
}
.my-account .title-buttons .link-rss {
	MARGIN: 0px; FLOAT: none
}
.dashboard {
=09
}
.dashboard .welcome-msg {
=09
}
.dashboard .box-recent {
	MARGIN: 10px 0px
}
.dashboard .box-info {
=09
}
.dashboard .box-reviews .number {
	PADDING-BOTTOM: 2px; LINE-HEIGHT: 1; MARGIN: 3px -20px 0px 0px; =
PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BACKGROUND: #ddd; FLOAT: left; =
COLOR: #fff; FONT-SIZE: 10px; FONT-WEIGHT: bold; PADDING-TOP: 2px
}
.dashboard .box-reviews .details {
	MARGIN-LEFT: 20px
}
.dashboard .box-tags .number {
	PADDING-BOTTOM: 2px; LINE-HEIGHT: 1; MARGIN: 3px -20px 0px 0px; =
PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BACKGROUND: #ddd; FLOAT: left; =
COLOR: #fff; FONT-SIZE: 10px; FONT-WEIGHT: bold; PADDING-TOP: 2px
}
.dashboard .box-tags .details {
	MARGIN-LEFT: 20px
}
.addresses-list {
=09
}
.addresses-list-additional LI.item {
=09
}
.order-info {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BORDER-TOP: =
#ddd 1px solid; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: 5px
}
.order-info DT {
	DISPLAY: inline
}
.order-info DD {
	DISPLAY: inline
}
.order-info UL {
	DISPLAY: inline
}
.order-info LI {
	DISPLAY: inline
}
.order-info DT {
	FONT-WEIGHT: bold
}
.order-date {
	MARGIN: 10px 0px
}
.order-info-box {
=09
}
.order-items {
	OVERFLOW-X: auto; WIDTH: 100%
}
.order-additional {
	MARGIN: 15px 0px
}
.gift-message DT STRONG {
	COLOR: #666
}
.gift-message DD {
	MARGIN: 5px 0px 0px; FONT-SIZE: 13px
}
.order-about DT {
	FONT-WEIGHT: bold
}
.order-about DD {
	MARGIN: 0px 0px 7px; FONT-SIZE: 13px
}
.tracking-table {
	MARGIN: 0px 0px 15px
}
.tracking-table TH {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.tracking-table-popup {
	WIDTH: 100%
}
.tracking-table-popup TH {
	WHITE-SPACE: nowrap; FONT-WEIGHT: bold
}
.tracking-table-popup TH {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; =
PADDING-TOP: 1px
}
.tracking-table-popup TD {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; =
PADDING-TOP: 1px
}
.page-print .print-head {
=09
}
.page-print .print-head IMG {
	FLOAT: left
}
.page-print .print-head ADDRESS {
	FLOAT: left; MARGIN-LEFT: 15px
}
.page-print .gift-message-link {
	DISPLAY: none
}
.page-print .price-excl-tax {
	DISPLAY: block; WHITE-SPACE: nowrap
}
.page-print .price-incl-tax {
	DISPLAY: block; WHITE-SPACE: nowrap
}
.page-print .cart-price {
	DISPLAY: inline
}
.page-print .price-excl-tax .label {
	DISPLAY: inline
}
.page-print .price-incl-tax .label {
	DISPLAY: inline
}
.page-print .price-excl-tax .price {
	DISPLAY: inline
}
.page-print .price-incl-tax .price {
	DISPLAY: inline
}
.product-review .product-img-box {
	WIDTH: 140px; FLOAT: left
}
.product-review .product-img-box .product-image {
	WIDTH: 125px; DISPLAY: block; HEIGHT: 125px
}
.product-review .product-img-box .label {
	MARGIN: 0px 0px 3px; FONT-SIZE: 11px
}
.product-review .product-img-box .ratings .rating-box {
	MARGIN: 0px 0px 3px; DISPLAY: block; FLOAT: none
}
.product-review .product-details {
	MARGIN-LEFT: 150px
}
.product-review .product-name {
	MARGIN: 0px 0px 10px; FONT-SIZE: 16px; FONT-WEIGHT: bold
}
.product-review H3 {
=09
}
.product-review .ratings-table {
	MARGIN: 0px 0px 10px
}
.product-review DT {
	FONT-WEIGHT: bold
}
.product-review DD {
	MARGIN: 5px 0px 0px; FONT-SIZE: 13px
}
.footer {
	BORDER-BOTTOM: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; =
PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
BORDER-TOP: #ddd 1px solid; BORDER-RIGHT: #ddd 1px solid; PADDING-TOP: =
10px
}
.footer P {
	TEXT-ALIGN: right
}
.footer ADDRESS {
	TEXT-ALIGN: right
}
.footer UL {
=09
}
.footer UL LI {
	DISPLAY: inline
}
.footer-container .bottom-container {
	TEXT-ALIGN: center
}
.clearer:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.header-container:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.header-container .top-container:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.header:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.header .quick-access:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
#nav:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.main:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.footer:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.footer-container .bottom-container:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.col-main:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.col2-set:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.col3-set:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.col4-set:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.search-autocomplete LI:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.block .block-content:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.block .actions:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.block LI.item:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.block-poll LI:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.block-layered-nav .currently LI:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.page-title:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.products-grid:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.products-list LI.item:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.box-account .box-head:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.dashboard .box .box-title:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.box-reviews LI.item:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.box-tags LI.item:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.pager:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.sorter:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.ratings:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.add-to-box:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.add-to-cart:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-essential:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-collateral:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-view .product-img-box .more-views UL:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-view .product-shop .short-description:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-view .box-description:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-view .box-tags .form-add:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-options .options-list LI:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-options-bottom:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.product-review:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.cart:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.cart-collaterals:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.cart .crosssell LI.item:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.opc .step-title:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.checkout-progress:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.multiple-checkout .place-order:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.group-select LI:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.form-list LI:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.form-list .field:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.buttons-set:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.page-print .print-head:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.advanced-search-summary:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.gift-messages-form .item:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}
.send-friend .form-list LI P:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; CLEAR: both; FONT-SIZE: =
0px; OVERFLOW: hidden; CONTENT: "."
}

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/skin/frontend/base/default/css/widgets.css

.widget {
	DISPLAY: inline
}
.widget .widget-title {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 7px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; CLEAR: both; PADDING-TOP: 15px
}
.widget .widget-title H2 {
	COLOR: #e25203; FONT-SIZE: 15px; FONT-WEIGHT: bold
}
.widget .mini-products-images-list .product-image {
	BORDER-BOTTOM: #a9a9a9 1px solid; BORDER-LEFT: #a9a9a9 1px solid; =
MARGIN: 0px auto; WIDTH: 76px; DISPLAY: block; HEIGHT: 76px; BORDER-TOP: =
#a9a9a9 1px solid; BORDER-RIGHT: #a9a9a9 1px solid
}
.widget .mini-products-images-list LI.item {
	WIDTH: 77px; FLOAT: left; HEIGHT: 77px
}
.widget-new-products {
	DISPLAY: block
}
.col-main .widget-new-products {
	MARGIN: 7px 0px
}
.widget-new-products .products-grid .product-image {
	WIDTH: 85px; HEIGHT: 85px
}
.widget-new-products .products-list .product-image {
	WIDTH: 85px; HEIGHT: 85px
}
.widget-new-products .products-list .product-shop {
	MARGIN-LEFT: 100px
}
.sidebar .widget-new-products .block {
	LINE-HEIGHT: 1.25; FONT-SIZE: 11px
}
.sidebar .widget-new-products .block-title STRONG {
	PADDING-LEFT: 21px; BACKGROUND: url(../images/widgets/i_widget-new.gif) =
no-repeat 0px 1px; COLOR: #dc5033
}
.widget-viewed {
	DISPLAY: block
}
.col-main .widget-viewed {
	MARGIN: 7px 0px
}
.widget-viewed .products-grid .product-image {
	WIDTH: 85px; HEIGHT: 85px
}
.widget-viewed .products-list .product-image {
	WIDTH: 85px; HEIGHT: 85px
}
.widget-viewed .products-list .product-shop {
	MARGIN-LEFT: 100px
}
.sidebar .widget-viewed .block {
	LINE-HEIGHT: 1.25; FONT-SIZE: 11px
}
.sidebar .widget-viewed .block-title STRONG {
	PADDING-LEFT: 21px; BACKGROUND: url(../images/widgets/i_block-list.gif) =
no-repeat 0px 0px
}
.widget-compared {
	DISPLAY: block
}
.col-main .widget-compared {
	MARGIN: 7px 0px
}
.widget-compared .products-grid .product-image {
	WIDTH: 85px; HEIGHT: 85px
}
.widget-compared .products-list .product-image {
	WIDTH: 85px; HEIGHT: 85px
}
.widget-compared .products-list .product-shop {
	MARGIN-LEFT: 100px
}
.sidebar .widget-compared .block {
	LINE-HEIGHT: 1.25; FONT-SIZE: 11px
}
.sidebar .widget-compared .block-title STRONG {
	PADDING-LEFT: 21px; BACKGROUND: url(../images/widgets/i_block-list.gif) =
no-repeat 0px 0px
}
.widget-static-block {
=09
}
.sidebar .widget-static-block {
	MARGIN: 0px 0px 15px; DISPLAY: block
}
.top-container .widget A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 7px; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
.bottom-container .widget A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; =
PADDING-TOP: 0px
}
.widget-product-link-inline {
	DISPLAY: inline
}
.col-main .widget-product-link {
	TEXT-ALIGN: right; MARGIN: 7px 0px; DISPLAY: block
}
.col-main .widget-product-link A {
	PADDING-RIGHT: 15px; BACKGROUND: =
url(../images/widgets/i_widget-link.gif) no-repeat 100% 4px
}
.sidebar .widget-product-link {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 15px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; DISPLAY: block; PADDING-TOP: 0px
}
.sidebar .widget-product-link A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 15px; =
BACKGROUND: url(../images/widgets/i_widget-link.gif) no-repeat 100% 4px; =
PADDING-TOP: 0px
}
.widget-category-link-inline {
	DISPLAY: inline
}
.col-main .widget-category-link {
	TEXT-ALIGN: right; MARGIN: 7px 0px; DISPLAY: block
}
.col-main .widget-category-link A {
	PADDING-RIGHT: 15px; BACKGROUND: =
url(../images/widgets/i_widget-link.gif) no-repeat 100% 4px
}
.sidebar .widget-category-link {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 15px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; DISPLAY: block; PADDING-TOP: 0px
}
.sidebar .widget-category-link A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 15px; =
BACKGROUND: url(../images/widgets/i_widget-link.gif) no-repeat 100% 4px; =
PADDING-TOP: 0px
}
.widget-cms-link-inline {
	DISPLAY: inline
}
.col-main .widget-cms-link {
	TEXT-ALIGN: right; MARGIN: 7px 0px; DISPLAY: block
}
.col-main .widget-cms-link A {
	PADDING-RIGHT: 15px; BACKGROUND: =
url(../images/widgets/i_widget-link.gif) no-repeat 100% 4px
}
.sidebar .widget-cms-link {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 15px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; DISPLAY: block; PADDING-TOP: 0px
}
.sidebar .widget-cms-link A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 15px; =
BACKGROUND: url(../images/widgets/i_widget-link.gif) no-repeat 100% 4px; =
PADDING-TOP: 0px
}

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/skin/frontend/matadore/default/css/matadore.css

HTML {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BODY {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DIV {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SPAN {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
APPLET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
OBJECT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
IFRAME {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H1 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H2 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H3 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H4 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H5 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H6 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
P {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BLOCKQUOTE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
PRE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
A {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
ABBR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
ACRONYM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
ADDRESS {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BIG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CITE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CODE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DEL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DFN {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
EM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
INS {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
KBD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
Q {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
S {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SAMP {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SMALL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
STRIKE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
STRONG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SUB {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SUP {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
VAR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
B {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
U {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
I {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CENTER {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
OL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
UL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
LI {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
FIELDSET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
FORM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
LABEL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
LEGEND {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TABLE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CAPTION {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TBODY {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TFOOT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
THEAD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TH {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
article {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
aside {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
canvas {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
details {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
EMBED {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
figure {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
figcaption {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
footer {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
header {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
hgroup {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
MENU {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
nav {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
output {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
RUBY {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
section {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
summary {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
time {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
mark {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
audio {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
video {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: inherit; VERTICAL-ALIGN: =
baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BODY {
	LINE-HEIGHT: 1
}
OL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
UL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
TABLE {
	BORDER-SPACING: 0; BORDER-COLLAPSE: collapse
}
CAPTION {
	TEXT-ALIGN: left; VERTICAL-ALIGN: middle; FONT-WEIGHT: normal
}
TH {
	TEXT-ALIGN: left; VERTICAL-ALIGN: middle; FONT-WEIGHT: normal
}
TD {
	TEXT-ALIGN: left; VERTICAL-ALIGN: middle; FONT-WEIGHT: normal
}
Q {
	QUOTES: none
}
BLOCKQUOTE {
	QUOTES: none
}
Q:before {
	CONTENT: none
}
Q:after {
	CONTENT: none
}
BLOCKQUOTE:before {
	CONTENT: none
}
BLOCKQUOTE:after {
	CONTENT: none
}
A IMG {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: =
medium none; BORDER-RIGHT: medium none
}
article {
	DISPLAY: block
}
aside {
	DISPLAY: block
}
details {
	DISPLAY: block
}
figcaption {
	DISPLAY: block
}
figure {
	DISPLAY: block
}
footer {
	DISPLAY: block
}
header {
	DISPLAY: block
}
hgroup {
	DISPLAY: block
}
MENU {
	DISPLAY: block
}
nav {
	DISPLAY: block
}
section {
	DISPLAY: block
}
summary {
	DISPLAY: block
}
BODY {
	FONT-FAMILY: Arial, Helvetica, "Helvetica Neue"; BACKGROUND: #2f3c50; =
COLOR: #333; FONT-SIZE: 12px
}
.clear {
	CLEAR: both
}
.main {
	MARGIN: 0px
}
.main-container {
	WIDTH: 1010px; BACKGROUND: #fff; -moz-box-shadow: rgba(0, 0, 0, 0.75) 0 =
0 5px; -webkit-box-shadow: rgba(0, 0, 0, 0.75) 0 0 5px; -o-box-shadow: =
rgba(0, 0, 0, 0.75) 0 0 5px; box-shadow: rgba(0, 0, 0, 0.75) 0 0 5px
}
.header {
	BORDER-BOTTOM: 0px; POSITION: relative; BORDER-LEFT: 0px; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: 1010px; PADDING-RIGHT: =
0px; HEIGHT: 124px; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
.header .links {
	POSITION: absolute; TOP: 13px; RIGHT: 10px
}
.header .links LI:first-child {
	PADDING-LEFT: 20px
}
.header .links LI:first-child A {
	TEXT-TRANSFORM: uppercase; PADDING-LEFT: 20px; BACKGROUND: =
url(../images/view-cart-icon.gif) no-repeat 0px 0px; COLOR: #fff; =
FONT-SIZE: 10px; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
.header .links LI:first-child A:hover {
	BACKGROUND-POSITION: 0px 100%; COLOR: #fff; TEXT-DECORATION: underline
}
.header .links LI:hover A {
	COLOR: #fff
}
.header A.logo {
	Z-INDEX: 1000; POSITION: absolute; HEIGHT: 124px; TOP: 23px; LEFT: =
28px; -moz-box-shadow: rgba(0, 0, 0, 0.47) 0 0 16px; -webkit-box-shadow: =
rgba(0, 0, 0, 0.47) 0 0 16px; -o-box-shadow: rgba(0, 0, 0, 0.47) 0 0 =
16px; box-shadow: rgba(0, 0, 0, 0.47) 0 0 16px
}
.header .ordernow {
	MARGIN-TOP: 25px; TEXT-INDENT: -9999px; WIDTH: 451px; BACKGROUND: =
url(../images/order-now.gif) no-repeat; FLOAT: right; HEIGHT: 85px; =
MARGIN-RIGHT: 5px
}
.header .quick-access {
	DISPLAY: none
}
.footer-container {
	WIDTH: 1010px
}
.footer-container .footer {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 0px; WIDTH: 1010px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
.page {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: 1010px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.catalog-product-view .middle-wrap {
	POSITION: relative; WIDTH: 1010px; BACKGROUND: =
url(../images/home-middle-bg.gif) no-repeat; HEIGHT: 202px; =
-moz-box-shadow: rgba(0, 0, 0, 0.75) 0 0 6px; -webkit-box-shadow: =
rgba(0, 0, 0, 0.75) 0 0 6px; -o-box-shadow: rgba(0, 0, 0, 0.75) 0 0 6px; =
box-shadow: rgba(0, 0, 0, 0.75) 0 0 6px
}
.catalog-product-view .middle-wrap .buynow-arrow {
	POSITION: absolute; WIDTH: 61px; BACKGROUND: =
url(../images/buynow-arrow.gif) no-repeat; HEIGHT: 60px; TOP: -25px; =
RIGHT: 199px
}
.catalog-product-view .middle-wrap .certified-logo {
	POSITION: absolute; WIDTH: 149px; BOTTOM: 8px; BACKGROUND: =
url(../images/certified-secure-logo.png) no-repeat; HEIGHT: 63px; RIGHT: =
44px
}
.catalog-product-view .middle-wrap .leftwrap {
	POSITION: relative; WIDTH: 330px; MARGIN-LEFT: 40px
}
.catalog-product-view .middle-wrap .video-placeholder {
	POSITION: absolute; TOP: -104px; LEFT: 1px
}
.catalog-product-view .middle-wrap .video-placeholder .video-wrapper {
	BORDER-BOTTOM: #999 2px solid; BORDER-LEFT: #999 2px solid; HEIGHT: =
202px; BORDER-TOP: #999 2px solid; BORDER-RIGHT: #999 2px solid
}
.catalog-product-view .middle-wrap .lifetimereplacementwarranty-callout =
{
	POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 160px; BACKGROUND: =
url(../images/home-middle-lifetimereplacementwarranty.gif) no-repeat; =
HEIGHT: 74px; TOP: 113px; LEFT: 0px
}
.catalog-product-view .middle-wrap .moneybackguarantee {
	POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 160px; BACKGROUND: =
url(../images/home-middle-moneybackguarantee.gif) no-repeat; HEIGHT: =
74px; TOP: 113px; LEFT: 168px
}
.catalog-product-view .middle-wrap .ordernowandget {
	MARGIN-TOP: 35px; TEXT-INDENT: -9999px; WIDTH: 237px; BACKGROUND: =
url(../images/home-ordernowandget.gif) no-repeat; FLOAT: right; HEIGHT: =
135px; MARGIN-RIGHT: 52px
}
.catalog-product-view .middle-wrap .matador-product-image {
	Z-INDEX: 500; POSITION: absolute; WIDTH: 353px; BOTTOM: 3px; =
BACKGROUND: url(../images/matador-product-image.png) no-repeat; HEIGHT: =
251px; LEFT: 372px
}
.catalog-product-view .product-shop .product-name {
	DISPLAY: none
}
.catalog-product-view .product-shop .no-rating {
	DISPLAY: none
}
.catalog-product-view .product-shop .availability {
	DISPLAY: none
}
.catalog-product-view .product-shop .price-box {
	DISPLAY: none
}
.catalog-product-view .product-view {
	POSITION: relative; WIDTH: 1010px; BACKGROUND: =
url(../images/home-top-bg.jpg) white 0px 0px; HEIGHT: 403px
}
.product-essential {
	Z-INDEX: 200; BORDER-BOTTOM: #000 5px solid; POSITION: relative; =
BORDER-LEFT: #000 5px solid; WIDTH: 358px; BACKGROUND: #02284f; HEIGHT: =
275px; BORDER-TOP: #000 5px solid; TOP: 240px; BORDER-RIGHT: #000 5px =
solid; LEFT: 600px; -moz-border-radius: 8px; -webkit-border-radius: 8px; =
-o-border-radius: 8px; -ms-border-radius: 8px; -khtml-border-radius: =
8px; border-radius: 8px
}
.catalog-product-view .product-view .add-to-box .ordernowandget {
	POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 275px; BACKGROUND: =
url(../images/ordernowandget.gif) no-repeat; HEIGHT: 180px; TOP: 1px; =
RIGHT: 40px
}
.catalog-product-view .product-view .add-to-box .buynow-arrow {
	Z-INDEX: 1000; POSITION: absolute; WIDTH: 54px; BACKGROUND: =
url(../images/downarrow-bg.png) no-repeat; HEIGHT: 98px; TOP: -50px; =
RIGHT: 20px
}
.catalog-product-view .product-view .add-to-box .credit-cards {
	POSITION: absolute; WIDTH: 145px; BOTTOM: 12px; BACKGROUND: =
url(../images/home-cc-logos.gif) no-repeat; HEIGHT: 20px; LEFT: 147px
}
.catalog-product-view .product-view .add-to-box .add-to-cart {
	POSITION: absolute; TOP: 180px; LEFT: 139px
}
.catalog-product-view .product-view .add-to-box .add-to-cart LABEL {
	DISPLAY: none
}
.catalog-product-view .product-view .add-to-box .add-to-cart INPUT#qty {
	DISPLAY: none
}
.catalog-product-view .product-view .add-to-box .add-to-cart =
BUTTON.btn-cart {
	Z-INDEX: 1200; POSITION: relative; TEXT-ALIGN: left; WIDTH: 151px; =
DISPLAY: block; BACKGROUND: url(../images/buynow-btn.gif) no-repeat; =
HEIGHT: 43px
}
.catalog-product-view .product-view .add-to-box .add-to-cart =
BUTTON.btn-cart SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
151px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 43px; PADDING-TOP: 0px
}
.catalog-product-view .product-view .add-to-box .add-to-cart =
BUTTON.btn-cart:hover {
	BACKGROUND-POSITION: 0px 100%
}
.catalog-product-view .product-view .add-to-box .add-to-cart UL.steps LI =
{
	MARGIN-TOP: 5px; FLOAT: left; COLOR: #fff; MARGIN-LEFT: 15px; =
FONT-SIZE: 18px; FONT-WEIGHT: bold
}
.catalog-product-view .product-view .add-to-box .add-to-cart UL.steps =
LI:first-child {
	WIDTH: 200px
}
.catalog-product-view .product-view .offer-details {
	POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 396px; BACKGROUND: =
url(../images/offerdetails-bg.gif) no-repeat; HEIGHT: 159px; TOP: 69px; =
RIGHT: 22px
}
.catalog-product-view .product-view .seals {
	MARGIN-TOP: 13px; WIDTH: 150px; FLOAT: right; MARGIN-RIGHT: 20px
}
.catalog-product-view .product-view .seals .certified-logo {
	WIDTH: 149px; BACKGROUND: url(../images/certified-secure-logo.gif) =
no-repeat; HEIGHT: 63px; MARGIN-RIGHT: 0px
}
.catalog-product-view .product-view .seals .weaccept {
	MARGIN-TOP: 5px; WIDTH: 139px; BACKGROUND: =
url(../images/home-creditcards.gif) no-repeat; HEIGHT: 20px; =
MARGIN-LEFT: 5px
}
.col-main {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px !important; =
PADDING-LEFT: 0px !important; PADDING-RIGHT: 0px !important; BORDER-TOP: =
0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px !important
}
.catalog-product-view .bottom-wrap {
	PADDING-BOTTOM: 12px; PADDING-LEFT: 12px; PADDING-RIGHT: 12px; =
PADDING-TOP: 12px
}
.catalog-product-view .bottom-wrap .top {
	PADDING-BOTTOM: 32px; PADDING-LEFT: 32px; PADDING-RIGHT: 32px; =
MARGIN-BOTTOM: 12px; BACKGROUND: #e7eaee; PADDING-TOP: 32px
}
.catalog-product-view .bottom-wrap .top H3 {
	TEXT-INDENT: -9999px; WIDTH: 768px; DISPLAY: block; MARGIN-BOTTOM: =
20px; BACKGROUND: url(../images/home-lastmatyoullbuy-text.gif) =
no-repeat; HEIGHT: 30px
}
.catalog-product-view .bottom-wrap .top .box-1 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-1.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-2 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-2.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-3 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-3.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-4 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-4.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-5 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-5.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-6 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-6.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-7 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-7.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box-8 .thumbnail {
	WIDTH: 107px; BACKGROUND: url(../images/home-usage-bg-8.jpg) no-repeat; =
HEIGHT: 92px
}
.catalog-product-view .bottom-wrap .top .box {
	WIDTH: 115px; FLOAT: left
}
.catalog-product-view .bottom-wrap .top .box .thumbnail {
	PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #fff; PADDING-LEFT: 2px; =
PADDING-RIGHT: 2px; BACKGROUND-POSITION: 2px 2px; FLOAT: left; =
PADDING-TOP: 2px; -moz-box-shadow: rgba(153, 153, 153, 0.75) 0 0 5px; =
-webkit-box-shadow: rgba(153, 153, 153, 0.75) 0 0 5px; -o-box-shadow: =
rgba(153, 153, 153, 0.75) 0 0 5px; box-shadow: rgba(153, 153, 153, 0.75) =
0 0 5px
}
.catalog-product-view .bottom-wrap .top .box P {
	TEXT-ALIGN: center; PADDING-BOTTOM: 15px; LINE-HEIGHT: 15px; =
PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: #333; CLEAR: left; =
PADDING-TOP: 15px; text-shadow: 0 -1px 0 white
}
.catalog-product-view .bottom-wrap .bottom {
	POSITION: relative; PADDING-BOTTOM: 15px; BACKGROUND: #e7eaee
}
.catalog-product-view .bottom-wrap .bottom .left-bg {
	WIDTH: 491px; BACKGROUND: =
url(../images/home-bottom-lifetimeguarantee-bg.gif) no-repeat; FLOAT: =
left; HEIGHT: 398px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap {
	PADDING-BOTTOM: 32px; PADDING-LEFT: 32px; PADDING-RIGHT: 32px; =
MARGIN-LEFT: 489px; PADDING-TOP: 32px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap .asseenontv-logo {
	POSITION: absolute; WIDTH: 87px; BACKGROUND: =
url(../images/asseenontv-logo.gif) no-repeat; HEIGHT: 70px; TOP: -49px; =
RIGHT: 0px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap H3.useandabuse {
	MARGIN-TOP: 8px; TEXT-INDENT: -9999px; WIDTH: 360px; MARGIN-BOTTOM: =
15px; BACKGROUND: url(../images/useandabuse-text.gif) no-repeat; HEIGHT: =
32px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap H4 {
	MARGIN-TOP: 15px; DISPLAY: block; MARGIN-BOTTOM: 5px; FONT-SIZE: 16px; =
FONT-WEIGHT: bold; text-shadow: 0 -1px 0 white
}
.catalog-product-view .bottom-wrap .bottom .rightwrap P {
	LINE-HEIGHT: 18px; MARGIN-TOP: 15px; FONT-SIZE: 14px; text-shadow: 0 =
-1px 0 white
}
.catalog-product-view .bottom-wrap .bottom .rightwrap .ordernow {
	POSITION: absolute; TEXT-INDENT: -9999px; WIDTH: 260px; BOTTOM: 10px; =
BACKGROUND: url(../images/ordernowandget-home-footer.gif) no-repeat; =
HEIGHT: 137px; RIGHT: 23px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap .buynow-bottom {
	POSITION: absolute; TEXT-ALIGN: left; WIDTH: 145px; DISPLAY: block; =
BACKGROUND: url(../images/home-buynow-btn.gif) no-repeat; HEIGHT: 43px; =
TOP: 307px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap .buynow-bottom =
SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
145px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 43px; PADDING-TOP: 0px
}
.catalog-product-view .bottom-wrap .bottom .rightwrap =
.buynow-bottom:hover {
	BACKGROUND-POSITION: 0px 100%
}
.footer {
	HEIGHT: 205px; COLOR: #cccccc; FONT-SIZE: 11px; FONT-WEIGHT: bold
}
.footer .seals {
	FLOAT: right
}
.footer .seals .secure-shopping {
	MARGIN-TOP: 20px; TEXT-INDENT: -9999px; WIDTH: 145px; BACKGROUND: =
url(../images/footer-secureshopping.gif) no-repeat; HEIGHT: 61px
}
.footer .seals .credit-cards {
	MARGIN-TOP: 10px; TEXT-INDENT: -9999px; WIDTH: 140px; BACKGROUND: =
url(../images/footer-ccs.gif) no-repeat; HEIGHT: 20px
}
.footer UL.links {
	MARGIN-TOP: 20px; FLOAT: left
}
.footer UL.links LI:first-child {
	PADDING-LEFT: 0px
}
.footer UL.links LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 10px; =
BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 0px
}
.footer UL.links LI A {
	COLOR: #cccccc; FONT-SIZE: 11px; CURSOR: pointer; TEXT-DECORATION: none
}
.footer UL.links LI A:hover {
	COLOR: #eaeaea; TEXT-DECORATION: underline
}
.footer ADDRESS {
	MARGIN-TOP: 7px; FLOAT: left; CLEAR: left
}
.add-to-box SELECT.product-selection {
	POSITION: absolute; WIDTH: 190px; TOP: 43px; LEFT: 28px
}
.header .as-seen-on-tv-logo {
	Z-INDEX: 100; POSITION: absolute; WIDTH: 101px; BACKGROUND: =
url(../images/asseenontv-topright.png) no-repeat; HEIGHT: 87px; TOP: =
102px; RIGHT: -28px
}
.main {
	BACKGROUND: url(../images/col-main-bg.gif) no-repeat 0px 0px
}
.catalog-product-view .main-container {
	BACKGROUND: #fff
}
.page-title {
	BORDER-BOTTOM: 0px; MARGIN: 0px 0px 5px
}
.page-title H1 {
	FONT-FAMILY: Arial, Helvetica, "Helvetica Neue"; COLOR: #2f3c50; =
FONT-SIZE: 25px; FONT-WEIGHT: bold
}
.main-container {
	BACKGROUND: #e7eaee
}
.main-container .main {
	PADDING-BOTTOM: 110px; PADDING-LEFT: 110px; PADDING-RIGHT: 110px; =
PADDING-TOP: 110px
}
.catalog-product-view .main-container .main {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
.checkout-types BUTTON.btn-checkout {
	TEXT-ALIGN: left; WIDTH: 245px; DISPLAY: block; BACKGROUND: =
url(../images/proceed-to-checkout.gif) no-repeat; HEIGHT: 36px
}
.checkout-types BUTTON.btn-checkout SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
245px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 36px; PADDING-TOP: 0px
}
.checkout-types BUTTON.btn-checkout:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-types LI A {
	DISPLAY: none
}
#shopping-cart-table THEAD TR TH {
	BORDER-BOTTOM: #acb1b9 1px solid; BORDER-LEFT: #acb1b9 1px solid; =
PADDING-BOTTOM: 15px; PADDING-LEFT: 15px; PADDING-RIGHT: 15px; =
BACKGROUND: #2f3c50; COLOR: #fff; BORDER-TOP: #acb1b9 1px solid; =
BORDER-RIGHT: #acb1b9 1px solid; PADDING-TOP: 15px
}
#shopping-cart-table TBODY TR.even {
	BACKGROUND: #fff
}
.checkout-cart-index .main-container {
	BACKGROUND: #fff
}
.checkout-cart-index .cart {
	POSITION: relative
}
.checkout-cart-index .btn-remove2 {
	MARGIN: 0px auto
}
.checkout-cart-index #shopping-cart-table TFOOT TR {
	BORDER-BOTTOM: #acb1b9 1px solid; BORDER-LEFT: #acb1b9 1px solid; =
BACKGROUND: #2f3c50 0px 0px; BORDER-TOP: #acb1b9 1px solid; =
BORDER-RIGHT: #acb1b9 1px solid
}
.checkout-cart-index #shopping-cart-table TFOOT TR TD {
	PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; PADDING-RIGHT: 20px; COLOR: =
#ffffff; PADDING-TOP: 20px
}
.checkout-cart-index #shopping-cart-table TFOOT TR TD .btn-update {
	Z-INDEX: 1000; POSITION: absolute; TEXT-ALIGN: left; WIDTH: 82px; =
BOTTOM: -3px; DISPLAY: block; BACKGROUND: =
url(../images/btn-update-qty.gif) no-repeat; HEIGHT: 20px; RIGHT: 0px
}
.checkout-cart-index #shopping-cart-table TFOOT TR TD .btn-update SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
82px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 20px; PADDING-TOP: 0px
}
.checkout-cart-index #shopping-cart-table TFOOT TR TD .btn-update:hover =
{
	BACKGROUND-POSITION: 0px 100%
}
.checkout-cart-index #shopping-cart-table TBODY IMG {
	WIDTH: 75px; FLOAT: left; HEIGHT: 75px; COLOR: #333
}
.checkout-cart-index #shopping-cart-table TBODY TR TD {
	COLOR: #333; FONT-WEIGHT: bold
}
.checkout-cart-index #shopping-cart-table TBODY H2 {
	COLOR: #333; MARGIN-LEFT: 85px; FONT-WEIGHT: bold; TEXT-DECORATION: =
underline
}
.checkout-cart-index .cart-collaterals {
	POSITION: relative
}
.checkout-cart-index .cart-collaterals .certified {
	POSITION: absolute; WIDTH: 149px; BACKGROUND: =
url(../images/certified-shopping-whitebg.gif) no-repeat; HEIGHT: 85px; =
TOP: 10px; LEFT: 0px
}
.checkout-cart-index .cart-collaterals .totals {
	POSITION: absolute; TOP: -41px; RIGHT: 0px
}
.checkout-cart-index .cart-collaterals .totals .checkout-types {
	MARGIN-TOP: 38px
}
.checkout-cart-index .cart-collaterals .totals =
#shopping-cart-totals-table TBODY TR TD {
	PADDING-BOTTOM: 11px; TEXT-TRANSFORM: uppercase; PADDING-LEFT: 12px; =
PADDING-RIGHT: 12px; COLOR: #fff; FONT-SIZE: 18px; FONT-WEIGHT: bold; =
BORDER-RIGHT: #acb1b9 1px solid; PADDING-TOP: 11px
}
.checkout-cart-index .cart-collaterals .totals =
#shopping-cart-totals-table TFOOT TR TD {
	DISPLAY: none
}
.checkout-onepage-index .innerWrap {
	BACKGROUND: #f7f7f7
}
.checkout-onepage-index .col-main {
	BORDER-LEFT: #fefefe 1px solid; WIDTH: 569px
}
.checkout-onepage-index .col-main .page-title {
	DISPLAY: none
}
.checkout-onepage-index .opc .buttons-set {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN-TOP: =
10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
.checkout-onepage-index .opc .buttons-set P.required {
	FLOAT: left
}
.checkout-onepage-index .opc .buttons-set BUTTON.button {
	TEXT-ALIGN: left; WIDTH: 105px; DISPLAY: block; BACKGROUND: =
url(../images/checkout-continue-btn.gif) no-repeat; FLOAT: left; HEIGHT: =
36px; CLEAR: left
}
.checkout-onepage-index .opc .buttons-set BUTTON.button SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
105px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 36px; PADDING-TOP: 0px
}
.checkout-onepage-index .opc .buttons-set BUTTON.button:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-onepage-index .opc .step {
	PADDING-BOTTOM: 40px; PADDING-LEFT: 40px; PADDING-RIGHT: 40px; =
PADDING-TOP: 20px
}
.checkout-onepage-index .opc .step .back-link {
	MARGIN-TOP: 20px; DISPLAY: block; FLOAT: right
}
.checkout-onepage-index .opc .step .back-link A {
	TEXT-INDENT: -9999px; WIDTH: 43px; DISPLAY: block; BACKGROUND: =
url(../images/checkout-back-btn.gif) no-repeat; HEIGHT: 11px
}
.checkout-onepage-index .opc .step .back-link A:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-onepage-index .opc .step .form-list {
	BORDER-BOTTOM: #e4e4e4 1px solid; WIDTH: 480px
}
.checkout-onepage-index .opc .step .form-list LI.wide INPUT.input-text {
	WIDTH: 480px
}
.checkout-onepage-index .opc .step .form-list LABEL {
	MARGIN: 3px; COLOR: #666666
}
.checkout-onepage-index .opc .step .field LABEL {
	MARGIN: 3px; COLOR: #666666
}
.checkout-onepage-index .opc .step-title {
	BORDER-BOTTOM: #cccccc 1px solid; TEXT-ALIGN: right; PADDING-BOTTOM: =
5px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
BORDER-TOP: #ffffff 1px solid; PADDING-TOP: 5px
}
.checkout-onepage-index .opc .step-title .number {
	PADDING-BOTTOM: 1px; LINE-HEIGHT: 15px; BACKGROUND-COLOR: #ffffff; =
PADDING-LEFT: 5px; PADDING-RIGHT: 5px; FLOAT: left; COLOR: #cccccc; =
FONT-SIZE: 11px; MARGIN-RIGHT: 5px; PADDING-TOP: 1px
}
.checkout-onepage-index .opc .step-title H2 {
	MARGIN-TOP: 2px; FLOAT: left; COLOR: #cccccc; FONT-SIZE: 12px; =
FONT-WEIGHT: bold
}
.checkout-onepage-index .opc .active {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; BORDER-TOP: =
#ccc 1px solid; BORDER-RIGHT: #ccc 1px solid
}
.checkout-onepage-index .opc .active H2 {
	COLOR: #fff
}
.checkout-onepage-index .opc .active .step-title {
	BORDER-BOTTOM: #acb1b9 1px solid; BORDER-LEFT: #acb1b9 1px solid; =
BACKGROUND: #2f3c50; BORDER-TOP: #acb1b9 1px solid; BORDER-RIGHT: =
#acb1b9 1px solid
}
.checkout-onepage-index .opc .active .number {
	COLOR: #000
}
.checkout-onepage-index .col-left {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN-TOP: =
0px; PADDING-LEFT: 0px; WIDTH: 220px; PADDING-RIGHT: 0px; BACKGROUND: =
#f7f7f7; FLOAT: left; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: =
0px
}
.checkout-onepage-index .col-left .block {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
.checkout-onepage-index .col-left .block .block-title {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
.checkout-onepage-index .col-left .block .block-content {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
.checkout-onepage-index .col-left #checkout-progress-wrapper {
	POSITION: relative
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-content DL DT:first-child {
	BORDER-TOP: #ccc 1px solid
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-content DL DT {
	PADDING-BOTTOM: 7px; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BACKGROUND: =
url(../images/checkout-steps-bg.gif) repeat-x 0px 0px; COLOR: #999999; =
PADDING-TOP: 7px
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-content DL DT SPAN {
	DISPLAY: none
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-content DL DT A {
	TEXT-TRANSFORM: uppercase; FLOAT: right; COLOR: #2f3c50; FONT-SIZE: =
10px; FONT-WEIGHT: bold
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-content DL DT A:hover {
	COLOR: #003399; TEXT-DECORATION: underline
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-content DL DD {
	PADDING-BOTTOM: 10px; LINE-HEIGHT: 18px; PADDING-LEFT: 22px; =
PADDING-RIGHT: 22px; PADDING-TOP: 10px
}
.checkout-onepage-index .col-left #checkout-progress-wrapper =
.block-progress .block-title STRONG {
	POSITION: absolute; WIDTH: 300px; FONT-FAMILY: Arial, Helvetica, =
"Helvetica Neue"; COLOR: #2f3c50; FONT-SIZE: 25px; TOP: -30px; =
FONT-WEIGHT: bold; LEFT: 0px
}
.dialog {
	POSITION: absolute
}
.windowWrapper {
	MIN-HEIGHT: 502px; WIDTH: 430px; BACKGROUND: #fff
}
.windowWrapper .windowInner {
	PADDING-BOTTOM: 40px; PADDING-LEFT: 40px; PADDING-RIGHT: 40px; =
FONT-FAMILY: "Helvetica Neue", Helvetica, Arial; COLOR: #333; FONT-SIZE: =
12px; PADDING-TOP: 40px
}
.windowWrapper .windowInner H3 {
	MARGIN-BOTTOM: 20px; COLOR: #333; FONT-SIZE: 16px; FONT-WEIGHT: bold
}
.windowWrapper .windowInner H4 {
	FONT-SIZE: 12px; FONT-WEIGHT: bold
}
.windowWrapper .windowInner P {
	LINE-HEIGHT: 18px; MARGIN-BOTTOM: 10px; COLOR: #333
}
.windowWrapper .windowInner A {
	COLOR: #00339d
}
.windowWrapper .windowInner A:hover {
	COLOR: #2f3c50
}
.windowWrapper .windowHeader {
	BORDER-BOTTOM: 0px; POSITION: relative; BORDER-LEFT: 0px; WIDTH: 430px; =
MARGIN-BOTTOM: 0px; BACKGROUND: url(../images/popup-header.gif) =
no-repeat; HEIGHT: 104px; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
.windowWrapper .windowHeader A.close {
	POSITION: absolute; TEXT-TRANSFORM: uppercase; PADDING-LEFT: 14px; =
WIDTH: 40px; BACKGROUND: url(../images/popup-close.gif) no-repeat 0px =
0px; HEIGHT: 10px; COLOR: #ffffff; FONT-SIZE: 10px; TOP: 5px; CURSOR: =
pointer; RIGHT: 4px; TEXT-DECORATION: none
}
.windowWrapper .windowHeader A.close:hover {
	BACKGROUND-POSITION: 0px 100%; TEXT-DECORATION: underline
}
#overlay_modal {
	BACKGROUND: url(../images/80opacblk.png) 0px 0px
}
UL.faq-questions {
	BORDER-BOTTOM: #e0e0e0 1px solid; PADDING-BOTTOM: 15px; LINE-HEIGHT: =
18px
}
UL.faq-questions LI A:hover {
	TEXT-DECORATION: underline
}
.faq-item {
	BORDER-BOTTOM: #e0e0e0 1px solid; PADDING-BOTTOM: 15px; LINE-HEIGHT: =
16px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #333; PADDING-TOP: =
15px
}
.faq-item .question {
	FONT-WEIGHT: bold
}
.faq-item .btt {
	MARGIN-TOP: 10px
}
.faq-item .btt A {
	TEXT-INDENT: -9999px; WIDTH: 83px; DISPLAY: block; BACKGROUND: =
url(../images/btt.gif) no-repeat; HEIGHT: 12px
}
.faq-item .btt A:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-onepage-index .opc .buttons-set BUTTON.btn-checkout {
	TEXT-ALIGN: left; WIDTH: 181px; DISPLAY: block; BACKGROUND: =
url(../images/btn-checkout.gif) no-repeat; FLOAT: right; HEIGHT: 36px; =
MARGIN-RIGHT: 25px
}
.checkout-onepage-index .opc .buttons-set BUTTON.btn-checkout SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
181px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 36px; PADDING-TOP: 0px
}
.checkout-onepage-index #checkout-step-shipping_method .sp-methods DD UL =
LI {
	PADDING-BOTTOM: 1px; MARGIN-TOP: 10px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; PADDING-TOP: 2px
}
.checkout-onepage-index .opc .buttons-set BUTTON.btn-checkout:hover {
	BACKGROUND-POSITION: 0px 100%
}
#checkout-step-review {
	BORDER-BOTTOM: 0px; POSITION: relative; PADDING-BOTTOM: 170px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.checkout-onepage-index .col-left .seals {
	TEXT-INDENT: -9999px; MARGIN: 25px auto; WIDTH: 149px; BACKGROUND: =
url(../images/seals-checkout-left.gif) no-repeat; HEIGHT: 86px
}
#checkout-cart-index #shopping-cart-table TFOOT TR TD {
	POSITION: relative
}
#checkout-review-table THEAD {
	BACKGROUND: #f9f9f9
}
#checkout-review-table TBODY {
	BACKGROUND: #fff
}
#checkout-review-table TFOOT TR.first {
	TEXT-TRANSFORM: uppercase; BACKGROUND: #ff8533; COLOR: #fff; FONT-SIZE: =
14px; FONT-WEIGHT: bold
}
#checkout-review-table TFOOT TR.last {
	BORDER-BOTTOM: #e5e5e5 1px solid; POSITION: absolute; BORDER-LEFT: =
#e5e5e5 1px solid; PADDING-BOTTOM: 15px; PADDING-LEFT: 15px; =
PADDING-RIGHT: 15px; BACKGROUND: #ffe7d6; BORDER-TOP: 0px; RIGHT: 0px; =
BORDER-RIGHT: #e5e5e5 1px solid; PADDING-TOP: 15px
}
#checkout-review-table TFOOT TR.last TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; COLOR: #333; FONT-SIZE: 18px; =
BORDER-TOP: 0px; FONT-WEIGHT: bold; BORDER-RIGHT: 0px
}
#review-buttons-container {
	POSITION: absolute; BOTTOM: 60px; RIGHT: 0px
}
#review-buttons-container .f-left {
	DISPLAY: none
}
.checkout-cart-index .update-btn-wrap {
	POSITION: relative
}
.checkout-cart-index .update-btn-wrap .btn-update {
	Z-INDEX: 1000; POSITION: absolute; TEXT-ALIGN: left; WIDTH: 82px; =
DISPLAY: block; BACKGROUND: url(../images/btn-update-qty.gif) no-repeat; =
HEIGHT: 20px; TOP: 8px; RIGHT: 0px
}
.checkout-cart-index .update-btn-wrap .btn-update SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
82px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 20px; PADDING-TOP: 0px
}
.checkout-cart-index .update-btn-wrap .btn-update:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-cart-index .cross-sells {
	MARGIN-TOP: 88px
}
.checkout-cart-index .cross-sells H2 {
	TEXT-INDENT: -9999px; WIDTH: 193px; BACKGROUND: =
url(../images/youmayalsolike.gif) no-repeat; HEIGHT: 27px
}
.checkout-cart-index .cross-sells #crosssell-products-list LI {
	PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; WIDTH: 174px; PADDING-RIGHT: =
20px; BACKGROUND: #eff0f2; FLOAT: left; MARGIN-RIGHT: 2px; PADDING-TOP: =
20px
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
.product-image {
	MARGIN: 0px auto; DISPLAY: block; FLOAT: none
}
.checkout-cart-index .cross-sells #crosssell-products-list LI .price-box =
{
	TEXT-ALIGN: center; MARGIN: 10px 0px 15px; COLOR: #ff0000; FONT-WEIGHT: =
bold
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
.product-details {
	MARGIN: 10px auto
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
.product-details BUTTON.btn-cart {
	TEXT-ALIGN: left; TEXT-INDENT: -9999px; MARGIN: 0px auto; WIDTH: 95px; =
DISPLAY: block; BACKGROUND: url(../images/crossell-addtocart-btn.gif) =
no-repeat; HEIGHT: 25px
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
.product-details BUTTON.btn-cart SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
95px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 25px; PADDING-TOP: 0px
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
.product-details BUTTON.btn-cart:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
.add-to-links {
	DISPLAY: none
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
H3.product-name {
	TEXT-ALIGN: center
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
H3.product-name A {
	TEXT-ALIGN: center; LINE-HEIGHT: 16px; FONT-FAMILY: Helvetica, =
"Helvetica Neue", Arial; COLOR: #2f3c50; FONT-SIZE: 14px; FONT-WEIGHT: =
bold
}
.checkout-onepage-success .main-container {
	MIN-HEIGHT: 800px
}
.checkout-onepage-success .col-main P {
	MARGIN: 5px 0px
}
.checkout-onepage-success .col-main P:first-child {
	COLOR: #333333; FONT-SIZE: 14px; FONT-WEIGHT: bold
}
.checkout-onepage-success .buttons-set {
	BORDER-BOTTOM: #d6d8da 1px solid; BORDER-LEFT: 0px; PADDING-BOTTOM: =
25px; MARGIN-TOP: 10px; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
.checkout-onepage-success .buttons-set BUTTON {
	TEXT-ALIGN: left; WIDTH: 155px; DISPLAY: block; BACKGROUND: =
url(../images/continue-shopping-btn.gif) no-repeat; FLOAT: left; HEIGHT: =
27px
}
.checkout-onepage-success .buttons-set BUTTON SPAN {
	PADDING-BOTTOM: 0px; TEXT-INDENT: -9999px; PADDING-LEFT: 0px; WIDTH: =
155px; PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% =
0%; HEIGHT: 27px; PADDING-TOP: 0px
}
.checkout-onepage-success .buttons-set BUTTON:hover {
	BACKGROUND-POSITION: 0px 100%
}
.checkout-onepage-success .page-title {
	BORDER-BOTTOM: #d6d8da 1px solid; PADDING-BOTTOM: 10px; FONT-FAMILY: =
"Helvetica Neue", Helvetica, Arial; MARGIN-BOTTOM: 20px; COLOR: #2f3c50; =
FONT-SIZE: 25px; FONT-WEIGHT: bold
}
.checkout-onepage-success .sub-title {
	MARGIN-TOP: 10px; MARGIN-BOTTOM: 20px; COLOR: #ff6600; FONT-SIZE: 16px; =
FONT-WEIGHT: bold
}
.checkout-onepage-success P {
	COLOR: #333; FONT-SIZE: 12px
}
.checkout-cart-index .header .links {
	DISPLAY: none
}
.checkout-onepage-index .header .links {
	DISPLAY: none
}
.catalog-product-view .product-view .add-to-box .credit-cards {
	DISPLAY: none
}
.footer .seals .credit-cards {
	DISPLAY: none
}
.checkout-cart-index .cart-collaterals .certified {
	HEIGHT: 63px
}
.checkout-onepage-index .col-left .seals {
	HEIGHT: 63px
}
.checkout-cart-index .update-btn-wrap .btn-update {
	BORDER-BOTTOM: #969696 1px solid; TEXT-ALIGN: center; BORDER-LEFT: =
#969696 1px solid; TEXT-TRANSFORM: uppercase; TEXT-INDENT: 0px; WIDTH: =
120px; BACKGROUND: #d0d0d0; HEIGHT: 28px; BORDER-TOP: #969696 1px solid; =
TOP: 5px; BORDER-RIGHT: #969696 1px solid
}
.checkout-cart-index .update-btn-wrap .btn-update SPAN {
	TEXT-ALIGN: center; TEXT-INDENT: 0px !important; WIDTH: 120px; HEIGHT: =
28px; COLOR: #333; FONT-SIZE: 15px
}
.checkout-cart-index .update-btn-wrap .btn-update SPAN SPAN {
	LINE-HEIGHT: 27px; text-shadow: 0 1px 0 #FFFFFF
}
.checkout-cart-index .update-btn-wrap .btn-update:hover {
	BORDER-BOTTOM: #5e5e5e 1px solid; BORDER-LEFT: #5e5e5e 1px solid; =
BACKGROUND: #b0b0b0; BORDER-TOP: #5e5e5e 1px solid; BORDER-RIGHT: =
#5e5e5e 1px solid
}
.checkout-cart-index .update-btn-wrap .btn-update:hover SPAN {
	COLOR: #000
}
#shopping-cart-table THEAD TH {
	FONT-SIZE: 14px
}
#shopping-cart-table TBODY TR TD {
	FONT-SIZE: 14px
}
#shopping-cart-table TBODY TR TD INPUT.qty {
	FONT-SIZE: 14px
}
.checkout-cart-index .cart-collaterals .totals .checkout-types {
	MARGIN-TOP: 40px
}
#crosssell-products-list H3.product-name {
	FONT-SIZE: 14px
}
#crosssell-products-list .price-box {
	FONT-SIZE: 14px
}
#shopping-cart-table .product-name {
	FONT-SIZE: 14px; PADDING-TOP: 30px
}
#shopping-cart-table .btn-remove3 {
	COLOR: #333333; FONT-SIZE: 12px
}
.header-container {
	Z-INDEX: 100; POSITION: relative
}
.catalog-product-view .main-container {
	POSITION: relative
}
.catalog-product-view .product-view {
	Z-INDEX: 10
}
.col-main {
	POSITION: relative
}
.video-placeholder {
	Z-INDEX: 100; POSITION: absolute; TOP: 300px; LEFT: 41px
}
.video-placeholder .video-wrapper {
	BORDER-BOTTOM: #999 2px solid; BORDER-LEFT: #999 2px solid; HEIGHT: =
202px; BORDER-TOP: #999 2px solid; BORDER-RIGHT: #999 2px solid
}
.matador-product-image {
	Z-INDEX: 500; POSITION: absolute; WIDTH: 353px; BACKGROUND: =
url(../images/matador-product-image.png) no-repeat; HEIGHT: 251px; TOP: =
351px; LEFT: 372px
}
.checkout-cart-index #shopping-cart-table TFOOT TR TD {
	HEIGHT: 41px
}
.checkout-cart-index #shopping-cart-table TBODY TR TD {
	HEIGHT: 41px
}
.checkout-cart-index .cross-sells #crosssell-products-list LI {
	HEIGHT: 192px
}
.checkout-cart-index .cross-sells #crosssell-products-list LI =
H3.product-name {
	LINE-HEIGHT: 18px; HEIGHT: 36px
}
.checkout-cart-index .cart-collaterals .totals =
#shopping-cart-totals-table TBODY TR TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 12px; PADDING-RIGHT: 12px; HEIGHT: 40px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
.checkout-onepage-index .col-left {
	DISPLAY: inline
}
.checkout-onepage-index .col-main {
	DISPLAY: inline
}
.checkout-cart-index .update-btn-wrap .btn-update {
	Z-INDEX: 50
}

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/skin/frontend/matadore/default/css/print.css

* {
	TEXT-ALIGN: left !important; BACKGROUND: none transparent scroll repeat =
0% 0%
}
BODY {
	MARGIN: 15px; BACKGROUND: #fff; FONT-SIZE: 9pt !important
}
A {
	COLOR: #2976c9 !important
}
TH {
	BORDER-BOTTOM-COLOR: #ccc !important; BORDER-TOP-COLOR: #ccc =
!important; COLOR: #2f2f2f !important; BORDER-RIGHT-COLOR: #ccc =
!important; BORDER-LEFT-COLOR: #ccc !important
}
TD {
	BORDER-BOTTOM-COLOR: #ccc !important; BORDER-TOP-COLOR: #ccc =
!important; COLOR: #2f2f2f !important; BORDER-RIGHT-COLOR: #ccc =
!important; BORDER-LEFT-COLOR: #ccc !important
}
.header-container {
	DISPLAY: none !important
}
.nav-container {
	DISPLAY: none !important
}
.footer-container {
	DISPLAY: none !important
}
.pager {
	DISPLAY: none !important
}
.toolbar {
	DISPLAY: none !important
}
.actions {
	DISPLAY: none !important
}
.buttons-set {
	DISPLAY: none !important
}
.page-print .data-table .cart-tax-total {
	BACKGROUND-POSITION: 100% -54px
}
.page-print .data-table .cart-tax-info {
	DISPLAY: block !important
}

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/prototype/prototype.js

/*  Prototype JavaScript framework, version 1.7=0A=
 *  (c) 2005-2010 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://www.prototypejs.org/=0A=
 *=0A=
 =
*------------------------------------------------------------------------=
--*/=0A=
=0A=
var Prototype =3D {=0A=
=0A=
  Version: '1.7',=0A=
=0A=
  Browser: (function(){=0A=
    var ua =3D navigator.userAgent;=0A=
    var isOpera =3D Object.prototype.toString.call(window.opera) =3D=3D =
'[object Opera]';=0A=
    return {=0A=
      IE:             !!window.attachEvent && !isOpera,=0A=
      Opera:          isOpera,=0A=
      WebKit:         ua.indexOf('AppleWebKit/') > -1,=0A=
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') =
=3D=3D=3D -1,=0A=
      MobileSafari:   /Apple.*Mobile/.test(ua)=0A=
    }=0A=
  })(),=0A=
=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate,=0A=
=0A=
    SelectorsAPI: !!document.querySelector,=0A=
=0A=
    ElementExtensions: (function() {=0A=
      var constructor =3D window.Element || window.HTMLElement;=0A=
      return !!(constructor && constructor.prototype);=0A=
    })(),=0A=
    SpecificElementExtensions: (function() {=0A=
      if (typeof window.HTMLDivElement !=3D=3D 'undefined')=0A=
        return true;=0A=
=0A=
      var div =3D document.createElement('div'),=0A=
          form =3D document.createElement('form'),=0A=
          isSupported =3D false;=0A=
=0A=
      if (div['__proto__'] && (div['__proto__'] !=3D=3D =
form['__proto__'])) {=0A=
        isSupported =3D true;=0A=
      }=0A=
=0A=
      div =3D form =3D null;=0A=
=0A=
      return isSupported;=0A=
    })()=0A=
  },=0A=
=0A=
  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',=0A=
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,=0A=
=0A=
  emptyFunction: function() { },=0A=
=0A=
  K: function(x) { return x }=0A=
};=0A=
=0A=
if (Prototype.Browser.MobileSafari)=0A=
  Prototype.BrowserFeatures.SpecificElementExtensions =3D false;=0A=
=0A=
=0A=
var Abstract =3D { };=0A=
=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) { }=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
};=0A=
=0A=
/* Based on Alex Arnell's inheritance implementation. */=0A=
=0A=
var Class =3D (function() {=0A=
=0A=
  var IS_DONTENUM_BUGGY =3D (function(){=0A=
    for (var p in { toString: 1 }) {=0A=
      if (p =3D=3D=3D 'toString') return false;=0A=
    }=0A=
    return true;=0A=
  })();=0A=
=0A=
  function subclass() {};=0A=
  function create() {=0A=
    var parent =3D null, properties =3D $A(arguments);=0A=
    if (Object.isFunction(properties[0]))=0A=
      parent =3D properties.shift();=0A=
=0A=
    function klass() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
=0A=
    Object.extend(klass, Class.Methods);=0A=
    klass.superclass =3D parent;=0A=
    klass.subclasses =3D [];=0A=
=0A=
    if (parent) {=0A=
      subclass.prototype =3D parent.prototype;=0A=
      klass.prototype =3D new subclass;=0A=
      parent.subclasses.push(klass);=0A=
    }=0A=
=0A=
    for (var i =3D 0, length =3D properties.length; i < length; i++)=0A=
      klass.addMethods(properties[i]);=0A=
=0A=
    if (!klass.prototype.initialize)=0A=
      klass.prototype.initialize =3D Prototype.emptyFunction;=0A=
=0A=
    klass.prototype.constructor =3D klass;=0A=
    return klass;=0A=
  }=0A=
=0A=
  function addMethods(source) {=0A=
    var ancestor   =3D this.superclass && this.superclass.prototype,=0A=
        properties =3D Object.keys(source);=0A=
=0A=
    if (IS_DONTENUM_BUGGY) {=0A=
      if (source.toString !=3D Object.prototype.toString)=0A=
        properties.push("toString");=0A=
      if (source.valueOf !=3D Object.prototype.valueOf)=0A=
        properties.push("valueOf");=0A=
    }=0A=
=0A=
    for (var i =3D 0, length =3D properties.length; i < length; i++) {=0A=
      var property =3D properties[i], value =3D source[property];=0A=
      if (ancestor && Object.isFunction(value) &&=0A=
          value.argumentNames()[0] =3D=3D "$super") {=0A=
        var method =3D value;=0A=
        value =3D (function(m) {=0A=
          return function() { return ancestor[m].apply(this, arguments); =
};=0A=
        })(property).wrap(method);=0A=
=0A=
        value.valueOf =3D method.valueOf.bind(method);=0A=
        value.toString =3D method.toString.bind(method);=0A=
      }=0A=
      this.prototype[property] =3D value;=0A=
    }=0A=
=0A=
    return this;=0A=
  }=0A=
=0A=
  return {=0A=
    create: create,=0A=
    Methods: {=0A=
      addMethods: addMethods=0A=
    }=0A=
  };=0A=
})();=0A=
(function() {=0A=
=0A=
  var _toString =3D Object.prototype.toString,=0A=
      NULL_TYPE =3D 'Null',=0A=
      UNDEFINED_TYPE =3D 'Undefined',=0A=
      BOOLEAN_TYPE =3D 'Boolean',=0A=
      NUMBER_TYPE =3D 'Number',=0A=
      STRING_TYPE =3D 'String',=0A=
      OBJECT_TYPE =3D 'Object',=0A=
      FUNCTION_CLASS =3D '[object Function]',=0A=
      BOOLEAN_CLASS =3D '[object Boolean]',=0A=
      NUMBER_CLASS =3D '[object Number]',=0A=
      STRING_CLASS =3D '[object String]',=0A=
      ARRAY_CLASS =3D '[object Array]',=0A=
      DATE_CLASS =3D '[object Date]',=0A=
      NATIVE_JSON_STRINGIFY_SUPPORT =3D window.JSON &&=0A=
        typeof JSON.stringify =3D=3D=3D 'function' &&=0A=
        JSON.stringify(0) =3D=3D=3D '0' &&=0A=
        typeof JSON.stringify(Prototype.K) =3D=3D=3D 'undefined';=0A=
=0A=
  function Type(o) {=0A=
    switch(o) {=0A=
      case null: return NULL_TYPE;=0A=
      case (void 0): return UNDEFINED_TYPE;=0A=
    }=0A=
    var type =3D typeof o;=0A=
    switch(type) {=0A=
      case 'boolean': return BOOLEAN_TYPE;=0A=
      case 'number':  return NUMBER_TYPE;=0A=
      case 'string':  return STRING_TYPE;=0A=
    }=0A=
    return OBJECT_TYPE;=0A=
  }=0A=
=0A=
  function extend(destination, source) {=0A=
    for (var property in source)=0A=
      destination[property] =3D source[property];=0A=
    return destination;=0A=
  }=0A=
=0A=
  function inspect(object) {=0A=
    try {=0A=
      if (isUndefined(object)) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : String(object);=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  }=0A=
=0A=
  function toJSON(value) {=0A=
    return Str('', { '': value }, []);=0A=
  }=0A=
=0A=
  function Str(key, holder, stack) {=0A=
    var value =3D holder[key],=0A=
        type =3D typeof value;=0A=
=0A=
    if (Type(value) =3D=3D=3D OBJECT_TYPE && typeof value.toJSON =
=3D=3D=3D 'function') {=0A=
      value =3D value.toJSON(key);=0A=
    }=0A=
=0A=
    var _class =3D _toString.call(value);=0A=
=0A=
    switch (_class) {=0A=
      case NUMBER_CLASS:=0A=
      case BOOLEAN_CLASS:=0A=
      case STRING_CLASS:=0A=
        value =3D value.valueOf();=0A=
    }=0A=
=0A=
    switch (value) {=0A=
      case null: return 'null';=0A=
      case true: return 'true';=0A=
      case false: return 'false';=0A=
    }=0A=
=0A=
    type =3D typeof value;=0A=
    switch (type) {=0A=
      case 'string':=0A=
        return value.inspect(true);=0A=
      case 'number':=0A=
        return isFinite(value) ? String(value) : 'null';=0A=
      case 'object':=0A=
=0A=
        for (var i =3D 0, length =3D stack.length; i < length; i++) {=0A=
          if (stack[i] =3D=3D=3D value) { throw new TypeError(); }=0A=
        }=0A=
        stack.push(value);=0A=
=0A=
        var partial =3D [];=0A=
        if (_class =3D=3D=3D ARRAY_CLASS) {=0A=
          for (var i =3D 0, length =3D value.length; i < length; i++) {=0A=
            var str =3D Str(i, value, stack);=0A=
            partial.push(typeof str =3D=3D=3D 'undefined' ? 'null' : =
str);=0A=
          }=0A=
          partial =3D '[' + partial.join(',') + ']';=0A=
        } else {=0A=
          var keys =3D Object.keys(value);=0A=
          for (var i =3D 0, length =3D keys.length; i < length; i++) {=0A=
            var key =3D keys[i], str =3D Str(key, value, stack);=0A=
            if (typeof str !=3D=3D "undefined") {=0A=
               partial.push(key.inspect(true)+ ':' + str);=0A=
             }=0A=
          }=0A=
          partial =3D '{' + partial.join(',') + '}';=0A=
        }=0A=
        stack.pop();=0A=
        return partial;=0A=
    }=0A=
  }=0A=
=0A=
  function stringify(object) {=0A=
    return JSON.stringify(object);=0A=
  }=0A=
=0A=
  function toQueryString(object) {=0A=
    return $H(object).toQueryString();=0A=
  }=0A=
=0A=
  function toHTML(object) {=0A=
    return object && object.toHTML ? object.toHTML() : =
String.interpret(object);=0A=
  }=0A=
=0A=
  function keys(object) {=0A=
    if (Type(object) !=3D=3D OBJECT_TYPE) { throw new TypeError(); }=0A=
    var results =3D [];=0A=
    for (var property in object) {=0A=
      if (object.hasOwnProperty(property)) {=0A=
        results.push(property);=0A=
      }=0A=
    }=0A=
    return results;=0A=
  }=0A=
=0A=
  function values(object) {=0A=
    var results =3D [];=0A=
    for (var property in object)=0A=
      results.push(object[property]);=0A=
    return results;=0A=
  }=0A=
=0A=
  function clone(object) {=0A=
    return extend({ }, object);=0A=
  }=0A=
=0A=
  function isElement(object) {=0A=
    return !!(object && object.nodeType =3D=3D 1);=0A=
  }=0A=
=0A=
  function isArray(object) {=0A=
    return _toString.call(object) =3D=3D=3D ARRAY_CLASS;=0A=
  }=0A=
=0A=
  var hasNativeIsArray =3D (typeof Array.isArray =3D=3D 'function')=0A=
    && Array.isArray([]) && !Array.isArray({});=0A=
=0A=
  if (hasNativeIsArray) {=0A=
    isArray =3D Array.isArray;=0A=
  }=0A=
=0A=
  function isHash(object) {=0A=
    return object instanceof Hash;=0A=
  }=0A=
=0A=
  function isFunction(object) {=0A=
    return _toString.call(object) =3D=3D=3D FUNCTION_CLASS;=0A=
  }=0A=
=0A=
  function isString(object) {=0A=
    return _toString.call(object) =3D=3D=3D STRING_CLASS;=0A=
  }=0A=
=0A=
  function isNumber(object) {=0A=
    return _toString.call(object) =3D=3D=3D NUMBER_CLASS;=0A=
  }=0A=
=0A=
  function isDate(object) {=0A=
    return _toString.call(object) =3D=3D=3D DATE_CLASS;=0A=
  }=0A=
=0A=
  function isUndefined(object) {=0A=
    return typeof object =3D=3D=3D "undefined";=0A=
  }=0A=
=0A=
  extend(Object, {=0A=
    extend:        extend,=0A=
    inspect:       inspect,=0A=
    toJSON:        NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,=0A=
    toQueryString: toQueryString,=0A=
    toHTML:        toHTML,=0A=
    keys:          Object.keys || keys,=0A=
    values:        values,=0A=
    clone:         clone,=0A=
    isElement:     isElement,=0A=
    isArray:       isArray,=0A=
    isHash:        isHash,=0A=
    isFunction:    isFunction,=0A=
    isString:      isString,=0A=
    isNumber:      isNumber,=0A=
    isDate:        isDate,=0A=
    isUndefined:   isUndefined=0A=
  });=0A=
})();=0A=
Object.extend(Function.prototype, (function() {=0A=
  var slice =3D Array.prototype.slice;=0A=
=0A=
  function update(array, args) {=0A=
    var arrayLength =3D array.length, length =3D args.length;=0A=
    while (length--) array[arrayLength + length] =3D args[length];=0A=
    return array;=0A=
  }=0A=
=0A=
  function merge(array, args) {=0A=
    array =3D slice.call(array, 0);=0A=
    return update(array, args);=0A=
  }=0A=
=0A=
  function argumentNames() {=0A=
    var names =3D =
this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]=0A=
      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')=0A=
      .replace(/\s+/g, '').split(',');=0A=
    return names.length =3D=3D 1 && !names[0] ? [] : names;=0A=
  }=0A=
=0A=
  function bind(context) {=0A=
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return =
this;=0A=
    var __method =3D this, args =3D slice.call(arguments, 1);=0A=
    return function() {=0A=
      var a =3D merge(args, arguments);=0A=
      return __method.apply(context, a);=0A=
    }=0A=
  }=0A=
=0A=
  function bindAsEventListener(context) {=0A=
    var __method =3D this, args =3D slice.call(arguments, 1);=0A=
    return function(event) {=0A=
      var a =3D update([event || window.event], args);=0A=
      return __method.apply(context, a);=0A=
    }=0A=
  }=0A=
=0A=
  function curry() {=0A=
    if (!arguments.length) return this;=0A=
    var __method =3D this, args =3D slice.call(arguments, 0);=0A=
    return function() {=0A=
      var a =3D merge(args, arguments);=0A=
      return __method.apply(this, a);=0A=
    }=0A=
  }=0A=
=0A=
  function delay(timeout) {=0A=
    var __method =3D this, args =3D slice.call(arguments, 1);=0A=
    timeout =3D timeout * 1000;=0A=
    return window.setTimeout(function() {=0A=
      return __method.apply(__method, args);=0A=
    }, timeout);=0A=
  }=0A=
=0A=
  function defer() {=0A=
    var args =3D update([0.01], arguments);=0A=
    return this.delay.apply(this, args);=0A=
  }=0A=
=0A=
  function wrap(wrapper) {=0A=
    var __method =3D this;=0A=
    return function() {=0A=
      var a =3D update([__method.bind(this)], arguments);=0A=
      return wrapper.apply(this, a);=0A=
    }=0A=
  }=0A=
=0A=
  function methodize() {=0A=
    if (this._methodized) return this._methodized;=0A=
    var __method =3D this;=0A=
    return this._methodized =3D function() {=0A=
      var a =3D update([this], arguments);=0A=
      return __method.apply(null, a);=0A=
    };=0A=
  }=0A=
=0A=
  return {=0A=
    argumentNames:       argumentNames,=0A=
    bind:                bind,=0A=
    bindAsEventListener: bindAsEventListener,=0A=
    curry:               curry,=0A=
    delay:               delay,=0A=
    defer:               defer,=0A=
    wrap:                wrap,=0A=
    methodize:           methodize=0A=
  }=0A=
})());=0A=
=0A=
=0A=
=0A=
(function(proto) {=0A=
=0A=
=0A=
  function toISOString() {=0A=
    return this.getUTCFullYear() + '-' +=0A=
      (this.getUTCMonth() + 1).toPaddedString(2) + '-' +=0A=
      this.getUTCDate().toPaddedString(2) + 'T' +=0A=
      this.getUTCHours().toPaddedString(2) + ':' +=0A=
      this.getUTCMinutes().toPaddedString(2) + ':' +=0A=
      this.getUTCSeconds().toPaddedString(2) + 'Z';=0A=
  }=0A=
=0A=
=0A=
  function toJSON() {=0A=
    return this.toISOString();=0A=
  }=0A=
=0A=
  if (!proto.toISOString) proto.toISOString =3D toISOString;=0A=
  if (!proto.toJSON) proto.toJSON =3D toJSON;=0A=
=0A=
})(Date.prototype);=0A=
=0A=
=0A=
RegExp.prototype.match =3D RegExp.prototype.test;=0A=
=0A=
RegExp.escape =3D function(str) {=0A=
  return String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g, '\\$1');=0A=
};=0A=
var PeriodicalExecuter =3D Class.create({=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    this.callback(this);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.execute();=0A=
        this.currentlyExecuting =3D false;=0A=
      } catch(e) {=0A=
        this.currentlyExecuting =3D false;=0A=
        throw e;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
Object.extend(String, {=0A=
  interpret: function(value) {=0A=
    return value =3D=3D null ? '' : String(value);=0A=
  },=0A=
  specialChar: {=0A=
    '\b': '\\b',=0A=
    '\t': '\\t',=0A=
    '\n': '\\n',=0A=
    '\f': '\\f',=0A=
    '\r': '\\r',=0A=
    '\\': '\\\\'=0A=
  }=0A=
});=0A=
=0A=
Object.extend(String.prototype, (function() {=0A=
  var NATIVE_JSON_PARSE_SUPPORT =3D window.JSON &&=0A=
    typeof JSON.parse =3D=3D=3D 'function' &&=0A=
    JSON.parse('{"test": true}').test;=0A=
=0A=
  function prepareReplacement(replacement) {=0A=
    if (Object.isFunction(replacement)) return replacement;=0A=
    var template =3D new Template(replacement);=0A=
    return function(match) { return template.evaluate(match) };=0A=
  }=0A=
=0A=
  function gsub(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D prepareReplacement(replacement);=0A=
=0A=
    if (Object.isString(pattern))=0A=
      pattern =3D RegExp.escape(pattern);=0A=
=0A=
    if (!(pattern.length || pattern.source)) {=0A=
      replacement =3D replacement('');=0A=
      return replacement + source.split('').join(replacement) + =
replacement;=0A=
    }=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  }=0A=
=0A=
  function sub(pattern, replacement, count) {=0A=
    replacement =3D prepareReplacement(replacement);=0A=
    count =3D Object.isUndefined(count) ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  }=0A=
=0A=
  function scan(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return String(this);=0A=
  }=0A=
=0A=
  function truncate(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D Object.isUndefined(truncation) ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : =
String(this);=0A=
  }=0A=
=0A=
  function strip() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  }=0A=
=0A=
  function stripTags() {=0A=
    return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, =
'');=0A=
  }=0A=
=0A=
  function stripScripts() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  }=0A=
=0A=
  function extractScripts() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img'),=0A=
        matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  }=0A=
=0A=
  function evalScripts() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  }=0A=
=0A=
  function escapeHTML() {=0A=
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');=0A=
  }=0A=
=0A=
  function unescapeHTML() {=0A=
    return =
this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;=
/g,'&');=0A=
  }=0A=
=0A=
=0A=
  function toQueryParams(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return { };=0A=
=0A=
    return match[1].split(separator || '&').inject({ }, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var key =3D decodeURIComponent(pair.shift()),=0A=
            value =3D pair.length > 1 ? pair.join('=3D') : pair[0];=0A=
=0A=
        if (value !=3D undefined) value =3D decodeURIComponent(value);=0A=
=0A=
        if (key in hash) {=0A=
          if (!Object.isArray(hash[key])) hash[key] =3D [hash[key]];=0A=
          hash[key].push(value);=0A=
        }=0A=
        else hash[key] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  }=0A=
=0A=
  function toArray() {=0A=
    return this.split('');=0A=
  }=0A=
=0A=
  function succ() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  }=0A=
=0A=
  function times(count) {=0A=
    return count < 1 ? '' : new Array(count + 1).join(this);=0A=
  }=0A=
=0A=
  function camelize() {=0A=
    return this.replace(/-+(.)?/g, function(match, chr) {=0A=
      return chr ? chr.toUpperCase() : '';=0A=
    });=0A=
  }=0A=
=0A=
  function capitalize() {=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  }=0A=
=0A=
  function underscore() {=0A=
    return this.replace(/::/g, '/')=0A=
               .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')=0A=
               .replace(/([a-z\d])([A-Z])/g, '$1_$2')=0A=
               .replace(/-/g, '_')=0A=
               .toLowerCase();=0A=
  }=0A=
=0A=
  function dasherize() {=0A=
    return this.replace(/_/g, '-');=0A=
  }=0A=
=0A=
  function inspect(useDoubleQuotes) {=0A=
    var escapedString =3D this.replace(/[\x00-\x1f\\]/g, =
function(character) {=0A=
      if (character in String.specialChar) {=0A=
        return String.specialChar[character];=0A=
      }=0A=
      return '\\u00' + character.charCodeAt().toPaddedString(2, 16);=0A=
    });=0A=
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';=0A=
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  }=0A=
=0A=
  function unfilterJSON(filter) {=0A=
    return this.replace(filter || Prototype.JSONFilter, '$1');=0A=
  }=0A=
=0A=
  function isJSON() {=0A=
    var str =3D this;=0A=
    if (str.blank()) return false;=0A=
    str =3D str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');=0A=
    str =3D =
str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d=
+)?/g, ']');=0A=
    str =3D str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');=0A=
    return (/^[\],:{}\s]*$/).test(str);=0A=
  }=0A=
=0A=
  function evalJSON(sanitize) {=0A=
    var json =3D this.unfilterJSON(),=0A=
        cx =3D =
/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u=
2060-\u206f\ufeff\ufff0-\uffff]/g;=0A=
    if (cx.test(json)) {=0A=
      json =3D json.replace(cx, function (a) {=0A=
        return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);=0A=
      });=0A=
    }=0A=
    try {=0A=
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');=0A=
    } catch (e) { }=0A=
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A=
  }=0A=
=0A=
  function parseJSON() {=0A=
    var json =3D this.unfilterJSON();=0A=
    return JSON.parse(json);=0A=
  }=0A=
=0A=
  function include(pattern) {=0A=
    return this.indexOf(pattern) > -1;=0A=
  }=0A=
=0A=
  function startsWith(pattern) {=0A=
    return this.lastIndexOf(pattern, 0) =3D=3D=3D 0;=0A=
  }=0A=
=0A=
  function endsWith(pattern) {=0A=
    var d =3D this.length - pattern.length;=0A=
    return d >=3D 0 && this.indexOf(pattern, d) =3D=3D=3D d;=0A=
  }=0A=
=0A=
  function empty() {=0A=
    return this =3D=3D '';=0A=
  }=0A=
=0A=
  function blank() {=0A=
    return /^\s*$/.test(this);=0A=
  }=0A=
=0A=
  function interpolate(object, pattern) {=0A=
    return new Template(this, pattern).evaluate(object);=0A=
  }=0A=
=0A=
  return {=0A=
    gsub:           gsub,=0A=
    sub:            sub,=0A=
    scan:           scan,=0A=
    truncate:       truncate,=0A=
    strip:          String.prototype.trim || strip,=0A=
    stripTags:      stripTags,=0A=
    stripScripts:   stripScripts,=0A=
    extractScripts: extractScripts,=0A=
    evalScripts:    evalScripts,=0A=
    escapeHTML:     escapeHTML,=0A=
    unescapeHTML:   unescapeHTML,=0A=
    toQueryParams:  toQueryParams,=0A=
    parseQuery:     toQueryParams,=0A=
    toArray:        toArray,=0A=
    succ:           succ,=0A=
    times:          times,=0A=
    camelize:       camelize,=0A=
    capitalize:     capitalize,=0A=
    underscore:     underscore,=0A=
    dasherize:      dasherize,=0A=
    inspect:        inspect,=0A=
    unfilterJSON:   unfilterJSON,=0A=
    isJSON:         isJSON,=0A=
    evalJSON:       NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,=0A=
    include:        include,=0A=
    startsWith:     startsWith,=0A=
    endsWith:       endsWith,=0A=
    empty:          empty,=0A=
    blank:          blank,=0A=
    interpolate:    interpolate=0A=
  };=0A=
})());=0A=
=0A=
var Template =3D Class.create({=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    if (object && Object.isFunction(object.toTemplateReplacements))=0A=
      object =3D object.toTemplateReplacements();=0A=
=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      if (object =3D=3D null) return (match[1] + '');=0A=
=0A=
      var before =3D match[1] || '';=0A=
      if (before =3D=3D '\\') return match[2];=0A=
=0A=
      var ctx =3D object, expr =3D match[3],=0A=
          pattern =3D /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;=0A=
=0A=
      match =3D pattern.exec(expr);=0A=
      if (match =3D=3D null) return before;=0A=
=0A=
      while (match !=3D null) {=0A=
        var comp =3D match[1].startsWith('[') ? =
match[2].replace(/\\\\]/g, ']') : match[1];=0A=
        ctx =3D ctx[comp];=0A=
        if (null =3D=3D ctx || '' =3D=3D match[3]) break;=0A=
        expr =3D expr.substring('[' =3D=3D match[3] ? match[1].length : =
match[0].length);=0A=
        match =3D pattern.exec(expr);=0A=
      }=0A=
=0A=
      return before + String.interpret(ctx);=0A=
    });=0A=
  }=0A=
});=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
=0A=
var $break =3D { };=0A=
=0A=
var Enumerable =3D (function() {=0A=
  function each(iterator, context) {=0A=
    var index =3D 0;=0A=
    try {=0A=
      this._each(function(value) {=0A=
        iterator.call(context, value, index++);=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  }=0A=
=0A=
  function eachSlice(number, iterator, context) {=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    if (number < 1) return array;=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.collect(iterator, context);=0A=
  }=0A=
=0A=
  function all(iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!iterator.call(context, value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  }=0A=
=0A=
  function any(iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!iterator.call(context, value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  }=0A=
=0A=
  function collect(iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(iterator.call(context, value, index));=0A=
    });=0A=
    return results;=0A=
  }=0A=
=0A=
  function detect(iterator, context) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator.call(context, value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  }=0A=
=0A=
  function findAll(iterator, context) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator.call(context, value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  }=0A=
=0A=
  function grep(filter, iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var results =3D [];=0A=
=0A=
    if (Object.isString(filter))=0A=
      filter =3D new RegExp(RegExp.escape(filter));=0A=
=0A=
    this.each(function(value, index) {=0A=
      if (filter.match(value))=0A=
        results.push(iterator.call(context, value, index));=0A=
    });=0A=
    return results;=0A=
  }=0A=
=0A=
  function include(object) {=0A=
    if (Object.isFunction(this.indexOf))=0A=
      if (this.indexOf(object) !=3D -1) return true;=0A=
=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  }=0A=
=0A=
  function inGroupsOf(number, fillWith) {=0A=
    fillWith =3D Object.isUndefined(fillWith) ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  }=0A=
=0A=
  function inject(memo, iterator, context) {=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator.call(context, memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  }=0A=
=0A=
  function invoke(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  }=0A=
=0A=
  function max(iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator.call(context, value, index);=0A=
      if (result =3D=3D null || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  }=0A=
=0A=
  function min(iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator.call(context, value, index);=0A=
      if (result =3D=3D null || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  }=0A=
=0A=
  function partition(iterator, context) {=0A=
    iterator =3D iterator || Prototype.K;=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      (iterator.call(context, value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  }=0A=
=0A=
  function pluck(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  }=0A=
=0A=
  function reject(iterator, context) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator.call(context, value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  }=0A=
=0A=
  function sortBy(iterator, context) {=0A=
    return this.map(function(value, index) {=0A=
      return {=0A=
        value: value,=0A=
        criteria: iterator.call(context, value, index)=0A=
      };=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  }=0A=
=0A=
  function toArray() {=0A=
    return this.map();=0A=
  }=0A=
=0A=
  function zip() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (Object.isFunction(args.last()))=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  }=0A=
=0A=
  function size() {=0A=
    return this.toArray().length;=0A=
  }=0A=
=0A=
  function inspect() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
  return {=0A=
    each:       each,=0A=
    eachSlice:  eachSlice,=0A=
    all:        all,=0A=
    every:      all,=0A=
    any:        any,=0A=
    some:       any,=0A=
    collect:    collect,=0A=
    map:        collect,=0A=
    detect:     detect,=0A=
    findAll:    findAll,=0A=
    select:     findAll,=0A=
    filter:     findAll,=0A=
    grep:       grep,=0A=
    include:    include,=0A=
    member:     include,=0A=
    inGroupsOf: inGroupsOf,=0A=
    inject:     inject,=0A=
    invoke:     invoke,=0A=
    max:        max,=0A=
    min:        min,=0A=
    partition:  partition,=0A=
    pluck:      pluck,=0A=
    reject:     reject,=0A=
    sortBy:     sortBy,=0A=
    toArray:    toArray,=0A=
    entries:    toArray,=0A=
    zip:        zip,=0A=
    size:       size,=0A=
    inspect:    inspect,=0A=
    find:       detect=0A=
  };=0A=
})();=0A=
=0A=
function $A(iterable) {=0A=
  if (!iterable) return [];=0A=
  if ('toArray' in Object(iterable)) return iterable.toArray();=0A=
  var length =3D iterable.length || 0, results =3D new Array(length);=0A=
  while (length--) results[length] =3D iterable[length];=0A=
  return results;=0A=
}=0A=
=0A=
=0A=
function $w(string) {=0A=
  if (!Object.isString(string)) return [];=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
Array.from =3D $A;=0A=
=0A=
=0A=
(function() {=0A=
  var arrayProto =3D Array.prototype,=0A=
      slice =3D arrayProto.slice,=0A=
      _each =3D arrayProto.forEach; // use native browser JS 1.6 =
implementation if available=0A=
=0A=
  function each(iterator, context) {=0A=
    for (var i =3D 0, length =3D this.length >>> 0; i < length; i++) {=0A=
      if (i in this) iterator.call(context, this[i], i, this);=0A=
    }=0A=
  }=0A=
  if (!_each) _each =3D each;=0A=
=0A=
  function clear() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  }=0A=
=0A=
  function first() {=0A=
    return this[0];=0A=
  }=0A=
=0A=
  function last() {=0A=
    return this[this.length - 1];=0A=
  }=0A=
=0A=
  function compact() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  }=0A=
=0A=
  function flatten() {=0A=
    return this.inject([], function(array, value) {=0A=
      if (Object.isArray(value))=0A=
        return array.concat(value.flatten());=0A=
      array.push(value);=0A=
      return array;=0A=
    });=0A=
  }=0A=
=0A=
  function without() {=0A=
    var values =3D slice.call(arguments, 0);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  }=0A=
=0A=
  function reverse(inline) {=0A=
    return (inline =3D=3D=3D false ? this.toArray() : this)._reverse();=0A=
  }=0A=
=0A=
  function uniq(sorted) {=0A=
    return this.inject([], function(array, value, index) {=0A=
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))=0A=
        array.push(value);=0A=
      return array;=0A=
    });=0A=
  }=0A=
=0A=
  function intersect(array) {=0A=
    return this.uniq().findAll(function(item) {=0A=
      return array.detect(function(value) { return item =3D=3D=3D value =
});=0A=
    });=0A=
  }=0A=
=0A=
=0A=
  function clone() {=0A=
    return slice.call(this, 0);=0A=
  }=0A=
=0A=
  function size() {=0A=
    return this.length;=0A=
  }=0A=
=0A=
  function inspect() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  }=0A=
=0A=
  function indexOf(item, i) {=0A=
    i || (i =3D 0);=0A=
    var length =3D this.length;=0A=
    if (i < 0) i =3D length + i;=0A=
    for (; i < length; i++)=0A=
      if (this[i] =3D=3D=3D item) return i;=0A=
    return -1;=0A=
  }=0A=
=0A=
  function lastIndexOf(item, i) {=0A=
    i =3D isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;=0A=
    var n =3D this.slice(0, i).reverse().indexOf(item);=0A=
    return (n < 0) ? n : i - n - 1;=0A=
  }=0A=
=0A=
  function concat() {=0A=
    var array =3D slice.call(this, 0), item;=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      item =3D arguments[i];=0A=
      if (Object.isArray(item) && !('callee' in item)) {=0A=
        for (var j =3D 0, arrayLength =3D item.length; j < arrayLength; =
j++)=0A=
          array.push(item[j]);=0A=
      } else {=0A=
        array.push(item);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  }=0A=
=0A=
  Object.extend(arrayProto, Enumerable);=0A=
=0A=
  if (!arrayProto._reverse)=0A=
    arrayProto._reverse =3D arrayProto.reverse;=0A=
=0A=
  Object.extend(arrayProto, {=0A=
    _each:     _each,=0A=
    clear:     clear,=0A=
    first:     first,=0A=
    last:      last,=0A=
    compact:   compact,=0A=
    flatten:   flatten,=0A=
    without:   without,=0A=
    reverse:   reverse,=0A=
    uniq:      uniq,=0A=
    intersect: intersect,=0A=
    clone:     clone,=0A=
    toArray:   clone,=0A=
    size:      size,=0A=
    inspect:   inspect=0A=
  });=0A=
=0A=
  var CONCAT_ARGUMENTS_BUGGY =3D (function() {=0A=
    return [].concat(arguments)[0][0] !=3D=3D 1;=0A=
  })(1,2)=0A=
=0A=
  if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat =3D concat;=0A=
=0A=
  if (!arrayProto.indexOf) arrayProto.indexOf =3D indexOf;=0A=
  if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf =3D lastIndexOf;=0A=
})();=0A=
function $H(object) {=0A=
  return new Hash(object);=0A=
};=0A=
=0A=
var Hash =3D Class.create(Enumerable, (function() {=0A=
  function initialize(object) {=0A=
    this._object =3D Object.isHash(object) ? object.toObject() : =
Object.clone(object);=0A=
  }=0A=
=0A=
=0A=
  function _each(iterator) {=0A=
    for (var key in this._object) {=0A=
      var value =3D this._object[key], pair =3D [key, value];=0A=
      pair.key =3D key;=0A=
      pair.value =3D value;=0A=
      iterator(pair);=0A=
    }=0A=
  }=0A=
=0A=
  function set(key, value) {=0A=
    return this._object[key] =3D value;=0A=
  }=0A=
=0A=
  function get(key) {=0A=
    if (this._object[key] !=3D=3D Object.prototype[key])=0A=
      return this._object[key];=0A=
  }=0A=
=0A=
  function unset(key) {=0A=
    var value =3D this._object[key];=0A=
    delete this._object[key];=0A=
    return value;=0A=
  }=0A=
=0A=
  function toObject() {=0A=
    return Object.clone(this._object);=0A=
  }=0A=
=0A=
=0A=
=0A=
  function keys() {=0A=
    return this.pluck('key');=0A=
  }=0A=
=0A=
  function values() {=0A=
    return this.pluck('value');=0A=
  }=0A=
=0A=
  function index(value) {=0A=
    var match =3D this.detect(function(pair) {=0A=
      return pair.value =3D=3D=3D value;=0A=
    });=0A=
    return match && match.key;=0A=
  }=0A=
=0A=
  function merge(object) {=0A=
    return this.clone().update(object);=0A=
  }=0A=
=0A=
  function update(object) {=0A=
    return new Hash(object).inject(this, function(result, pair) {=0A=
      result.set(pair.key, pair.value);=0A=
      return result;=0A=
    });=0A=
  }=0A=
=0A=
  function toQueryPair(key, value) {=0A=
    if (Object.isUndefined(value)) return key;=0A=
    return key + '=3D' + encodeURIComponent(String.interpret(value));=0A=
  }=0A=
=0A=
  function toQueryString() {=0A=
    return this.inject([], function(results, pair) {=0A=
      var key =3D encodeURIComponent(pair.key), values =3D pair.value;=0A=
=0A=
      if (values && typeof values =3D=3D 'object') {=0A=
        if (Object.isArray(values)) {=0A=
          var queryValues =3D [];=0A=
          for (var i =3D 0, len =3D values.length, value; i < len; i++) {=0A=
            value =3D values[i];=0A=
            queryValues.push(toQueryPair(key, value));=0A=
          }=0A=
          return results.concat(queryValues);=0A=
        }=0A=
      } else results.push(toQueryPair(key, values));=0A=
      return results;=0A=
    }).join('&');=0A=
  }=0A=
=0A=
  function inspect() {=0A=
    return '#<Hash:{' + this.map(function(pair) {=0A=
      return pair.map(Object.inspect).join(': ');=0A=
    }).join(', ') + '}>';=0A=
  }=0A=
=0A=
  function clone() {=0A=
    return new Hash(this);=0A=
  }=0A=
=0A=
  return {=0A=
    initialize:             initialize,=0A=
    _each:                  _each,=0A=
    set:                    set,=0A=
    get:                    get,=0A=
    unset:                  unset,=0A=
    toObject:               toObject,=0A=
    toTemplateReplacements: toObject,=0A=
    keys:                   keys,=0A=
    values:                 values,=0A=
    index:                  index,=0A=
    merge:                  merge,=0A=
    update:                 update,=0A=
    toQueryString:          toQueryString,=0A=
    inspect:                inspect,=0A=
    toJSON:                 toObject,=0A=
    clone:                  clone=0A=
  };=0A=
})());=0A=
=0A=
Hash.from =3D $H;=0A=
Object.extend(Number.prototype, (function() {=0A=
  function toColorPart() {=0A=
    return this.toPaddedString(2, 16);=0A=
  }=0A=
=0A=
  function succ() {=0A=
    return this + 1;=0A=
  }=0A=
=0A=
  function times(iterator, context) {=0A=
    $R(0, this, true).each(iterator, context);=0A=
    return this;=0A=
  }=0A=
=0A=
  function toPaddedString(length, radix) {=0A=
    var string =3D this.toString(radix || 10);=0A=
    return '0'.times(length - string.length) + string;=0A=
  }=0A=
=0A=
  function abs() {=0A=
    return Math.abs(this);=0A=
  }=0A=
=0A=
  function round() {=0A=
    return Math.round(this);=0A=
  }=0A=
=0A=
  function ceil() {=0A=
    return Math.ceil(this);=0A=
  }=0A=
=0A=
  function floor() {=0A=
    return Math.floor(this);=0A=
  }=0A=
=0A=
  return {=0A=
    toColorPart:    toColorPart,=0A=
    succ:           succ,=0A=
    times:          times,=0A=
    toPaddedString: toPaddedString,=0A=
    abs:            abs,=0A=
    round:          round,=0A=
    ceil:           ceil,=0A=
    floor:          floor=0A=
  };=0A=
})());=0A=
=0A=
function $R(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
}=0A=
=0A=
var ObjectRange =3D Class.create(Enumerable, (function() {=0A=
  function initialize(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  }=0A=
=0A=
  function _each(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  }=0A=
=0A=
  function include(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
=0A=
  return {=0A=
    initialize: initialize,=0A=
    _each:      _each,=0A=
    include:    include=0A=
  };=0A=
})());=0A=
=0A=
=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
};=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (Object.isFunction(responder[callback])) {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) { }=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate:   function() { Ajax.activeRequestCount++ },=0A=
  onComplete: function() { Ajax.activeRequestCount-- }=0A=
});=0A=
Ajax.Base =3D Class.create({=0A=
  initialize: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   '',=0A=
      evalJSON:     true,=0A=
      evalJS:       true=0A=
    };=0A=
    Object.extend(this.options, options || { });=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
=0A=
    if (Object.isHash(this.options.parameters))=0A=
      this.options.parameters =3D this.options.parameters.toObject();=0A=
  }=0A=
});=0A=
Ajax.Request =3D Class.create(Ajax.Base, {=0A=
  _complete: false,=0A=
=0A=
  initialize: function($super, url, options) {=0A=
    $super(options);=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D Object.isString(this.options.parameters) ?=0A=
          this.options.parameters :=0A=
          Object.toQueryString(this.options.parameters);=0A=
=0A=
    if (!['get', 'post'].include(this.method)) {=0A=
      params +=3D (params ? '&' : '') + "_method=3D" + this.method;=0A=
      this.method =3D 'post';=0A=
    }=0A=
=0A=
    if (params && this.method =3D=3D=3D 'get') {=0A=
      this.url +=3D (this.url.include('?') ? '&' : '?') + params;=0A=
    }=0A=
=0A=
    this.parameters =3D params.toQueryParams();=0A=
=0A=
    try {=0A=
      var response =3D new Ajax.Response(this);=0A=
      if (this.options.onCreate) this.options.onCreate(response);=0A=
      Ajax.Responders.dispatch('onCreate', this, response);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous) =
this.respondToReadyState.bind(this).defer(1);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;=0A=
      this.transport.send(this.body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (Object.isFunction(extras.push))=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    var status =3D this.getStatus();=0A=
    return !status || (status >=3D 200 && status < 300) || status =3D=3D =
304;=0A=
  },=0A=
=0A=
  getStatus: function() {=0A=
    try {=0A=
      if (this.transport.status =3D=3D=3D 1223) return 204;=0A=
      return this.transport.status || 0;=0A=
    } catch (e) { return 0 }=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState], response =3D new =
Ajax.Response(this);=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + response.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(response, response.headerJSON);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      var contentType =3D response.getHeader('Content-type');=0A=
      if (this.options.evalJS =3D=3D 'force'=0A=
          || (this.options.evalJS && this.isSameOrigin() && contentType=0A=
          && =
contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s=
*$/i)))=0A=
        this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(response, =
response.headerJSON);=0A=
      Ajax.Responders.dispatch('on' + state, this, response, =
response.headerJSON);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  isSameOrigin: function() {=0A=
    var m =3D this.url.match(/^\s*https?:\/\/[^\/]*/);=0A=
    return !m || (m[0] =3D=3D =
'#{protocol}//#{domain}#{port}'.interpolate({=0A=
      protocol: location.protocol,=0A=
      domain: document.domain,=0A=
      port: location.port ? ':' + location.port : ''=0A=
    }));=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name) || null;=0A=
    } catch (e) { return null; }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval((this.transport.responseText || '').unfilterJSON());=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
Ajax.Response =3D Class.create({=0A=
  initialize: function(request){=0A=
    this.request =3D request;=0A=
    var transport  =3D this.transport  =3D request.transport,=0A=
        readyState =3D this.readyState =3D transport.readyState;=0A=
=0A=
    if ((readyState > 2 && !Prototype.Browser.IE) || readyState =3D=3D =
4) {=0A=
      this.status       =3D this.getStatus();=0A=
      this.statusText   =3D this.getStatusText();=0A=
      this.responseText =3D String.interpret(transport.responseText);=0A=
      this.headerJSON   =3D this._getHeaderJSON();=0A=
    }=0A=
=0A=
    if (readyState =3D=3D 4) {=0A=
      var xml =3D transport.responseXML;=0A=
      this.responseXML  =3D Object.isUndefined(xml) ? null : xml;=0A=
      this.responseJSON =3D this._getResponseJSON();=0A=
    }=0A=
  },=0A=
=0A=
  status:      0,=0A=
=0A=
  statusText: '',=0A=
=0A=
  getStatus: Ajax.Request.prototype.getStatus,=0A=
=0A=
  getStatusText: function() {=0A=
    try {=0A=
      return this.transport.statusText || '';=0A=
    } catch (e) { return '' }=0A=
  },=0A=
=0A=
  getHeader: Ajax.Request.prototype.getHeader,=0A=
=0A=
  getAllHeaders: function() {=0A=
    try {=0A=
      return this.getAllResponseHeaders();=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  getResponseHeader: function(name) {=0A=
    return this.transport.getResponseHeader(name);=0A=
  },=0A=
=0A=
  getAllResponseHeaders: function() {=0A=
    return this.transport.getAllResponseHeaders();=0A=
  },=0A=
=0A=
  _getHeaderJSON: function() {=0A=
    var json =3D this.getHeader('X-JSON');=0A=
    if (!json) return null;=0A=
    json =3D decodeURIComponent(escape(json));=0A=
    try {=0A=
      return json.evalJSON(this.request.options.sanitizeJSON ||=0A=
        !this.request.isSameOrigin());=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  _getResponseJSON: function() {=0A=
    var options =3D this.request.options;=0A=
    if (!options.evalJSON || (options.evalJSON !=3D 'force' &&=0A=
      !(this.getHeader('Content-type') || =
'').include('application/json')) ||=0A=
        this.responseText.blank())=0A=
          return null;=0A=
    try {=0A=
      return this.responseText.evalJSON(options.sanitizeJSON ||=0A=
        !this.request.isSameOrigin());=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create(Ajax.Request, {=0A=
  initialize: function($super, container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    };=0A=
=0A=
    options =3D Object.clone(options);=0A=
    var onComplete =3D options.onComplete;=0A=
    options.onComplete =3D (function(response, json) {=0A=
      this.updateContent(response.responseText);=0A=
      if (Object.isFunction(onComplete)) onComplete(response, json);=0A=
    }).bind(this);=0A=
=0A=
    $super(url, options);=0A=
  },=0A=
=0A=
  updateContent: function(responseText) {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'],=0A=
        options =3D this.options;=0A=
=0A=
    if (!options.evalScripts) responseText =3D =
responseText.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (options.insertion) {=0A=
        if (Object.isString(options.insertion)) {=0A=
          var insertion =3D { }; insertion[options.insertion] =3D =
responseText;=0A=
          receiver.insert(insertion);=0A=
        }=0A=
        else options.insertion(receiver, responseText);=0A=
      }=0A=
      else receiver.update(responseText);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create(Ajax.Base, {=0A=
  initialize: function($super, container, url, options) {=0A=
    $super(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D { };=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(response) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (response.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D response.responseText;=0A=
    }=0A=
    this.timer =3D this.onTimerEvent.bind(this).delay(this.decay * =
this.frequency);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
=0A=
=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (Object.isString(element))=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(Element.extend(query.snapshotItem(i)));=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!Node) var Node =3D { };=0A=
=0A=
if (!Node.ELEMENT_NODE) {=0A=
  Object.extend(Node, {=0A=
    ELEMENT_NODE: 1,=0A=
    ATTRIBUTE_NODE: 2,=0A=
    TEXT_NODE: 3,=0A=
    CDATA_SECTION_NODE: 4,=0A=
    ENTITY_REFERENCE_NODE: 5,=0A=
    ENTITY_NODE: 6,=0A=
    PROCESSING_INSTRUCTION_NODE: 7,=0A=
    COMMENT_NODE: 8,=0A=
    DOCUMENT_NODE: 9,=0A=
    DOCUMENT_TYPE_NODE: 10,=0A=
    DOCUMENT_FRAGMENT_NODE: 11,=0A=
    NOTATION_NODE: 12=0A=
  });=0A=
}=0A=
=0A=
=0A=
=0A=
(function(global) {=0A=
  function shouldUseCache(tagName, attributes) {=0A=
    if (tagName =3D=3D=3D 'select') return false;=0A=
    if ('type' in attributes) return false;=0A=
    return true;=0A=
  }=0A=
=0A=
  var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX =3D (function(){=0A=
    try {=0A=
      var el =3D document.createElement('<input name=3D"x">');=0A=
      return el.tagName.toLowerCase() =3D=3D=3D 'input' && el.name =
=3D=3D=3D 'x';=0A=
    }=0A=
    catch(err) {=0A=
      return false;=0A=
    }=0A=
  })();=0A=
=0A=
  var element =3D global.Element;=0A=
=0A=
  global.Element =3D function(tagName, attributes) {=0A=
    attributes =3D attributes || { };=0A=
    tagName =3D tagName.toLowerCase();=0A=
    var cache =3D Element.cache;=0A=
=0A=
    if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {=0A=
      tagName =3D '<' + tagName + ' name=3D"' + attributes.name + '">';=0A=
      delete attributes.name;=0A=
      return Element.writeAttribute(document.createElement(tagName), =
attributes);=0A=
    }=0A=
=0A=
    if (!cache[tagName]) cache[tagName] =3D =
Element.extend(document.createElement(tagName));=0A=
=0A=
    var node =3D shouldUseCache(tagName, attributes) ?=0A=
     cache[tagName].cloneNode(false) : document.createElement(tagName);=0A=
=0A=
    return Element.writeAttribute(node, attributes);=0A=
  };=0A=
=0A=
  Object.extend(global.Element, element || { });=0A=
  if (element) global.Element.prototype =3D element.prototype;=0A=
=0A=
})(this);=0A=
=0A=
Element.idCounter =3D 1;=0A=
Element.cache =3D { };=0A=
=0A=
Element._purgeElement =3D function(element) {=0A=
  var uid =3D element._prototypeUID;=0A=
  if (uid) {=0A=
    Element.stopObserving(element);=0A=
    element._prototypeUID =3D void 0;=0A=
    delete Element.Storage[uid];=0A=
  }=0A=
}=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    element =3D $(element);=0A=
    element.style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    element =3D $(element);=0A=
    element.style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: (function(){=0A=
=0A=
    var SELECT_ELEMENT_INNERHTML_BUGGY =3D (function(){=0A=
      var el =3D document.createElement("select"),=0A=
          isBuggy =3D true;=0A=
      el.innerHTML =3D "<option value=3D\"test\">test</option>";=0A=
      if (el.options && el.options[0]) {=0A=
        isBuggy =3D el.options[0].nodeName.toUpperCase() !=3D=3D =
"OPTION";=0A=
      }=0A=
      el =3D null;=0A=
      return isBuggy;=0A=
    })();=0A=
=0A=
    var TABLE_ELEMENT_INNERHTML_BUGGY =3D (function(){=0A=
      try {=0A=
        var el =3D document.createElement("table");=0A=
        if (el && el.tBodies) {=0A=
          el.innerHTML =3D "<tbody><tr><td>test</td></tr></tbody>";=0A=
          var isBuggy =3D typeof el.tBodies[0] =3D=3D "undefined";=0A=
          el =3D null;=0A=
          return isBuggy;=0A=
        }=0A=
      } catch (e) {=0A=
        return true;=0A=
      }=0A=
    })();=0A=
=0A=
    var LINK_ELEMENT_INNERHTML_BUGGY =3D (function() {=0A=
      try {=0A=
        var el =3D document.createElement('div');=0A=
        el.innerHTML =3D "<link>";=0A=
        var isBuggy =3D (el.childNodes.length =3D=3D=3D 0);=0A=
        el =3D null;=0A=
        return isBuggy;=0A=
      } catch(e) {=0A=
        return true;=0A=
      }=0A=
    })();=0A=
=0A=
    var ANY_INNERHTML_BUGGY =3D SELECT_ELEMENT_INNERHTML_BUGGY ||=0A=
     TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;=0A=
=0A=
    var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING =3D (function () {=0A=
      var s =3D document.createElement("script"),=0A=
          isBuggy =3D false;=0A=
      try {=0A=
        s.appendChild(document.createTextNode(""));=0A=
        isBuggy =3D !s.firstChild ||=0A=
          s.firstChild && s.firstChild.nodeType !=3D=3D 3;=0A=
      } catch (e) {=0A=
        isBuggy =3D true;=0A=
      }=0A=
      s =3D null;=0A=
      return isBuggy;=0A=
    })();=0A=
=0A=
=0A=
    function update(element, content) {=0A=
      element =3D $(element);=0A=
      var purgeElement =3D Element._purgeElement;=0A=
=0A=
      var descendants =3D element.getElementsByTagName('*'),=0A=
       i =3D descendants.length;=0A=
      while (i--) purgeElement(descendants[i]);=0A=
=0A=
      if (content && content.toElement)=0A=
        content =3D content.toElement();=0A=
=0A=
      if (Object.isElement(content))=0A=
        return element.update().insert(content);=0A=
=0A=
      content =3D Object.toHTML(content);=0A=
=0A=
      var tagName =3D element.tagName.toUpperCase();=0A=
=0A=
      if (tagName =3D=3D=3D 'SCRIPT' && =
SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {=0A=
        element.text =3D content;=0A=
        return element;=0A=
      }=0A=
=0A=
      if (ANY_INNERHTML_BUGGY) {=0A=
        if (tagName in Element._insertionTranslations.tags) {=0A=
          while (element.firstChild) {=0A=
            element.removeChild(element.firstChild);=0A=
          }=0A=
          Element._getContentFromAnonymousElement(tagName, =
content.stripScripts())=0A=
            .each(function(node) {=0A=
              element.appendChild(node)=0A=
            });=0A=
        } else if (LINK_ELEMENT_INNERHTML_BUGGY && =
Object.isString(content) && content.indexOf('<link') > -1) {=0A=
          while (element.firstChild) {=0A=
            element.removeChild(element.firstChild);=0A=
          }=0A=
          var nodes =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts(), true);=0A=
          nodes.each(function(node) { element.appendChild(node) });=0A=
        }=0A=
        else {=0A=
          element.innerHTML =3D content.stripScripts();=0A=
        }=0A=
      }=0A=
      else {=0A=
        element.innerHTML =3D content.stripScripts();=0A=
      }=0A=
=0A=
      content.evalScripts.bind(content).defer();=0A=
      return element;=0A=
    }=0A=
=0A=
    return update;=0A=
  })(),=0A=
=0A=
  replace: function(element, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    else if (!Object.isElement(content)) {=0A=
      content =3D Object.toHTML(content);=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNode(element);=0A=
      content.evalScripts.bind(content).defer();=0A=
      content =3D range.createContextualFragment(content.stripScripts());=0A=
    }=0A=
    element.parentNode.replaceChild(content, element);=0A=
    return element;=0A=
  },=0A=
=0A=
  insert: function(element, insertions) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Object.isString(insertions) || Object.isNumber(insertions) ||=0A=
        Object.isElement(insertions) || (insertions && =
(insertions.toElement || insertions.toHTML)))=0A=
          insertions =3D {bottom:insertions};=0A=
=0A=
    var content, insert, tagName, childNodes;=0A=
=0A=
    for (var position in insertions) {=0A=
      content  =3D insertions[position];=0A=
      position =3D position.toLowerCase();=0A=
      insert =3D Element._insertionTranslations[position];=0A=
=0A=
      if (content && content.toElement) content =3D content.toElement();=0A=
      if (Object.isElement(content)) {=0A=
        insert(element, content);=0A=
        continue;=0A=
      }=0A=
=0A=
      content =3D Object.toHTML(content);=0A=
=0A=
      tagName =3D ((position =3D=3D 'before' || position =3D=3D 'after')=0A=
        ? element.parentNode : element).tagName.toUpperCase();=0A=
=0A=
      childNodes =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
=0A=
      if (position =3D=3D 'top' || position =3D=3D 'after') =
childNodes.reverse();=0A=
      childNodes.each(insert.curry(element));=0A=
=0A=
      content.evalScripts.bind(content).defer();=0A=
    }=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  wrap: function(element, wrapper, attributes) {=0A=
    element =3D $(element);=0A=
    if (Object.isElement(wrapper))=0A=
      $(wrapper).writeAttribute(attributes || { });=0A=
    else if (Object.isString(wrapper)) wrapper =3D new Element(wrapper, =
attributes);=0A=
    else wrapper =3D new Element('div', wrapper);=0A=
    if (element.parentNode)=0A=
      element.parentNode.replaceChild(wrapper, element);=0A=
    wrapper.appendChild(element);=0A=
    return wrapper;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(),=0A=
          attribute =3D pair.last(),=0A=
          value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property, maximumLength) {=0A=
    element =3D $(element);=0A=
    maximumLength =3D maximumLength || -1;=0A=
    var elements =3D [];=0A=
=0A=
    while (element =3D element[property]) {=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
      if (elements.length =3D=3D maximumLength)=0A=
        break;=0A=
    }=0A=
=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return Element.recursivelyCollect(element, 'parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return Element.select(element, "*");=0A=
  },=0A=
=0A=
  firstDescendant: function(element) {=0A=
    element =3D $(element).firstChild;=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    return $(element);=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    var results =3D [], child =3D $(element).firstChild;=0A=
    while (child) {=0A=
      if (child.nodeType =3D=3D=3D 1) {=0A=
        results.push(Element.extend(child));=0A=
      }=0A=
      child =3D child.nextSibling;=0A=
    }=0A=
    return results;=0A=
  },=0A=
=0A=
  previousSiblings: function(element, maximumLength) {=0A=
    return Element.recursivelyCollect(element, 'previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return Element.recursivelyCollect(element, 'nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return Element.previousSiblings(element).reverse()=0A=
      .concat(Element.nextSiblings(element));=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    element =3D $(element);=0A=
    if (Object.isString(selector))=0A=
      return Prototype.Selector.match(element, selector);=0A=
    return selector.match(element);=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return $(element.parentNode);=0A=
    var ancestors =3D Element.ancestors(element);=0A=
    return Object.isNumber(expression) ? ancestors[expression] :=0A=
      Prototype.Selector.find(ancestors, expression, index);=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
Element.firstDescendant(element);=0A=
    return Object.isNumber(expression) ? =
Element.descendants(element)[expression] :=0A=
      Element.select(element, expression)[index || 0];=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (Object.isNumber(expression)) index =3D expression, expression =
=3D false;=0A=
    if (!Object.isNumber(index)) index =3D 0;=0A=
=0A=
    if (expression) {=0A=
      return Prototype.Selector.find(element.previousSiblings(), =
expression, index);=0A=
    } else {=0A=
      return element.recursivelyCollect("previousSibling", index + =
1)[index];=0A=
    }=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (Object.isNumber(expression)) index =3D expression, expression =
=3D false;=0A=
    if (!Object.isNumber(index)) index =3D 0;=0A=
=0A=
    if (expression) {=0A=
      return Prototype.Selector.find(element.nextSiblings(), expression, =
index);=0A=
    } else {=0A=
      var maximumLength =3D Object.isNumber(index) ? index + 1 : 1;=0A=
      return element.recursivelyCollect("nextSibling", index + 1)[index];=0A=
    }=0A=
  },=0A=
=0A=
=0A=
  select: function(element) {=0A=
    element =3D $(element);=0A=
    var expressions =3D Array.prototype.slice.call(arguments, 1).join(', =
');=0A=
    return Prototype.Selector.select(expressions, element);=0A=
  },=0A=
=0A=
  adjacent: function(element) {=0A=
    element =3D $(element);=0A=
    var expressions =3D Array.prototype.slice.call(arguments, 1).join(', =
');=0A=
    return Prototype.Selector.select(expressions, =
element.parentNode).without(element);=0A=
  },=0A=
=0A=
  identify: function(element) {=0A=
    element =3D $(element);=0A=
    var id =3D Element.readAttribute(element, 'id');=0A=
    if (id) return id;=0A=
    do { id =3D 'anonymous_element_' + Element.idCounter++ } while =
($(id));=0A=
    Element.writeAttribute(element, 'id', id);=0A=
    return id;=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (Prototype.Browser.IE) {=0A=
      var t =3D Element._attributeTranslations.read;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name]) name =3D t.names[name];=0A=
      if (name.include(':')) {=0A=
        return (!element.attributes || !element.attributes[name]) ? null =
:=0A=
         element.attributes[name].value;=0A=
      }=0A=
    }=0A=
    return element.getAttribute(name);=0A=
  },=0A=
=0A=
  writeAttribute: function(element, name, value) {=0A=
    element =3D $(element);=0A=
    var attributes =3D { }, t =3D Element._attributeTranslations.write;=0A=
=0A=
    if (typeof name =3D=3D 'object') attributes =3D name;=0A=
    else attributes[name] =3D Object.isUndefined(value) ? true : value;=0A=
=0A=
    for (var attr in attributes) {=0A=
      name =3D t.names[attr] || attr;=0A=
      value =3D attributes[attr];=0A=
      if (t.values[attr]) name =3D t.values[attr](element, value);=0A=
      if (value =3D=3D=3D false || value =3D=3D=3D null)=0A=
        element.removeAttribute(name);=0A=
      else if (value =3D=3D=3D true)=0A=
        element.setAttribute(name, name);=0A=
      else element.setAttribute(name, value);=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return Element.getDimensions(element).height;=0A=
  },=0A=
=0A=
  getWidth: function(element) {=0A=
    return Element.getDimensions(element).width;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    return (elementClassName.length > 0 && (elementClassName =3D=3D =
className ||=0A=
      new RegExp("(^|\\s)" + className + =
"(\\s|$)").test(elementClassName)));=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    if (!Element.hasClassName(element, className))=0A=
      element.className +=3D (element.className ? ' ' : '') + className;=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    element.className =3D element.className.replace(=0A=
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    return Element[Element.hasClassName(element, className) ?=0A=
      'removeClassName' : 'addClassName'](element, className);=0A=
  },=0A=
=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.blank();=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
=0A=
    if (element.compareDocumentPosition)=0A=
      return (element.compareDocumentPosition(ancestor) & 8) =3D=3D=3D 8;=0A=
=0A=
    if (ancestor.contains)=0A=
      return ancestor.contains(element) && ancestor !=3D=3D element;=0A=
=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D ancestor) return true;=0A=
=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.cumulativeOffset(element);=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value || value =3D=3D 'auto') {=0A=
      var css =3D document.defaultView.getComputedStyle(element, null);=0A=
      value =3D css ? css[style] : null;=0A=
    }=0A=
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  getOpacity: function(element) {=0A=
    return $(element).getStyle('opacity');=0A=
  },=0A=
=0A=
  setStyle: function(element, styles) {=0A=
    element =3D $(element);=0A=
    var elementStyle =3D element.style, match;=0A=
    if (Object.isString(styles)) {=0A=
      element.style.cssText +=3D ';' + styles;=0A=
      return styles.include('opacity') ?=0A=
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : =
element;=0A=
    }=0A=
    for (var property in styles)=0A=
      if (property =3D=3D 'opacity') =
element.setOpacity(styles[property]);=0A=
      else=0A=
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?=0A=
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : =
'styleFloat') :=0A=
            property] =3D styles[property];=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  setOpacity: function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      if (Prototype.Browser.Opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D Element.getStyle(element, 'overflow') || =
'auto';=0A=
    if (element._overflow !=3D=3D 'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  },=0A=
=0A=
  clonePosition: function(element, source) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || { });=0A=
=0A=
    source =3D $(source);=0A=
    var p =3D Element.viewportOffset(source), delta =3D [0, 0], parent =
=3D null;=0A=
=0A=
    element =3D $(element);=0A=
=0A=
    if (Element.getStyle(element, 'position') =3D=3D 'absolute') {=0A=
      parent =3D Element.getOffsetParent(element);=0A=
      delta =3D Element.viewportOffset(parent);=0A=
    }=0A=
=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    if (options.setLeft)   element.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if (options.setTop)    element.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if (options.setWidth)  element.style.width =3D source.offsetWidth + =
'px';=0A=
    if (options.setHeight) element.style.height =3D source.offsetHeight =
+ 'px';=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.Methods, {=0A=
  getElementsBySelector: Element.Methods.select,=0A=
=0A=
  childElements: Element.Methods.immediateDescendants=0A=
});=0A=
=0A=
Element._attributeTranslations =3D {=0A=
  write: {=0A=
    names: {=0A=
      className: 'class',=0A=
      htmlFor:   'for'=0A=
    },=0A=
    values: { }=0A=
  }=0A=
};=0A=
=0A=
if (Prototype.Browser.Opera) {=0A=
  Element.Methods.getStyle =3D Element.Methods.getStyle.wrap(=0A=
    function(proceed, element, style) {=0A=
      switch (style) {=0A=
        case 'height': case 'width':=0A=
          if (!Element.visible(element)) return null;=0A=
=0A=
          var dim =3D parseInt(proceed(element, style), 10);=0A=
=0A=
          if (dim !=3D=3D element['offset' + style.capitalize()])=0A=
            return dim + 'px';=0A=
=0A=
          var properties;=0A=
          if (style =3D=3D=3D 'height') {=0A=
            properties =3D ['border-top-width', 'padding-top',=0A=
             'padding-bottom', 'border-bottom-width'];=0A=
          }=0A=
          else {=0A=
            properties =3D ['border-left-width', 'padding-left',=0A=
             'padding-right', 'border-right-width'];=0A=
          }=0A=
          return properties.inject(dim, function(memo, property) {=0A=
            var val =3D proceed(element, property);=0A=
            return val =3D=3D=3D null ? memo : memo - parseInt(val, 10);=0A=
          }) + 'px';=0A=
        default: return proceed(element, style);=0A=
      }=0A=
    }=0A=
  );=0A=
=0A=
  Element.Methods.readAttribute =3D Element.Methods.readAttribute.wrap(=0A=
    function(proceed, element, attribute) {=0A=
      if (attribute =3D=3D=3D 'title') return element.title;=0A=
      return proceed(element, attribute);=0A=
    }=0A=
  );=0A=
}=0A=
=0A=
else if (Prototype.Browser.IE) {=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];=0A=
=0A=
    if (style =3D=3D 'opacity') {=0A=
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if (value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
=0A=
    if (value =3D=3D 'auto') {=0A=
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))=0A=
        return element['offset' + style.capitalize()] + 'px';=0A=
      return null;=0A=
    }=0A=
    return value;=0A=
  };=0A=
=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    function stripAlpha(filter){=0A=
      return filter.replace(/alpha\([^\)]*\)/gi,'');=0A=
    }=0A=
    element =3D $(element);=0A=
    var currentStyle =3D element.currentStyle;=0A=
    if ((currentStyle && !currentStyle.hasLayout) ||=0A=
      (!currentStyle && element.style.zoom =3D=3D 'normal'))=0A=
        element.style.zoom =3D 1;=0A=
=0A=
    var filter =3D element.getStyle('filter'), style =3D element.style;=0A=
    if (value =3D=3D 1 || value =3D=3D=3D '') {=0A=
      (filter =3D stripAlpha(filter)) ?=0A=
        style.filter =3D filter : style.removeAttribute('filter');=0A=
      return element;=0A=
    } else if (value < 0.00001) value =3D 0;=0A=
    style.filter =3D stripAlpha(filter) +=0A=
      'alpha(opacity=3D' + (value * 100) + ')';=0A=
    return element;=0A=
  };=0A=
=0A=
  Element._attributeTranslations =3D (function(){=0A=
=0A=
    var classProp =3D 'className',=0A=
        forProp =3D 'for',=0A=
        el =3D document.createElement('div');=0A=
=0A=
    el.setAttribute(classProp, 'x');=0A=
=0A=
    if (el.className !=3D=3D 'x') {=0A=
      el.setAttribute('class', 'x');=0A=
      if (el.className =3D=3D=3D 'x') {=0A=
        classProp =3D 'class';=0A=
      }=0A=
    }=0A=
    el =3D null;=0A=
=0A=
    el =3D document.createElement('label');=0A=
    el.setAttribute(forProp, 'x');=0A=
    if (el.htmlFor !=3D=3D 'x') {=0A=
      el.setAttribute('htmlFor', 'x');=0A=
      if (el.htmlFor =3D=3D=3D 'x') {=0A=
        forProp =3D 'htmlFor';=0A=
      }=0A=
    }=0A=
    el =3D null;=0A=
=0A=
    return {=0A=
      read: {=0A=
        names: {=0A=
          'class':      classProp,=0A=
          'className':  classProp,=0A=
          'for':        forProp,=0A=
          'htmlFor':    forProp=0A=
        },=0A=
        values: {=0A=
          _getAttr: function(element, attribute) {=0A=
            return element.getAttribute(attribute);=0A=
          },=0A=
          _getAttr2: function(element, attribute) {=0A=
            return element.getAttribute(attribute, 2);=0A=
          },=0A=
          _getAttrNode: function(element, attribute) {=0A=
            var node =3D element.getAttributeNode(attribute);=0A=
            return node ? node.value : "";=0A=
          },=0A=
          _getEv: (function(){=0A=
=0A=
            var el =3D document.createElement('div'), f;=0A=
            el.onclick =3D Prototype.emptyFunction;=0A=
            var value =3D el.getAttribute('onclick');=0A=
=0A=
            if (String(value).indexOf('{') > -1) {=0A=
              f =3D function(element, attribute) {=0A=
                attribute =3D element.getAttribute(attribute);=0A=
                if (!attribute) return null;=0A=
                attribute =3D attribute.toString();=0A=
                attribute =3D attribute.split('{')[1];=0A=
                attribute =3D attribute.split('}')[0];=0A=
                return attribute.strip();=0A=
              };=0A=
            }=0A=
            else if (value =3D=3D=3D '') {=0A=
              f =3D function(element, attribute) {=0A=
                attribute =3D element.getAttribute(attribute);=0A=
                if (!attribute) return null;=0A=
                return attribute.strip();=0A=
              };=0A=
            }=0A=
            el =3D null;=0A=
            return f;=0A=
          })(),=0A=
          _flag: function(element, attribute) {=0A=
            return $(element).hasAttribute(attribute) ? attribute : null;=0A=
          },=0A=
          style: function(element) {=0A=
            return element.style.cssText.toLowerCase();=0A=
          },=0A=
          title: function(element) {=0A=
            return element.title;=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
  })();=0A=
=0A=
  Element._attributeTranslations.write =3D {=0A=
    names: Object.extend({=0A=
      cellpadding: 'cellPadding',=0A=
      cellspacing: 'cellSpacing'=0A=
    }, Element._attributeTranslations.read.names),=0A=
    values: {=0A=
      checked: function(element, value) {=0A=
        element.checked =3D !!value;=0A=
      },=0A=
=0A=
      style: function(element, value) {=0A=
        element.style.cssText =3D value ? value : '';=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.has =3D {};=0A=
=0A=
  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +=0A=
      'encType maxLength readOnly longDesc =
frameBorder').each(function(attr) {=0A=
    Element._attributeTranslations.write.names[attr.toLowerCase()] =3D =
attr;=0A=
    Element._attributeTranslations.has[attr.toLowerCase()] =3D attr;=0A=
  });=0A=
=0A=
  (function(v) {=0A=
    Object.extend(v, {=0A=
      href:        v._getAttr2,=0A=
      src:         v._getAttr2,=0A=
      type:        v._getAttr,=0A=
      action:      v._getAttrNode,=0A=
      disabled:    v._flag,=0A=
      checked:     v._flag,=0A=
      readonly:    v._flag,=0A=
      multiple:    v._flag,=0A=
      onload:      v._getEv,=0A=
      onunload:    v._getEv,=0A=
      onclick:     v._getEv,=0A=
      ondblclick:  v._getEv,=0A=
      onmousedown: v._getEv,=0A=
      onmouseup:   v._getEv,=0A=
      onmouseover: v._getEv,=0A=
      onmousemove: v._getEv,=0A=
      onmouseout:  v._getEv,=0A=
      onfocus:     v._getEv,=0A=
      onblur:      v._getEv,=0A=
      onkeypress:  v._getEv,=0A=
      onkeydown:   v._getEv,=0A=
      onkeyup:     v._getEv,=0A=
      onsubmit:    v._getEv,=0A=
      onreset:     v._getEv,=0A=
      onselect:    v._getEv,=0A=
      onchange:    v._getEv=0A=
    });=0A=
  })(Element._attributeTranslations.read.values);=0A=
=0A=
  if (Prototype.BrowserFeatures.ElementExtensions) {=0A=
    (function() {=0A=
      function _descendants(element) {=0A=
        var nodes =3D element.getElementsByTagName('*'), results =3D [];=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.tagName !=3D=3D "!") // Filter out comment nodes.=0A=
            results.push(node);=0A=
        return results;=0A=
      }=0A=
=0A=
      Element.Methods.down =3D function(element, expression, index) {=0A=
        element =3D $(element);=0A=
        if (arguments.length =3D=3D 1) return element.firstDescendant();=0A=
        return Object.isNumber(expression) ? =
_descendants(element)[expression] :=0A=
          Element.select(element, expression)[index || 0];=0A=
      }=0A=
    })();=0A=
  }=0A=
=0A=
}=0A=
=0A=
else if (Prototype.Browser.Gecko && =
/rv:1\.8\.0/.test(navigator.userAgent)) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :=0A=
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
else if (Prototype.Browser.WebKit) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
=0A=
    if (value =3D=3D 1)=0A=
      if (element.tagName.toUpperCase() =3D=3D 'IMG' && element.width) {=0A=
        element.width++; element.width--;=0A=
      } else try {=0A=
        var n =3D document.createTextNode(' ');=0A=
        element.appendChild(n);=0A=
        element.removeChild(n);=0A=
      } catch (e) { }=0A=
=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
if ('outerHTML' in document.documentElement) {=0A=
  Element.Methods.replace =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) {=0A=
      element.parentNode.replaceChild(content, element);=0A=
      return element;=0A=
    }=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var parent =3D element.parentNode, tagName =3D =
parent.tagName.toUpperCase();=0A=
=0A=
    if (Element._insertionTranslations.tags[tagName]) {=0A=
      var nextSibling =3D element.next(),=0A=
          fragments =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
      parent.removeChild(element);=0A=
      if (nextSibling)=0A=
        fragments.each(function(node) { parent.insertBefore(node, =
nextSibling) });=0A=
      else=0A=
        fragments.each(function(node) { parent.appendChild(node) });=0A=
    }=0A=
    else element.outerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
Element._returnOffset =3D function(l, t) {=0A=
  var result =3D [l, t];=0A=
  result.left =3D l;=0A=
  result.top =3D t;=0A=
  return result;=0A=
};=0A=
=0A=
Element._getContentFromAnonymousElement =3D function(tagName, html, =
force) {=0A=
  var div =3D new Element('div'),=0A=
      t =3D Element._insertionTranslations.tags[tagName];=0A=
=0A=
  var workaround =3D false;=0A=
  if (t) workaround =3D true;=0A=
  else if (force) {=0A=
    workaround =3D true;=0A=
    t =3D ['', '', 0];=0A=
  }=0A=
=0A=
  if (workaround) {=0A=
    div.innerHTML =3D '&nbsp;' + t[0] + html + t[1];=0A=
    div.removeChild(div.firstChild);=0A=
    for (var i =3D t[2]; i--; ) {=0A=
      div =3D div.firstChild;=0A=
    }=0A=
  }=0A=
  else {=0A=
    div.innerHTML =3D html;=0A=
  }=0A=
  return $A(div.childNodes);=0A=
};=0A=
=0A=
Element._insertionTranslations =3D {=0A=
  before: function(element, node) {=0A=
    element.parentNode.insertBefore(node, element);=0A=
  },=0A=
  top: function(element, node) {=0A=
    element.insertBefore(node, element.firstChild);=0A=
  },=0A=
  bottom: function(element, node) {=0A=
    element.appendChild(node);=0A=
  },=0A=
  after: function(element, node) {=0A=
    element.parentNode.insertBefore(node, element.nextSibling);=0A=
  },=0A=
  tags: {=0A=
    TABLE:  ['<table>',                '</table>',                   1],=0A=
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],=0A=
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],=0A=
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],=0A=
    SELECT: ['<select>',               '</select>',                  1]=0A=
  }=0A=
};=0A=
=0A=
(function() {=0A=
  var tags =3D Element._insertionTranslations.tags;=0A=
  Object.extend(tags, {=0A=
    THEAD: tags.TBODY,=0A=
    TFOOT: tags.TBODY,=0A=
    TH:    tags.TD=0A=
  });=0A=
})();=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    attribute =3D Element._attributeTranslations.has[attribute] || =
attribute;=0A=
    var node =3D $(element).getAttributeNode(attribute);=0A=
    return !!(node && node.specified);=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.ByTag =3D { };=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
(function(div) {=0A=
=0A=
  if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {=0A=
    window.HTMLElement =3D { };=0A=
    window.HTMLElement.prototype =3D div['__proto__'];=0A=
    Prototype.BrowserFeatures.ElementExtensions =3D true;=0A=
  }=0A=
=0A=
  div =3D null;=0A=
=0A=
})(document.createElement('div'));=0A=
=0A=
Element.extend =3D (function() {=0A=
=0A=
  function checkDeficiency(tagName) {=0A=
    if (typeof window.Element !=3D 'undefined') {=0A=
      var proto =3D window.Element.prototype;=0A=
      if (proto) {=0A=
        var id =3D '_' + (Math.random()+'').slice(2),=0A=
            el =3D document.createElement(tagName);=0A=
        proto[id] =3D 'x';=0A=
        var isBuggy =3D (el[id] !=3D=3D 'x');=0A=
        delete proto[id];=0A=
        el =3D null;=0A=
        return isBuggy;=0A=
      }=0A=
    }=0A=
    return false;=0A=
  }=0A=
=0A=
  function extendElementWith(element, methods) {=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (Object.isFunction(value) && !(property in element))=0A=
        element[property] =3D value.methodize();=0A=
    }=0A=
  }=0A=
=0A=
  var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY =3D checkDeficiency('object');=0A=
=0A=
  if (Prototype.BrowserFeatures.SpecificElementExtensions) {=0A=
    if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {=0A=
      return function(element) {=0A=
        if (element && typeof element._extendedByPrototype =3D=3D =
'undefined') {=0A=
          var t =3D element.tagName;=0A=
          if (t && (/^(?:object|applet|embed)$/i.test(t))) {=0A=
            extendElementWith(element, Element.Methods);=0A=
            extendElementWith(element, Element.Methods.Simulated);=0A=
            extendElementWith(element, =
Element.Methods.ByTag[t.toUpperCase()]);=0A=
          }=0A=
        }=0A=
        return element;=0A=
      }=0A=
    }=0A=
    return Prototype.K;=0A=
  }=0A=
=0A=
  var Methods =3D { }, ByTag =3D Element.Methods.ByTag;=0A=
=0A=
  var extend =3D Object.extend(function(element) {=0A=
    if (!element || typeof element._extendedByPrototype !=3D 'undefined' =
||=0A=
        element.nodeType !=3D 1 || element =3D=3D window) return element;=0A=
=0A=
    var methods =3D Object.clone(Methods),=0A=
        tagName =3D element.tagName.toUpperCase();=0A=
=0A=
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);=0A=
=0A=
    extendElementWith(element, methods);=0A=
=0A=
    element._extendedByPrototype =3D Prototype.emptyFunction;=0A=
    return element;=0A=
=0A=
  }, {=0A=
    refresh: function() {=0A=
      if (!Prototype.BrowserFeatures.ElementExtensions) {=0A=
        Object.extend(Methods, Element.Methods);=0A=
        Object.extend(Methods, Element.Methods.Simulated);=0A=
      }=0A=
    }=0A=
  });=0A=
=0A=
  extend.refresh();=0A=
  return extend;=0A=
})();=0A=
=0A=
if (document.documentElement.hasAttribute) {=0A=
  Element.hasAttribute =3D function(element, attribute) {=0A=
    return element.hasAttribute(attribute);=0A=
  };=0A=
}=0A=
else {=0A=
  Element.hasAttribute =3D Element.Methods.Simulated.hasAttribute;=0A=
}=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=0A=
=0A=
  if (!methods) {=0A=
    Object.extend(Form, Form.Methods);=0A=
    Object.extend(Form.Element, Form.Element.Methods);=0A=
    Object.extend(Element.Methods.ByTag, {=0A=
      "FORM":     Object.clone(Form.Methods),=0A=
      "INPUT":    Object.clone(Form.Element.Methods),=0A=
      "SELECT":   Object.clone(Form.Element.Methods),=0A=
      "TEXTAREA": Object.clone(Form.Element.Methods),=0A=
      "BUTTON":   Object.clone(Form.Element.Methods)=0A=
    });=0A=
  }=0A=
=0A=
  if (arguments.length =3D=3D 2) {=0A=
    var tagName =3D methods;=0A=
    methods =3D arguments[1];=0A=
  }=0A=
=0A=
  if (!tagName) Object.extend(Element.Methods, methods || { });=0A=
  else {=0A=
    if (Object.isArray(tagName)) tagName.each(extend);=0A=
    else extend(tagName);=0A=
  }=0A=
=0A=
  function extend(tagName) {=0A=
    tagName =3D tagName.toUpperCase();=0A=
    if (!Element.Methods.ByTag[tagName])=0A=
      Element.Methods.ByTag[tagName] =3D { };=0A=
    Object.extend(Element.Methods.ByTag[tagName], methods);=0A=
  }=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!Object.isFunction(value)) continue;=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D value.methodize();=0A=
    }=0A=
  }=0A=
=0A=
  function findDOMClass(tagName) {=0A=
    var klass;=0A=
    var trans =3D {=0A=
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",=0A=
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",=0A=
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",=0A=
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",=0A=
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":=0A=
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":=0A=
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":=0A=
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":=0A=
      "FrameSet", "IFRAME": "IFrame"=0A=
    };=0A=
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName.capitalize() + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
=0A=
    var element =3D document.createElement(tagName),=0A=
        proto =3D element['__proto__'] || element.constructor.prototype;=0A=
=0A=
    element =3D null;=0A=
    return proto;=0A=
  }=0A=
=0A=
  var elementPrototype =3D window.HTMLElement ? HTMLElement.prototype :=0A=
   Element.prototype;=0A=
=0A=
  if (F.ElementExtensions) {=0A=
    copy(Element.Methods, elementPrototype);=0A=
    copy(Element.Methods.Simulated, elementPrototype, true);=0A=
  }=0A=
=0A=
  if (F.SpecificElementExtensions) {=0A=
    for (var tag in Element.Methods.ByTag) {=0A=
      var klass =3D findDOMClass(tag);=0A=
      if (Object.isUndefined(klass)) continue;=0A=
      copy(T[tag], klass.prototype);=0A=
    }=0A=
  }=0A=
=0A=
  Object.extend(Element, Element.Methods);=0A=
  delete Element.ByTag;=0A=
=0A=
  if (Element.extend.refresh) Element.extend.refresh();=0A=
  Element.cache =3D { };=0A=
};=0A=
=0A=
=0A=
document.viewport =3D {=0A=
=0A=
  getDimensions: function() {=0A=
    return { width: this.getWidth(), height: this.getHeight() };=0A=
  },=0A=
=0A=
  getScrollOffsets: function() {=0A=
    return Element._returnOffset(=0A=
      window.pageXOffset || document.documentElement.scrollLeft || =
document.body.scrollLeft,=0A=
      window.pageYOffset || document.documentElement.scrollTop  || =
document.body.scrollTop);=0A=
  }=0A=
};=0A=
=0A=
(function(viewport) {=0A=
  var B =3D Prototype.Browser, doc =3D document, element, property =3D =
{};=0A=
=0A=
  function getRootElement() {=0A=
    if (B.WebKit && !doc.evaluate)=0A=
      return document;=0A=
=0A=
    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)=0A=
      return document.body;=0A=
=0A=
    return document.documentElement;=0A=
  }=0A=
=0A=
  function define(D) {=0A=
    if (!element) element =3D getRootElement();=0A=
=0A=
    property[D] =3D 'client' + D;=0A=
=0A=
    viewport['get' + D] =3D function() { return element[property[D]] };=0A=
    return viewport['get' + D]();=0A=
  }=0A=
=0A=
  viewport.getWidth  =3D define.curry('Width');=0A=
=0A=
  viewport.getHeight =3D define.curry('Height');=0A=
})(document.viewport);=0A=
=0A=
=0A=
Element.Storage =3D {=0A=
  UID: 1=0A=
};=0A=
=0A=
Element.addMethods({=0A=
  getStorage: function(element) {=0A=
    if (!(element =3D $(element))) return;=0A=
=0A=
    var uid;=0A=
    if (element =3D=3D=3D window) {=0A=
      uid =3D 0;=0A=
    } else {=0A=
      if (typeof element._prototypeUID =3D=3D=3D "undefined")=0A=
        element._prototypeUID =3D Element.Storage.UID++;=0A=
      uid =3D element._prototypeUID;=0A=
    }=0A=
=0A=
    if (!Element.Storage[uid])=0A=
      Element.Storage[uid] =3D $H();=0A=
=0A=
    return Element.Storage[uid];=0A=
  },=0A=
=0A=
  store: function(element, key, value) {=0A=
    if (!(element =3D $(element))) return;=0A=
=0A=
    if (arguments.length =3D=3D=3D 2) {=0A=
      Element.getStorage(element).update(key);=0A=
    } else {=0A=
      Element.getStorage(element).set(key, value);=0A=
    }=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  retrieve: function(element, key, defaultValue) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var hash =3D Element.getStorage(element), value =3D hash.get(key);=0A=
=0A=
    if (Object.isUndefined(value)) {=0A=
      hash.set(key, defaultValue);=0A=
      value =3D defaultValue;=0A=
    }=0A=
=0A=
    return value;=0A=
  },=0A=
=0A=
  clone: function(element, deep) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var clone =3D element.cloneNode(deep);=0A=
    clone._prototypeUID =3D void 0;=0A=
    if (deep) {=0A=
      var descendants =3D Element.select(clone, '*'),=0A=
          i =3D descendants.length;=0A=
      while (i--) {=0A=
        descendants[i]._prototypeUID =3D void 0;=0A=
      }=0A=
    }=0A=
    return Element.extend(clone);=0A=
  },=0A=
=0A=
  purge: function(element) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var purgeElement =3D Element._purgeElement;=0A=
=0A=
    purgeElement(element);=0A=
=0A=
    var descendants =3D element.getElementsByTagName('*'),=0A=
     i =3D descendants.length;=0A=
=0A=
    while (i--) purgeElement(descendants[i]);=0A=
=0A=
    return null;=0A=
  }=0A=
});=0A=
=0A=
(function() {=0A=
=0A=
  function toDecimal(pctString) {=0A=
    var match =3D pctString.match(/^(\d+)%?$/i);=0A=
    if (!match) return null;=0A=
    return (Number(match[1]) / 100);=0A=
  }=0A=
=0A=
  function getPixelValue(value, property, context) {=0A=
    var element =3D null;=0A=
    if (Object.isElement(value)) {=0A=
      element =3D value;=0A=
      value =3D element.getStyle(property);=0A=
    }=0A=
=0A=
    if (value =3D=3D=3D null) {=0A=
      return null;=0A=
    }=0A=
=0A=
    if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {=0A=
      return window.parseFloat(value);=0A=
    }=0A=
=0A=
    var isPercentage =3D value.include('%'), isViewport =3D (context =
=3D=3D=3D document.viewport);=0A=
=0A=
    if (/\d/.test(value) && element && element.runtimeStyle && =
!(isPercentage && isViewport)) {=0A=
      var style =3D element.style.left, rStyle =3D =
element.runtimeStyle.left;=0A=
      element.runtimeStyle.left =3D element.currentStyle.left;=0A=
      element.style.left =3D value || 0;=0A=
      value =3D element.style.pixelLeft;=0A=
      element.style.left =3D style;=0A=
      element.runtimeStyle.left =3D rStyle;=0A=
=0A=
      return value;=0A=
    }=0A=
=0A=
    if (element && isPercentage) {=0A=
      context =3D context || element.parentNode;=0A=
      var decimal =3D toDecimal(value);=0A=
      var whole =3D null;=0A=
      var position =3D element.getStyle('position');=0A=
=0A=
      var isHorizontal =3D property.include('left') || =
property.include('right') ||=0A=
       property.include('width');=0A=
=0A=
      var isVertical =3D  property.include('top') || =
property.include('bottom') ||=0A=
        property.include('height');=0A=
=0A=
      if (context =3D=3D=3D document.viewport) {=0A=
        if (isHorizontal) {=0A=
          whole =3D document.viewport.getWidth();=0A=
        } else if (isVertical) {=0A=
          whole =3D document.viewport.getHeight();=0A=
        }=0A=
      } else {=0A=
        if (isHorizontal) {=0A=
          whole =3D $(context).measure('width');=0A=
        } else if (isVertical) {=0A=
          whole =3D $(context).measure('height');=0A=
        }=0A=
      }=0A=
=0A=
      return (whole =3D=3D=3D null) ? 0 : whole * decimal;=0A=
    }=0A=
=0A=
    return 0;=0A=
  }=0A=
=0A=
  function toCSSPixels(number) {=0A=
    if (Object.isString(number) && number.endsWith('px')) {=0A=
      return number;=0A=
    }=0A=
    return number + 'px';=0A=
  }=0A=
=0A=
  function isDisplayed(element) {=0A=
    var originalElement =3D element;=0A=
    while (element && element.parentNode) {=0A=
      var display =3D element.getStyle('display');=0A=
      if (display =3D=3D=3D 'none') {=0A=
        return false;=0A=
      }=0A=
      element =3D $(element.parentNode);=0A=
    }=0A=
    return true;=0A=
  }=0A=
=0A=
  var hasLayout =3D Prototype.K;=0A=
  if ('currentStyle' in document.documentElement) {=0A=
    hasLayout =3D function(element) {=0A=
      if (!element.currentStyle.hasLayout) {=0A=
        element.style.zoom =3D 1;=0A=
      }=0A=
      return element;=0A=
    };=0A=
  }=0A=
=0A=
  function cssNameFor(key) {=0A=
    if (key.include('border')) key =3D key + '-width';=0A=
    return key.camelize();=0A=
  }=0A=
=0A=
  Element.Layout =3D Class.create(Hash, {=0A=
    initialize: function($super, element, preCompute) {=0A=
      $super();=0A=
      this.element =3D $(element);=0A=
=0A=
      Element.Layout.PROPERTIES.each( function(property) {=0A=
        this._set(property, null);=0A=
      }, this);=0A=
=0A=
      if (preCompute) {=0A=
        this._preComputing =3D true;=0A=
        this._begin();=0A=
        Element.Layout.PROPERTIES.each( this._compute, this );=0A=
        this._end();=0A=
        this._preComputing =3D false;=0A=
      }=0A=
    },=0A=
=0A=
    _set: function(property, value) {=0A=
      return Hash.prototype.set.call(this, property, value);=0A=
    },=0A=
=0A=
    set: function(property, value) {=0A=
      throw "Properties of Element.Layout are read-only.";=0A=
    },=0A=
=0A=
    get: function($super, property) {=0A=
      var value =3D $super(property);=0A=
      return value =3D=3D=3D null ? this._compute(property) : value;=0A=
    },=0A=
=0A=
    _begin: function() {=0A=
      if (this._prepared) return;=0A=
=0A=
      var element =3D this.element;=0A=
      if (isDisplayed(element)) {=0A=
        this._prepared =3D true;=0A=
        return;=0A=
      }=0A=
=0A=
      var originalStyles =3D {=0A=
        position:   element.style.position   || '',=0A=
        width:      element.style.width      || '',=0A=
        visibility: element.style.visibility || '',=0A=
        display:    element.style.display    || ''=0A=
      };=0A=
=0A=
      element.store('prototype_original_styles', originalStyles);=0A=
=0A=
      var position =3D element.getStyle('position'),=0A=
       width =3D element.getStyle('width');=0A=
=0A=
      if (width =3D=3D=3D "0px" || width =3D=3D=3D null) {=0A=
        element.style.display =3D 'block';=0A=
        width =3D element.getStyle('width');=0A=
      }=0A=
=0A=
      var context =3D (position =3D=3D=3D 'fixed') ? document.viewport :=0A=
       element.parentNode;=0A=
=0A=
      element.setStyle({=0A=
        position:   'absolute',=0A=
        visibility: 'hidden',=0A=
        display:    'block'=0A=
      });=0A=
=0A=
      var positionedWidth =3D element.getStyle('width');=0A=
=0A=
      var newWidth;=0A=
      if (width && (positionedWidth =3D=3D=3D width)) {=0A=
        newWidth =3D getPixelValue(element, 'width', context);=0A=
      } else if (position =3D=3D=3D 'absolute' || position =3D=3D=3D =
'fixed') {=0A=
        newWidth =3D getPixelValue(element, 'width', context);=0A=
      } else {=0A=
        var parent =3D element.parentNode, pLayout =3D =
$(parent).getLayout();=0A=
=0A=
        newWidth =3D pLayout.get('width') -=0A=
         this.get('margin-left') -=0A=
         this.get('border-left') -=0A=
         this.get('padding-left') -=0A=
         this.get('padding-right') -=0A=
         this.get('border-right') -=0A=
         this.get('margin-right');=0A=
      }=0A=
=0A=
      element.setStyle({ width: newWidth + 'px' });=0A=
=0A=
      this._prepared =3D true;=0A=
    },=0A=
=0A=
    _end: function() {=0A=
      var element =3D this.element;=0A=
      var originalStyles =3D =
element.retrieve('prototype_original_styles');=0A=
      element.store('prototype_original_styles', null);=0A=
      element.setStyle(originalStyles);=0A=
      this._prepared =3D false;=0A=
    },=0A=
=0A=
    _compute: function(property) {=0A=
      var COMPUTATIONS =3D Element.Layout.COMPUTATIONS;=0A=
      if (!(property in COMPUTATIONS)) {=0A=
        throw "Property not found.";=0A=
      }=0A=
=0A=
      return this._set(property, COMPUTATIONS[property].call(this, =
this.element));=0A=
    },=0A=
=0A=
    toObject: function() {=0A=
      var args =3D $A(arguments);=0A=
      var keys =3D (args.length =3D=3D=3D 0) ? Element.Layout.PROPERTIES =
:=0A=
       args.join(' ').split(' ');=0A=
      var obj =3D {};=0A=
      keys.each( function(key) {=0A=
        if (!Element.Layout.PROPERTIES.include(key)) return;=0A=
        var value =3D this.get(key);=0A=
        if (value !=3D null) obj[key] =3D value;=0A=
      }, this);=0A=
      return obj;=0A=
    },=0A=
=0A=
    toHash: function() {=0A=
      var obj =3D this.toObject.apply(this, arguments);=0A=
      return new Hash(obj);=0A=
    },=0A=
=0A=
    toCSS: function() {=0A=
      var args =3D $A(arguments);=0A=
      var keys =3D (args.length =3D=3D=3D 0) ? Element.Layout.PROPERTIES =
:=0A=
       args.join(' ').split(' ');=0A=
      var css =3D {};=0A=
=0A=
      keys.each( function(key) {=0A=
        if (!Element.Layout.PROPERTIES.include(key)) return;=0A=
        if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;=0A=
=0A=
        var value =3D this.get(key);=0A=
        if (value !=3D null) css[cssNameFor(key)] =3D value + 'px';=0A=
      }, this);=0A=
      return css;=0A=
    },=0A=
=0A=
    inspect: function() {=0A=
      return "#<Element.Layout>";=0A=
    }=0A=
  });=0A=
=0A=
  Object.extend(Element.Layout, {=0A=
    PROPERTIES: $w('height width top left right bottom border-left =
border-right border-top border-bottom padding-left padding-right =
padding-top padding-bottom margin-top margin-bottom margin-left =
margin-right padding-box-width padding-box-height border-box-width =
border-box-height margin-box-width margin-box-height'),=0A=
=0A=
    COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height =
margin-box-width margin-box-height border-box-width border-box-height'),=0A=
=0A=
    COMPUTATIONS: {=0A=
      'height': function(element) {=0A=
        if (!this._preComputing) this._begin();=0A=
=0A=
        var bHeight =3D this.get('border-box-height');=0A=
        if (bHeight <=3D 0) {=0A=
          if (!this._preComputing) this._end();=0A=
          return 0;=0A=
        }=0A=
=0A=
        var bTop =3D this.get('border-top'),=0A=
         bBottom =3D this.get('border-bottom');=0A=
=0A=
        var pTop =3D this.get('padding-top'),=0A=
         pBottom =3D this.get('padding-bottom');=0A=
=0A=
        if (!this._preComputing) this._end();=0A=
=0A=
        return bHeight - bTop - bBottom - pTop - pBottom;=0A=
      },=0A=
=0A=
      'width': function(element) {=0A=
        if (!this._preComputing) this._begin();=0A=
=0A=
        var bWidth =3D this.get('border-box-width');=0A=
        if (bWidth <=3D 0) {=0A=
          if (!this._preComputing) this._end();=0A=
          return 0;=0A=
        }=0A=
=0A=
        var bLeft =3D this.get('border-left'),=0A=
         bRight =3D this.get('border-right');=0A=
=0A=
        var pLeft =3D this.get('padding-left'),=0A=
         pRight =3D this.get('padding-right');=0A=
=0A=
        if (!this._preComputing) this._end();=0A=
=0A=
        return bWidth - bLeft - bRight - pLeft - pRight;=0A=
      },=0A=
=0A=
      'padding-box-height': function(element) {=0A=
        var height =3D this.get('height'),=0A=
         pTop =3D this.get('padding-top'),=0A=
         pBottom =3D this.get('padding-bottom');=0A=
=0A=
        return height + pTop + pBottom;=0A=
      },=0A=
=0A=
      'padding-box-width': function(element) {=0A=
        var width =3D this.get('width'),=0A=
         pLeft =3D this.get('padding-left'),=0A=
         pRight =3D this.get('padding-right');=0A=
=0A=
        return width + pLeft + pRight;=0A=
      },=0A=
=0A=
      'border-box-height': function(element) {=0A=
        if (!this._preComputing) this._begin();=0A=
        var height =3D element.offsetHeight;=0A=
        if (!this._preComputing) this._end();=0A=
        return height;=0A=
      },=0A=
=0A=
      'border-box-width': function(element) {=0A=
        if (!this._preComputing) this._begin();=0A=
        var width =3D element.offsetWidth;=0A=
        if (!this._preComputing) this._end();=0A=
        return width;=0A=
      },=0A=
=0A=
      'margin-box-height': function(element) {=0A=
        var bHeight =3D this.get('border-box-height'),=0A=
         mTop =3D this.get('margin-top'),=0A=
         mBottom =3D this.get('margin-bottom');=0A=
=0A=
        if (bHeight <=3D 0) return 0;=0A=
=0A=
        return bHeight + mTop + mBottom;=0A=
      },=0A=
=0A=
      'margin-box-width': function(element) {=0A=
        var bWidth =3D this.get('border-box-width'),=0A=
         mLeft =3D this.get('margin-left'),=0A=
         mRight =3D this.get('margin-right');=0A=
=0A=
        if (bWidth <=3D 0) return 0;=0A=
=0A=
        return bWidth + mLeft + mRight;=0A=
      },=0A=
=0A=
      'top': function(element) {=0A=
        var offset =3D element.positionedOffset();=0A=
        return offset.top;=0A=
      },=0A=
=0A=
      'bottom': function(element) {=0A=
        var offset =3D element.positionedOffset(),=0A=
         parent =3D element.getOffsetParent(),=0A=
         pHeight =3D parent.measure('height');=0A=
=0A=
        var mHeight =3D this.get('border-box-height');=0A=
=0A=
        return pHeight - mHeight - offset.top;=0A=
      },=0A=
=0A=
      'left': function(element) {=0A=
        var offset =3D element.positionedOffset();=0A=
        return offset.left;=0A=
      },=0A=
=0A=
      'right': function(element) {=0A=
        var offset =3D element.positionedOffset(),=0A=
         parent =3D element.getOffsetParent(),=0A=
         pWidth =3D parent.measure('width');=0A=
=0A=
        var mWidth =3D this.get('border-box-width');=0A=
=0A=
        return pWidth - mWidth - offset.left;=0A=
      },=0A=
=0A=
      'padding-top': function(element) {=0A=
        return getPixelValue(element, 'paddingTop');=0A=
      },=0A=
=0A=
      'padding-bottom': function(element) {=0A=
        return getPixelValue(element, 'paddingBottom');=0A=
      },=0A=
=0A=
      'padding-left': function(element) {=0A=
        return getPixelValue(element, 'paddingLeft');=0A=
      },=0A=
=0A=
      'padding-right': function(element) {=0A=
        return getPixelValue(element, 'paddingRight');=0A=
      },=0A=
=0A=
      'border-top': function(element) {=0A=
        return getPixelValue(element, 'borderTopWidth');=0A=
      },=0A=
=0A=
      'border-bottom': function(element) {=0A=
        return getPixelValue(element, 'borderBottomWidth');=0A=
      },=0A=
=0A=
      'border-left': function(element) {=0A=
        return getPixelValue(element, 'borderLeftWidth');=0A=
      },=0A=
=0A=
      'border-right': function(element) {=0A=
        return getPixelValue(element, 'borderRightWidth');=0A=
      },=0A=
=0A=
      'margin-top': function(element) {=0A=
        return getPixelValue(element, 'marginTop');=0A=
      },=0A=
=0A=
      'margin-bottom': function(element) {=0A=
        return getPixelValue(element, 'marginBottom');=0A=
      },=0A=
=0A=
      'margin-left': function(element) {=0A=
        return getPixelValue(element, 'marginLeft');=0A=
      },=0A=
=0A=
      'margin-right': function(element) {=0A=
        return getPixelValue(element, 'marginRight');=0A=
      }=0A=
    }=0A=
  });=0A=
=0A=
  if ('getBoundingClientRect' in document.documentElement) {=0A=
    Object.extend(Element.Layout.COMPUTATIONS, {=0A=
      'right': function(element) {=0A=
        var parent =3D hasLayout(element.getOffsetParent());=0A=
        var rect =3D element.getBoundingClientRect(),=0A=
         pRect =3D parent.getBoundingClientRect();=0A=
=0A=
        return (pRect.right - rect.right).round();=0A=
      },=0A=
=0A=
      'bottom': function(element) {=0A=
        var parent =3D hasLayout(element.getOffsetParent());=0A=
        var rect =3D element.getBoundingClientRect(),=0A=
         pRect =3D parent.getBoundingClientRect();=0A=
=0A=
        return (pRect.bottom - rect.bottom).round();=0A=
      }=0A=
    });=0A=
  }=0A=
=0A=
  Element.Offset =3D Class.create({=0A=
    initialize: function(left, top) {=0A=
      this.left =3D left.round();=0A=
      this.top  =3D top.round();=0A=
=0A=
      this[0] =3D this.left;=0A=
      this[1] =3D this.top;=0A=
    },=0A=
=0A=
    relativeTo: function(offset) {=0A=
      return new Element.Offset(=0A=
        this.left - offset.left,=0A=
        this.top  - offset.top=0A=
      );=0A=
    },=0A=
=0A=
    inspect: function() {=0A=
      return "#<Element.Offset left: #{left} top: =
#{top}>".interpolate(this);=0A=
    },=0A=
=0A=
    toString: function() {=0A=
      return "[#{left}, #{top}]".interpolate(this);=0A=
    },=0A=
=0A=
    toArray: function() {=0A=
      return [this.left, this.top];=0A=
    }=0A=
  });=0A=
=0A=
  function getLayout(element, preCompute) {=0A=
    return new Element.Layout(element, preCompute);=0A=
  }=0A=
=0A=
  function measure(element, property) {=0A=
    return $(element).getLayout().get(property);=0A=
  }=0A=
=0A=
  function getDimensions(element) {=0A=
    element =3D $(element);=0A=
    var display =3D Element.getStyle(element, 'display');=0A=
=0A=
    if (display && display !=3D=3D 'none') {=0A=
      return { width: element.offsetWidth, height: element.offsetHeight =
};=0A=
    }=0A=
=0A=
    var style =3D element.style;=0A=
    var originalStyles =3D {=0A=
      visibility: style.visibility,=0A=
      position:   style.position,=0A=
      display:    style.display=0A=
    };=0A=
=0A=
    var newStyles =3D {=0A=
      visibility: 'hidden',=0A=
      display:    'block'=0A=
    };=0A=
=0A=
    if (originalStyles.position !=3D=3D 'fixed')=0A=
      newStyles.position =3D 'absolute';=0A=
=0A=
    Element.setStyle(element, newStyles);=0A=
=0A=
    var dimensions =3D {=0A=
      width:  element.offsetWidth,=0A=
      height: element.offsetHeight=0A=
    };=0A=
=0A=
    Element.setStyle(element, originalStyles);=0A=
=0A=
    return dimensions;=0A=
  }=0A=
=0A=
  function getOffsetParent(element) {=0A=
    element =3D $(element);=0A=
=0A=
    if (isDocument(element) || isDetached(element) || isBody(element) || =
isHtml(element))=0A=
      return $(document.body);=0A=
=0A=
    var isInline =3D (Element.getStyle(element, 'display') =3D=3D=3D =
'inline');=0A=
    if (!isInline && element.offsetParent) return =
$(element.offsetParent);=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D=3D =
document.body) {=0A=
      if (Element.getStyle(element, 'position') !=3D=3D 'static') {=0A=
        return isHtml(element) ? $(document.body) : $(element);=0A=
      }=0A=
    }=0A=
=0A=
    return $(document.body);=0A=
  }=0A=
=0A=
=0A=
  function cumulativeOffset(element) {=0A=
    element =3D $(element);=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    if (element.parentNode) {=0A=
      do {=0A=
        valueT +=3D element.offsetTop  || 0;=0A=
        valueL +=3D element.offsetLeft || 0;=0A=
        element =3D element.offsetParent;=0A=
      } while (element);=0A=
    }=0A=
    return new Element.Offset(valueL, valueT);=0A=
  }=0A=
=0A=
  function positionedOffset(element) {=0A=
    element =3D $(element);=0A=
=0A=
    var layout =3D element.getLayout();=0A=
=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if (isBody(element)) break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p !=3D=3D 'static') break;=0A=
      }=0A=
    } while (element);=0A=
=0A=
    valueL -=3D layout.get('margin-top');=0A=
    valueT -=3D layout.get('margin-left');=0A=
=0A=
    return new Element.Offset(valueL, valueT);=0A=
  }=0A=
=0A=
  function cumulativeScrollOffset(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return new Element.Offset(valueL, valueT);=0A=
  }=0A=
=0A=
  function viewportOffset(forElement) {=0A=
    element =3D $(element);=0A=
    var valueT =3D 0, valueL =3D 0, docBody =3D document.body;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D docBody &&=0A=
        Element.getStyle(element, 'position') =3D=3D 'absolute') break;=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (element !=3D docBody) {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
    return new Element.Offset(valueL, valueT);=0A=
  }=0A=
=0A=
  function absolutize(element) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Element.getStyle(element, 'position') =3D=3D=3D 'absolute') {=0A=
      return element;=0A=
    }=0A=
=0A=
    var offsetParent =3D getOffsetParent(element);=0A=
    var eOffset =3D element.viewportOffset(),=0A=
     pOffset =3D offsetParent.viewportOffset();=0A=
=0A=
    var offset =3D eOffset.relativeTo(pOffset);=0A=
    var layout =3D element.getLayout();=0A=
=0A=
    element.store('prototype_absolutize_original_styles', {=0A=
      left:   element.getStyle('left'),=0A=
      top:    element.getStyle('top'),=0A=
      width:  element.getStyle('width'),=0A=
      height: element.getStyle('height')=0A=
    });=0A=
=0A=
    element.setStyle({=0A=
      position: 'absolute',=0A=
      top:    offset.top + 'px',=0A=
      left:   offset.left + 'px',=0A=
      width:  layout.get('width') + 'px',=0A=
      height: layout.get('height') + 'px'=0A=
    });=0A=
=0A=
    return element;=0A=
  }=0A=
=0A=
  function relativize(element) {=0A=
    element =3D $(element);=0A=
    if (Element.getStyle(element, 'position') =3D=3D=3D 'relative') {=0A=
      return element;=0A=
    }=0A=
=0A=
    var originalStyles =3D=0A=
     element.retrieve('prototype_absolutize_original_styles');=0A=
=0A=
    if (originalStyles) element.setStyle(originalStyles);=0A=
    return element;=0A=
  }=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    getOffsetParent =3D getOffsetParent.wrap(=0A=
      function(proceed, element) {=0A=
        element =3D $(element);=0A=
=0A=
        if (isDocument(element) || isDetached(element) || =
isBody(element) || isHtml(element))=0A=
          return $(document.body);=0A=
=0A=
        var position =3D element.getStyle('position');=0A=
        if (position !=3D=3D 'static') return proceed(element);=0A=
=0A=
        element.setStyle({ position: 'relative' });=0A=
        var value =3D proceed(element);=0A=
        element.setStyle({ position: position });=0A=
        return value;=0A=
      }=0A=
    );=0A=
=0A=
    positionedOffset =3D positionedOffset.wrap(function(proceed, =
element) {=0A=
      element =3D $(element);=0A=
      if (!element.parentNode) return new Element.Offset(0, 0);=0A=
      var position =3D element.getStyle('position');=0A=
      if (position !=3D=3D 'static') return proceed(element);=0A=
=0A=
      var offsetParent =3D element.getOffsetParent();=0A=
      if (offsetParent && offsetParent.getStyle('position') =3D=3D=3D =
'fixed')=0A=
        hasLayout(offsetParent);=0A=
=0A=
      element.setStyle({ position: 'relative' });=0A=
      var value =3D proceed(element);=0A=
      element.setStyle({ position: position });=0A=
      return value;=0A=
    });=0A=
  } else if (Prototype.Browser.Webkit) {=0A=
    cumulativeOffset =3D function(element) {=0A=
      element =3D $(element);=0A=
      var valueT =3D 0, valueL =3D 0;=0A=
      do {=0A=
        valueT +=3D element.offsetTop  || 0;=0A=
        valueL +=3D element.offsetLeft || 0;=0A=
        if (element.offsetParent =3D=3D document.body)=0A=
          if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
        element =3D element.offsetParent;=0A=
      } while (element);=0A=
=0A=
      return new Element.Offset(valueL, valueT);=0A=
    };=0A=
  }=0A=
=0A=
=0A=
  Element.addMethods({=0A=
    getLayout:              getLayout,=0A=
    measure:                measure,=0A=
    getDimensions:          getDimensions,=0A=
    getOffsetParent:        getOffsetParent,=0A=
    cumulativeOffset:       cumulativeOffset,=0A=
    positionedOffset:       positionedOffset,=0A=
    cumulativeScrollOffset: cumulativeScrollOffset,=0A=
    viewportOffset:         viewportOffset,=0A=
    absolutize:             absolutize,=0A=
    relativize:             relativize=0A=
  });=0A=
=0A=
  function isBody(element) {=0A=
    return element.nodeName.toUpperCase() =3D=3D=3D 'BODY';=0A=
  }=0A=
=0A=
  function isHtml(element) {=0A=
    return element.nodeName.toUpperCase() =3D=3D=3D 'HTML';=0A=
  }=0A=
=0A=
  function isDocument(element) {=0A=
    return element.nodeType =3D=3D=3D Node.DOCUMENT_NODE;=0A=
  }=0A=
=0A=
  function isDetached(element) {=0A=
    return element !=3D=3D document.body &&=0A=
     !Element.descendantOf(element, document.body);=0A=
  }=0A=
=0A=
  if ('getBoundingClientRect' in document.documentElement) {=0A=
    Element.addMethods({=0A=
      viewportOffset: function(element) {=0A=
        element =3D $(element);=0A=
        if (isDetached(element)) return new Element.Offset(0, 0);=0A=
=0A=
        var rect =3D element.getBoundingClientRect(),=0A=
         docEl =3D document.documentElement;=0A=
        return new Element.Offset(rect.left - docEl.clientLeft,=0A=
         rect.top - docEl.clientTop);=0A=
      }=0A=
    });=0A=
  }=0A=
})();=0A=
window.$$ =3D function() {=0A=
  var expression =3D $A(arguments).join(', ');=0A=
  return Prototype.Selector.select(expression, document);=0A=
};=0A=
=0A=
Prototype.Selector =3D (function() {=0A=
=0A=
  function select() {=0A=
    throw new Error('Method "Prototype.Selector.select" must be =
defined.');=0A=
  }=0A=
=0A=
  function match() {=0A=
    throw new Error('Method "Prototype.Selector.match" must be =
defined.');=0A=
  }=0A=
=0A=
  function find(elements, expression, index) {=0A=
    index =3D index || 0;=0A=
    var match =3D Prototype.Selector.match, length =3D elements.length, =
matchIndex =3D 0, i;=0A=
=0A=
    for (i =3D 0; i < length; i++) {=0A=
      if (match(elements[i], expression) && index =3D=3D matchIndex++) {=0A=
        return Element.extend(elements[i]);=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function extendElements(elements) {=0A=
    for (var i =3D 0, length =3D elements.length; i < length; i++) {=0A=
      Element.extend(elements[i]);=0A=
    }=0A=
    return elements;=0A=
  }=0A=
=0A=
=0A=
  var K =3D Prototype.K;=0A=
=0A=
  return {=0A=
    select: select,=0A=
    match: match,=0A=
    find: find,=0A=
    extendElements: (Element.extend =3D=3D=3D K) ? K : extendElements,=0A=
    extendElement: Element.extend=0A=
  };=0A=
})();=0A=
Prototype._original_property =3D window.Sizzle;=0A=
/*!=0A=
 * Sizzle CSS Selector Engine - v1.0=0A=
 *  Copyright 2009, The Dojo Foundation=0A=
 *  Released under the MIT, BSD, and GPL Licenses.=0A=
 *  More information: http://sizzlejs.com/=0A=
 */=0A=
(function(){=0A=
=0A=
var chunker =3D =
/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+=
)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,=0A=
	done =3D 0,=0A=
	toString =3D Object.prototype.toString,=0A=
	hasDuplicate =3D false,=0A=
	baseHasDuplicate =3D true;=0A=
=0A=
[0, 0].sort(function(){=0A=
	baseHasDuplicate =3D false;=0A=
	return 0;=0A=
});=0A=
=0A=
var Sizzle =3D function(selector, context, results, seed) {=0A=
	results =3D results || [];=0A=
	var origContext =3D context =3D context || document;=0A=
=0A=
	if ( context.nodeType !=3D=3D 1 && context.nodeType !=3D=3D 9 ) {=0A=
		return [];=0A=
	}=0A=
=0A=
	if ( !selector || typeof selector !=3D=3D "string" ) {=0A=
		return results;=0A=
	}=0A=
=0A=
	var parts =3D [], m, set, checkSet, check, mode, extra, prune =3D true, =
contextXML =3D isXML(context),=0A=
		soFar =3D selector;=0A=
=0A=
	while ( (chunker.exec(""), m =3D chunker.exec(soFar)) !=3D=3D null ) {=0A=
		soFar =3D m[3];=0A=
=0A=
		parts.push( m[1] );=0A=
=0A=
		if ( m[2] ) {=0A=
			extra =3D m[3];=0A=
			break;=0A=
		}=0A=
	}=0A=
=0A=
	if ( parts.length > 1 && origPOS.exec( selector ) ) {=0A=
		if ( parts.length =3D=3D=3D 2 && Expr.relative[ parts[0] ] ) {=0A=
			set =3D posProcess( parts[0] + parts[1], context );=0A=
		} else {=0A=
			set =3D Expr.relative[ parts[0] ] ?=0A=
				[ context ] :=0A=
				Sizzle( parts.shift(), context );=0A=
=0A=
			while ( parts.length ) {=0A=
				selector =3D parts.shift();=0A=
=0A=
				if ( Expr.relative[ selector ] )=0A=
					selector +=3D parts.shift();=0A=
=0A=
				set =3D posProcess( selector, set );=0A=
			}=0A=
		}=0A=
	} else {=0A=
		if ( !seed && parts.length > 1 && context.nodeType =3D=3D=3D 9 && =
!contextXML &&=0A=
				Expr.match.ID.test(parts[0]) && =
!Expr.match.ID.test(parts[parts.length - 1]) ) {=0A=
			var ret =3D Sizzle.find( parts.shift(), context, contextXML );=0A=
			context =3D ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : =
ret.set[0];=0A=
		}=0A=
=0A=
		if ( context ) {=0A=
			var ret =3D seed ?=0A=
				{ expr: parts.pop(), set: makeArray(seed) } :=0A=
				Sizzle.find( parts.pop(), parts.length =3D=3D=3D 1 && (parts[0] =
=3D=3D=3D "~" || parts[0] =3D=3D=3D "+") && context.parentNode ? =
context.parentNode : context, contextXML );=0A=
			set =3D ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;=0A=
=0A=
			if ( parts.length > 0 ) {=0A=
				checkSet =3D makeArray(set);=0A=
			} else {=0A=
				prune =3D false;=0A=
			}=0A=
=0A=
			while ( parts.length ) {=0A=
				var cur =3D parts.pop(), pop =3D cur;=0A=
=0A=
				if ( !Expr.relative[ cur ] ) {=0A=
					cur =3D "";=0A=
				} else {=0A=
					pop =3D parts.pop();=0A=
				}=0A=
=0A=
				if ( pop =3D=3D null ) {=0A=
					pop =3D context;=0A=
				}=0A=
=0A=
				Expr.relative[ cur ]( checkSet, pop, contextXML );=0A=
			}=0A=
		} else {=0A=
			checkSet =3D parts =3D [];=0A=
		}=0A=
	}=0A=
=0A=
	if ( !checkSet ) {=0A=
		checkSet =3D set;=0A=
	}=0A=
=0A=
	if ( !checkSet ) {=0A=
		throw "Syntax error, unrecognized expression: " + (cur || selector);=0A=
	}=0A=
=0A=
	if ( toString.call(checkSet) =3D=3D=3D "[object Array]" ) {=0A=
		if ( !prune ) {=0A=
			results.push.apply( results, checkSet );=0A=
		} else if ( context && context.nodeType =3D=3D=3D 1 ) {=0A=
			for ( var i =3D 0; checkSet[i] !=3D null; i++ ) {=0A=
				if ( checkSet[i] && (checkSet[i] =3D=3D=3D true || =
checkSet[i].nodeType =3D=3D=3D 1 && contains(context, checkSet[i])) ) {=0A=
					results.push( set[i] );=0A=
				}=0A=
			}=0A=
		} else {=0A=
			for ( var i =3D 0; checkSet[i] !=3D null; i++ ) {=0A=
				if ( checkSet[i] && checkSet[i].nodeType =3D=3D=3D 1 ) {=0A=
					results.push( set[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
	} else {=0A=
		makeArray( checkSet, results );=0A=
	}=0A=
=0A=
	if ( extra ) {=0A=
		Sizzle( extra, origContext, results, seed );=0A=
		Sizzle.uniqueSort( results );=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
Sizzle.uniqueSort =3D function(results){=0A=
	if ( sortOrder ) {=0A=
		hasDuplicate =3D baseHasDuplicate;=0A=
		results.sort(sortOrder);=0A=
=0A=
		if ( hasDuplicate ) {=0A=
			for ( var i =3D 1; i < results.length; i++ ) {=0A=
				if ( results[i] =3D=3D=3D results[i-1] ) {=0A=
					results.splice(i--, 1);=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
Sizzle.matches =3D function(expr, set){=0A=
	return Sizzle(expr, null, null, set);=0A=
};=0A=
=0A=
Sizzle.find =3D function(expr, context, isXML){=0A=
	var set, match;=0A=
=0A=
	if ( !expr ) {=0A=
		return [];=0A=
	}=0A=
=0A=
	for ( var i =3D 0, l =3D Expr.order.length; i < l; i++ ) {=0A=
		var type =3D Expr.order[i], match;=0A=
=0A=
		if ( (match =3D Expr.leftMatch[ type ].exec( expr )) ) {=0A=
			var left =3D match[1];=0A=
			match.splice(1,1);=0A=
=0A=
			if ( left.substr( left.length - 1 ) !=3D=3D "\\" ) {=0A=
				match[1] =3D (match[1] || "").replace(/\\/g, "");=0A=
				set =3D Expr.find[ type ]( match, context, isXML );=0A=
				if ( set !=3D null ) {=0A=
					expr =3D expr.replace( Expr.match[ type ], "" );=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	if ( !set ) {=0A=
		set =3D context.getElementsByTagName("*");=0A=
	}=0A=
=0A=
	return {set: set, expr: expr};=0A=
};=0A=
=0A=
Sizzle.filter =3D function(expr, set, inplace, not){=0A=
	var old =3D expr, result =3D [], curLoop =3D set, match, anyFound,=0A=
		isXMLFilter =3D set && set[0] && isXML(set[0]);=0A=
=0A=
	while ( expr && set.length ) {=0A=
		for ( var type in Expr.filter ) {=0A=
			if ( (match =3D Expr.match[ type ].exec( expr )) !=3D null ) {=0A=
				var filter =3D Expr.filter[ type ], found, item;=0A=
				anyFound =3D false;=0A=
=0A=
				if ( curLoop =3D=3D result ) {=0A=
					result =3D [];=0A=
				}=0A=
=0A=
				if ( Expr.preFilter[ type ] ) {=0A=
					match =3D Expr.preFilter[ type ]( match, curLoop, inplace, result, =
not, isXMLFilter );=0A=
=0A=
					if ( !match ) {=0A=
						anyFound =3D found =3D true;=0A=
					} else if ( match =3D=3D=3D true ) {=0A=
						continue;=0A=
					}=0A=
				}=0A=
=0A=
				if ( match ) {=0A=
					for ( var i =3D 0; (item =3D curLoop[i]) !=3D null; i++ ) {=0A=
						if ( item ) {=0A=
							found =3D filter( item, match, i, curLoop );=0A=
							var pass =3D not ^ !!found;=0A=
=0A=
							if ( inplace && found !=3D null ) {=0A=
								if ( pass ) {=0A=
									anyFound =3D true;=0A=
								} else {=0A=
									curLoop[i] =3D false;=0A=
								}=0A=
							} else if ( pass ) {=0A=
								result.push( item );=0A=
								anyFound =3D true;=0A=
							}=0A=
						}=0A=
					}=0A=
				}=0A=
=0A=
				if ( found !=3D=3D undefined ) {=0A=
					if ( !inplace ) {=0A=
						curLoop =3D result;=0A=
					}=0A=
=0A=
					expr =3D expr.replace( Expr.match[ type ], "" );=0A=
=0A=
					if ( !anyFound ) {=0A=
						return [];=0A=
					}=0A=
=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		if ( expr =3D=3D old ) {=0A=
			if ( anyFound =3D=3D null ) {=0A=
				throw "Syntax error, unrecognized expression: " + expr;=0A=
			} else {=0A=
				break;=0A=
			}=0A=
		}=0A=
=0A=
		old =3D expr;=0A=
	}=0A=
=0A=
	return curLoop;=0A=
};=0A=
=0A=
var Expr =3D Sizzle.selectors =3D {=0A=
	order: [ "ID", "NAME", "TAG" ],=0A=
	match: {=0A=
		ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,=0A=
		CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,=0A=
		NAME: /\[name=3D['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,=0A=
		ATTR: =
/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=3D)\s*(['"]*)(.*?)\3|)\s*\]=
/,=0A=
		TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,=0A=
		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,=0A=
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=3D[^-]|$)/,=0A=
		PSEUDO: =
/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2=
\))?/=0A=
	},=0A=
	leftMatch: {},=0A=
	attrMap: {=0A=
		"class": "className",=0A=
		"for": "htmlFor"=0A=
	},=0A=
	attrHandle: {=0A=
		href: function(elem){=0A=
			return elem.getAttribute("href");=0A=
		}=0A=
	},=0A=
	relative: {=0A=
		"+": function(checkSet, part, isXML){=0A=
			var isPartStr =3D typeof part =3D=3D=3D "string",=0A=
				isTag =3D isPartStr && !/\W/.test(part),=0A=
				isPartStrNotTag =3D isPartStr && !isTag;=0A=
=0A=
			if ( isTag && !isXML ) {=0A=
				part =3D part.toUpperCase();=0A=
			}=0A=
=0A=
			for ( var i =3D 0, l =3D checkSet.length, elem; i < l; i++ ) {=0A=
				if ( (elem =3D checkSet[i]) ) {=0A=
					while ( (elem =3D elem.previousSibling) && elem.nodeType !=3D=3D 1 =
) {}=0A=
=0A=
					checkSet[i] =3D isPartStrNotTag || elem && elem.nodeName =3D=3D=3D =
part ?=0A=
						elem || false :=0A=
						elem =3D=3D=3D part;=0A=
				}=0A=
			}=0A=
=0A=
			if ( isPartStrNotTag ) {=0A=
				Sizzle.filter( part, checkSet, true );=0A=
			}=0A=
		},=0A=
		">": function(checkSet, part, isXML){=0A=
			var isPartStr =3D typeof part =3D=3D=3D "string";=0A=
=0A=
			if ( isPartStr && !/\W/.test(part) ) {=0A=
				part =3D isXML ? part : part.toUpperCase();=0A=
=0A=
				for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
					var elem =3D checkSet[i];=0A=
					if ( elem ) {=0A=
						var parent =3D elem.parentNode;=0A=
						checkSet[i] =3D parent.nodeName =3D=3D=3D part ? parent : false;=0A=
					}=0A=
				}=0A=
			} else {=0A=
				for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
					var elem =3D checkSet[i];=0A=
					if ( elem ) {=0A=
						checkSet[i] =3D isPartStr ?=0A=
							elem.parentNode :=0A=
							elem.parentNode =3D=3D=3D part;=0A=
					}=0A=
				}=0A=
=0A=
				if ( isPartStr ) {=0A=
					Sizzle.filter( part, checkSet, true );=0A=
				}=0A=
			}=0A=
		},=0A=
		"": function(checkSet, part, isXML){=0A=
			var doneName =3D done++, checkFn =3D dirCheck;=0A=
=0A=
			if ( !/\W/.test(part) ) {=0A=
				var nodeCheck =3D part =3D isXML ? part : part.toUpperCase();=0A=
				checkFn =3D dirNodeCheck;=0A=
			}=0A=
=0A=
			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);=0A=
		},=0A=
		"~": function(checkSet, part, isXML){=0A=
			var doneName =3D done++, checkFn =3D dirCheck;=0A=
=0A=
			if ( typeof part =3D=3D=3D "string" && !/\W/.test(part) ) {=0A=
				var nodeCheck =3D part =3D isXML ? part : part.toUpperCase();=0A=
				checkFn =3D dirNodeCheck;=0A=
			}=0A=
=0A=
			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, =
isXML);=0A=
		}=0A=
	},=0A=
	find: {=0A=
		ID: function(match, context, isXML){=0A=
			if ( typeof context.getElementById !=3D=3D "undefined" && !isXML ) {=0A=
				var m =3D context.getElementById(match[1]);=0A=
				return m ? [m] : [];=0A=
			}=0A=
		},=0A=
		NAME: function(match, context, isXML){=0A=
			if ( typeof context.getElementsByName !=3D=3D "undefined" ) {=0A=
				var ret =3D [], results =3D context.getElementsByName(match[1]);=0A=
=0A=
				for ( var i =3D 0, l =3D results.length; i < l; i++ ) {=0A=
					if ( results[i].getAttribute("name") =3D=3D=3D match[1] ) {=0A=
						ret.push( results[i] );=0A=
					}=0A=
				}=0A=
=0A=
				return ret.length =3D=3D=3D 0 ? null : ret;=0A=
			}=0A=
		},=0A=
		TAG: function(match, context){=0A=
			return context.getElementsByTagName(match[1]);=0A=
		}=0A=
	},=0A=
	preFilter: {=0A=
		CLASS: function(match, curLoop, inplace, result, not, isXML){=0A=
			match =3D " " + match[1].replace(/\\/g, "") + " ";=0A=
=0A=
			if ( isXML ) {=0A=
				return match;=0A=
			}=0A=
=0A=
			for ( var i =3D 0, elem; (elem =3D curLoop[i]) !=3D null; i++ ) {=0A=
				if ( elem ) {=0A=
					if ( not ^ (elem.className && (" " + elem.className + " =
").indexOf(match) >=3D 0) ) {=0A=
						if ( !inplace )=0A=
							result.push( elem );=0A=
					} else if ( inplace ) {=0A=
						curLoop[i] =3D false;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			return false;=0A=
		},=0A=
		ID: function(match){=0A=
			return match[1].replace(/\\/g, "");=0A=
		},=0A=
		TAG: function(match, curLoop){=0A=
			for ( var i =3D 0; curLoop[i] =3D=3D=3D false; i++ ){}=0A=
			return curLoop[i] && isXML(curLoop[i]) ? match[1] : =
match[1].toUpperCase();=0A=
		},=0A=
		CHILD: function(match){=0A=
			if ( match[1] =3D=3D "nth" ) {=0A=
				var test =3D /(-?)(\d*)n((?:\+|-)?\d*)/.exec(=0A=
					match[2] =3D=3D "even" && "2n" || match[2] =3D=3D "odd" && "2n+1" ||=0A=
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);=0A=
=0A=
				match[2] =3D (test[1] + (test[2] || 1)) - 0;=0A=
				match[3] =3D test[3] - 0;=0A=
			}=0A=
=0A=
			match[0] =3D done++;=0A=
=0A=
			return match;=0A=
		},=0A=
		ATTR: function(match, curLoop, inplace, result, not, isXML){=0A=
			var name =3D match[1].replace(/\\/g, "");=0A=
=0A=
			if ( !isXML && Expr.attrMap[name] ) {=0A=
				match[1] =3D Expr.attrMap[name];=0A=
			}=0A=
=0A=
			if ( match[2] =3D=3D=3D "~=3D" ) {=0A=
				match[4] =3D " " + match[4] + " ";=0A=
			}=0A=
=0A=
			return match;=0A=
		},=0A=
		PSEUDO: function(match, curLoop, inplace, result, not){=0A=
			if ( match[1] =3D=3D=3D "not" ) {=0A=
				if ( ( chunker.exec(match[3]) || "" ).length > 1 || =
/^\w/.test(match[3]) ) {=0A=
					match[3] =3D Sizzle(match[3], null, null, curLoop);=0A=
				} else {=0A=
					var ret =3D Sizzle.filter(match[3], curLoop, inplace, true ^ not);=0A=
					if ( !inplace ) {=0A=
						result.push.apply( result, ret );=0A=
					}=0A=
					return false;=0A=
				}=0A=
			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( =
match[0] ) ) {=0A=
				return true;=0A=
			}=0A=
=0A=
			return match;=0A=
		},=0A=
		POS: function(match){=0A=
			match.unshift( true );=0A=
			return match;=0A=
		}=0A=
	},=0A=
	filters: {=0A=
		enabled: function(elem){=0A=
			return elem.disabled =3D=3D=3D false && elem.type !=3D=3D "hidden";=0A=
		},=0A=
		disabled: function(elem){=0A=
			return elem.disabled =3D=3D=3D true;=0A=
		},=0A=
		checked: function(elem){=0A=
			return elem.checked =3D=3D=3D true;=0A=
		},=0A=
		selected: function(elem){=0A=
			elem.parentNode.selectedIndex;=0A=
			return elem.selected =3D=3D=3D true;=0A=
		},=0A=
		parent: function(elem){=0A=
			return !!elem.firstChild;=0A=
		},=0A=
		empty: function(elem){=0A=
			return !elem.firstChild;=0A=
		},=0A=
		has: function(elem, i, match){=0A=
			return !!Sizzle( match[3], elem ).length;=0A=
		},=0A=
		header: function(elem){=0A=
			return /h\d/i.test( elem.nodeName );=0A=
		},=0A=
		text: function(elem){=0A=
			return "text" =3D=3D=3D elem.type;=0A=
		},=0A=
		radio: function(elem){=0A=
			return "radio" =3D=3D=3D elem.type;=0A=
		},=0A=
		checkbox: function(elem){=0A=
			return "checkbox" =3D=3D=3D elem.type;=0A=
		},=0A=
		file: function(elem){=0A=
			return "file" =3D=3D=3D elem.type;=0A=
		},=0A=
		password: function(elem){=0A=
			return "password" =3D=3D=3D elem.type;=0A=
		},=0A=
		submit: function(elem){=0A=
			return "submit" =3D=3D=3D elem.type;=0A=
		},=0A=
		image: function(elem){=0A=
			return "image" =3D=3D=3D elem.type;=0A=
		},=0A=
		reset: function(elem){=0A=
			return "reset" =3D=3D=3D elem.type;=0A=
		},=0A=
		button: function(elem){=0A=
			return "button" =3D=3D=3D elem.type || elem.nodeName.toUpperCase() =
=3D=3D=3D "BUTTON";=0A=
		},=0A=
		input: function(elem){=0A=
			return /input|select|textarea|button/i.test(elem.nodeName);=0A=
		}=0A=
	},=0A=
	setFilters: {=0A=
		first: function(elem, i){=0A=
			return i =3D=3D=3D 0;=0A=
		},=0A=
		last: function(elem, i, match, array){=0A=
			return i =3D=3D=3D array.length - 1;=0A=
		},=0A=
		even: function(elem, i){=0A=
			return i % 2 =3D=3D=3D 0;=0A=
		},=0A=
		odd: function(elem, i){=0A=
			return i % 2 =3D=3D=3D 1;=0A=
		},=0A=
		lt: function(elem, i, match){=0A=
			return i < match[3] - 0;=0A=
		},=0A=
		gt: function(elem, i, match){=0A=
			return i > match[3] - 0;=0A=
		},=0A=
		nth: function(elem, i, match){=0A=
			return match[3] - 0 =3D=3D i;=0A=
		},=0A=
		eq: function(elem, i, match){=0A=
			return match[3] - 0 =3D=3D i;=0A=
		}=0A=
	},=0A=
	filter: {=0A=
		PSEUDO: function(elem, match, i, array){=0A=
			var name =3D match[1], filter =3D Expr.filters[ name ];=0A=
=0A=
			if ( filter ) {=0A=
				return filter( elem, i, match, array );=0A=
			} else if ( name =3D=3D=3D "contains" ) {=0A=
				return (elem.textContent || elem.innerText || "").indexOf(match[3]) =
>=3D 0;=0A=
			} else if ( name =3D=3D=3D "not" ) {=0A=
				var not =3D match[3];=0A=
=0A=
				for ( var i =3D 0, l =3D not.length; i < l; i++ ) {=0A=
					if ( not[i] =3D=3D=3D elem ) {=0A=
						return false;=0A=
					}=0A=
				}=0A=
=0A=
				return true;=0A=
			}=0A=
		},=0A=
		CHILD: function(elem, match){=0A=
			var type =3D match[1], node =3D elem;=0A=
			switch (type) {=0A=
				case 'only':=0A=
				case 'first':=0A=
					while ( (node =3D node.previousSibling) )  {=0A=
						if ( node.nodeType =3D=3D=3D 1 ) return false;=0A=
					}=0A=
					if ( type =3D=3D 'first') return true;=0A=
					node =3D elem;=0A=
				case 'last':=0A=
					while ( (node =3D node.nextSibling) )  {=0A=
						if ( node.nodeType =3D=3D=3D 1 ) return false;=0A=
					}=0A=
					return true;=0A=
				case 'nth':=0A=
					var first =3D match[2], last =3D match[3];=0A=
=0A=
					if ( first =3D=3D 1 && last =3D=3D 0 ) {=0A=
						return true;=0A=
					}=0A=
=0A=
					var doneName =3D match[0],=0A=
						parent =3D elem.parentNode;=0A=
=0A=
					if ( parent && (parent.sizcache !=3D=3D doneName || =
!elem.nodeIndex) ) {=0A=
						var count =3D 0;=0A=
						for ( node =3D parent.firstChild; node; node =3D node.nextSibling =
) {=0A=
							if ( node.nodeType =3D=3D=3D 1 ) {=0A=
								node.nodeIndex =3D ++count;=0A=
							}=0A=
						}=0A=
						parent.sizcache =3D doneName;=0A=
					}=0A=
=0A=
					var diff =3D elem.nodeIndex - last;=0A=
					if ( first =3D=3D 0 ) {=0A=
						return diff =3D=3D 0;=0A=
					} else {=0A=
						return ( diff % first =3D=3D 0 && diff / first >=3D 0 );=0A=
					}=0A=
			}=0A=
		},=0A=
		ID: function(elem, match){=0A=
			return elem.nodeType =3D=3D=3D 1 && elem.getAttribute("id") =3D=3D=3D =
match;=0A=
		},=0A=
		TAG: function(elem, match){=0A=
			return (match =3D=3D=3D "*" && elem.nodeType =3D=3D=3D 1) || =
elem.nodeName =3D=3D=3D match;=0A=
		},=0A=
		CLASS: function(elem, match){=0A=
			return (" " + (elem.className || elem.getAttribute("class")) + " ")=0A=
				.indexOf( match ) > -1;=0A=
		},=0A=
		ATTR: function(elem, match){=0A=
			var name =3D match[1],=0A=
				result =3D Expr.attrHandle[ name ] ?=0A=
					Expr.attrHandle[ name ]( elem ) :=0A=
					elem[ name ] !=3D null ?=0A=
						elem[ name ] :=0A=
						elem.getAttribute( name ),=0A=
				value =3D result + "",=0A=
				type =3D match[2],=0A=
				check =3D match[4];=0A=
=0A=
			return result =3D=3D null ?=0A=
				type =3D=3D=3D "!=3D" :=0A=
				type =3D=3D=3D "=3D" ?=0A=
				value =3D=3D=3D check :=0A=
				type =3D=3D=3D "*=3D" ?=0A=
				value.indexOf(check) >=3D 0 :=0A=
				type =3D=3D=3D "~=3D" ?=0A=
				(" " + value + " ").indexOf(check) >=3D 0 :=0A=
				!check ?=0A=
				value && result !=3D=3D false :=0A=
				type =3D=3D=3D "!=3D" ?=0A=
				value !=3D check :=0A=
				type =3D=3D=3D "^=3D" ?=0A=
				value.indexOf(check) =3D=3D=3D 0 :=0A=
				type =3D=3D=3D "$=3D" ?=0A=
				value.substr(value.length - check.length) =3D=3D=3D check :=0A=
				type =3D=3D=3D "|=3D" ?=0A=
				value =3D=3D=3D check || value.substr(0, check.length + 1) =3D=3D=3D =
check + "-" :=0A=
				false;=0A=
		},=0A=
		POS: function(elem, match, i, array){=0A=
			var name =3D match[2], filter =3D Expr.setFilters[ name ];=0A=
=0A=
			if ( filter ) {=0A=
				return filter( elem, i, match, array );=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
var origPOS =3D Expr.match.POS;=0A=
=0A=
for ( var type in Expr.match ) {=0A=
	Expr.match[ type ] =3D new RegExp( Expr.match[ type ].source + =
/(?![^\[]*\])(?![^\(]*\))/.source );=0A=
	Expr.leftMatch[ type ] =3D new RegExp( /(^(?:.|\r|\n)*?)/.source + =
Expr.match[ type ].source );=0A=
}=0A=
=0A=
var makeArray =3D function(array, results) {=0A=
	array =3D Array.prototype.slice.call( array, 0 );=0A=
=0A=
	if ( results ) {=0A=
		results.push.apply( results, array );=0A=
		return results;=0A=
	}=0A=
=0A=
	return array;=0A=
};=0A=
=0A=
try {=0A=
	Array.prototype.slice.call( document.documentElement.childNodes, 0 );=0A=
=0A=
} catch(e){=0A=
	makeArray =3D function(array, results) {=0A=
		var ret =3D results || [];=0A=
=0A=
		if ( toString.call(array) =3D=3D=3D "[object Array]" ) {=0A=
			Array.prototype.push.apply( ret, array );=0A=
		} else {=0A=
			if ( typeof array.length =3D=3D=3D "number" ) {=0A=
				for ( var i =3D 0, l =3D array.length; i < l; i++ ) {=0A=
					ret.push( array[i] );=0A=
				}=0A=
			} else {=0A=
				for ( var i =3D 0; array[i]; i++ ) {=0A=
					ret.push( array[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	};=0A=
}=0A=
=0A=
var sortOrder;=0A=
=0A=
if ( document.documentElement.compareDocumentPosition ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {=0A=
			if ( a =3D=3D b ) {=0A=
				hasDuplicate =3D true;=0A=
			}=0A=
			return 0;=0A=
		}=0A=
=0A=
		var ret =3D a.compareDocumentPosition(b) & 4 ? -1 : a =3D=3D=3D b ? 0 =
: 1;=0A=
		if ( ret =3D=3D=3D 0 ) {=0A=
			hasDuplicate =3D true;=0A=
		}=0A=
		return ret;=0A=
	};=0A=
} else if ( "sourceIndex" in document.documentElement ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( !a.sourceIndex || !b.sourceIndex ) {=0A=
			if ( a =3D=3D b ) {=0A=
				hasDuplicate =3D true;=0A=
			}=0A=
			return 0;=0A=
		}=0A=
=0A=
		var ret =3D a.sourceIndex - b.sourceIndex;=0A=
		if ( ret =3D=3D=3D 0 ) {=0A=
			hasDuplicate =3D true;=0A=
		}=0A=
		return ret;=0A=
	};=0A=
} else if ( document.createRange ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( !a.ownerDocument || !b.ownerDocument ) {=0A=
			if ( a =3D=3D b ) {=0A=
				hasDuplicate =3D true;=0A=
			}=0A=
			return 0;=0A=
		}=0A=
=0A=
		var aRange =3D a.ownerDocument.createRange(), bRange =3D =
b.ownerDocument.createRange();=0A=
		aRange.setStart(a, 0);=0A=
		aRange.setEnd(a, 0);=0A=
		bRange.setStart(b, 0);=0A=
		bRange.setEnd(b, 0);=0A=
		var ret =3D aRange.compareBoundaryPoints(Range.START_TO_END, bRange);=0A=
		if ( ret =3D=3D=3D 0 ) {=0A=
			hasDuplicate =3D true;=0A=
		}=0A=
		return ret;=0A=
	};=0A=
}=0A=
=0A=
(function(){=0A=
	var form =3D document.createElement("div"),=0A=
		id =3D "script" + (new Date).getTime();=0A=
	form.innerHTML =3D "<a name=3D'" + id + "'/>";=0A=
=0A=
	var root =3D document.documentElement;=0A=
	root.insertBefore( form, root.firstChild );=0A=
=0A=
	if ( !!document.getElementById( id ) ) {=0A=
		Expr.find.ID =3D function(match, context, isXML){=0A=
			if ( typeof context.getElementById !=3D=3D "undefined" && !isXML ) {=0A=
				var m =3D context.getElementById(match[1]);=0A=
				return m ? m.id =3D=3D=3D match[1] || typeof m.getAttributeNode =
!=3D=3D "undefined" && m.getAttributeNode("id").nodeValue =3D=3D=3D =
match[1] ? [m] : undefined : [];=0A=
			}=0A=
		};=0A=
=0A=
		Expr.filter.ID =3D function(elem, match){=0A=
			var node =3D typeof elem.getAttributeNode !=3D=3D "undefined" && =
elem.getAttributeNode("id");=0A=
			return elem.nodeType =3D=3D=3D 1 && node && node.nodeValue =3D=3D=3D =
match;=0A=
		};=0A=
	}=0A=
=0A=
	root.removeChild( form );=0A=
	root =3D form =3D null; // release memory in IE=0A=
})();=0A=
=0A=
(function(){=0A=
=0A=
	var div =3D document.createElement("div");=0A=
	div.appendChild( document.createComment("") );=0A=
=0A=
	if ( div.getElementsByTagName("*").length > 0 ) {=0A=
		Expr.find.TAG =3D function(match, context){=0A=
			var results =3D context.getElementsByTagName(match[1]);=0A=
=0A=
			if ( match[1] =3D=3D=3D "*" ) {=0A=
				var tmp =3D [];=0A=
=0A=
				for ( var i =3D 0; results[i]; i++ ) {=0A=
					if ( results[i].nodeType =3D=3D=3D 1 ) {=0A=
						tmp.push( results[i] );=0A=
					}=0A=
				}=0A=
=0A=
				results =3D tmp;=0A=
			}=0A=
=0A=
			return results;=0A=
		};=0A=
	}=0A=
=0A=
	div.innerHTML =3D "<a href=3D'#'></a>";=0A=
	if ( div.firstChild && typeof div.firstChild.getAttribute !=3D=3D =
"undefined" &&=0A=
			div.firstChild.getAttribute("href") !=3D=3D "#" ) {=0A=
		Expr.attrHandle.href =3D function(elem){=0A=
			return elem.getAttribute("href", 2);=0A=
		};=0A=
	}=0A=
=0A=
	div =3D null; // release memory in IE=0A=
})();=0A=
=0A=
if ( document.querySelectorAll ) (function(){=0A=
	var oldSizzle =3D Sizzle, div =3D document.createElement("div");=0A=
	div.innerHTML =3D "<p class=3D'TEST'></p>";=0A=
=0A=
	if ( div.querySelectorAll && div.querySelectorAll(".TEST").length =
=3D=3D=3D 0 ) {=0A=
		return;=0A=
	}=0A=
=0A=
	Sizzle =3D function(query, context, extra, seed){=0A=
		context =3D context || document;=0A=
=0A=
		if ( !seed && context.nodeType =3D=3D=3D 9 && !isXML(context) ) {=0A=
			try {=0A=
				return makeArray( context.querySelectorAll(query), extra );=0A=
			} catch(e){}=0A=
		}=0A=
=0A=
		return oldSizzle(query, context, extra, seed);=0A=
	};=0A=
=0A=
	for ( var prop in oldSizzle ) {=0A=
		Sizzle[ prop ] =3D oldSizzle[ prop ];=0A=
	}=0A=
=0A=
	div =3D null; // release memory in IE=0A=
})();=0A=
=0A=
if ( document.getElementsByClassName && =
document.documentElement.getElementsByClassName ) (function(){=0A=
	var div =3D document.createElement("div");=0A=
	div.innerHTML =3D "<div class=3D'test e'></div><div =
class=3D'test'></div>";=0A=
=0A=
	if ( div.getElementsByClassName("e").length =3D=3D=3D 0 )=0A=
		return;=0A=
=0A=
	div.lastChild.className =3D "e";=0A=
=0A=
	if ( div.getElementsByClassName("e").length =3D=3D=3D 1 )=0A=
		return;=0A=
=0A=
	Expr.order.splice(1, 0, "CLASS");=0A=
	Expr.find.CLASS =3D function(match, context, isXML) {=0A=
		if ( typeof context.getElementsByClassName !=3D=3D "undefined" && =
!isXML ) {=0A=
			return context.getElementsByClassName(match[1]);=0A=
		}=0A=
	};=0A=
=0A=
	div =3D null; // release memory in IE=0A=
})();=0A=
=0A=
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {=0A=
	var sibDir =3D dir =3D=3D "previousSibling" && !isXML;=0A=
	for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
		var elem =3D checkSet[i];=0A=
		if ( elem ) {=0A=
			if ( sibDir && elem.nodeType =3D=3D=3D 1 ){=0A=
				elem.sizcache =3D doneName;=0A=
				elem.sizset =3D i;=0A=
			}=0A=
			elem =3D elem[dir];=0A=
			var match =3D false;=0A=
=0A=
			while ( elem ) {=0A=
				if ( elem.sizcache =3D=3D=3D doneName ) {=0A=
					match =3D checkSet[elem.sizset];=0A=
					break;=0A=
				}=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 && !isXML ){=0A=
					elem.sizcache =3D doneName;=0A=
					elem.sizset =3D i;=0A=
				}=0A=
=0A=
				if ( elem.nodeName =3D=3D=3D cur ) {=0A=
					match =3D elem;=0A=
					break;=0A=
				}=0A=
=0A=
				elem =3D elem[dir];=0A=
			}=0A=
=0A=
			checkSet[i] =3D match;=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {=0A=
	var sibDir =3D dir =3D=3D "previousSibling" && !isXML;=0A=
	for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
		var elem =3D checkSet[i];=0A=
		if ( elem ) {=0A=
			if ( sibDir && elem.nodeType =3D=3D=3D 1 ) {=0A=
				elem.sizcache =3D doneName;=0A=
				elem.sizset =3D i;=0A=
			}=0A=
			elem =3D elem[dir];=0A=
			var match =3D false;=0A=
=0A=
			while ( elem ) {=0A=
				if ( elem.sizcache =3D=3D=3D doneName ) {=0A=
					match =3D checkSet[elem.sizset];=0A=
					break;=0A=
				}=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
					if ( !isXML ) {=0A=
						elem.sizcache =3D doneName;=0A=
						elem.sizset =3D i;=0A=
					}=0A=
					if ( typeof cur !=3D=3D "string" ) {=0A=
						if ( elem =3D=3D=3D cur ) {=0A=
							match =3D true;=0A=
							break;=0A=
						}=0A=
=0A=
					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {=0A=
						match =3D elem;=0A=
						break;=0A=
					}=0A=
				}=0A=
=0A=
				elem =3D elem[dir];=0A=
			}=0A=
=0A=
			checkSet[i] =3D match;=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
var contains =3D document.compareDocumentPosition ?  function(a, b){=0A=
	return a.compareDocumentPosition(b) & 16;=0A=
} : function(a, b){=0A=
	return a !=3D=3D b && (a.contains ? a.contains(b) : true);=0A=
};=0A=
=0A=
var isXML =3D function(elem){=0A=
	return elem.nodeType =3D=3D=3D 9 && elem.documentElement.nodeName =
!=3D=3D "HTML" ||=0A=
		!!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName =
!=3D=3D "HTML";=0A=
};=0A=
=0A=
var posProcess =3D function(selector, context){=0A=
	var tmpSet =3D [], later =3D "", match,=0A=
		root =3D context.nodeType ? [context] : context;=0A=
=0A=
	while ( (match =3D Expr.match.PSEUDO.exec( selector )) ) {=0A=
		later +=3D match[0];=0A=
		selector =3D selector.replace( Expr.match.PSEUDO, "" );=0A=
	}=0A=
=0A=
	selector =3D Expr.relative[selector] ? selector + "*" : selector;=0A=
=0A=
	for ( var i =3D 0, l =3D root.length; i < l; i++ ) {=0A=
		Sizzle( selector, root[i], tmpSet );=0A=
	}=0A=
=0A=
	return Sizzle.filter( later, tmpSet );=0A=
};=0A=
=0A=
=0A=
window.Sizzle =3D Sizzle;=0A=
=0A=
})();=0A=
=0A=
;(function(engine) {=0A=
  var extendElements =3D Prototype.Selector.extendElements;=0A=
=0A=
  function select(selector, scope) {=0A=
    return extendElements(engine(selector, scope || document));=0A=
  }=0A=
=0A=
  function match(element, selector) {=0A=
    return engine.matches(selector, [element]).length =3D=3D 1;=0A=
  }=0A=
=0A=
  Prototype.Selector.engine =3D engine;=0A=
  Prototype.Selector.select =3D select;=0A=
  Prototype.Selector.match =3D match;=0A=
})(Sizzle);=0A=
=0A=
window.Sizzle =3D Prototype._original_property;=0A=
delete Prototype._original_property;=0A=
=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    form =3D $(form);=0A=
    form.reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, options) {=0A=
    if (typeof options !=3D 'object') options =3D { hash: !!options };=0A=
    else if (Object.isUndefined(options.hash)) options.hash =3D true;=0A=
    var key, value, submitted =3D false, submit =3D options.submit, =
accumulator, initial;=0A=
=0A=
    if (options.hash) {=0A=
      initial =3D {};=0A=
      accumulator =3D function(result, key, value) {=0A=
        if (key in result) {=0A=
          if (!Object.isArray(result[key])) result[key] =3D =
[result[key]];=0A=
          result[key].push(value);=0A=
        } else result[key] =3D value;=0A=
        return result;=0A=
      };=0A=
    } else {=0A=
      initial =3D '';=0A=
      accumulator =3D function(result, key, value) {=0A=
        return result + (result ? '&' : '') + encodeURIComponent(key) + =
'=3D' + encodeURIComponent(value);=0A=
      }=0A=
    }=0A=
=0A=
    return elements.inject(initial, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        key =3D element.name; value =3D $(element).getValue();=0A=
        if (value !=3D null && element.type !=3D 'file' && (element.type =
!=3D 'submit' || (!submitted &&=0A=
            submit !=3D=3D false && (!submit || key =3D=3D submit) && =
(submitted =3D true)))) {=0A=
          result =3D accumulator(result, key, value);=0A=
        }=0A=
      }=0A=
      return result;=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, options) {=0A=
    return Form.serializeElements(Form.getElements(form), options);=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    var elements =3D $(form).getElementsByTagName('*'),=0A=
        element,=0A=
        arr =3D [ ],=0A=
        serializers =3D Form.Element.Serializers;=0A=
    for (var i =3D 0; element =3D elements[i]; i++) {=0A=
      arr.push(element);=0A=
    }=0A=
    return arr.inject([], function(elements, child) {=0A=
      if (serializers[child.tagName.toLowerCase()])=0A=
        elements.push(Element.extend(child));=0A=
      return elements;=0A=
    })=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
    if (!typeName && !name) return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('disable');=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('enable');=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    var elements =3D $(form).getElements().findAll(function(element) {=0A=
      return 'hidden' !=3D element.type && !element.disabled;=0A=
    });=0A=
    var firstByIndex =3D elements.findAll(function(element) {=0A=
      return element.hasAttribute('tabIndex') && element.tabIndex >=3D 0;=0A=
    }).sortBy(function(element) { return element.tabIndex }).first();=0A=
=0A=
    return firstByIndex ? firstByIndex : elements.find(function(element) =
{=0A=
      return /^(?:input|select|textarea)$/i.test(element.tagName);=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    var element =3D form.findFirstElement();=0A=
    if (element) element.activate();=0A=
    return form;=0A=
  },=0A=
=0A=
  request: function(form, options) {=0A=
    form =3D $(form), options =3D Object.clone(options || { });=0A=
=0A=
    var params =3D options.parameters, action =3D =
form.readAttribute('action') || '';=0A=
    if (action.blank()) action =3D window.location.href;=0A=
    options.parameters =3D form.serialize(true);=0A=
=0A=
    if (params) {=0A=
      if (Object.isString(params)) params =3D params.toQueryParams();=0A=
      Object.extend(options.parameters, params);=0A=
    }=0A=
=0A=
    if (form.hasAttribute('method') && !options.method)=0A=
      options.method =3D form.method;=0A=
=0A=
    return new Ajax.Request(action, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Form.Element.Methods =3D {=0A=
=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && element.name) {=0A=
      var value =3D element.getValue();=0A=
      if (value !=3D undefined) {=0A=
        var pair =3D { };=0A=
        pair[element.name] =3D value;=0A=
        return Object.toQueryString(pair);=0A=
      }=0A=
    }=0A=
    return '';=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    return Form.Element.Serializers[method](element);=0A=
  },=0A=
=0A=
  setValue: function(element, value) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    Form.Element.Serializers[method](element, value);=0A=
    return element;=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    try {=0A=
      element.focus();=0A=
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||=0A=
          !(/^(?:button|reset|submit)$/i.test(element.type))))=0A=
        element.select();=0A=
    } catch (e) { }=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Field =3D Form.Element;=0A=
=0A=
var $F =3D Form.Element.Methods.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D (function() {=0A=
  function input(element, value) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return inputSelector(element, value);=0A=
      default:=0A=
        return valueSelector(element, value);=0A=
    }=0A=
  }=0A=
=0A=
  function inputSelector(element, value) {=0A=
    if (Object.isUndefined(value))=0A=
      return element.checked ? element.value : null;=0A=
    else element.checked =3D !!value;=0A=
  }=0A=
=0A=
  function valueSelector(element, value) {=0A=
    if (Object.isUndefined(value)) return element.value;=0A=
    else element.value =3D value;=0A=
  }=0A=
=0A=
  function select(element, value) {=0A=
    if (Object.isUndefined(value))=0A=
      return (element.type =3D=3D=3D 'select-one' ? selectOne : =
selectMany)(element);=0A=
=0A=
    var opt, currentValue, single =3D !Object.isArray(value);=0A=
    for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
      opt =3D element.options[i];=0A=
      currentValue =3D this.optionValue(opt);=0A=
      if (single) {=0A=
        if (currentValue =3D=3D value) {=0A=
          opt.selected =3D true;=0A=
          return;=0A=
        }=0A=
      }=0A=
      else opt.selected =3D value.include(currentValue);=0A=
    }=0A=
  }=0A=
=0A=
  function selectOne(element) {=0A=
    var index =3D element.selectedIndex;=0A=
    return index >=3D 0 ? optionValue(element.options[index]) : null;=0A=
  }=0A=
=0A=
  function selectMany(element) {=0A=
    var values, length =3D element.length;=0A=
    if (!length) return null;=0A=
=0A=
    for (var i =3D 0, values =3D []; i < length; i++) {=0A=
      var opt =3D element.options[i];=0A=
      if (opt.selected) values.push(optionValue(opt));=0A=
    }=0A=
    return values;=0A=
  }=0A=
=0A=
  function optionValue(opt) {=0A=
    return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;=0A=
  }=0A=
=0A=
  return {=0A=
    input:         input,=0A=
    inputSelector: inputSelector,=0A=
    textarea:      valueSelector,=0A=
    select:        select,=0A=
    selectOne:     selectOne,=0A=
    selectMany:    selectMany,=0A=
    optionValue:   optionValue,=0A=
    button:        valueSelector=0A=
  };=0A=
})();=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
=0A=
Abstract.TimedObserver =3D Class.create(PeriodicalExecuter, {=0A=
  initialize: function($super, element, frequency, callback) {=0A=
    $super(callback, frequency);=0A=
    this.element   =3D $(element);=0A=
    this.lastValue =3D this.getValue();=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    var value =3D this.getValue();=0A=
    if (Object.isString(this.lastValue) && Object.isString(value) ?=0A=
        this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value)) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D Class.create({=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    Form.getElements(this.element).each(this.registerCallback, this);=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
(function() {=0A=
=0A=
  var Event =3D {=0A=
    KEY_BACKSPACE: 8,=0A=
    KEY_TAB:       9,=0A=
    KEY_RETURN:   13,=0A=
    KEY_ESC:      27,=0A=
    KEY_LEFT:     37,=0A=
    KEY_UP:       38,=0A=
    KEY_RIGHT:    39,=0A=
    KEY_DOWN:     40,=0A=
    KEY_DELETE:   46,=0A=
    KEY_HOME:     36,=0A=
    KEY_END:      35,=0A=
    KEY_PAGEUP:   33,=0A=
    KEY_PAGEDOWN: 34,=0A=
    KEY_INSERT:   45,=0A=
=0A=
    cache: {}=0A=
  };=0A=
=0A=
  var docEl =3D document.documentElement;=0A=
  var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED =3D 'onmouseenter' in docEl=0A=
    && 'onmouseleave' in docEl;=0A=
=0A=
=0A=
=0A=
  var isIELegacyEvent =3D function(event) { return false; };=0A=
=0A=
  if (window.attachEvent) {=0A=
    if (window.addEventListener) {=0A=
      isIELegacyEvent =3D function(event) {=0A=
        return !(event instanceof window.Event);=0A=
      };=0A=
    } else {=0A=
      isIELegacyEvent =3D function(event) { return true; };=0A=
    }=0A=
  }=0A=
=0A=
  var _isButton;=0A=
=0A=
  function _isButtonForDOMEvents(event, code) {=0A=
    return event.which ? (event.which =3D=3D=3D code + 1) : =
(event.button =3D=3D=3D code);=0A=
  }=0A=
=0A=
  var legacyButtonMap =3D { 0: 1, 1: 4, 2: 2 };=0A=
  function _isButtonForLegacyEvents(event, code) {=0A=
    return event.button =3D=3D=3D legacyButtonMap[code];=0A=
  }=0A=
=0A=
  function _isButtonForWebKit(event, code) {=0A=
    switch (code) {=0A=
      case 0: return event.which =3D=3D 1 && !event.metaKey;=0A=
      case 1: return event.which =3D=3D 2 || (event.which =3D=3D 1 && =
event.metaKey);=0A=
      case 2: return event.which =3D=3D 3;=0A=
      default: return false;=0A=
    }=0A=
  }=0A=
=0A=
  if (window.attachEvent) {=0A=
    if (!window.addEventListener) {=0A=
      _isButton =3D _isButtonForLegacyEvents;=0A=
    } else {=0A=
      _isButton =3D function(event, code) {=0A=
        return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, =
code) :=0A=
         _isButtonForDOMEvents(event, code);=0A=
      }=0A=
    }=0A=
  } else if (Prototype.Browser.WebKit) {=0A=
    _isButton =3D _isButtonForWebKit;=0A=
  } else {=0A=
    _isButton =3D _isButtonForDOMEvents;=0A=
  }=0A=
=0A=
  function isLeftClick(event)   { return _isButton(event, 0) }=0A=
=0A=
  function isMiddleClick(event) { return _isButton(event, 1) }=0A=
=0A=
  function isRightClick(event)  { return _isButton(event, 2) }=0A=
=0A=
  function element(event) {=0A=
    event =3D Event.extend(event);=0A=
=0A=
    var node =3D event.target, type =3D event.type,=0A=
     currentTarget =3D event.currentTarget;=0A=
=0A=
    if (currentTarget && currentTarget.tagName) {=0A=
      if (type =3D=3D=3D 'load' || type =3D=3D=3D 'error' ||=0A=
        (type =3D=3D=3D 'click' && currentTarget.tagName.toLowerCase() =
=3D=3D=3D 'input'=0A=
          && currentTarget.type =3D=3D=3D 'radio'))=0A=
            node =3D currentTarget;=0A=
    }=0A=
=0A=
    if (node.nodeType =3D=3D Node.TEXT_NODE)=0A=
      node =3D node.parentNode;=0A=
=0A=
    return Element.extend(node);=0A=
  }=0A=
=0A=
  function findElement(event, expression) {=0A=
    var element =3D Event.element(event);=0A=
=0A=
    if (!expression) return element;=0A=
    while (element) {=0A=
      if (Object.isElement(element) && Prototype.Selector.match(element, =
expression)) {=0A=
        return Element.extend(element);=0A=
      }=0A=
      element =3D element.parentNode;=0A=
    }=0A=
  }=0A=
=0A=
  function pointer(event) {=0A=
    return { x: pointerX(event), y: pointerY(event) };=0A=
  }=0A=
=0A=
  function pointerX(event) {=0A=
    var docElement =3D document.documentElement,=0A=
     body =3D document.body || { scrollLeft: 0 };=0A=
=0A=
    return event.pageX || (event.clientX +=0A=
      (docElement.scrollLeft || body.scrollLeft) -=0A=
      (docElement.clientLeft || 0));=0A=
  }=0A=
=0A=
  function pointerY(event) {=0A=
    var docElement =3D document.documentElement,=0A=
     body =3D document.body || { scrollTop: 0 };=0A=
=0A=
    return  event.pageY || (event.clientY +=0A=
       (docElement.scrollTop || body.scrollTop) -=0A=
       (docElement.clientTop || 0));=0A=
  }=0A=
=0A=
=0A=
  function stop(event) {=0A=
    Event.extend(event);=0A=
    event.preventDefault();=0A=
    event.stopPropagation();=0A=
=0A=
    event.stopped =3D true;=0A=
  }=0A=
=0A=
=0A=
  Event.Methods =3D {=0A=
    isLeftClick:   isLeftClick,=0A=
    isMiddleClick: isMiddleClick,=0A=
    isRightClick:  isRightClick,=0A=
=0A=
    element:     element,=0A=
    findElement: findElement,=0A=
=0A=
    pointer:  pointer,=0A=
    pointerX: pointerX,=0A=
    pointerY: pointerY,=0A=
=0A=
    stop: stop=0A=
  };=0A=
=0A=
  var methods =3D Object.keys(Event.Methods).inject({ }, function(m, =
name) {=0A=
    m[name] =3D Event.Methods[name].methodize();=0A=
    return m;=0A=
  });=0A=
=0A=
  if (window.attachEvent) {=0A=
    function _relatedTarget(event) {=0A=
      var element;=0A=
      switch (event.type) {=0A=
        case 'mouseover':=0A=
        case 'mouseenter':=0A=
          element =3D event.fromElement;=0A=
          break;=0A=
        case 'mouseout':=0A=
        case 'mouseleave':=0A=
          element =3D event.toElement;=0A=
          break;=0A=
        default:=0A=
          return null;=0A=
      }=0A=
      return Element.extend(element);=0A=
    }=0A=
=0A=
    var additionalMethods =3D {=0A=
      stopPropagation: function() { this.cancelBubble =3D true },=0A=
      preventDefault:  function() { this.returnValue =3D false },=0A=
      inspect: function() { return '[object Event]' }=0A=
    };=0A=
=0A=
    Event.extend =3D function(event, element) {=0A=
      if (!event) return false;=0A=
=0A=
      if (!isIELegacyEvent(event)) return event;=0A=
=0A=
      if (event._extendedByPrototype) return event;=0A=
      event._extendedByPrototype =3D Prototype.emptyFunction;=0A=
=0A=
      var pointer =3D Event.pointer(event);=0A=
=0A=
      Object.extend(event, {=0A=
        target: event.srcElement || element,=0A=
        relatedTarget: _relatedTarget(event),=0A=
        pageX:  pointer.x,=0A=
        pageY:  pointer.y=0A=
      });=0A=
=0A=
      Object.extend(event, methods);=0A=
      Object.extend(event, additionalMethods);=0A=
=0A=
      return event;=0A=
    };=0A=
  } else {=0A=
    Event.extend =3D Prototype.K;=0A=
  }=0A=
=0A=
  if (window.addEventListener) {=0A=
    Event.prototype =3D window.Event.prototype || =
document.createEvent('HTMLEvents').__proto__;=0A=
    Object.extend(Event.prototype, methods);=0A=
  }=0A=
=0A=
  function _createResponder(element, eventName, handler) {=0A=
    var registry =3D Element.retrieve(element, =
'prototype_event_registry');=0A=
=0A=
    if (Object.isUndefined(registry)) {=0A=
      CACHE.push(element);=0A=
      registry =3D Element.retrieve(element, 'prototype_event_registry', =
$H());=0A=
    }=0A=
=0A=
    var respondersForEvent =3D registry.get(eventName);=0A=
    if (Object.isUndefined(respondersForEvent)) {=0A=
      respondersForEvent =3D [];=0A=
      registry.set(eventName, respondersForEvent);=0A=
    }=0A=
=0A=
    if (respondersForEvent.pluck('handler').include(handler)) return =
false;=0A=
=0A=
    var responder;=0A=
    if (eventName.include(":")) {=0A=
      responder =3D function(event) {=0A=
        if (Object.isUndefined(event.eventName))=0A=
          return false;=0A=
=0A=
        if (event.eventName !=3D=3D eventName)=0A=
          return false;=0A=
=0A=
        Event.extend(event, element);=0A=
        handler.call(element, event);=0A=
      };=0A=
    } else {=0A=
      if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&=0A=
       (eventName =3D=3D=3D "mouseenter" || eventName =3D=3D=3D =
"mouseleave")) {=0A=
        if (eventName =3D=3D=3D "mouseenter" || eventName =3D=3D=3D =
"mouseleave") {=0A=
          responder =3D function(event) {=0A=
            Event.extend(event, element);=0A=
=0A=
            var parent =3D event.relatedTarget;=0A=
            while (parent && parent !=3D=3D element) {=0A=
              try { parent =3D parent.parentNode; }=0A=
              catch(e) { parent =3D element; }=0A=
            }=0A=
=0A=
            if (parent =3D=3D=3D element) return;=0A=
=0A=
            handler.call(element, event);=0A=
          };=0A=
        }=0A=
      } else {=0A=
        responder =3D function(event) {=0A=
          Event.extend(event, element);=0A=
          handler.call(element, event);=0A=
        };=0A=
      }=0A=
    }=0A=
=0A=
    responder.handler =3D handler;=0A=
    respondersForEvent.push(responder);=0A=
    return responder;=0A=
  }=0A=
=0A=
  function _destroyCache() {=0A=
    for (var i =3D 0, length =3D CACHE.length; i < length; i++) {=0A=
      Event.stopObserving(CACHE[i]);=0A=
      CACHE[i] =3D null;=0A=
    }=0A=
  }=0A=
=0A=
  var CACHE =3D [];=0A=
=0A=
  if (Prototype.Browser.IE)=0A=
    window.attachEvent('onunload', _destroyCache);=0A=
=0A=
  if (Prototype.Browser.WebKit)=0A=
    window.addEventListener('unload', Prototype.emptyFunction, false);=0A=
=0A=
=0A=
  var _getDOMEventName =3D Prototype.K,=0A=
      translations =3D { mouseenter: "mouseover", mouseleave: "mouseout" =
};=0A=
=0A=
  if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {=0A=
    _getDOMEventName =3D function(eventName) {=0A=
      return (translations[eventName] || eventName);=0A=
    };=0A=
  }=0A=
=0A=
  function observe(element, eventName, handler) {=0A=
    element =3D $(element);=0A=
=0A=
    var responder =3D _createResponder(element, eventName, handler);=0A=
=0A=
    if (!responder) return element;=0A=
=0A=
    if (eventName.include(':')) {=0A=
      if (element.addEventListener)=0A=
        element.addEventListener("dataavailable", responder, false);=0A=
      else {=0A=
        element.attachEvent("ondataavailable", responder);=0A=
        element.attachEvent("onlosecapture", responder);=0A=
      }=0A=
    } else {=0A=
      var actualEventName =3D _getDOMEventName(eventName);=0A=
=0A=
      if (element.addEventListener)=0A=
        element.addEventListener(actualEventName, responder, false);=0A=
      else=0A=
        element.attachEvent("on" + actualEventName, responder);=0A=
    }=0A=
=0A=
    return element;=0A=
  }=0A=
=0A=
  function stopObserving(element, eventName, handler) {=0A=
    element =3D $(element);=0A=
=0A=
    var registry =3D Element.retrieve(element, =
'prototype_event_registry');=0A=
    if (!registry) return element;=0A=
=0A=
    if (!eventName) {=0A=
      registry.each( function(pair) {=0A=
        var eventName =3D pair.key;=0A=
        stopObserving(element, eventName);=0A=
      });=0A=
      return element;=0A=
    }=0A=
=0A=
    var responders =3D registry.get(eventName);=0A=
    if (!responders) return element;=0A=
=0A=
    if (!handler) {=0A=
      responders.each(function(r) {=0A=
        stopObserving(element, eventName, r.handler);=0A=
      });=0A=
      return element;=0A=
    }=0A=
=0A=
    var i =3D responders.length, responder;=0A=
    while (i--) {=0A=
      if (responders[i].handler =3D=3D=3D handler) {=0A=
        responder =3D responders[i];=0A=
        break;=0A=
      }=0A=
    }=0A=
    if (!responder) return element;=0A=
=0A=
    if (eventName.include(':')) {=0A=
      if (element.removeEventListener)=0A=
        element.removeEventListener("dataavailable", responder, false);=0A=
      else {=0A=
        element.detachEvent("ondataavailable", responder);=0A=
        element.detachEvent("onlosecapture", responder);=0A=
      }=0A=
    } else {=0A=
      var actualEventName =3D _getDOMEventName(eventName);=0A=
      if (element.removeEventListener)=0A=
        element.removeEventListener(actualEventName, responder, false);=0A=
      else=0A=
        element.detachEvent('on' + actualEventName, responder);=0A=
    }=0A=
=0A=
    registry.set(eventName, responders.without(responder));=0A=
=0A=
    return element;=0A=
  }=0A=
=0A=
  function fire(element, eventName, memo, bubble) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Object.isUndefined(bubble))=0A=
      bubble =3D true;=0A=
=0A=
    if (element =3D=3D document && document.createEvent && =
!element.dispatchEvent)=0A=
      element =3D document.documentElement;=0A=
=0A=
    var event;=0A=
    if (document.createEvent) {=0A=
      event =3D document.createEvent('HTMLEvents');=0A=
      event.initEvent('dataavailable', bubble, true);=0A=
    } else {=0A=
      event =3D document.createEventObject();=0A=
      event.eventType =3D bubble ? 'ondataavailable' : 'onlosecapture';=0A=
    }=0A=
=0A=
    event.eventName =3D eventName;=0A=
    event.memo =3D memo || { };=0A=
=0A=
    if (document.createEvent)=0A=
      element.dispatchEvent(event);=0A=
    else=0A=
      element.fireEvent(event.eventType, event);=0A=
=0A=
    return Event.extend(event);=0A=
  }=0A=
=0A=
  Event.Handler =3D Class.create({=0A=
    initialize: function(element, eventName, selector, callback) {=0A=
      this.element   =3D $(element);=0A=
      this.eventName =3D eventName;=0A=
      this.selector  =3D selector;=0A=
      this.callback  =3D callback;=0A=
      this.handler   =3D this.handleEvent.bind(this);=0A=
    },=0A=
=0A=
    start: function() {=0A=
      Event.observe(this.element, this.eventName, this.handler);=0A=
      return this;=0A=
    },=0A=
=0A=
    stop: function() {=0A=
      Event.stopObserving(this.element, this.eventName, this.handler);=0A=
      return this;=0A=
    },=0A=
=0A=
    handleEvent: function(event) {=0A=
      var element =3D Event.findElement(event, this.selector);=0A=
      if (element) this.callback.call(this.element, event, element);=0A=
    }=0A=
  });=0A=
=0A=
  function on(element, eventName, selector, callback) {=0A=
    element =3D $(element);=0A=
    if (Object.isFunction(selector) && Object.isUndefined(callback)) {=0A=
      callback =3D selector, selector =3D null;=0A=
    }=0A=
=0A=
    return new Event.Handler(element, eventName, selector, =
callback).start();=0A=
  }=0A=
=0A=
  Object.extend(Event, Event.Methods);=0A=
=0A=
  Object.extend(Event, {=0A=
    fire:          fire,=0A=
    observe:       observe,=0A=
    stopObserving: stopObserving,=0A=
    on:            on=0A=
  });=0A=
=0A=
  Element.addMethods({=0A=
    fire:          fire,=0A=
=0A=
    observe:       observe,=0A=
=0A=
    stopObserving: stopObserving,=0A=
=0A=
    on:            on=0A=
  });=0A=
=0A=
  Object.extend(document, {=0A=
    fire:          fire.methodize(),=0A=
=0A=
    observe:       observe.methodize(),=0A=
=0A=
    stopObserving: stopObserving.methodize(),=0A=
=0A=
    on:            on.methodize(),=0A=
=0A=
    loaded:        false=0A=
  });=0A=
=0A=
  if (window.Event) Object.extend(window.Event, Event);=0A=
  else window.Event =3D Event;=0A=
})();=0A=
=0A=
(function() {=0A=
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,=0A=
     Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */=0A=
=0A=
  var timer;=0A=
=0A=
  function fireContentLoadedEvent() {=0A=
    if (document.loaded) return;=0A=
    if (timer) window.clearTimeout(timer);=0A=
    document.loaded =3D true;=0A=
    document.fire('dom:loaded');=0A=
  }=0A=
=0A=
  function checkReadyState() {=0A=
    if (document.readyState =3D=3D=3D 'complete') {=0A=
      document.stopObserving('readystatechange', checkReadyState);=0A=
      fireContentLoadedEvent();=0A=
    }=0A=
  }=0A=
=0A=
  function pollDoScroll() {=0A=
    try { document.documentElement.doScroll('left'); }=0A=
    catch(e) {=0A=
      timer =3D pollDoScroll.defer();=0A=
      return;=0A=
    }=0A=
    fireContentLoadedEvent();=0A=
  }=0A=
=0A=
  if (document.addEventListener) {=0A=
    document.addEventListener('DOMContentLoaded', =
fireContentLoadedEvent, false);=0A=
  } else {=0A=
    document.observe('readystatechange', checkReadyState);=0A=
    if (window =3D=3D top)=0A=
      timer =3D pollDoScroll.defer();=0A=
  }=0A=
=0A=
  Event.observe(window, 'load', fireContentLoadedEvent);=0A=
})();=0A=
=0A=
Element.addMethods();=0A=
=0A=
/*------------------------------- DEPRECATED =
-------------------------------*/=0A=
=0A=
Hash.toQueryString =3D Object.toQueryString;=0A=
=0A=
var Toggle =3D { display: Element.toggle };=0A=
=0A=
Element.Methods.childOf =3D Element.Methods.descendantOf;=0A=
=0A=
var Insertion =3D {=0A=
  Before: function(element, content) {=0A=
    return Element.insert(element, {before:content});=0A=
  },=0A=
=0A=
  Top: function(element, content) {=0A=
    return Element.insert(element, {top:content});=0A=
  },=0A=
=0A=
  Bottom: function(element, content) {=0A=
    return Element.insert(element, {bottom:content});=0A=
  },=0A=
=0A=
  After: function(element, content) {=0A=
    return Element.insert(element, {after:content});=0A=
  }=0A=
};=0A=
=0A=
var $continue =3D new Error('"throw $continue" is deprecated, use =
"return" instead');=0A=
=0A=
var Position =3D {=0A=
  includeScrollOffsets: false,=0A=
=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D Element.cumulativeScrollOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
=0A=
  cumulativeOffset: Element.Methods.cumulativeOffset,=0A=
=0A=
  positionedOffset: Element.Methods.positionedOffset,=0A=
=0A=
  absolutize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.absolutize(element);=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.relativize(element);=0A=
  },=0A=
=0A=
  realOffset: Element.Methods.cumulativeScrollOffset,=0A=
=0A=
  offsetParent: Element.Methods.getOffsetParent,=0A=
=0A=
  page: Element.Methods.viewportOffset,=0A=
=0A=
  clone: function(source, target, options) {=0A=
    options =3D options || { };=0A=
    return Element.clonePosition(target, source, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!document.getElementsByClassName) document.getElementsByClassName =
=3D function(instanceMethods){=0A=
  function iter(name) {=0A=
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' =
" + name + " ')]";=0A=
  }=0A=
=0A=
  instanceMethods.getElementsByClassName =3D =
Prototype.BrowserFeatures.XPath ?=0A=
  function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var cond =3D /\s/.test(className) ? $w(className).map(iter).join('') =
: iter(className);=0A=
    return cond ? document._getElementsByXPath('.//*' + cond, element) : =
[];=0A=
  } : function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var elements =3D [], classNames =3D (/\s/.test(className) ? =
$w(className) : null);=0A=
    if (!classNames && !className) return elements;=0A=
=0A=
    var nodes =3D $(element).getElementsByTagName('*');=0A=
    className =3D ' ' + className + ' ';=0A=
=0A=
    for (var i =3D 0, child, cn; child =3D nodes[i]; i++) {=0A=
      if (child.className && (cn =3D ' ' + child.className + ' ') && =
(cn.include(className) ||=0A=
          (classNames && classNames.all(function(name) {=0A=
            return !name.toString().blank() && cn.include(' ' + name + ' =
');=0A=
          }))))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  };=0A=
=0A=
  return function(className, parentElement) {=0A=
    return $(parentElement || =
document.body).getElementsByClassName(className);=0A=
  };=0A=
}(Element.Methods);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
(function() {=0A=
  window.Selector =3D Class.create({=0A=
    initialize: function(expression) {=0A=
      this.expression =3D expression.strip();=0A=
    },=0A=
=0A=
    findElements: function(rootElement) {=0A=
      return Prototype.Selector.select(this.expression, rootElement);=0A=
    },=0A=
=0A=
    match: function(element) {=0A=
      return Prototype.Selector.match(element, this.expression);=0A=
    },=0A=
=0A=
    toString: function() {=0A=
      return this.expression;=0A=
    },=0A=
=0A=
    inspect: function() {=0A=
      return "#<Selector: " + this.expression + ">";=0A=
    }=0A=
  });=0A=
=0A=
  Object.extend(Selector, {=0A=
    matchElements: function(elements, expression) {=0A=
      var match =3D Prototype.Selector.match,=0A=
          results =3D [];=0A=
=0A=
      for (var i =3D 0, length =3D elements.length; i < length; i++) {=0A=
        var element =3D elements[i];=0A=
        if (match(element, expression)) {=0A=
          results.push(Element.extend(element));=0A=
        }=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    findElement: function(elements, expression, index) {=0A=
      index =3D index || 0;=0A=
      var matchIndex =3D 0, element;=0A=
      for (var i =3D 0, length =3D elements.length; i < length; i++) {=0A=
        element =3D elements[i];=0A=
        if (Prototype.Selector.match(element, expression) && index =
=3D=3D=3D matchIndex++) {=0A=
          return Element.extend(element);=0A=
        }=0A=
      }=0A=
    },=0A=
=0A=
    findChildElements: function(element, expressions) {=0A=
      var selector =3D expressions.toArray().join(', ');=0A=
      return Prototype.Selector.select(selector, element || document);=0A=
    }=0A=
  });=0A=
})();=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/lib/ccard.js

// Credit Card Validation Javascript=0A=
// copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd=0A=
=0A=
// You have permission to copy and use this javascript provided that=0A=
// the content of the script is not changed in any way.=0A=
=0A=
function validateCreditCard(s) {=0A=
    // remove non-numerics=0A=
    var v =3D "0123456789";=0A=
    var w =3D "";=0A=
    for (i=3D0; i < s.length; i++) {=0A=
        x =3D s.charAt(i);=0A=
        if (v.indexOf(x,0) !=3D -1)=0A=
        w +=3D x;=0A=
    }=0A=
    // validate number=0A=
    j =3D w.length / 2;=0A=
    k =3D Math.floor(j);=0A=
    m =3D Math.ceil(j) - k;=0A=
    c =3D 0;=0A=
    for (i=3D0; i<k; i++) {=0A=
        a =3D w.charAt(i*2+m) * 2;=0A=
        c +=3D a > 9 ? Math.floor(a/10 + a%10) : a;=0A=
    }=0A=
    for (i=3D0; i<k+m; i++) c +=3D w.charAt(i*2+1-m) * 1;=0A=
    return (c%10 =3D=3D 0);=0A=
}=0A=
=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/prototype/validation.js

/*=0A=
* Really easy field validation with Prototype=0A=
* http://tetlaw.id.au/view/javascript/really-easy-field-validation=0A=
* Andrew Tetlaw=0A=
* Version 1.5.4.1 (2007-01-05)=0A=
*=0A=
* Copyright (c) 2007 Andrew Tetlaw=0A=
* Permission is hereby granted, free of charge, to any person=0A=
* obtaining a copy of this software and associated documentation=0A=
* files (the "Software"), to deal in the Software without=0A=
* restriction, including without limitation the rights to use, copy,=0A=
* modify, merge, publish, distribute, sublicense, and/or sell copies=0A=
* of the Software, and to permit persons to whom the Software is=0A=
* furnished to do so, subject to the following conditions:=0A=
*=0A=
* The above copyright notice and this permission notice shall be=0A=
* included in all copies or substantial portions of the Software.=0A=
*=0A=
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS=0A=
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN=0A=
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN=0A=
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE=0A=
* SOFTWARE.=0A=
*=0A=
*/=0A=
var Validator =3D Class.create();=0A=
=0A=
Validator.prototype =3D {=0A=
    initialize : function(className, error, test, options) {=0A=
        if(typeof test =3D=3D 'function'){=0A=
            this.options =3D $H(options);=0A=
            this._test =3D test;=0A=
        } else {=0A=
            this.options =3D $H(test);=0A=
            this._test =3D function(){return true};=0A=
        }=0A=
        this.error =3D error || 'Validation failed.';=0A=
        this.className =3D className;=0A=
    },=0A=
    test : function(v, elm) {=0A=
        return (this._test(v,elm) && this.options.all(function(p){=0A=
            return Validator.methods[p.key] ? =
Validator.methods[p.key](v,elm,p.value) : true;=0A=
        }));=0A=
    }=0A=
}=0A=
Validator.methods =3D {=0A=
    pattern : function(v,elm,opt) {return =
Validation.get('IsEmpty').test(v) || opt.test(v)},=0A=
    minLength : function(v,elm,opt) {return v.length >=3D opt},=0A=
    maxLength : function(v,elm,opt) {return v.length <=3D opt},=0A=
    min : function(v,elm,opt) {return v >=3D parseFloat(opt)},=0A=
    max : function(v,elm,opt) {return v <=3D parseFloat(opt)},=0A=
    notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {=0A=
        return v !=3D value;=0A=
    })},=0A=
    oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {=0A=
        return v =3D=3D value;=0A=
    })},=0A=
    is : function(v,elm,opt) {return v =3D=3D opt},=0A=
    isNot : function(v,elm,opt) {return v !=3D opt},=0A=
    equalToField : function(v,elm,opt) {return v =3D=3D $F(opt)},=0A=
    notEqualToField : function(v,elm,opt) {return v !=3D $F(opt)},=0A=
    include : function(v,elm,opt) {return $A(opt).all(function(value) {=0A=
        return Validation.get(value).test(v,elm);=0A=
    })}=0A=
}=0A=
=0A=
var Validation =3D Class.create();=0A=
Validation.defaultOptions =3D {=0A=
    onSubmit : true,=0A=
    stopOnFirst : false,=0A=
    immediate : false,=0A=
    focusOnError : true,=0A=
    useTitles : false,=0A=
    addClassNameToContainer: false,=0A=
    containerClassName: '.input-box',=0A=
    onFormValidate : function(result, form) {},=0A=
    onElementValidate : function(result, elm) {}=0A=
};=0A=
=0A=
Validation.prototype =3D {=0A=
    initialize : function(form, options){=0A=
        this.form =3D $(form);=0A=
        if (!this.form) {=0A=
            return;=0A=
        }=0A=
        this.options =3D Object.extend({=0A=
            onSubmit : Validation.defaultOptions.onSubmit,=0A=
            stopOnFirst : Validation.defaultOptions.stopOnFirst,=0A=
            immediate : Validation.defaultOptions.immediate,=0A=
            focusOnError : Validation.defaultOptions.focusOnError,=0A=
            useTitles : Validation.defaultOptions.useTitles,=0A=
            onFormValidate : Validation.defaultOptions.onFormValidate,=0A=
            onElementValidate : =
Validation.defaultOptions.onElementValidate=0A=
        }, options || {});=0A=
        if(this.options.onSubmit) =
Event.observe(this.form,'submit',this.onSubmit.bind(this),false);=0A=
        if(this.options.immediate) {=0A=
            Form.getElements(this.form).each(function(input) { // Thanks =
Mike!=0A=
                if (input.tagName.toLowerCase() =3D=3D 'select') {=0A=
                    Event.observe(input, 'blur', =
this.onChange.bindAsEventListener(this));=0A=
                }=0A=
                if (input.type.toLowerCase() =3D=3D 'radio' || =
input.type.toLowerCase() =3D=3D 'checkbox') {=0A=
                    Event.observe(input, 'click', =
this.onChange.bindAsEventListener(this));=0A=
                } else {=0A=
                    Event.observe(input, 'change', =
this.onChange.bindAsEventListener(this));=0A=
                }=0A=
            }, this);=0A=
        }=0A=
    },=0A=
    onChange : function (ev) {=0A=
        Validation.isOnChange =3D true;=0A=
        Validation.validate(Event.element(ev),{=0A=
                useTitle : this.options.useTitles,=0A=
                onElementValidate : this.options.onElementValidate=0A=
        });=0A=
        Validation.isOnChange =3D false;=0A=
    },=0A=
    onSubmit :  function(ev){=0A=
        if(!this.validate()) Event.stop(ev);=0A=
    },=0A=
    validate : function() {=0A=
        var result =3D false;=0A=
        var useTitles =3D this.options.useTitles;=0A=
        var callback =3D this.options.onElementValidate;=0A=
        try {=0A=
            if(this.options.stopOnFirst) {=0A=
                result =3D Form.getElements(this.form).all(function(elm) =
{=0A=
                    if (elm.hasClassName('local-validation') && =
!this.isElementInForm(elm, this.form)) {=0A=
                        return true;=0A=
                    }=0A=
                    return Validation.validate(elm,{useTitle : =
useTitles, onElementValidate : callback});=0A=
                }, this);=0A=
            } else {=0A=
                result =3D =
Form.getElements(this.form).collect(function(elm) {=0A=
                    if (elm.hasClassName('local-validation') && =
!this.isElementInForm(elm, this.form)) {=0A=
                        return true;=0A=
                    }=0A=
                    return Validation.validate(elm,{useTitle : =
useTitles, onElementValidate : callback});=0A=
                }, this).all();=0A=
            }=0A=
        } catch (e) {=0A=
        }=0A=
        if(!result && this.options.focusOnError) {=0A=
            try{=0A=
                Form.getElements(this.form).findAll(function(elm){return =
$(elm).hasClassName('validation-failed')}).first().focus()=0A=
            }=0A=
            catch(e){=0A=
            }=0A=
        }=0A=
        this.options.onFormValidate(result, this.form);=0A=
        return result;=0A=
    },=0A=
    reset : function() {=0A=
        Form.getElements(this.form).each(Validation.reset);=0A=
    },=0A=
    isElementInForm : function(elm, form) {=0A=
        var domForm =3D elm.up('form');=0A=
        if (domForm =3D=3D form) {=0A=
            return true;=0A=
        }=0A=
        return false;=0A=
    }=0A=
}=0A=
=0A=
Object.extend(Validation, {=0A=
    validate : function(elm, options){=0A=
        options =3D Object.extend({=0A=
            useTitle : false,=0A=
            onElementValidate : function(result, elm) {}=0A=
        }, options || {});=0A=
        elm =3D $(elm);=0A=
=0A=
        var cn =3D $w(elm.className);=0A=
        return result =3D cn.all(function(value) {=0A=
            var test =3D Validation.test(value,elm,options.useTitle);=0A=
            options.onElementValidate(test, elm);=0A=
            return test;=0A=
        });=0A=
    },=0A=
    insertAdvice : function(elm, advice){=0A=
        var container =3D $(elm).up('.field-row');=0A=
        if(container){=0A=
            Element.insert(container, {after: advice});=0A=
        } else if (elm.up('td.value')) {=0A=
            elm.up('td.value').insert({bottom: advice});=0A=
        } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {=0A=
            $(elm.advaiceContainer).update(advice);=0A=
        }=0A=
        else {=0A=
            switch (elm.type.toLowerCase()) {=0A=
                case 'checkbox':=0A=
                case 'radio':=0A=
                    var p =3D elm.parentNode;=0A=
                    if(p) {=0A=
                        Element.insert(p, {'bottom': advice});=0A=
                    } else {=0A=
                        Element.insert(elm, {'after': advice});=0A=
                    }=0A=
                    break;=0A=
                default:=0A=
                    Element.insert(elm, {'after': advice});=0A=
            }=0A=
        }=0A=
    },=0A=
    showAdvice : function(elm, advice, adviceName){=0A=
        if(!elm.advices){=0A=
            elm.advices =3D new Hash();=0A=
        }=0A=
        else{=0A=
            elm.advices.each(function(pair){=0A=
                if (!advice || pair.value.id !=3D advice.id) {=0A=
                    // hide non-current advice after delay=0A=
                    this.hideAdvice(elm, pair.value);=0A=
                }=0A=
            }.bind(this));=0A=
        }=0A=
        elm.advices.set(adviceName, advice);=0A=
        if(typeof Effect =3D=3D 'undefined') {=0A=
            advice.style.display =3D 'block';=0A=
        } else {=0A=
            if(!advice._adviceAbsolutize) {=0A=
                new Effect.Appear(advice, {duration : 1 });=0A=
            } else {=0A=
                Position.absolutize(advice);=0A=
                advice.show();=0A=
                advice.setStyle({=0A=
                    'top':advice._adviceTop,=0A=
                    'left': advice._adviceLeft,=0A=
                    'width': advice._adviceWidth,=0A=
                    'z-index': 1000=0A=
                });=0A=
                advice.addClassName('advice-absolute');=0A=
            }=0A=
        }=0A=
    },=0A=
    hideAdvice : function(elm, advice){=0A=
        if (advice !=3D null) {=0A=
            new Effect.Fade(advice, {duration : 1, afterFinishInternal : =
function() {advice.hide();}});=0A=
        }=0A=
    },=0A=
    updateCallback : function(elm, status) {=0A=
        if (typeof elm.callbackFunction !=3D 'undefined') {=0A=
            eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');=0A=
        }=0A=
    },=0A=
    ajaxError : function(elm, errorMsg) {=0A=
        var name =3D 'validate-ajax';=0A=
        var advice =3D Validation.getAdvice(name, elm);=0A=
        if (advice =3D=3D null) {=0A=
            advice =3D this.createAdvice(name, elm, false, errorMsg);=0A=
        }=0A=
        this.showAdvice(elm, advice, 'validate-ajax');=0A=
        this.updateCallback(elm, 'failed');=0A=
=0A=
        elm.addClassName('validation-failed');=0A=
        elm.addClassName('validate-ajax');=0A=
        if (Validation.defaultOptions.addClassNameToContainer && =
Validation.defaultOptions.containerClassName !=3D '') {=0A=
            var container =3D =
elm.up(Validation.defaultOptions.containerClassName);=0A=
            if (container && this.allowContainerClassName(elm)) {=0A=
                container.removeClassName('validation-passed');=0A=
                container.addClassName('validation-error');=0A=
            }=0A=
        }=0A=
    },=0A=
    allowContainerClassName: function (elm) {=0A=
        if (elm.type =3D=3D 'radio' || elm.type =3D=3D 'checkbox') {=0A=
            return elm.hasClassName('change-container-classname');=0A=
        }=0A=
=0A=
        return true;=0A=
    },=0A=
    test : function(name, elm, useTitle) {=0A=
        var v =3D Validation.get(name);=0A=
        var prop =3D '__advice'+name.camelize();=0A=
        try {=0A=
        if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {=0A=
            //if(!elm[prop]) {=0A=
                var advice =3D Validation.getAdvice(name, elm);=0A=
                if (advice =3D=3D null) {=0A=
                    advice =3D this.createAdvice(name, elm, useTitle);=0A=
                }=0A=
                this.showAdvice(elm, advice, name);=0A=
                this.updateCallback(elm, 'failed');=0A=
            //}=0A=
            elm[prop] =3D 1;=0A=
            if (!elm.advaiceContainer) {=0A=
                elm.removeClassName('validation-passed');=0A=
                elm.addClassName('validation-failed');=0A=
            }=0A=
=0A=
           if (Validation.defaultOptions.addClassNameToContainer && =
Validation.defaultOptions.containerClassName !=3D '') {=0A=
                var container =3D =
elm.up(Validation.defaultOptions.containerClassName);=0A=
                if (container && this.allowContainerClassName(elm)) {=0A=
                    container.removeClassName('validation-passed');=0A=
                    container.addClassName('validation-error');=0A=
                }=0A=
            }=0A=
            return false;=0A=
        } else {=0A=
            var advice =3D Validation.getAdvice(name, elm);=0A=
            this.hideAdvice(elm, advice);=0A=
            this.updateCallback(elm, 'passed');=0A=
            elm[prop] =3D '';=0A=
            elm.removeClassName('validation-failed');=0A=
            elm.addClassName('validation-passed');=0A=
            if (Validation.defaultOptions.addClassNameToContainer && =
Validation.defaultOptions.containerClassName !=3D '') {=0A=
                var container =3D =
elm.up(Validation.defaultOptions.containerClassName);=0A=
                if (container && !container.down('.validation-failed') =
&& this.allowContainerClassName(elm)) {=0A=
                    if (!Validation.get('IsEmpty').test(elm.value) || =
!this.isVisible(elm)) {=0A=
                        container.addClassName('validation-passed');=0A=
                    } else {=0A=
                        container.removeClassName('validation-passed');=0A=
                    }=0A=
                    container.removeClassName('validation-error');=0A=
                }=0A=
            }=0A=
            return true;=0A=
        }=0A=
        } catch(e) {=0A=
            throw(e)=0A=
        }=0A=
    },=0A=
    isVisible : function(elm) {=0A=
        while(elm.tagName !=3D 'BODY') {=0A=
            if(!$(elm).visible()) return false;=0A=
            elm =3D elm.parentNode;=0A=
        }=0A=
        return true;=0A=
    },=0A=
    getAdvice : function(name, elm) {=0A=
        return $('advice-' + name + '-' + Validation.getElmID(elm)) || =
$('advice-' + Validation.getElmID(elm));=0A=
    },=0A=
    createAdvice : function(name, elm, useTitle, customError) {=0A=
        var v =3D Validation.get(name);=0A=
        var errorMsg =3D useTitle ? ((elm && elm.title) ? elm.title : =
v.error) : v.error;=0A=
        if (customError) {=0A=
            errorMsg =3D customError;=0A=
        }=0A=
        try {=0A=
            if (Translator){=0A=
                errorMsg =3D Translator.translate(errorMsg);=0A=
            }=0A=
        }=0A=
        catch(e){}=0A=
=0A=
        advice =3D '<div class=3D"validation-advice" id=3D"advice-' + =
name + '-' + Validation.getElmID(elm) +'" style=3D"display:none">' + =
errorMsg + '</div>'=0A=
=0A=
=0A=
        Validation.insertAdvice(elm, advice);=0A=
        advice =3D Validation.getAdvice(name, elm);=0A=
        if($(elm).hasClassName('absolute-advice')) {=0A=
            var dimensions =3D $(elm).getDimensions();=0A=
            var originalPosition =3D Position.cumulativeOffset(elm);=0A=
=0A=
            advice._adviceTop =3D (originalPosition[1] + =
dimensions.height) + 'px';=0A=
            advice._adviceLeft =3D (originalPosition[0])  + 'px';=0A=
            advice._adviceWidth =3D (dimensions.width)  + 'px';=0A=
            advice._adviceAbsolutize =3D true;=0A=
        }=0A=
        return advice;=0A=
    },=0A=
    getElmID : function(elm) {=0A=
        return elm.id ? elm.id : elm.name;=0A=
    },=0A=
    reset : function(elm) {=0A=
        elm =3D $(elm);=0A=
        var cn =3D $w(elm.className);=0A=
        cn.each(function(value) {=0A=
            var prop =3D '__advice'+value.camelize();=0A=
            if(elm[prop]) {=0A=
                var advice =3D Validation.getAdvice(value, elm);=0A=
                if (advice) {=0A=
                    advice.hide();=0A=
                }=0A=
                elm[prop] =3D '';=0A=
            }=0A=
            elm.removeClassName('validation-failed');=0A=
            elm.removeClassName('validation-passed');=0A=
            if (Validation.defaultOptions.addClassNameToContainer && =
Validation.defaultOptions.containerClassName !=3D '') {=0A=
                var container =3D =
elm.up(Validation.defaultOptions.containerClassName);=0A=
                if (container) {=0A=
                    container.removeClassName('validation-passed');=0A=
                    container.removeClassName('validation-error');=0A=
                }=0A=
            }=0A=
        });=0A=
    },=0A=
    add : function(className, error, test, options) {=0A=
        var nv =3D {};=0A=
        nv[className] =3D new Validator(className, error, test, options);=0A=
        Object.extend(Validation.methods, nv);=0A=
    },=0A=
    addAllThese : function(validators) {=0A=
        var nv =3D {};=0A=
        $A(validators).each(function(value) {=0A=
                nv[value[0]] =3D new Validator(value[0], value[1], =
value[2], (value.length > 3 ? value[3] : {}));=0A=
            });=0A=
        Object.extend(Validation.methods, nv);=0A=
    },=0A=
    get : function(name) {=0A=
        return  Validation.methods[name] ? Validation.methods[name] : =
Validation.methods['_LikeNoIDIEverSaw_'];=0A=
    },=0A=
    methods : {=0A=
        '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})=0A=
    }=0A=
});=0A=
=0A=
Validation.add('IsEmpty', '', function(v) {=0A=
    return  (v =3D=3D '' || (v =3D=3D null) || (v.length =3D=3D 0) || =
/^\s+$/.test(v)); // || /^\s+$/.test(v));=0A=
});=0A=
=0A=
Validation.addAllThese([=0A=
    ['validate-select', 'Please select an option.', function(v) {=0A=
                return ((v !=3D "none") && (v !=3D null) && (v.length =
!=3D 0));=0A=
            }],=0A=
    ['required-entry', 'This is a required field.', function(v) {=0A=
                return !Validation.get('IsEmpty').test(v);=0A=
            }],=0A=
    ['validate-number', 'Please enter a valid number in this field.', =
function(v) {=0A=
                return Validation.get('IsEmpty').test(v) || =
(!isNaN(parseNumber(v)) && !/^\s+$/.test(parseNumber(v)));=0A=
            }],=0A=
    ['validate-digits', 'Please use numbers only in this field. Please =
avoid spaces or other characters such as dots or commas.', function(v) {=0A=
                return Validation.get('IsEmpty').test(v) ||  =
!/[^\d]/.test(v);=0A=
            }],=0A=
    ['validate-digits-range', 'The value is not within the specified =
range.', function(v, elm) {=0A=
                var result =3D Validation.get('IsEmpty').test(v) ||  =
!/[^\d]/.test(v);=0A=
                var reRange =3D new =
RegExp(/^digits-range-[0-9]+-[0-9]+$/);=0A=
                $w(elm.className).each(function(name, index) {=0A=
                    if (name.match(reRange) && result) {=0A=
                        var min =3D parseInt(name.split('-')[2], 10);=0A=
                        var max =3D parseInt(name.split('-')[3], 10);=0A=
                        var val =3D parseInt(v, 10);=0A=
                        result =3D (v >=3D min) && (v <=3D max);=0A=
                    }=0A=
                });=0A=
                return result;=0A=
            }],=0A=
    ['validate-alpha', 'Please use letters only (a-z or A-Z) in this =
field.', function (v) {=0A=
                return Validation.get('IsEmpty').test(v) ||  =
/^[a-zA-Z]+$/.test(v)=0A=
            }],=0A=
    ['validate-code', 'Please use only letters (a-z), numbers (0-9) or =
underscore(_) in this field, first character should be a letter.', =
function (v) {=0A=
                return Validation.get('IsEmpty').test(v) ||  =
/^[a-z]+[a-z0-9_]+$/.test(v)=0A=
            }],=0A=
    ['validate-alphanum', 'Please use only letters (a-z or A-Z) or =
numbers (0-9) only in this field. No spaces or other characters are =
allowed.', function(v) {=0A=
                return Validation.get('IsEmpty').test(v) ||  =
/^[a-zA-Z0-9]+$/.test(v) /*!/\W/.test(v)*/=0A=
            }],=0A=
    ['validate-street', 'Please use only letters (a-z or A-Z) or numbers =
(0-9) or spaces and # only in this field.', function(v) {=0A=
                return Validation.get('IsEmpty').test(v) ||  /^[ =
\w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)=0A=
            }],=0A=
    ['validate-phoneStrict', 'Please enter a valid phone number. For =
example (123) 456-7890 or 123-456-7890.', function(v) {=0A=
                return Validation.get('IsEmpty').test(v) || =
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);=0A=
            }],=0A=
    ['validate-phoneLax', 'Please enter a valid phone number. For =
example (123) 456-7890 or 123-456-7890.', function(v) {=0A=
                return Validation.get('IsEmpty').test(v) || /^((\d[-. =
]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);=0A=
            }],=0A=
    ['validate-fax', 'Please enter a valid fax number. For example (123) =
456-7890 or 123-456-7890.', function(v) {=0A=
                return Validation.get('IsEmpty').test(v) || =
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);=0A=
            }],=0A=
    ['validate-date', 'Please enter a valid date.', function(v) {=0A=
                var test =3D new Date(v);=0A=
                return Validation.get('IsEmpty').test(v) || !isNaN(test);=0A=
            }],=0A=
    ['validate-email', 'Please enter a valid email address. For example =
johndoe@domain.com.', function (v) {=0A=
                //return Validation.get('IsEmpty').test(v) || =
/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)=0A=
                //return Validation.get('IsEmpty').test(v) || =
/^[\!\#$%\*/?|\^\{\}`~&\'\+\-=3D_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=3D_a-=
z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=3D_a-z0-9]@([a-z0-9_-]{1,30}\.){=
1,5}[a-z]{2,4}$/i.test(v)=0A=
                return Validation.get('IsEmpty').test(v) || =
/^([a-z0-9,!\#\$%&'\*\+\/=3D\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\u=
FDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=3D\?\^_`\{\|\}~-]|[\u00A0-\uD7FF=
\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uF=
DF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\=
.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v)=0A=
            }],=0A=
    ['validate-emailSender', 'Please use only visible characters and =
spaces.', function (v) {=0A=
                return Validation.get('IsEmpty').test(v) ||  /^[\S =
]+$/.test(v)=0A=
                    }],=0A=
    ['validate-password', 'Please enter 6 or more characters. Leading or =
trailing spaces will be ignored.', function(v) {=0A=
                var pass=3Dv.strip(); /*strip leading and trailing =
spaces*/=0A=
                return !(pass.length>0 && pass.length < 6);=0A=
            }],=0A=
    ['validate-admin-password', 'Please enter 7 or more characters. =
Password should contain both numeric and alphabetic characters.', =
function(v) {=0A=
                var pass=3Dv.strip();=0A=
                if (0 =3D=3D pass.length) {=0A=
                    return true;=0A=
                }=0A=
                if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {=0A=
                    return false;=0A=
                }=0A=
                return !(pass.length < 7);=0A=
            }],=0A=
    ['validate-cpassword', 'Please make sure your passwords match.', =
function(v) {=0A=
                var conf =3D $('confirmation') ? $('confirmation') : =
$$('.validate-cpassword')[0];=0A=
                var pass =3D false;=0A=
                if ($('password')) {=0A=
                    pass =3D $('password');=0A=
                }=0A=
                var passwordElements =3D $$('.validate-password');=0A=
                for (var i =3D 0; i < passwordElements.size(); i++) {=0A=
                    var passwordElement =3D passwordElements[i];=0A=
                    if (passwordElement.up('form').id =3D=3D =
conf.up('form').id) {=0A=
                        pass =3D passwordElement;=0A=
                    }=0A=
                }=0A=
                if ($$('.validate-admin-password').size()) {=0A=
                    pass =3D $$('.validate-admin-password')[0];=0A=
                }=0A=
                return (pass.value =3D=3D conf.value);=0A=
            }],=0A=
    ['validate-url', 'Please enter a valid URL. Protocol is required =
(http://, https:// or ftp://)', function (v) {=0A=
                v =3D (v || '').replace(/^\s+/, '').replace(/\s+$/, '');=0A=
                return Validation.get('IsEmpty').test(v) || =
/^(http|https|ftp):\/\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\.[A-Z0-9]([A-Z0=
-9_-]*[A-Z0-9]|))*)(:(\d+))?(\/[A-Z0-9~](([A-Z0-9_~-]|\.)*[A-Z0-9~]|))*\/=
?$/i.test(v)=0A=
            }],=0A=
    ['validate-clean-url', 'Please enter a valid URL. For example =
http://www.example.com or www.example.com', function (v) {=0A=
                return Validation.get('IsEmpty').test(v) || =
/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(co=
m|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || =
/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|b=
iz|se)$)(:(\d+))?\/?/i.test(v)=0A=
            }],=0A=
    ['validate-identifier', 'Please enter a valid URL Key. For example =
"example-page", "example-page.html" or "anotherlevel/example-page".', =
function (v) {=0A=
                return Validation.get('IsEmpty').test(v) || =
/^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/.test(v)=0A=
            }],=0A=
    ['validate-xml-identifier', 'Please enter a valid XML-identifier. =
For example something_1, block5, id-4.', function (v) {=0A=
                return Validation.get('IsEmpty').test(v) || =
/^[A-Z][A-Z0-9_\/-]*$/i.test(v)=0A=
            }],=0A=
    ['validate-ssn', 'Please enter a valid social security number. For =
example 123-45-6789.', function(v) {=0A=
            return Validation.get('IsEmpty').test(v) || =
/^\d{3}-?\d{2}-?\d{4}$/.test(v);=0A=
            }],=0A=
    ['validate-zip', 'Please enter a valid zip code. For example 90602 =
or 90602-1234.', function(v) {=0A=
            return Validation.get('IsEmpty').test(v) || =
/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);=0A=
            }],=0A=
    ['validate-zip-international', 'Please enter a valid zip code.', =
function(v) {=0A=
            //return Validation.get('IsEmpty').test(v) || =
/(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);=0A=
            return true;=0A=
            }],=0A=
    ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For =
example 17/03/2006 for the 17th of March, 2006.', function(v) {=0A=
                if(Validation.get('IsEmpty').test(v)) return true;=0A=
                var regex =3D /^(\d{2})\/(\d{2})\/(\d{4})$/;=0A=
                if(!regex.test(v)) return false;=0A=
                var d =3D new Date(v.replace(regex, '$2/$1/$3'));=0A=
                return ( parseInt(RegExp.$2, 10) =3D=3D (1+d.getMonth()) =
) &&=0A=
                            (parseInt(RegExp.$1, 10) =3D=3D d.getDate()) =
&&=0A=
                            (parseInt(RegExp.$3, 10) =3D=3D =
d.getFullYear() );=0A=
            }],=0A=
    ['validate-currency-dollar', 'Please enter a valid $ amount. For =
example $100.00.', function(v) {=0A=
                // [$]1[##][,###]+[.##]=0A=
                // [$]1###+[.##]=0A=
                // [$]0.##=0A=
                // [$].##=0A=
                return Validation.get('IsEmpty').test(v) ||  =
/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-=
9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)=0A=
            }],=0A=
    ['validate-one-required', 'Please select one of the above options.', =
function (v,elm) {=0A=
                var p =3D elm.parentNode;=0A=
                var options =3D p.getElementsByTagName('INPUT');=0A=
                return $A(options).any(function(elm) {=0A=
                    return $F(elm);=0A=
                });=0A=
            }],=0A=
    ['validate-one-required-by-name', 'Please select one of the =
options.', function (v,elm) {=0A=
                var inputs =3D $$('input[name=3D"' + =
elm.name.replace(/([\\"])/g, '\\$1') + '"]');=0A=
=0A=
                var error =3D 1;=0A=
                for(var i=3D0;i<inputs.length;i++) {=0A=
                    if((inputs[i].type =3D=3D 'checkbox' || =
inputs[i].type =3D=3D 'radio') && inputs[i].checked =3D=3D true) {=0A=
                        error =3D 0;=0A=
                    }=0A=
=0A=
                    if(Validation.isOnChange && (inputs[i].type =3D=3D =
'checkbox' || inputs[i].type =3D=3D 'radio')) {=0A=
                        Validation.reset(inputs[i]);=0A=
                    }=0A=
                }=0A=
=0A=
                if( error =3D=3D 0 ) {=0A=
                    return true;=0A=
                } else {=0A=
                    return false;=0A=
                }=0A=
            }],=0A=
    ['validate-not-negative-number', 'Please enter a valid number in =
this field.', function(v) {=0A=
                v =3D parseNumber(v);=0A=
                return (!isNaN(v) && v>=3D0);=0A=
            }],=0A=
    ['validate-state', 'Please select State/Province.', function(v) {=0A=
                return (v!=3D0 || v =3D=3D '');=0A=
            }],=0A=
=0A=
    ['validate-new-password', 'Please enter 6 or more characters. =
Leading or trailing spaces will be ignored.', function(v) {=0A=
                if (!Validation.get('validate-password').test(v)) return =
false;=0A=
                if (Validation.get('IsEmpty').test(v) && v !=3D '') =
return false;=0A=
                return true;=0A=
            }],=0A=
    ['validate-greater-than-zero', 'Please enter a number greater than 0 =
in this field.', function(v) {=0A=
                if(v.length)=0A=
                    return parseFloat(v) > 0;=0A=
                else=0A=
                    return true;=0A=
            }],=0A=
    ['validate-zero-or-greater', 'Please enter a number 0 or greater in =
this field.', function(v) {=0A=
                if(v.length)=0A=
                    return parseFloat(v) >=3D 0;=0A=
                else=0A=
                    return true;=0A=
            }],=0A=
    ['validate-cc-number', 'Please enter a valid credit card number.', =
function(v, elm) {=0A=
                // remove non-numerics=0A=
                var ccTypeContainer =3D =
$(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');=0A=
                if (ccTypeContainer && typeof =
Validation.creditCartTypes.get(ccTypeContainer.value) !=3D 'undefined'=0A=
                        && =
Validation.creditCartTypes.get(ccTypeContainer.value)[2] =3D=3D false) {=0A=
                    if (!Validation.get('IsEmpty').test(v) && =
Validation.get('validate-digits').test(v)) {=0A=
                        return true;=0A=
                    } else {=0A=
                        return false;=0A=
                    }=0A=
                }=0A=
                return validateCreditCard(v);=0A=
            }],=0A=
    ['validate-cc-type', 'Credit card number does not match credit card =
type.', function(v, elm) {=0A=
                // remove credit card number delimiters such as "-" and =
space=0A=
                elm.value =3D removeDelimiters(elm.value);=0A=
                v         =3D removeDelimiters(v);=0A=
=0A=
                var ccTypeContainer =3D =
$(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');=0A=
                if (!ccTypeContainer) {=0A=
                    return true;=0A=
                }=0A=
                var ccType =3D ccTypeContainer.value;=0A=
=0A=
                if (typeof Validation.creditCartTypes.get(ccType) =3D=3D =
'undefined') {=0A=
                    return false;=0A=
                }=0A=
=0A=
                // Other card type or switch or solo card=0A=
                if =
(Validation.creditCartTypes.get(ccType)[0]=3D=3Dfalse) {=0A=
                    return true;=0A=
                }=0A=
=0A=
                // Matched credit card type=0A=
                var ccMatchedType =3D '';=0A=
=0A=
                Validation.creditCartTypes.each(function (pair) {=0A=
                    if (pair.value[0] && v.match(pair.value[0])) {=0A=
                        ccMatchedType =3D pair.key;=0A=
                        throw $break;=0A=
                    }=0A=
                });=0A=
=0A=
                if(ccMatchedType !=3D ccType) {=0A=
                    return false;=0A=
                }=0A=
=0A=
                if (ccTypeContainer.hasClassName('validation-failed') && =
Validation.isOnChange) {=0A=
                    Validation.validate(ccTypeContainer);=0A=
                }=0A=
=0A=
                return true;=0A=
            }],=0A=
     ['validate-cc-type-select', 'Card type does not match credit card =
number.', function(v, elm) {=0A=
                var ccNumberContainer =3D =
$(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');=0A=
                if (Validation.isOnChange && =
Validation.get('IsEmpty').test(ccNumberContainer.value)) {=0A=
                    return true;=0A=
                }=0A=
                if =
(Validation.get('validate-cc-type').test(ccNumberContainer.value, =
ccNumberContainer)) {=0A=
                    Validation.validate(ccNumberContainer);=0A=
                }=0A=
                return =
Validation.get('validate-cc-type').test(ccNumberContainer.value, =
ccNumberContainer);=0A=
            }],=0A=
     ['validate-cc-exp', 'Incorrect credit card expiration date.', =
function(v, elm) {=0A=
                var ccExpMonth   =3D v;=0A=
                var ccExpYear    =3D =
$(elm.id.substr(0,elm.id.indexOf('_expiration')) + =
'_expiration_yr').value;=0A=
                var currentTime  =3D new Date();=0A=
                var currentMonth =3D currentTime.getMonth() + 1;=0A=
                var currentYear  =3D currentTime.getFullYear();=0A=
                if (ccExpMonth < currentMonth && ccExpYear =3D=3D =
currentYear) {=0A=
                    return false;=0A=
                }=0A=
                return true;=0A=
            }],=0A=
     ['validate-cc-cvn', 'Please enter a valid credit card verification =
number.', function(v, elm) {=0A=
                var ccTypeContainer =3D =
$(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');=0A=
                if (!ccTypeContainer) {=0A=
                    return true;=0A=
                }=0A=
                var ccType =3D ccTypeContainer.value;=0A=
=0A=
                if (typeof Validation.creditCartTypes.get(ccType) =3D=3D =
'undefined') {=0A=
                    return false;=0A=
                }=0A=
=0A=
                var re =3D Validation.creditCartTypes.get(ccType)[1];=0A=
=0A=
                if (v.match(re)) {=0A=
                    return true;=0A=
                }=0A=
=0A=
                return false;=0A=
            }],=0A=
     ['validate-ajax', '', function(v, elm) { return true; }],=0A=
     ['validate-data', 'Please use only letters (a-z or A-Z), numbers =
(0-9) or underscore(_) in this field, first character should be a =
letter.', function (v) {=0A=
                if(v !=3D '' && v) {=0A=
                    return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);=0A=
                }=0A=
                return true;=0A=
            }],=0A=
     ['validate-css-length', 'Please input a valid CSS-length. For =
example 100px or 77pt or 20em or .5ex or 50%.', function (v) {=0A=
                if (v !=3D '' && v) {=0A=
                    return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && =
(!(/\..*\./.test(v))) && !(/\.$/.test(v));=0A=
                }=0A=
                return true;=0A=
            }],=0A=
     ['validate-length', 'Text length does not satisfy specified text =
range.', function (v, elm) {=0A=
                var reMax =3D new RegExp(/^maximum-length-[0-9]+$/);=0A=
                var reMin =3D new RegExp(/^minimum-length-[0-9]+$/);=0A=
                var result =3D true;=0A=
                $w(elm.className).each(function(name, index) {=0A=
                    if (name.match(reMax) && result) {=0A=
                       var length =3D name.split('-')[2];=0A=
                       result =3D (v.length <=3D length);=0A=
                    }=0A=
                    if (name.match(reMin) && result && =
!Validation.get('IsEmpty').test(v)) {=0A=
                        var length =3D name.split('-')[2];=0A=
                        result =3D (v.length >=3D length);=0A=
                    }=0A=
                });=0A=
                return result;=0A=
            }],=0A=
     ['validate-percents', 'Please enter a number lower than 100.', =
{max:100}],=0A=
     ['required-file', 'Please select a file', function(v, elm) {=0A=
         var result =3D !Validation.get('IsEmpty').test(v);=0A=
         if (result =3D=3D=3D false) {=0A=
             ovId =3D elm.id + '_value';=0A=
             if ($(ovId)) {=0A=
                 result =3D =
!Validation.get('IsEmpty').test($(ovId).value);=0A=
             }=0A=
         }=0A=
         return result;=0A=
     }],=0A=
     ['validate-cc-ukss', 'Please enter issue number or start date for =
switch/solo card type.', function(v,elm) {=0A=
         var endposition;=0A=
=0A=
         if (elm.id.match(/(.)+_cc_issue$/)) {=0A=
             endposition =3D elm.id.indexOf('_cc_issue');=0A=
         } else if (elm.id.match(/(.)+_start_month$/)) {=0A=
             endposition =3D elm.id.indexOf('_start_month');=0A=
         } else {=0A=
             endposition =3D elm.id.indexOf('_start_year');=0A=
         }=0A=
=0A=
         var prefix =3D elm.id.substr(0,endposition);=0A=
=0A=
         var ccTypeContainer =3D $(prefix + '_cc_type');=0A=
=0A=
         if (!ccTypeContainer) {=0A=
               return true;=0A=
         }=0A=
         var ccType =3D ccTypeContainer.value;=0A=
=0A=
         if(['SS','SM','SO'].indexOf(ccType) =3D=3D -1){=0A=
             return true;=0A=
         }=0A=
=0A=
         $(prefix + '_cc_issue').advaiceContainer=0A=
           =3D $(prefix + '_start_month').advaiceContainer=0A=
           =3D $(prefix + '_start_year').advaiceContainer=0A=
           =3D $(prefix + '_cc_type_ss_div').down('ul li.adv-container');=0A=
=0A=
         var ccIssue   =3D  $(prefix + '_cc_issue').value;=0A=
         var ccSMonth  =3D  $(prefix + '_start_month').value;=0A=
         var ccSYear   =3D  $(prefix + '_start_year').value;=0A=
=0A=
         var ccStartDatePresent =3D (ccSMonth && ccSYear) ? true : false;=0A=
=0A=
         if (!ccStartDatePresent && !ccIssue){=0A=
             return false;=0A=
         }=0A=
         return true;=0A=
     }]=0A=
]);=0A=
=0A=
function removeDelimiters (v) {=0A=
    v =3D v.replace(/\s/g, '');=0A=
    v =3D v.replace(/\-/g, '');=0A=
    return v;=0A=
}=0A=
=0A=
function parseNumber(v)=0A=
{=0A=
    if (typeof v !=3D 'string') {=0A=
        return parseFloat(v);=0A=
    }=0A=
=0A=
    var isDot  =3D v.indexOf('.');=0A=
    var isComa =3D v.indexOf(',');=0A=
=0A=
    if (isDot !=3D -1 && isComa !=3D -1) {=0A=
        if (isComa > isDot) {=0A=
            v =3D v.replace('.', '').replace(',', '.');=0A=
        }=0A=
        else {=0A=
            v =3D v.replace(',', '');=0A=
        }=0A=
    }=0A=
    else if (isComa !=3D -1) {=0A=
        v =3D v.replace(',', '.');=0A=
    }=0A=
=0A=
    return parseFloat(v);=0A=
}=0A=
=0A=
/**=0A=
 * Hash with credit card types wich can be simply extended in payment =
modules=0A=
 * 0 - regexp for card number=0A=
 * 1 - regexp for cvn=0A=
 * 2 - check or not credit card number trough Luhn algorithm by=0A=
 *     function validateCreditCard wich you can find above in this file=0A=
 */=0A=
Validation.creditCartTypes =3D $H({=0A=
//    'SS': [new =
RegExp('^((6759[0-9]{12})|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19}=
)|(49[013][1356][0-9]{12})|(6333[0-9]{12})|(6334[0-4]\d{11})|(633110[0-9]=
{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new =
RegExp('^([0-9]{3}|[0-9]{4})?$'), true],=0A=
    'SO': [new =
RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}=
))$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],=0A=
    'SM': [new =
RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-=
9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13=
}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(490=
33)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13=
}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|=
[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))'), new =
RegExp('^([0-9]{3}|[0-9]{4})?$'), true],=0A=
    'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new =
RegExp('^[0-9]{3}$'), true],=0A=
    'MC': [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), =
true],=0A=
    'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), =
true],=0A=
    'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), =
true],=0A=
    'JCB': [new RegExp('^(3[0-9]{15}|(2131|1800)[0-9]{11})$'), new =
RegExp('^[0-9]{4}$'), true],=0A=
    'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]=0A=
});=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/scriptaculous/builder.js

// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008=0A=
=0A=
// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Builder =3D {=0A=
  NODEMAP: {=0A=
    AREA: 'map',=0A=
    CAPTION: 'table',=0A=
    COL: 'table',=0A=
    COLGROUP: 'table',=0A=
    LEGEND: 'fieldset',=0A=
    OPTGROUP: 'select',=0A=
    OPTION: 'select',=0A=
    PARAM: 'object',=0A=
    TBODY: 'table',=0A=
    TD: 'table',=0A=
    TFOOT: 'table',=0A=
    TH: 'table',=0A=
    THEAD: 'table',=0A=
    TR: 'table'=0A=
  },=0A=
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently =
broken,=0A=
  //       due to a Firefox bug=0A=
  node: function(elementName) {=0A=
    elementName =3D elementName.toUpperCase();=0A=
=0A=
    // try innerHTML approach=0A=
    var parentTag =3D this.NODEMAP[elementName] || 'div';=0A=
    var parentElement =3D document.createElement(parentTag);=0A=
    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707=0A=
      parentElement.innerHTML =3D "<" + elementName + "></" + =
elementName + ">";=0A=
    } catch(e) {}=0A=
    var element =3D parentElement.firstChild || null;=0A=
=0A=
    // see if browser added wrapping tags=0A=
    if(element && (element.tagName.toUpperCase() !=3D elementName))=0A=
      element =3D element.getElementsByTagName(elementName)[0];=0A=
=0A=
    // fallback to createElement approach=0A=
    if(!element) element =3D document.createElement(elementName);=0A=
=0A=
    // abort if nothing could be created=0A=
    if(!element) return;=0A=
=0A=
    // attributes (or text)=0A=
    if(arguments[1])=0A=
      if(this._isStringOrNumber(arguments[1]) ||=0A=
        (arguments[1] instanceof Array) ||=0A=
        arguments[1].tagName) {=0A=
          this._children(element, arguments[1]);=0A=
        } else {=0A=
          var attrs =3D this._attributes(arguments[1]);=0A=
          if(attrs.length) {=0A=
            try { // prevent IE "feature": =
http://dev.rubyonrails.org/ticket/2707=0A=
              parentElement.innerHTML =3D "<" +elementName + " " +=0A=
                attrs + "></" + elementName + ">";=0A=
            } catch(e) {}=0A=
            element =3D parentElement.firstChild || null;=0A=
            // workaround firefox 1.0.X bug=0A=
            if(!element) {=0A=
              element =3D document.createElement(elementName);=0A=
              for(attr in arguments[1])=0A=
                element[attr =3D=3D 'class' ? 'className' : attr] =3D =
arguments[1][attr];=0A=
            }=0A=
            if(element.tagName.toUpperCase() !=3D elementName)=0A=
              element =3D =
parentElement.getElementsByTagName(elementName)[0];=0A=
          }=0A=
        }=0A=
=0A=
    // text, or array of children=0A=
    if(arguments[2])=0A=
      this._children(element, arguments[2]);=0A=
=0A=
     return $(element);=0A=
  },=0A=
  _text: function(text) {=0A=
     return document.createTextNode(text);=0A=
  },=0A=
=0A=
  ATTR_MAP: {=0A=
    'className': 'class',=0A=
    'htmlFor': 'for'=0A=
  },=0A=
=0A=
  _attributes: function(attributes) {=0A=
    var attrs =3D [];=0A=
    for(attribute in attributes)=0A=
      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] =
: attribute) +=0A=
          '=3D"' + =
attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');=0A=
    return attrs.join(" ");=0A=
  },=0A=
  _children: function(element, children) {=0A=
    if(children.tagName) {=0A=
      element.appendChild(children);=0A=
      return;=0A=
    }=0A=
    if(typeof children=3D=3D'object') { // array can hold nodes and text=0A=
      children.flatten().each( function(e) {=0A=
        if(typeof e=3D=3D'object')=0A=
          element.appendChild(e);=0A=
        else=0A=
          if(Builder._isStringOrNumber(e))=0A=
            element.appendChild(Builder._text(e));=0A=
      });=0A=
    } else=0A=
      if(Builder._isStringOrNumber(children))=0A=
        element.appendChild(Builder._text(children));=0A=
  },=0A=
  _isStringOrNumber: function(param) {=0A=
    return(typeof param=3D=3D'string' || typeof param=3D=3D'number');=0A=
  },=0A=
  build: function(html) {=0A=
    var element =3D this.node('div');=0A=
    $(element).update(html.strip());=0A=
    return element.down();=0A=
  },=0A=
  dump: function(scope) {=0A=
    if(typeof scope !=3D 'object' && typeof scope !=3D 'function') scope =
=3D window; //global scope=0A=
=0A=
    var tags =3D ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT =
BDO BIG BLOCKQUOTE BODY " +=0A=
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR =
DIV DL DT EM FIELDSET " +=0A=
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME =
IMG INPUT INS ISINDEX "+=0A=
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT =
OL OPTGROUP OPTION P "+=0A=
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE =
SUB SUP TABLE TBODY TD "+=0A=
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);=0A=
=0A=
    tags.each( function(tag){=0A=
      scope[tag] =3D function() {=0A=
        return Builder.node.apply(Builder, [tag].concat($A(arguments)));=0A=
      };=0A=
    });=0A=
  }=0A=
};
------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/scriptaculous/effects.js

// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008=0A=
=0A=
// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// Contributors:=0A=
//  Justin Palmer (http://encytemedia.com/)=0A=
//  Mark Pilgrim (http://diveintomark.org/)=0A=
//  Martin Bialasinki=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
// converts rgb() and #xxx to #xxxxxx format,=0A=
// returns self (or first argument) if not convertable=0A=
String.prototype.parseColor =3D function() {=0A=
  var color =3D '#';=0A=
  if (this.slice(0,4) =3D=3D 'rgb(') {=0A=
    var cols =3D this.slice(4,this.length-1).split(',');=0A=
    var i=3D0; do { color +=3D parseInt(cols[i]).toColorPart() } while =
(++i<3);=0A=
  } else {=0A=
    if (this.slice(0,1) =3D=3D '#') {=0A=
      if (this.length=3D=3D4) for(var i=3D1;i<4;i++) color +=3D =
(this.charAt(i) + this.charAt(i)).toLowerCase();=0A=
      if (this.length=3D=3D7) color =3D this.toLowerCase();=0A=
    }=0A=
  }=0A=
  return (color.length=3D=3D7 ? color : (arguments[0] || this));=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.collectTextNodes =3D function(element) {=0A=
  return $A($(element).childNodes).collect( function(node) {=0A=
    return (node.nodeType=3D=3D3 ? node.nodeValue :=0A=
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));=0A=
  }).flatten().join('');=0A=
};=0A=
=0A=
Element.collectTextNodesIgnoreClass =3D function(element, className) {=0A=
  return $A($(element).childNodes).collect( function(node) {=0A=
    return (node.nodeType=3D=3D3 ? node.nodeValue :=0A=
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?=0A=
        Element.collectTextNodesIgnoreClass(node, className) : ''));=0A=
  }).flatten().join('');=0A=
};=0A=
=0A=
Element.setContentZoom =3D function(element, percent) {=0A=
  element =3D $(element);=0A=
  element.setStyle({fontSize: (percent/100) + 'em'});=0A=
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
  return element;=0A=
};=0A=
=0A=
Element.getInlineOpacity =3D function(element){=0A=
  return $(element).style.opacity || '';=0A=
};=0A=
=0A=
Element.forceRerendering =3D function(element) {=0A=
  try {=0A=
    element =3D $(element);=0A=
    var n =3D document.createTextNode(' ');=0A=
    element.appendChild(n);=0A=
    element.removeChild(n);=0A=
  } catch(e) { }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Effect =3D {=0A=
  _elementDoesNotExistError: {=0A=
    name: 'ElementDoesNotExistError',=0A=
    message: 'The specified DOM element does not exist, but is required =
for this effect to operate'=0A=
  },=0A=
  Transitions: {=0A=
    linear: Prototype.K,=0A=
    sinoidal: function(pos) {=0A=
      return (-Math.cos(pos*Math.PI)/2) + .5;=0A=
    },=0A=
    reverse: function(pos) {=0A=
      return 1-pos;=0A=
    },=0A=
    flicker: function(pos) {=0A=
      var pos =3D ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;=0A=
      return pos > 1 ? 1 : pos;=0A=
    },=0A=
    wobble: function(pos) {=0A=
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;=0A=
    },=0A=
    pulse: function(pos, pulses) {=0A=
      return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;=0A=
    },=0A=
    spring: function(pos) {=0A=
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));=0A=
    },=0A=
    none: function(pos) {=0A=
      return 0;=0A=
    },=0A=
    full: function(pos) {=0A=
      return 1;=0A=
    }=0A=
  },=0A=
  DefaultOptions: {=0A=
    duration:   1.0,   // seconds=0A=
    fps:        100,   // 100=3D assume 66fps max.=0A=
    sync:       false, // true for combining=0A=
    from:       0.0,=0A=
    to:         1.0,=0A=
    delay:      0.0,=0A=
    queue:      'parallel'=0A=
  },=0A=
  tagifyText: function(element) {=0A=
    var tagifyStyle =3D 'position:relative';=0A=
    if (Prototype.Browser.IE) tagifyStyle +=3D ';zoom:1';=0A=
=0A=
    element =3D $(element);=0A=
    $A(element.childNodes).each( function(child) {=0A=
      if (child.nodeType=3D=3D3) {=0A=
        child.nodeValue.toArray().each( function(character) {=0A=
          element.insertBefore(=0A=
            new Element('span', {style: tagifyStyle}).update(=0A=
              character =3D=3D ' ' ? String.fromCharCode(160) : =
character),=0A=
              child);=0A=
        });=0A=
        Element.remove(child);=0A=
      }=0A=
    });=0A=
  },=0A=
  multiple: function(element, effect) {=0A=
    var elements;=0A=
    if (((typeof element =3D=3D 'object') ||=0A=
        Object.isFunction(element)) &&=0A=
       (element.length))=0A=
      elements =3D element;=0A=
    else=0A=
      elements =3D $(element).childNodes;=0A=
=0A=
    var options =3D Object.extend({=0A=
      speed: 0.1,=0A=
      delay: 0.0=0A=
    }, arguments[2] || { });=0A=
    var masterDelay =3D options.delay;=0A=
=0A=
    $A(elements).each( function(element, index) {=0A=
      new effect(element, Object.extend(options, { delay: index * =
options.speed + masterDelay }));=0A=
    });=0A=
  },=0A=
  PAIRS: {=0A=
    'slide':  ['SlideDown','SlideUp'],=0A=
    'blind':  ['BlindDown','BlindUp'],=0A=
    'appear': ['Appear','Fade']=0A=
  },=0A=
  toggle: function(element, effect) {=0A=
    element =3D $(element);=0A=
    effect =3D (effect || 'appear').toLowerCase();=0A=
    var options =3D Object.extend({=0A=
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }=0A=
    }, arguments[2] || { });=0A=
    Effect[element.visible() ?=0A=
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, =
options);=0A=
  }=0A=
};=0A=
=0A=
Effect.DefaultOptions.transition =3D Effect.Transitions.sinoidal;=0A=
=0A=
/* ------------- core effects ------------- */=0A=
=0A=
Effect.ScopedQueue =3D Class.create(Enumerable, {=0A=
  initialize: function() {=0A=
    this.effects  =3D [];=0A=
    this.interval =3D null;=0A=
  },=0A=
  _each: function(iterator) {=0A=
    this.effects._each(iterator);=0A=
  },=0A=
  add: function(effect) {=0A=
    var timestamp =3D new Date().getTime();=0A=
=0A=
    var position =3D Object.isString(effect.options.queue) ?=0A=
      effect.options.queue : effect.options.queue.position;=0A=
=0A=
    switch(position) {=0A=
      case 'front':=0A=
        // move unstarted effects after this effect=0A=
        this.effects.findAll(function(e){ return e.state=3D=3D'idle' =
}).each( function(e) {=0A=
            e.startOn  +=3D effect.finishOn;=0A=
            e.finishOn +=3D effect.finishOn;=0A=
          });=0A=
        break;=0A=
      case 'with-last':=0A=
        timestamp =3D this.effects.pluck('startOn').max() || timestamp;=0A=
        break;=0A=
      case 'end':=0A=
        // start effect after last queued effect has finished=0A=
        timestamp =3D this.effects.pluck('finishOn').max() || timestamp;=0A=
        break;=0A=
    }=0A=
=0A=
    effect.startOn  +=3D timestamp;=0A=
    effect.finishOn +=3D timestamp;=0A=
=0A=
    if (!effect.options.queue.limit || (this.effects.length < =
effect.options.queue.limit))=0A=
      this.effects.push(effect);=0A=
=0A=
    if (!this.interval)=0A=
      this.interval =3D setInterval(this.loop.bind(this), 15);=0A=
  },=0A=
  remove: function(effect) {=0A=
    this.effects =3D this.effects.reject(function(e) { return =
e=3D=3Deffect });=0A=
    if (this.effects.length =3D=3D 0) {=0A=
      clearInterval(this.interval);=0A=
      this.interval =3D null;=0A=
    }=0A=
  },=0A=
  loop: function() {=0A=
    var timePos =3D new Date().getTime();=0A=
    for(var i=3D0, len=3Dthis.effects.length;i<len;i++)=0A=
      this.effects[i] && this.effects[i].loop(timePos);=0A=
  }=0A=
});=0A=
=0A=
Effect.Queues =3D {=0A=
  instances: $H(),=0A=
  get: function(queueName) {=0A=
    if (!Object.isString(queueName)) return queueName;=0A=
=0A=
    return this.instances.get(queueName) ||=0A=
      this.instances.set(queueName, new Effect.ScopedQueue());=0A=
  }=0A=
};=0A=
Effect.Queue =3D Effect.Queues.get('global');=0A=
=0A=
Effect.Base =3D Class.create({=0A=
  position: null,=0A=
  start: function(options) {=0A=
    function codeForEvent(options,eventName){=0A=
      return (=0A=
        (options[eventName+'Internal'] ? =
'this.options.'+eventName+'Internal(this);' : '') +=0A=
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')=0A=
      );=0A=
    }=0A=
    if (options && options.transition =3D=3D=3D false) =
options.transition =3D Effect.Transitions.linear;=0A=
    this.options      =3D Object.extend(Object.extend({ =
},Effect.DefaultOptions), options || { });=0A=
    this.currentFrame =3D 0;=0A=
    this.state        =3D 'idle';=0A=
    this.startOn      =3D this.options.delay*1000;=0A=
    this.finishOn     =3D this.startOn+(this.options.duration*1000);=0A=
    this.fromToDelta  =3D this.options.to-this.options.from;=0A=
    this.totalTime    =3D this.finishOn-this.startOn;=0A=
    this.totalFrames  =3D this.options.fps*this.options.duration;=0A=
=0A=
    this.render =3D (function() {=0A=
      function dispatch(effect, eventName) {=0A=
        if (effect.options[eventName + 'Internal'])=0A=
          effect.options[eventName + 'Internal'](effect);=0A=
        if (effect.options[eventName])=0A=
          effect.options[eventName](effect);=0A=
      }=0A=
=0A=
      return function(pos) {=0A=
        if (this.state =3D=3D=3D "idle") {=0A=
          this.state =3D "running";=0A=
          dispatch(this, 'beforeSetup');=0A=
          if (this.setup) this.setup();=0A=
          dispatch(this, 'afterSetup');=0A=
        }=0A=
        if (this.state =3D=3D=3D "running") {=0A=
          pos =3D (this.options.transition(pos) * this.fromToDelta) + =
this.options.from;=0A=
          this.position =3D pos;=0A=
          dispatch(this, 'beforeUpdate');=0A=
          if (this.update) this.update(pos);=0A=
          dispatch(this, 'afterUpdate');=0A=
        }=0A=
      };=0A=
    })();=0A=
=0A=
    this.event('beforeStart');=0A=
    if (!this.options.sync)=0A=
      Effect.Queues.get(Object.isString(this.options.queue) ?=0A=
        'global' : this.options.queue.scope).add(this);=0A=
  },=0A=
  loop: function(timePos) {=0A=
    if (timePos >=3D this.startOn) {=0A=
      if (timePos >=3D this.finishOn) {=0A=
        this.render(1.0);=0A=
        this.cancel();=0A=
        this.event('beforeFinish');=0A=
        if (this.finish) this.finish();=0A=
        this.event('afterFinish');=0A=
        return;=0A=
      }=0A=
      var pos   =3D (timePos - this.startOn) / this.totalTime,=0A=
          frame =3D (pos * this.totalFrames).round();=0A=
      if (frame > this.currentFrame) {=0A=
        this.render(pos);=0A=
        this.currentFrame =3D frame;=0A=
      }=0A=
    }=0A=
  },=0A=
  cancel: function() {=0A=
    if (!this.options.sync)=0A=
      Effect.Queues.get(Object.isString(this.options.queue) ?=0A=
        'global' : this.options.queue.scope).remove(this);=0A=
    this.state =3D 'finished';=0A=
  },=0A=
  event: function(eventName) {=0A=
    if (this.options[eventName + 'Internal']) this.options[eventName + =
'Internal'](this);=0A=
    if (this.options[eventName]) this.options[eventName](this);=0A=
  },=0A=
  inspect: function() {=0A=
    var data =3D $H();=0A=
    for(property in this)=0A=
      if (!Object.isFunction(this[property])) data.set(property, =
this[property]);=0A=
    return '#<Effect:' + data.inspect() + ',options:' + =
$H(this.options).inspect() + '>';=0A=
  }=0A=
});=0A=
=0A=
Effect.Parallel =3D Class.create(Effect.Base, {=0A=
  initialize: function(effects) {=0A=
    this.effects =3D effects || [];=0A=
    this.start(arguments[1]);=0A=
  },=0A=
  update: function(position) {=0A=
    this.effects.invoke('render', position);=0A=
  },=0A=
  finish: function(position) {=0A=
    this.effects.each( function(effect) {=0A=
      effect.render(1.0);=0A=
      effect.cancel();=0A=
      effect.event('beforeFinish');=0A=
      if (effect.finish) effect.finish(position);=0A=
      effect.event('afterFinish');=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
Effect.Tween =3D Class.create(Effect.Base, {=0A=
  initialize: function(object, from, to) {=0A=
    object =3D Object.isString(object) ? $(object) : object;=0A=
    var args =3D $A(arguments), method =3D args.last(),=0A=
      options =3D args.length =3D=3D 5 ? args[3] : null;=0A=
    this.method =3D Object.isFunction(method) ? method.bind(object) :=0A=
      Object.isFunction(object[method]) ? object[method].bind(object) :=0A=
      function(value) { object[method] =3D value };=0A=
    this.start(Object.extend({ from: from, to: to }, options || { }));=0A=
  },=0A=
  update: function(position) {=0A=
    this.method(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Event =3D Class.create(Effect.Base, {=0A=
  initialize: function() {=0A=
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));=0A=
  },=0A=
  update: Prototype.emptyFunction=0A=
});=0A=
=0A=
Effect.Opacity =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    // make this work on IE on elements without 'layout'=0A=
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))=0A=
      this.element.setStyle({zoom: 1});=0A=
    var options =3D Object.extend({=0A=
      from: this.element.getOpacity() || 0.0,=0A=
      to:   1.0=0A=
    }, arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setOpacity(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Move =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      x:    0,=0A=
      y:    0,=0A=
      mode: 'relative'=0A=
    }, arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.element.makePositioned();=0A=
    this.originalLeft =3D parseFloat(this.element.getStyle('left') || =
'0');=0A=
    this.originalTop  =3D parseFloat(this.element.getStyle('top')  || =
'0');=0A=
    if (this.options.mode =3D=3D 'absolute') {=0A=
      this.options.x =3D this.options.x - this.originalLeft;=0A=
      this.options.y =3D this.options.y - this.originalTop;=0A=
    }=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({=0A=
      left: (this.options.x  * position + this.originalLeft).round() + =
'px',=0A=
      top:  (this.options.y  * position + this.originalTop).round()  + =
'px'=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
// for backwards compatibility=0A=
Effect.MoveBy =3D function(element, toTop, toLeft) {=0A=
  return new Effect.Move(element,=0A=
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));=0A=
};=0A=
=0A=
Effect.Scale =3D Class.create(Effect.Base, {=0A=
  initialize: function(element, percent) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      scaleX: true,=0A=
      scaleY: true,=0A=
      scaleContent: true,=0A=
      scaleFromCenter: false,=0A=
      scaleMode: 'box',        // 'box' or 'contents' or { } with =
provided values=0A=
      scaleFrom: 100.0,=0A=
      scaleTo:   percent=0A=
    }, arguments[2] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.restoreAfterFinish =3D this.options.restoreAfterFinish || false;=0A=
    this.elementPositioning =3D this.element.getStyle('position');=0A=
=0A=
    this.originalStyle =3D { };=0A=
    ['top','left','width','height','fontSize'].each( function(k) {=0A=
      this.originalStyle[k] =3D this.element.style[k];=0A=
    }.bind(this));=0A=
=0A=
    this.originalTop  =3D this.element.offsetTop;=0A=
    this.originalLeft =3D this.element.offsetLeft;=0A=
=0A=
    var fontSize =3D this.element.getStyle('font-size') || '100%';=0A=
    ['em','px','%','pt'].each( function(fontSizeType) {=0A=
      if (fontSize.indexOf(fontSizeType)>0) {=0A=
        this.fontSize     =3D parseFloat(fontSize);=0A=
        this.fontSizeType =3D fontSizeType;=0A=
      }=0A=
    }.bind(this));=0A=
=0A=
    this.factor =3D (this.options.scaleTo - this.options.scaleFrom)/100;=0A=
=0A=
    this.dims =3D null;=0A=
    if (this.options.scaleMode=3D=3D'box')=0A=
      this.dims =3D [this.element.offsetHeight, =
this.element.offsetWidth];=0A=
    if (/^content/.test(this.options.scaleMode))=0A=
      this.dims =3D [this.element.scrollHeight, =
this.element.scrollWidth];=0A=
    if (!this.dims)=0A=
      this.dims =3D [this.options.scaleMode.originalHeight,=0A=
                   this.options.scaleMode.originalWidth];=0A=
  },=0A=
  update: function(position) {=0A=
    var currentScale =3D (this.options.scaleFrom/100.0) + (this.factor * =
position);=0A=
    if (this.options.scaleContent && this.fontSize)=0A=
      this.element.setStyle({fontSize: this.fontSize * currentScale + =
this.fontSizeType });=0A=
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * =
currentScale);=0A=
  },=0A=
  finish: function(position) {=0A=
    if (this.restoreAfterFinish) =
this.element.setStyle(this.originalStyle);=0A=
  },=0A=
  setDimensions: function(height, width) {=0A=
    var d =3D { };=0A=
    if (this.options.scaleX) d.width =3D width.round() + 'px';=0A=
    if (this.options.scaleY) d.height =3D height.round() + 'px';=0A=
    if (this.options.scaleFromCenter) {=0A=
      var topd  =3D (height - this.dims[0])/2;=0A=
      var leftd =3D (width  - this.dims[1])/2;=0A=
      if (this.elementPositioning =3D=3D 'absolute') {=0A=
        if (this.options.scaleY) d.top =3D this.originalTop-topd + 'px';=0A=
        if (this.options.scaleX) d.left =3D this.originalLeft-leftd + =
'px';=0A=
      } else {=0A=
        if (this.options.scaleY) d.top =3D -topd + 'px';=0A=
        if (this.options.scaleX) d.left =3D -leftd + 'px';=0A=
      }=0A=
    }=0A=
    this.element.setStyle(d);=0A=
  }=0A=
});=0A=
=0A=
Effect.Highlight =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({ startcolor: '#ffff99' }, =
arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    // Prevent executing on elements not in the layout flow=0A=
    if (this.element.getStyle('display')=3D=3D'none') { this.cancel(); =
return; }=0A=
    // Disable background image during the effect=0A=
    this.oldStyle =3D { };=0A=
    if (!this.options.keepBackgroundImage) {=0A=
      this.oldStyle.backgroundImage =3D =
this.element.getStyle('background-image');=0A=
      this.element.setStyle({backgroundImage: 'none'});=0A=
    }=0A=
    if (!this.options.endcolor)=0A=
      this.options.endcolor =3D =
this.element.getStyle('background-color').parseColor('#ffffff');=0A=
    if (!this.options.restorecolor)=0A=
      this.options.restorecolor =3D =
this.element.getStyle('background-color');=0A=
    // init color calculations=0A=
    this._base  =3D $R(0,2).map(function(i){ return =
parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));=0A=
    this._delta =3D $R(0,2).map(function(i){ return =
parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] =
}.bind(this));=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({backgroundColor: =
$R(0,2).inject('#',function(m,v,i){=0A=
      return =
m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); =
}.bind(this)) });=0A=
  },=0A=
  finish: function() {=0A=
    this.element.setStyle(Object.extend(this.oldStyle, {=0A=
      backgroundColor: this.options.restorecolor=0A=
    }));=0A=
  }=0A=
});=0A=
=0A=
Effect.ScrollTo =3D function(element) {=0A=
  var options =3D arguments[1] || { },=0A=
  scrollOffsets =3D document.viewport.getScrollOffsets(),=0A=
  elementOffsets =3D $(element).cumulativeOffset();=0A=
=0A=
  if (options.offset) elementOffsets[1] +=3D options.offset;=0A=
=0A=
  return new Effect.Tween(null,=0A=
    scrollOffsets.top,=0A=
    elementOffsets[1],=0A=
    options,=0A=
    function(p){ scrollTo(scrollOffsets.left, p.round()); }=0A=
  );=0A=
};=0A=
=0A=
/* ------------- combination effects ------------- */=0A=
=0A=
Effect.Fade =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  var options =3D Object.extend({=0A=
    from: element.getOpacity() || 1.0,=0A=
    to:   0.0,=0A=
    afterFinishInternal: function(effect) {=0A=
      if (effect.options.to!=3D0) return;=0A=
      effect.element.hide().setStyle({opacity: oldOpacity});=0A=
    }=0A=
  }, arguments[1] || { });=0A=
  return new Effect.Opacity(element,options);=0A=
};=0A=
=0A=
Effect.Appear =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
  from: (element.getStyle('display') =3D=3D 'none' ? 0.0 : =
element.getOpacity() || 0.0),=0A=
  to:   1.0,=0A=
  // force Safari to render floated elements properly=0A=
  afterFinishInternal: function(effect) {=0A=
    effect.element.forceRerendering();=0A=
  },=0A=
  beforeSetup: function(effect) {=0A=
    effect.element.setOpacity(effect.options.from).show();=0A=
  }}, arguments[1] || { });=0A=
  return new Effect.Opacity(element,options);=0A=
};=0A=
=0A=
Effect.Puff =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    opacity: element.getInlineOpacity(),=0A=
    position: element.getStyle('position'),=0A=
    top:  element.style.top,=0A=
    left: element.style.left,=0A=
    width: element.style.width,=0A=
    height: element.style.height=0A=
  };=0A=
  return new Effect.Parallel(=0A=
   [ new Effect.Scale(element, 200,=0A=
      { sync: true, scaleFromCenter: true, scaleContent: true, =
restoreAfterFinish: true }),=0A=
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],=0A=
     Object.extend({ duration: 1.0,=0A=
      beforeSetupInternal: function(effect) {=0A=
        Position.absolutize(effect.effects[0].element);=0A=
      },=0A=
      afterFinishInternal: function(effect) {=0A=
         effect.effects[0].element.hide().setStyle(oldStyle); }=0A=
     }, arguments[1] || { })=0A=
   );=0A=
};=0A=
=0A=
Effect.BlindUp =3D function(element) {=0A=
  element =3D $(element);=0A=
  element.makeClipping();=0A=
  return new Effect.Scale(element, 0,=0A=
    Object.extend({ scaleContent: false,=0A=
      scaleX: false,=0A=
      restoreAfterFinish: true,=0A=
      afterFinishInternal: function(effect) {=0A=
        effect.element.hide().undoClipping();=0A=
      }=0A=
    }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=0A=
Effect.BlindDown =3D function(element) {=0A=
  element =3D $(element);=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, 100, Object.extend({=0A=
    scaleContent: false,=0A=
    scaleX: false,=0A=
    scaleFrom: 0,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makeClipping().setStyle({height: '0px'}).show();=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.undoClipping();=0A=
    }=0A=
  }, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.SwitchOff =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  return new Effect.Appear(element, Object.extend({=0A=
    duration: 0.4,=0A=
    from: 0,=0A=
    transition: Effect.Transitions.flicker,=0A=
    afterFinishInternal: function(effect) {=0A=
      new Effect.Scale(effect.element, 1, {=0A=
        duration: 0.3, scaleFromCenter: true,=0A=
        scaleX: false, scaleContent: false, restoreAfterFinish: true,=0A=
        beforeSetup: function(effect) {=0A=
          effect.element.makePositioned().makeClipping();=0A=
        },=0A=
        afterFinishInternal: function(effect) {=0A=
          =
effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: =
oldOpacity});=0A=
        }=0A=
      });=0A=
    }=0A=
  }, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.DropOut =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left'),=0A=
    opacity: element.getInlineOpacity() };=0A=
  return new Effect.Parallel(=0A=
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),=0A=
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],=0A=
    Object.extend(=0A=
      { duration: 0.5,=0A=
        beforeSetup: function(effect) {=0A=
          effect.effects[0].element.makePositioned();=0A=
        },=0A=
        afterFinishInternal: function(effect) {=0A=
          =
effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);=0A=
        }=0A=
      }, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.Shake =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    distance: 20,=0A=
    duration: 0.5=0A=
  }, arguments[1] || {});=0A=
  var distance =3D parseFloat(options.distance);=0A=
  var split =3D parseFloat(options.duration) / 10.0;=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left') };=0A=
    return new Effect.Move(element,=0A=
      { x:  distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
        effect.element.undoPositioned().setStyle(oldStyle);=0A=
  }}); }}); }}); }}); }}); }});=0A=
};=0A=
=0A=
Effect.SlideDown =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  // SlideDown need to have the content of the element wrapped in a =
container element with fixed height!=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, 100, Object.extend({=0A=
    scaleContent: false,=0A=
    scaleX: false,=0A=
    scaleFrom: window.opera ? 0 : 1,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if (window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().setStyle({height: '0px'}).show();=0A=
    },=0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' });=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.undoClipping().undoPositioned();=0A=
      effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom}); }=0A=
    }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=0A=
Effect.SlideUp =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, window.opera ? 0 : 1,=0A=
   Object.extend({ scaleContent: false,=0A=
    scaleX: false,=0A=
    scaleMode: 'box',=0A=
    scaleFrom: 100,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if (window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().show();=0A=
    },=0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' });=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.hide().undoClipping().undoPositioned();=0A=
      effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom});=0A=
    }=0A=
   }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=0A=
// Bug in opera makes the TD containing this element expand for a =
instance after finish=0A=
Effect.Squish =3D function(element) {=0A=
  return new Effect.Scale(element, window.opera ? 1 : 0, {=0A=
    restoreAfterFinish: true,=0A=
    beforeSetup: function(effect) {=0A=
      effect.element.makeClipping();=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.hide().undoClipping();=0A=
    }=0A=
  });=0A=
};=0A=
=0A=
Effect.Grow =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    direction: 'center',=0A=
    moveTransition: Effect.Transitions.sinoidal,=0A=
    scaleTransition: Effect.Transitions.sinoidal,=0A=
    opacityTransition: Effect.Transitions.full=0A=
  }, arguments[1] || { });=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    height: element.style.height,=0A=
    width: element.style.width,=0A=
    opacity: element.getInlineOpacity() };=0A=
=0A=
  var dims =3D element.getDimensions();=0A=
  var initialMoveX, initialMoveY;=0A=
  var moveX, moveY;=0A=
=0A=
  switch (options.direction) {=0A=
    case 'top-left':=0A=
      initialMoveX =3D initialMoveY =3D moveX =3D moveY =3D 0;=0A=
      break;=0A=
    case 'top-right':=0A=
      initialMoveX =3D dims.width;=0A=
      initialMoveY =3D moveY =3D 0;=0A=
      moveX =3D -dims.width;=0A=
      break;=0A=
    case 'bottom-left':=0A=
      initialMoveX =3D moveX =3D 0;=0A=
      initialMoveY =3D dims.height;=0A=
      moveY =3D -dims.height;=0A=
      break;=0A=
    case 'bottom-right':=0A=
      initialMoveX =3D dims.width;=0A=
      initialMoveY =3D dims.height;=0A=
      moveX =3D -dims.width;=0A=
      moveY =3D -dims.height;=0A=
      break;=0A=
    case 'center':=0A=
      initialMoveX =3D dims.width / 2;=0A=
      initialMoveY =3D dims.height / 2;=0A=
      moveX =3D -dims.width / 2;=0A=
      moveY =3D -dims.height / 2;=0A=
      break;=0A=
  }=0A=
=0A=
  return new Effect.Move(element, {=0A=
    x: initialMoveX,=0A=
    y: initialMoveY,=0A=
    duration: 0.01,=0A=
    beforeSetup: function(effect) {=0A=
      effect.element.hide().makeClipping().makePositioned();=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      new Effect.Parallel(=0A=
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, =
from: 0.0, transition: options.opacityTransition }),=0A=
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: =
true, transition: options.moveTransition }),=0A=
          new Effect.Scale(effect.element, 100, {=0A=
            scaleMode: { originalHeight: dims.height, originalWidth: =
dims.width },=0A=
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: =
options.scaleTransition, restoreAfterFinish: true})=0A=
        ], Object.extend({=0A=
             beforeSetup: function(effect) {=0A=
               effect.effects[0].element.setStyle({height: =
'0px'}).show();=0A=
             },=0A=
             afterFinishInternal: function(effect) {=0A=
               =
effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldSty=
le);=0A=
             }=0A=
           }, options)=0A=
      );=0A=
    }=0A=
  });=0A=
};=0A=
=0A=
Effect.Shrink =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    direction: 'center',=0A=
    moveTransition: Effect.Transitions.sinoidal,=0A=
    scaleTransition: Effect.Transitions.sinoidal,=0A=
    opacityTransition: Effect.Transitions.none=0A=
  }, arguments[1] || { });=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    height: element.style.height,=0A=
    width: element.style.width,=0A=
    opacity: element.getInlineOpacity() };=0A=
=0A=
  var dims =3D element.getDimensions();=0A=
  var moveX, moveY;=0A=
=0A=
  switch (options.direction) {=0A=
    case 'top-left':=0A=
      moveX =3D moveY =3D 0;=0A=
      break;=0A=
    case 'top-right':=0A=
      moveX =3D dims.width;=0A=
      moveY =3D 0;=0A=
      break;=0A=
    case 'bottom-left':=0A=
      moveX =3D 0;=0A=
      moveY =3D dims.height;=0A=
      break;=0A=
    case 'bottom-right':=0A=
      moveX =3D dims.width;=0A=
      moveY =3D dims.height;=0A=
      break;=0A=
    case 'center':=0A=
      moveX =3D dims.width / 2;=0A=
      moveY =3D dims.height / 2;=0A=
      break;=0A=
  }=0A=
=0A=
  return new Effect.Parallel(=0A=
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, =
transition: options.opacityTransition }),=0A=
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, =
transition: options.scaleTransition, restoreAfterFinish: true}),=0A=
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, =
transition: options.moveTransition })=0A=
    ], Object.extend({=0A=
         beforeStartInternal: function(effect) {=0A=
           effect.effects[0].element.makePositioned().makeClipping();=0A=
         },=0A=
         afterFinishInternal: function(effect) {=0A=
           =
effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle=
(oldStyle); }=0A=
       }, options)=0A=
  );=0A=
};=0A=
=0A=
Effect.Pulsate =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options    =3D arguments[1] || { },=0A=
    oldOpacity =3D element.getInlineOpacity(),=0A=
    transition =3D options.transition || Effect.Transitions.linear,=0A=
    reverser   =3D function(pos){=0A=
      return 1 - =
transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);=0A=
    };=0A=
=0A=
  return new Effect.Opacity(element,=0A=
    Object.extend(Object.extend({  duration: 2.0, from: 0,=0A=
      afterFinishInternal: function(effect) { =
effect.element.setStyle({opacity: oldOpacity}); }=0A=
    }, options), {transition: reverser}));=0A=
};=0A=
=0A=
Effect.Fold =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    width: element.style.width,=0A=
    height: element.style.height };=0A=
  element.makeClipping();=0A=
  return new Effect.Scale(element, 5, Object.extend({=0A=
    scaleContent: false,=0A=
    scaleX: false,=0A=
    afterFinishInternal: function(effect) {=0A=
    new Effect.Scale(element, 1, {=0A=
      scaleContent: false,=0A=
      scaleY: false,=0A=
      afterFinishInternal: function(effect) {=0A=
        effect.element.hide().undoClipping().setStyle(oldStyle);=0A=
      } });=0A=
  }}, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.Morph =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      style: { }=0A=
    }, arguments[1] || { });=0A=
=0A=
    if (!Object.isString(options.style)) this.style =3D =
$H(options.style);=0A=
    else {=0A=
      if (options.style.include(':'))=0A=
        this.style =3D options.style.parseStyle();=0A=
      else {=0A=
        this.element.addClassName(options.style);=0A=
        this.style =3D $H(this.element.getStyles());=0A=
        this.element.removeClassName(options.style);=0A=
        var css =3D this.element.getStyles();=0A=
        this.style =3D this.style.reject(function(style) {=0A=
          return style.value =3D=3D css[style.key];=0A=
        });=0A=
        options.afterFinishInternal =3D function(effect) {=0A=
          effect.element.addClassName(effect.options.style);=0A=
          effect.transforms.each(function(transform) {=0A=
            effect.element.style[transform.style] =3D '';=0A=
          });=0A=
        };=0A=
      }=0A=
    }=0A=
    this.start(options);=0A=
  },=0A=
=0A=
  setup: function(){=0A=
    function parseColor(color){=0A=
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) =
color =3D '#ffffff';=0A=
      color =3D color.parseColor();=0A=
      return $R(0,2).map(function(i){=0A=
        return parseInt( color.slice(i*2+1,i*2+3), 16 );=0A=
      });=0A=
    }=0A=
    this.transforms =3D this.style.map(function(pair){=0A=
      var property =3D pair[0], value =3D pair[1], unit =3D null;=0A=
=0A=
      if (value.parseColor('#zzzzzz') !=3D '#zzzzzz') {=0A=
        value =3D value.parseColor();=0A=
        unit  =3D 'color';=0A=
      } else if (property =3D=3D 'opacity') {=0A=
        value =3D parseFloat(value);=0A=
        if (Prototype.Browser.IE && =
(!this.element.currentStyle.hasLayout))=0A=
          this.element.setStyle({zoom: 1});=0A=
      } else if (Element.CSS_LENGTH.test(value)) {=0A=
          var components =3D value.match(/^([\+\-]?[0-9\.]+)(.*)$/);=0A=
          value =3D parseFloat(components[1]);=0A=
          unit =3D (components.length =3D=3D 3) ? components[2] : null;=0A=
      }=0A=
=0A=
      var originalValue =3D this.element.getStyle(property);=0A=
      return {=0A=
        style: property.camelize(),=0A=
        originalValue: unit=3D=3D'color' ? parseColor(originalValue) : =
parseFloat(originalValue || 0),=0A=
        targetValue: unit=3D=3D'color' ? parseColor(value) : value,=0A=
        unit: unit=0A=
      };=0A=
    }.bind(this)).reject(function(transform){=0A=
      return (=0A=
        (transform.originalValue =3D=3D transform.targetValue) ||=0A=
        (=0A=
          transform.unit !=3D 'color' &&=0A=
          (isNaN(transform.originalValue) || =
isNaN(transform.targetValue))=0A=
        )=0A=
      );=0A=
    });=0A=
  },=0A=
  update: function(position) {=0A=
    var style =3D { }, transform, i =3D this.transforms.length;=0A=
    while(i--)=0A=
      style[(transform =3D this.transforms[i]).style] =3D=0A=
        transform.unit=3D=3D'color' ? '#'+=0A=
          (Math.round(transform.originalValue[0]+=0A=
            =
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[1]+=0A=
            =
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[2]+=0A=
            =
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorP=
art() :=0A=
        (transform.originalValue +=0A=
          (transform.targetValue - transform.originalValue) * =
position).toFixed(3) +=0A=
            (transform.unit =3D=3D=3D null ? '' : transform.unit);=0A=
    this.element.setStyle(style, true);=0A=
  }=0A=
});=0A=
=0A=
Effect.Transform =3D Class.create({=0A=
  initialize: function(tracks){=0A=
    this.tracks  =3D [];=0A=
    this.options =3D arguments[1] || { };=0A=
    this.addTracks(tracks);=0A=
  },=0A=
  addTracks: function(tracks){=0A=
    tracks.each(function(track){=0A=
      track =3D $H(track);=0A=
      var data =3D track.values().first();=0A=
      this.tracks.push($H({=0A=
        ids:     track.keys().first(),=0A=
        effect:  Effect.Morph,=0A=
        options: { style: data }=0A=
      }));=0A=
    }.bind(this));=0A=
    return this;=0A=
  },=0A=
  play: function(){=0A=
    return new Effect.Parallel(=0A=
      this.tracks.map(function(track){=0A=
        var ids =3D track.get('ids'), effect =3D track.get('effect'), =
options =3D track.get('options');=0A=
        var elements =3D [$(ids) || $$(ids)].flatten();=0A=
        return elements.map(function(e){ return new effect(e, =
Object.extend({ sync:true }, options)) });=0A=
      }).flatten(),=0A=
      this.options=0A=
    );=0A=
  }=0A=
});=0A=
=0A=
Element.CSS_PROPERTIES =3D $w(=0A=
  'backgroundColor backgroundPosition borderBottomColor =
borderBottomStyle ' +=0A=
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +=0A=
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +=0A=
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +=0A=
  'fontSize fontWeight height left letterSpacing lineHeight ' +=0A=
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight =
'+=0A=
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +=0A=
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +=0A=
  'right textIndent top width wordSpacing zIndex');=0A=
=0A=
Element.CSS_LENGTH =3D =
/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;=0A=
=0A=
String.__parseStyleElement =3D document.createElement('div');=0A=
String.prototype.parseStyle =3D function(){=0A=
  var style, styleRules =3D $H();=0A=
  if (Prototype.Browser.WebKit)=0A=
    style =3D new Element('div',{style:this}).style;=0A=
  else {=0A=
    String.__parseStyleElement.innerHTML =3D '<div style=3D"' + this + =
'"></div>';=0A=
    style =3D String.__parseStyleElement.childNodes[0].style;=0A=
  }=0A=
=0A=
  Element.CSS_PROPERTIES.each(function(property){=0A=
    if (style[property]) styleRules.set(property, style[property]);=0A=
  });=0A=
=0A=
  if (Prototype.Browser.IE && this.include('opacity'))=0A=
    styleRules.set('opacity', =
this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);=0A=
=0A=
  return styleRules;=0A=
};=0A=
=0A=
if (document.defaultView && document.defaultView.getComputedStyle) {=0A=
  Element.getStyles =3D function(element) {=0A=
    var css =3D document.defaultView.getComputedStyle($(element), null);=0A=
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) =
{=0A=
      styles[property] =3D css[property];=0A=
      return styles;=0A=
    });=0A=
  };=0A=
} else {=0A=
  Element.getStyles =3D function(element) {=0A=
    element =3D $(element);=0A=
    var css =3D element.currentStyle, styles;=0A=
    styles =3D Element.CSS_PROPERTIES.inject({ }, function(results, =
property) {=0A=
      results[property] =3D css[property];=0A=
      return results;=0A=
    });=0A=
    if (!styles.opacity) styles.opacity =3D element.getOpacity();=0A=
    return styles;=0A=
  };=0A=
}=0A=
=0A=
Effect.Methods =3D {=0A=
  morph: function(element, style) {=0A=
    element =3D $(element);=0A=
    new Effect.Morph(element, Object.extend({ style: style }, =
arguments[2] || { }));=0A=
    return element;=0A=
  },=0A=
  visualEffect: function(element, effect, options) {=0A=
    element =3D $(element);=0A=
    var s =3D effect.dasherize().camelize(), klass =3D =
s.charAt(0).toUpperCase() + s.substring(1);=0A=
    new Effect[klass](element, options);=0A=
    return element;=0A=
  },=0A=
  highlight: function(element, options) {=0A=
    element =3D $(element);=0A=
    new Effect.Highlight(element, options);=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+=0A=
  'pulsate shake puff squish switchOff dropOut').each(=0A=
  function(effect) {=0A=
    Effect.Methods[effect] =3D function(element, options){=0A=
      element =3D $(element);=0A=
      Effect[effect.charAt(0).toUpperCase() + =
effect.substring(1)](element, options);=0A=
      return element;=0A=
    };=0A=
  }=0A=
);=0A=
=0A=
$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes =
collectTextNodesIgnoreClass getStyles').each(=0A=
  function(f) { Effect.Methods[f] =3D Element[f]; }=0A=
);=0A=
=0A=
Element.addMethods(Effect.Methods);
------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/scriptaculous/dragdrop.js

// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008=0A=
=0A=
// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2008 Sammi Williams =
(http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
if(Object.isUndefined(Effect))=0A=
  throw("dragdrop.js requires including script.aculo.us' effects.js =
library");=0A=
=0A=
var Droppables =3D {=0A=
  drops: [],=0A=
=0A=
  remove: function(element) {=0A=
    this.drops =3D this.drops.reject(function(d) { return =
d.element=3D=3D$(element) });=0A=
  },=0A=
=0A=
  add: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend({=0A=
      greedy:     true,=0A=
      hoverclass: null,=0A=
      tree:       false=0A=
    }, arguments[1] || { });=0A=
=0A=
    // cache containers=0A=
    if(options.containment) {=0A=
      options._containers =3D [];=0A=
      var containment =3D options.containment;=0A=
      if(Object.isArray(containment)) {=0A=
        containment.each( function(c) { options._containers.push($(c)) =
});=0A=
      } else {=0A=
        options._containers.push($(containment));=0A=
      }=0A=
    }=0A=
=0A=
    if(options.accept) options.accept =3D [options.accept].flatten();=0A=
=0A=
    Element.makePositioned(element); // fix IE=0A=
    options.element =3D element;=0A=
=0A=
    this.drops.push(options);=0A=
  },=0A=
=0A=
  findDeepestChild: function(drops) {=0A=
    deepest =3D drops[0];=0A=
=0A=
    for (i =3D 1; i < drops.length; ++i)=0A=
      if (Element.isParent(drops[i].element, deepest.element))=0A=
        deepest =3D drops[i];=0A=
=0A=
    return deepest;=0A=
  },=0A=
=0A=
  isContained: function(element, drop) {=0A=
    var containmentNode;=0A=
    if(drop.tree) {=0A=
      containmentNode =3D element.treeNode;=0A=
    } else {=0A=
      containmentNode =3D element.parentNode;=0A=
    }=0A=
    return drop._containers.detect(function(c) { return containmentNode =
=3D=3D c });=0A=
  },=0A=
=0A=
  isAffected: function(point, element, drop) {=0A=
    return (=0A=
      (drop.element!=3Delement) &&=0A=
      ((!drop._containers) ||=0A=
        this.isContained(element, drop)) &&=0A=
      ((!drop.accept) ||=0A=
        (Element.classNames(element).detect(=0A=
          function(v) { return drop.accept.include(v) } ) )) &&=0A=
      Position.within(drop.element, point[0], point[1]) );=0A=
  },=0A=
=0A=
  deactivate: function(drop) {=0A=
    if(drop.hoverclass)=0A=
      Element.removeClassName(drop.element, drop.hoverclass);=0A=
    this.last_active =3D null;=0A=
  },=0A=
=0A=
  activate: function(drop) {=0A=
    if(drop.hoverclass)=0A=
      Element.addClassName(drop.element, drop.hoverclass);=0A=
    this.last_active =3D drop;=0A=
  },=0A=
=0A=
  show: function(point, element) {=0A=
    if(!this.drops.length) return;=0A=
    var drop, affected =3D [];=0A=
=0A=
    this.drops.each( function(drop) {=0A=
      if(Droppables.isAffected(point, element, drop))=0A=
        affected.push(drop);=0A=
    });=0A=
=0A=
    if(affected.length>0)=0A=
      drop =3D Droppables.findDeepestChild(affected);=0A=
=0A=
    if(this.last_active && this.last_active !=3D drop) =
this.deactivate(this.last_active);=0A=
    if (drop) {=0A=
      Position.within(drop.element, point[0], point[1]);=0A=
      if(drop.onHover)=0A=
        drop.onHover(element, drop.element, =
Position.overlap(drop.overlap, drop.element));=0A=
=0A=
      if (drop !=3D this.last_active) Droppables.activate(drop);=0A=
    }=0A=
  },=0A=
=0A=
  fire: function(event, element) {=0A=
    if(!this.last_active) return;=0A=
    Position.prepare();=0A=
=0A=
    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], =
element, this.last_active))=0A=
      if (this.last_active.onDrop) {=0A=
        this.last_active.onDrop(element, this.last_active.element, =
event);=0A=
        return true;=0A=
      }=0A=
  },=0A=
=0A=
  reset: function() {=0A=
    if(this.last_active)=0A=
      this.deactivate(this.last_active);=0A=
  }=0A=
};=0A=
=0A=
var Draggables =3D {=0A=
  drags: [],=0A=
  observers: [],=0A=
=0A=
  register: function(draggable) {=0A=
    if(this.drags.length =3D=3D 0) {=0A=
      this.eventMouseUp   =3D this.endDrag.bindAsEventListener(this);=0A=
      this.eventMouseMove =3D this.updateDrag.bindAsEventListener(this);=0A=
      this.eventKeypress  =3D this.keyPress.bindAsEventListener(this);=0A=
=0A=
      Event.observe(document, "mouseup", this.eventMouseUp);=0A=
      Event.observe(draggable.element, "mousemove", this.eventMouseMove);=0A=
      Event.observe(document, "keypress", this.eventKeypress);=0A=
    }=0A=
    this.drags.push(draggable);=0A=
  },=0A=
=0A=
  unregister: function(draggable) {=0A=
    this.drags =3D this.drags.reject(function(d) { return =
d=3D=3Ddraggable });=0A=
    if(this.drags.length =3D=3D 0) {=0A=
      Event.stopObserving(document, "mouseup", this.eventMouseUp);=0A=
      Event.stopObserving(draggable.element, "mousemove", =
this.eventMouseMove);=0A=
      Event.stopObserving(document, "keypress", this.eventKeypress);=0A=
    }=0A=
  },=0A=
=0A=
  activate: function(draggable) {=0A=
    if(draggable.options.delay) {=0A=
      this._timeout =3D setTimeout(function() {=0A=
        Draggables._timeout =3D null;=0A=
        window.focus();=0A=
        Draggables.activeDraggable =3D draggable;=0A=
      }.bind(this), draggable.options.delay);=0A=
    } else {=0A=
      window.focus(); // allows keypress events if window isn't =
currently focused, fails for Safari=0A=
      this.activeDraggable =3D draggable;=0A=
    }=0A=
  },=0A=
=0A=
  deactivate: function() {=0A=
    this.activeDraggable =3D null;=0A=
  },=0A=
=0A=
  updateDrag: function(event) {=0A=
    if(!this.activeDraggable) return;=0A=
    var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
    // Mozilla-based browsers fire successive mousemove events with=0A=
    // the same coordinates, prevent needless redrawing (moz bug?)=0A=
    if(this._lastPointer && (this._lastPointer.inspect() =3D=3D =
pointer.inspect())) return;=0A=
    this._lastPointer =3D pointer;=0A=
=0A=
    this.activeDraggable.updateDrag(event, pointer);=0A=
  },=0A=
=0A=
  endDrag: function(event) {=0A=
    if(this._timeout) {=0A=
      clearTimeout(this._timeout);=0A=
      this._timeout =3D null;=0A=
    }=0A=
    if(!this.activeDraggable) return;=0A=
    this._lastPointer =3D null;=0A=
    this.activeDraggable.endDrag(event);=0A=
    this.activeDraggable =3D null;=0A=
  },=0A=
=0A=
  keyPress: function(event) {=0A=
    if(this.activeDraggable)=0A=
      this.activeDraggable.keyPress(event);=0A=
  },=0A=
=0A=
  addObserver: function(observer) {=0A=
    this.observers.push(observer);=0A=
    this._cacheObserverCallbacks();=0A=
  },=0A=
=0A=
  removeObserver: function(element) {  // element instead of observer =
fixes mem leaks=0A=
    this.observers =3D this.observers.reject( function(o) { return =
o.element=3D=3Delement });=0A=
    this._cacheObserverCallbacks();=0A=
  },=0A=
=0A=
  notify: function(eventName, draggable, event) {  // 'onStart', =
'onEnd', 'onDrag'=0A=
    if(this[eventName+'Count'] > 0)=0A=
      this.observers.each( function(o) {=0A=
        if(o[eventName]) o[eventName](eventName, draggable, event);=0A=
      });=0A=
    if(draggable.options[eventName]) =
draggable.options[eventName](draggable, event);=0A=
  },=0A=
=0A=
  _cacheObserverCallbacks: function() {=0A=
    ['onStart','onEnd','onDrag'].each( function(eventName) {=0A=
      Draggables[eventName+'Count'] =3D Draggables.observers.select(=0A=
        function(o) { return o[eventName]; }=0A=
      ).length;=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Draggable =3D Class.create({=0A=
  initialize: function(element) {=0A=
    var defaults =3D {=0A=
      handle: false,=0A=
      reverteffect: function(element, top_offset, left_offset) {=0A=
        var dur =3D =
Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;=0A=
        new Effect.Move(element, { x: -left_offset, y: -top_offset, =
duration: dur,=0A=
          queue: {scope:'_draggable', position:'end'}=0A=
        });=0A=
      },=0A=
      endeffect: function(element) {=0A=
        var toOpacity =3D Object.isNumber(element._opacity) ? =
element._opacity : 1.0;=0A=
        new Effect.Opacity(element, {duration:0.2, from:0.7, =
to:toOpacity,=0A=
          queue: {scope:'_draggable', position:'end'},=0A=
          afterFinish: function(){=0A=
            Draggable._dragging[element] =3D false=0A=
          }=0A=
        });=0A=
      },=0A=
      zindex: 1000,=0A=
      revert: false,=0A=
      quiet: false,=0A=
      scroll: false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      snap: false,  // false, or xy or [x,y] or function(x,y){ return =
[x,y] }=0A=
      delay: 0=0A=
    };=0A=
=0A=
    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))=0A=
      Object.extend(defaults, {=0A=
        starteffect: function(element) {=0A=
          element._opacity =3D Element.getOpacity(element);=0A=
          Draggable._dragging[element] =3D true;=0A=
          new Effect.Opacity(element, {duration:0.2, =
from:element._opacity, to:0.7});=0A=
        }=0A=
      });=0A=
=0A=
    var options =3D Object.extend(defaults, arguments[1] || { });=0A=
=0A=
    this.element =3D $(element);=0A=
=0A=
    if(options.handle && Object.isString(options.handle))=0A=
      this.handle =3D this.element.down('.'+options.handle, 0);=0A=
=0A=
    if(!this.handle) this.handle =3D $(options.handle);=0A=
    if(!this.handle) this.handle =3D this.element;=0A=
=0A=
    if(options.scroll && !options.scroll.scrollTo && =
!options.scroll.outerHTML) {=0A=
      options.scroll =3D $(options.scroll);=0A=
      this._isScrollChild =3D Element.childOf(this.element, =
options.scroll);=0A=
    }=0A=
=0A=
    Element.makePositioned(this.element); // fix IE=0A=
=0A=
    this.options  =3D options;=0A=
    this.dragging =3D false;=0A=
=0A=
    this.eventMouseDown =3D this.initDrag.bindAsEventListener(this);=0A=
    Event.observe(this.handle, "mousedown", this.eventMouseDown);=0A=
=0A=
    Draggables.register(this);=0A=
  },=0A=
=0A=
  destroy: function() {=0A=
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);=0A=
    Draggables.unregister(this);=0A=
  },=0A=
=0A=
  currentDelta: function() {=0A=
    return([=0A=
      parseInt(Element.getStyle(this.element,'left') || '0'),=0A=
      parseInt(Element.getStyle(this.element,'top') || '0')]);=0A=
  },=0A=
=0A=
  initDrag: function(event) {=0A=
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&=0A=
      Draggable._dragging[this.element]) return;=0A=
    if(Event.isLeftClick(event)) {=0A=
      // abort on form elements, fixes a Firefox issue=0A=
      var src =3D Event.element(event);=0A=
      if((tag_name =3D src.tagName.toUpperCase()) && (=0A=
        tag_name=3D=3D'INPUT' ||=0A=
        tag_name=3D=3D'SELECT' ||=0A=
        tag_name=3D=3D'OPTION' ||=0A=
        tag_name=3D=3D'BUTTON' ||=0A=
        tag_name=3D=3D'TEXTAREA')) return;=0A=
=0A=
      var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
      var pos     =3D Position.cumulativeOffset(this.element);=0A=
      this.offset =3D [0,1].map( function(i) { return (pointer[i] - =
pos[i]) });=0A=
=0A=
      Draggables.activate(this);=0A=
      Event.stop(event);=0A=
    }=0A=
  },=0A=
=0A=
  startDrag: function(event) {=0A=
    this.dragging =3D true;=0A=
    if(!this.delta)=0A=
      this.delta =3D this.currentDelta();=0A=
=0A=
    if(this.options.zindex) {=0A=
      this.originalZ =3D =
parseInt(Element.getStyle(this.element,'z-index') || 0);=0A=
      this.element.style.zIndex =3D this.options.zindex;=0A=
    }=0A=
=0A=
    if(this.options.ghosting) {=0A=
      this._clone =3D this.element.cloneNode(true);=0A=
      this._originallyAbsolute =3D (this.element.getStyle('position') =
=3D=3D 'absolute');=0A=
      if (!this._originallyAbsolute)=0A=
        Position.absolutize(this.element);=0A=
      this.element.parentNode.insertBefore(this._clone, this.element);=0A=
    }=0A=
=0A=
    if(this.options.scroll) {=0A=
      if (this.options.scroll =3D=3D window) {=0A=
        var where =3D this._getWindowScroll(this.options.scroll);=0A=
        this.originalScrollLeft =3D where.left;=0A=
        this.originalScrollTop =3D where.top;=0A=
      } else {=0A=
        this.originalScrollLeft =3D this.options.scroll.scrollLeft;=0A=
        this.originalScrollTop =3D this.options.scroll.scrollTop;=0A=
      }=0A=
    }=0A=
=0A=
    Draggables.notify('onStart', this, event);=0A=
=0A=
    if(this.options.starteffect) this.options.starteffect(this.element);=0A=
  },=0A=
=0A=
  updateDrag: function(event, pointer) {=0A=
    if(!this.dragging) this.startDrag(event);=0A=
=0A=
    if(!this.options.quiet){=0A=
      Position.prepare();=0A=
      Droppables.show(pointer, this.element);=0A=
    }=0A=
=0A=
    Draggables.notify('onDrag', this, event);=0A=
=0A=
    this.draw(pointer);=0A=
    if(this.options.change) this.options.change(this);=0A=
=0A=
    if(this.options.scroll) {=0A=
      this.stopScrolling();=0A=
=0A=
      var p;=0A=
      if (this.options.scroll =3D=3D window) {=0A=
        with(this._getWindowScroll(this.options.scroll)) { p =3D [ left, =
top, left+width, top+height ]; }=0A=
      } else {=0A=
        p =3D Position.page(this.options.scroll);=0A=
        p[0] +=3D this.options.scroll.scrollLeft + Position.deltaX;=0A=
        p[1] +=3D this.options.scroll.scrollTop + Position.deltaY;=0A=
        p.push(p[0]+this.options.scroll.offsetWidth);=0A=
        p.push(p[1]+this.options.scroll.offsetHeight);=0A=
      }=0A=
      var speed =3D [0,0];=0A=
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] =
=3D pointer[0]-(p[0]+this.options.scrollSensitivity);=0A=
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] =
=3D pointer[1]-(p[1]+this.options.scrollSensitivity);=0A=
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] =
=3D pointer[0]-(p[2]-this.options.scrollSensitivity);=0A=
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] =
=3D pointer[1]-(p[3]-this.options.scrollSensitivity);=0A=
      this.startScrolling(speed);=0A=
    }=0A=
=0A=
    // fix AppleWebKit rendering=0A=
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
=0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
  finishDrag: function(event, success) {=0A=
    this.dragging =3D false;=0A=
=0A=
    if(this.options.quiet){=0A=
      Position.prepare();=0A=
      var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
      Droppables.show(pointer, this.element);=0A=
    }=0A=
=0A=
    if(this.options.ghosting) {=0A=
      if (!this._originallyAbsolute)=0A=
        Position.relativize(this.element);=0A=
      delete this._originallyAbsolute;=0A=
      Element.remove(this._clone);=0A=
      this._clone =3D null;=0A=
    }=0A=
=0A=
    var dropped =3D false;=0A=
    if(success) {=0A=
      dropped =3D Droppables.fire(event, this.element);=0A=
      if (!dropped) dropped =3D false;=0A=
    }=0A=
    if(dropped && this.options.onDropped) =
this.options.onDropped(this.element);=0A=
    Draggables.notify('onEnd', this, event);=0A=
=0A=
    var revert =3D this.options.revert;=0A=
    if(revert && Object.isFunction(revert)) revert =3D =
revert(this.element);=0A=
=0A=
    var d =3D this.currentDelta();=0A=
    if(revert && this.options.reverteffect) {=0A=
      if (dropped =3D=3D 0 || revert !=3D 'failure')=0A=
        this.options.reverteffect(this.element,=0A=
          d[1]-this.delta[1], d[0]-this.delta[0]);=0A=
    } else {=0A=
      this.delta =3D d;=0A=
    }=0A=
=0A=
    if(this.options.zindex)=0A=
      this.element.style.zIndex =3D this.originalZ;=0A=
=0A=
    if(this.options.endeffect)=0A=
      this.options.endeffect(this.element);=0A=
=0A=
    Draggables.deactivate(this);=0A=
    Droppables.reset();=0A=
  },=0A=
=0A=
  keyPress: function(event) {=0A=
    if(event.keyCode!=3DEvent.KEY_ESC) return;=0A=
    this.finishDrag(event, false);=0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
  endDrag: function(event) {=0A=
    if(!this.dragging) return;=0A=
    this.stopScrolling();=0A=
    this.finishDrag(event, true);=0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
  draw: function(point) {=0A=
    var pos =3D Position.cumulativeOffset(this.element);=0A=
    if(this.options.ghosting) {=0A=
      var r   =3D Position.realOffset(this.element);=0A=
      pos[0] +=3D r[0] - Position.deltaX; pos[1] +=3D r[1] - =
Position.deltaY;=0A=
    }=0A=
=0A=
    var d =3D this.currentDelta();=0A=
    pos[0] -=3D d[0]; pos[1] -=3D d[1];=0A=
=0A=
    if(this.options.scroll && (this.options.scroll !=3D window && =
this._isScrollChild)) {=0A=
      pos[0] -=3D this.options.scroll.scrollLeft-this.originalScrollLeft;=0A=
      pos[1] -=3D this.options.scroll.scrollTop-this.originalScrollTop;=0A=
    }=0A=
=0A=
    var p =3D [0,1].map(function(i){=0A=
      return (point[i]-pos[i]-this.offset[i])=0A=
    }.bind(this));=0A=
=0A=
    if(this.options.snap) {=0A=
      if(Object.isFunction(this.options.snap)) {=0A=
        p =3D this.options.snap(p[0],p[1],this);=0A=
      } else {=0A=
      if(Object.isArray(this.options.snap)) {=0A=
        p =3D p.map( function(v, i) {=0A=
          return (v/this.options.snap[i]).round()*this.options.snap[i] =
}.bind(this));=0A=
      } else {=0A=
        p =3D p.map( function(v) {=0A=
          return (v/this.options.snap).round()*this.options.snap =
}.bind(this));=0A=
      }=0A=
    }}=0A=
=0A=
    var style =3D this.element.style;=0A=
    if((!this.options.constraint) || =
(this.options.constraint=3D=3D'horizontal'))=0A=
      style.left =3D p[0] + "px";=0A=
    if((!this.options.constraint) || =
(this.options.constraint=3D=3D'vertical'))=0A=
      style.top  =3D p[1] + "px";=0A=
=0A=
    if(style.visibility=3D=3D"hidden") style.visibility =3D ""; // fix =
gecko rendering=0A=
  },=0A=
=0A=
  stopScrolling: function() {=0A=
    if(this.scrollInterval) {=0A=
      clearInterval(this.scrollInterval);=0A=
      this.scrollInterval =3D null;=0A=
      Draggables._lastScrollPointer =3D null;=0A=
    }=0A=
  },=0A=
=0A=
  startScrolling: function(speed) {=0A=
    if(!(speed[0] || speed[1])) return;=0A=
    this.scrollSpeed =3D =
[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];=0A=
    this.lastScrolled =3D new Date();=0A=
    this.scrollInterval =3D setInterval(this.scroll.bind(this), 10);=0A=
  },=0A=
=0A=
  scroll: function() {=0A=
    var current =3D new Date();=0A=
    var delta =3D current - this.lastScrolled;=0A=
    this.lastScrolled =3D current;=0A=
    if(this.options.scroll =3D=3D window) {=0A=
      with (this._getWindowScroll(this.options.scroll)) {=0A=
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {=0A=
          var d =3D delta / 1000;=0A=
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], =
top + d*this.scrollSpeed[1] );=0A=
        }=0A=
      }=0A=
    } else {=0A=
      this.options.scroll.scrollLeft +=3D this.scrollSpeed[0] * delta / =
1000;=0A=
      this.options.scroll.scrollTop  +=3D this.scrollSpeed[1] * delta / =
1000;=0A=
    }=0A=
=0A=
    Position.prepare();=0A=
    Droppables.show(Draggables._lastPointer, this.element);=0A=
    Draggables.notify('onDrag', this);=0A=
    if (this._isScrollChild) {=0A=
      Draggables._lastScrollPointer =3D Draggables._lastScrollPointer || =
$A(Draggables._lastPointer);=0A=
      Draggables._lastScrollPointer[0] +=3D this.scrollSpeed[0] * delta =
/ 1000;=0A=
      Draggables._lastScrollPointer[1] +=3D this.scrollSpeed[1] * delta =
/ 1000;=0A=
      if (Draggables._lastScrollPointer[0] < 0)=0A=
        Draggables._lastScrollPointer[0] =3D 0;=0A=
      if (Draggables._lastScrollPointer[1] < 0)=0A=
        Draggables._lastScrollPointer[1] =3D 0;=0A=
      this.draw(Draggables._lastScrollPointer);=0A=
    }=0A=
=0A=
    if(this.options.change) this.options.change(this);=0A=
  },=0A=
=0A=
  _getWindowScroll: function(w) {=0A=
    var T, L, W, H;=0A=
    with (w.document) {=0A=
      if (w.document.documentElement && documentElement.scrollTop) {=0A=
        T =3D documentElement.scrollTop;=0A=
        L =3D documentElement.scrollLeft;=0A=
      } else if (w.document.body) {=0A=
        T =3D body.scrollTop;=0A=
        L =3D body.scrollLeft;=0A=
      }=0A=
      if (w.innerWidth) {=0A=
        W =3D w.innerWidth;=0A=
        H =3D w.innerHeight;=0A=
      } else if (w.document.documentElement && =
documentElement.clientWidth) {=0A=
        W =3D documentElement.clientWidth;=0A=
        H =3D documentElement.clientHeight;=0A=
      } else {=0A=
        W =3D body.offsetWidth;=0A=
        H =3D body.offsetHeight;=0A=
      }=0A=
    }=0A=
    return { top: T, left: L, width: W, height: H };=0A=
  }=0A=
});=0A=
=0A=
Draggable._dragging =3D { };=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var SortableObserver =3D Class.create({=0A=
  initialize: function(element, observer) {=0A=
    this.element   =3D $(element);=0A=
    this.observer  =3D observer;=0A=
    this.lastValue =3D Sortable.serialize(this.element);=0A=
  },=0A=
=0A=
  onStart: function() {=0A=
    this.lastValue =3D Sortable.serialize(this.element);=0A=
  },=0A=
=0A=
  onEnd: function() {=0A=
    Sortable.unmark();=0A=
    if(this.lastValue !=3D Sortable.serialize(this.element))=0A=
      this.observer(this.element)=0A=
  }=0A=
});=0A=
=0A=
var Sortable =3D {=0A=
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,=0A=
=0A=
  sortables: { },=0A=
=0A=
  _findRootElement: function(element) {=0A=
    while (element.tagName.toUpperCase() !=3D "BODY") {=0A=
      if(element.id && Sortable.sortables[element.id]) return element;=0A=
      element =3D element.parentNode;=0A=
    }=0A=
  },=0A=
=0A=
  options: function(element) {=0A=
    element =3D Sortable._findRootElement($(element));=0A=
    if(!element) return;=0A=
    return Sortable.sortables[element.id];=0A=
  },=0A=
=0A=
  destroy: function(element){=0A=
    element =3D $(element);=0A=
    var s =3D Sortable.sortables[element.id];=0A=
=0A=
    if(s) {=0A=
      Draggables.removeObserver(s.element);=0A=
      s.droppables.each(function(d){ Droppables.remove(d) });=0A=
      s.draggables.invoke('destroy');=0A=
=0A=
      delete Sortable.sortables[s.element.id];=0A=
    }=0A=
  },=0A=
=0A=
  create: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend({=0A=
      element:     element,=0A=
      tag:         'li',       // assumes li children, override with =
tag: 'tagname'=0A=
      dropOnEmpty: false,=0A=
      tree:        false,=0A=
      treeTag:     'ul',=0A=
      overlap:     'vertical', // one of 'vertical', 'horizontal'=0A=
      constraint:  'vertical', // one of 'vertical', 'horizontal', false=0A=
      containment: element,    // also takes array of elements (or =
id's); or false=0A=
      handle:      false,      // or a CSS class=0A=
      only:        false,=0A=
      delay:       0,=0A=
      hoverclass:  null,=0A=
      ghosting:    false,=0A=
      quiet:       false,=0A=
      scroll:      false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      format:      this.SERIALIZE_RULE,=0A=
=0A=
      // these take arrays of elements or ids and can be=0A=
      // used for better initialization performance=0A=
      elements:    false,=0A=
      handles:     false,=0A=
=0A=
      onChange:    Prototype.emptyFunction,=0A=
      onUpdate:    Prototype.emptyFunction=0A=
    }, arguments[1] || { });=0A=
=0A=
    // clear any old sortable with same element=0A=
    this.destroy(element);=0A=
=0A=
    // build options for the draggables=0A=
    var options_for_draggable =3D {=0A=
      revert:      true,=0A=
      quiet:       options.quiet,=0A=
      scroll:      options.scroll,=0A=
      scrollSpeed: options.scrollSpeed,=0A=
      scrollSensitivity: options.scrollSensitivity,=0A=
      delay:       options.delay,=0A=
      ghosting:    options.ghosting,=0A=
      constraint:  options.constraint,=0A=
      handle:      options.handle };=0A=
=0A=
    if(options.starteffect)=0A=
      options_for_draggable.starteffect =3D options.starteffect;=0A=
=0A=
    if(options.reverteffect)=0A=
      options_for_draggable.reverteffect =3D options.reverteffect;=0A=
    else=0A=
      if(options.ghosting) options_for_draggable.reverteffect =3D =
function(element) {=0A=
        element.style.top  =3D 0;=0A=
        element.style.left =3D 0;=0A=
      };=0A=
=0A=
    if(options.endeffect)=0A=
      options_for_draggable.endeffect =3D options.endeffect;=0A=
=0A=
    if(options.zindex)=0A=
      options_for_draggable.zindex =3D options.zindex;=0A=
=0A=
    // build options for the droppables=0A=
    var options_for_droppable =3D {=0A=
      overlap:     options.overlap,=0A=
      containment: options.containment,=0A=
      tree:        options.tree,=0A=
      hoverclass:  options.hoverclass,=0A=
      onHover:     Sortable.onHover=0A=
    };=0A=
=0A=
    var options_for_tree =3D {=0A=
      onHover:      Sortable.onEmptyHover,=0A=
      overlap:      options.overlap,=0A=
      containment:  options.containment,=0A=
      hoverclass:   options.hoverclass=0A=
    };=0A=
=0A=
    // fix for gecko engine=0A=
    Element.cleanWhitespace(element);=0A=
=0A=
    options.draggables =3D [];=0A=
    options.droppables =3D [];=0A=
=0A=
    // drop on empty handling=0A=
    if(options.dropOnEmpty || options.tree) {=0A=
      Droppables.add(element, options_for_tree);=0A=
      options.droppables.push(element);=0A=
    }=0A=
=0A=
    (options.elements || this.findElements(element, options) || =
[]).each( function(e,i) {=0A=
      var handle =3D options.handles ? $(options.handles[i]) :=0A=
        (options.handle ? $(e).select('.' + options.handle)[0] : e);=0A=
      options.draggables.push(=0A=
        new Draggable(e, Object.extend(options_for_draggable, { handle: =
handle })));=0A=
      Droppables.add(e, options_for_droppable);=0A=
      if(options.tree) e.treeNode =3D element;=0A=
      options.droppables.push(e);=0A=
    });=0A=
=0A=
    if(options.tree) {=0A=
      (Sortable.findTreeElements(element, options) || []).each( =
function(e) {=0A=
        Droppables.add(e, options_for_tree);=0A=
        e.treeNode =3D element;=0A=
        options.droppables.push(e);=0A=
      });=0A=
    }=0A=
=0A=
    // keep reference=0A=
    this.sortables[element.id] =3D options;=0A=
=0A=
    // for onupdate=0A=
    Draggables.addObserver(new SortableObserver(element, =
options.onUpdate));=0A=
=0A=
  },=0A=
=0A=
  // return all suitable-for-sortable elements in a guaranteed order=0A=
  findElements: function(element, options) {=0A=
    return Element.findChildren(=0A=
      element, options.only, options.tree ? true : false, options.tag);=0A=
  },=0A=
=0A=
  findTreeElements: function(element, options) {=0A=
    return Element.findChildren(=0A=
      element, options.only, options.tree ? true : false, =
options.treeTag);=0A=
  },=0A=
=0A=
  onHover: function(element, dropon, overlap) {=0A=
    if(Element.isParent(dropon, element)) return;=0A=
=0A=
    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {=0A=
      return;=0A=
    } else if(overlap>0.5) {=0A=
      Sortable.mark(dropon, 'before');=0A=
      if(dropon.previousSibling !=3D element) {=0A=
        var oldParentNode =3D element.parentNode;=0A=
        element.style.visibility =3D "hidden"; // fix gecko rendering=0A=
        dropon.parentNode.insertBefore(element, dropon);=0A=
        if(dropon.parentNode!=3DoldParentNode)=0A=
          Sortable.options(oldParentNode).onChange(element);=0A=
        Sortable.options(dropon.parentNode).onChange(element);=0A=
      }=0A=
    } else {=0A=
      Sortable.mark(dropon, 'after');=0A=
      var nextElement =3D dropon.nextSibling || null;=0A=
      if(nextElement !=3D element) {=0A=
        var oldParentNode =3D element.parentNode;=0A=
        element.style.visibility =3D "hidden"; // fix gecko rendering=0A=
        dropon.parentNode.insertBefore(element, nextElement);=0A=
        if(dropon.parentNode!=3DoldParentNode)=0A=
          Sortable.options(oldParentNode).onChange(element);=0A=
        Sortable.options(dropon.parentNode).onChange(element);=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  onEmptyHover: function(element, dropon, overlap) {=0A=
    var oldParentNode =3D element.parentNode;=0A=
    var droponOptions =3D Sortable.options(dropon);=0A=
=0A=
    if(!Element.isParent(dropon, element)) {=0A=
      var index;=0A=
=0A=
      var children =3D Sortable.findElements(dropon, {tag: =
droponOptions.tag, only: droponOptions.only});=0A=
      var child =3D null;=0A=
=0A=
      if(children) {=0A=
        var offset =3D Element.offsetSize(dropon, droponOptions.overlap) =
* (1.0 - overlap);=0A=
=0A=
        for (index =3D 0; index < children.length; index +=3D 1) {=0A=
          if (offset - Element.offsetSize (children[index], =
droponOptions.overlap) >=3D 0) {=0A=
            offset -=3D Element.offsetSize (children[index], =
droponOptions.overlap);=0A=
          } else if (offset - (Element.offsetSize (children[index], =
droponOptions.overlap) / 2) >=3D 0) {=0A=
            child =3D index + 1 < children.length ? children[index + 1] =
: null;=0A=
            break;=0A=
          } else {=0A=
            child =3D children[index];=0A=
            break;=0A=
          }=0A=
        }=0A=
      }=0A=
=0A=
      dropon.insertBefore(element, child);=0A=
=0A=
      Sortable.options(oldParentNode).onChange(element);=0A=
      droponOptions.onChange(element);=0A=
    }=0A=
  },=0A=
=0A=
  unmark: function() {=0A=
    if(Sortable._marker) Sortable._marker.hide();=0A=
  },=0A=
=0A=
  mark: function(dropon, position) {=0A=
    // mark on ghosting only=0A=
    var sortable =3D Sortable.options(dropon.parentNode);=0A=
    if(sortable && !sortable.ghosting) return;=0A=
=0A=
    if(!Sortable._marker) {=0A=
      Sortable._marker =3D=0A=
        ($('dropmarker') || =
Element.extend(document.createElement('DIV'))).=0A=
          =
hide().addClassName('dropmarker').setStyle({position:'absolute'});=0A=
      =
document.getElementsByTagName("body").item(0).appendChild(Sortable._marke=
r);=0A=
    }=0A=
    var offsets =3D Position.cumulativeOffset(dropon);=0A=
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + =
'px'});=0A=
=0A=
    if(position=3D=3D'after')=0A=
      if(sortable.overlap =3D=3D 'horizontal')=0A=
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) =
+ 'px'});=0A=
      else=0A=
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) =
+ 'px'});=0A=
=0A=
    Sortable._marker.show();=0A=
  },=0A=
=0A=
  _tree: function(element, options, parent) {=0A=
    var children =3D Sortable.findElements(element, options) || [];=0A=
=0A=
    for (var i =3D 0; i < children.length; ++i) {=0A=
      var match =3D children[i].id.match(options.format);=0A=
=0A=
      if (!match) continue;=0A=
=0A=
      var child =3D {=0A=
        id: encodeURIComponent(match ? match[1] : null),=0A=
        element: element,=0A=
        parent: parent,=0A=
        children: [],=0A=
        position: parent.children.length,=0A=
        container: $(children[i]).down(options.treeTag)=0A=
      };=0A=
=0A=
      /* Get the element containing the children and recurse over it */=0A=
      if (child.container)=0A=
        this._tree(child.container, options, child);=0A=
=0A=
      parent.children.push (child);=0A=
    }=0A=
=0A=
    return parent;=0A=
  },=0A=
=0A=
  tree: function(element) {=0A=
    element =3D $(element);=0A=
    var sortableOptions =3D this.options(element);=0A=
    var options =3D Object.extend({=0A=
      tag: sortableOptions.tag,=0A=
      treeTag: sortableOptions.treeTag,=0A=
      only: sortableOptions.only,=0A=
      name: element.id,=0A=
      format: sortableOptions.format=0A=
    }, arguments[1] || { });=0A=
=0A=
    var root =3D {=0A=
      id: null,=0A=
      parent: null,=0A=
      children: [],=0A=
      container: element,=0A=
      position: 0=0A=
    };=0A=
=0A=
    return Sortable._tree(element, options, root);=0A=
  },=0A=
=0A=
  /* Construct a [i] index for a particular node */=0A=
  _constructIndex: function(node) {=0A=
    var index =3D '';=0A=
    do {=0A=
      if (node.id) index =3D '[' + node.position + ']' + index;=0A=
    } while ((node =3D node.parent) !=3D null);=0A=
    return index;=0A=
  },=0A=
=0A=
  sequence: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(this.options(element), arguments[1] || =
{ });=0A=
=0A=
    return $(this.findElements(element, options) || []).map( =
function(item) {=0A=
      return item.id.match(options.format) ? =
item.id.match(options.format)[1] : '';=0A=
    });=0A=
  },=0A=
=0A=
  setSequence: function(element, new_sequence) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(this.options(element), arguments[2] || =
{ });=0A=
=0A=
    var nodeMap =3D { };=0A=
    this.findElements(element, options).each( function(n) {=0A=
        if (n.id.match(options.format))=0A=
            nodeMap[n.id.match(options.format)[1]] =3D [n, n.parentNode];=0A=
        n.parentNode.removeChild(n);=0A=
    });=0A=
=0A=
    new_sequence.each(function(ident) {=0A=
      var n =3D nodeMap[ident];=0A=
      if (n) {=0A=
        n[1].appendChild(n[0]);=0A=
        delete nodeMap[ident];=0A=
      }=0A=
    });=0A=
  },=0A=
=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(Sortable.options(element), =
arguments[1] || { });=0A=
    var name =3D encodeURIComponent(=0A=
      (arguments[1] && arguments[1].name) ? arguments[1].name : =
element.id);=0A=
=0A=
    if (options.tree) {=0A=
      return Sortable.tree(element, arguments[1]).children.map( function =
(item) {=0A=
        return [name + Sortable._constructIndex(item) + "[id]=3D" +=0A=
                =
encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));=0A=
      }).flatten().join('&');=0A=
    } else {=0A=
      return Sortable.sequence(element, arguments[1]).map( =
function(item) {=0A=
        return name + "[]=3D" + encodeURIComponent(item);=0A=
      }).join('&');=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
// Returns true if child is contained within element=0A=
Element.isParent =3D function(child, element) {=0A=
  if (!child.parentNode || child =3D=3D element) return false;=0A=
  if (child.parentNode =3D=3D element) return true;=0A=
  return Element.isParent(child.parentNode, element);=0A=
};=0A=
=0A=
Element.findChildren =3D function(element, only, recursive, tagName) {=0A=
  if(!element.hasChildNodes()) return null;=0A=
  tagName =3D tagName.toUpperCase();=0A=
  if(only) only =3D [only].flatten();=0A=
  var elements =3D [];=0A=
  $A(element.childNodes).each( function(e) {=0A=
    if(e.tagName && e.tagName.toUpperCase()=3D=3DtagName &&=0A=
      (!only || (Element.classNames(e).detect(function(v) { return =
only.include(v) }))))=0A=
        elements.push(e);=0A=
    if(recursive) {=0A=
      var grandchildren =3D Element.findChildren(e, only, recursive, =
tagName);=0A=
      if(grandchildren) elements.push(grandchildren);=0A=
    }=0A=
  });=0A=
=0A=
  return (elements.length>0 ? elements.flatten() : []);=0A=
};=0A=
=0A=
Element.offsetSize =3D function (element, type) {=0A=
  return element['offset' + ((type=3D=3D'vertical' || =
type=3D=3D'height') ? 'Height' : 'Width')];=0A=
};
------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/scriptaculous/controls.js

// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008=0A=
=0A=
// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2008 Ivan Krstic =
(http://blogs.law.harvard.edu/ivan)=0A=
//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)=0A=
// Contributors:=0A=
//  Richard Livsey=0A=
//  Rahul Bhargava=0A=
//  Rob Wills=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
// Autocompleter.Base handles all the autocompletion functionality=0A=
// that's independent of the data source for autocompletion. This=0A=
// includes drawing the autocompletion menu, observing keyboard=0A=
// and mouse events, and similar.=0A=
//=0A=
// Specific autocompleters need to provide, at the very least,=0A=
// a getUpdatedChoices function that will be invoked every time=0A=
// the text inside the monitored textbox changes. This method=0A=
// should get the text for which to provide autocompletion by=0A=
// invoking this.getToken(), NOT by directly accessing=0A=
// this.element.value. This is to allow incremental tokenized=0A=
// autocompletion. Specific auto-completion logic (AJAX, etc)=0A=
// belongs in getUpdatedChoices.=0A=
//=0A=
// Tokenized incremental autocompletion is enabled automatically=0A=
// when an autocompleter is instantiated with the 'tokens' option=0A=
// in the options parameter, e.g.:=0A=
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });=0A=
// will incrementally autocomplete with a comma as the token.=0A=
// Additionally, ',' in the above example can be replaced with=0A=
// a token array, e.g. { tokens: [',', '\n'] } which=0A=
// enables autocompletion on multiple tokens. This is most=0A=
// useful when one of the tokens is \n (a newline), as it=0A=
// allows smart autocompletion after linebreaks.=0A=
=0A=
if(typeof Effect =3D=3D 'undefined')=0A=
  throw("controls.js requires including script.aculo.us' effects.js =
library");=0A=
=0A=
var Autocompleter =3D { };=0A=
Autocompleter.Base =3D Class.create({=0A=
  baseInitialize: function(element, update, options) {=0A=
    element          =3D $(element);=0A=
    this.element     =3D element;=0A=
    this.update      =3D $(update);=0A=
    this.hasFocus    =3D false;=0A=
    this.changed     =3D false;=0A=
    this.active      =3D false;=0A=
    this.index       =3D 0;=0A=
    this.entryCount  =3D 0;=0A=
    this.oldElementValue =3D this.element.value;=0A=
=0A=
    if(this.setOptions)=0A=
      this.setOptions(options);=0A=
    else=0A=
      this.options =3D options || { };=0A=
=0A=
    this.options.paramName    =3D this.options.paramName || =
this.element.name;=0A=
    this.options.tokens       =3D this.options.tokens || [];=0A=
    this.options.frequency    =3D this.options.frequency || 0.4;=0A=
    this.options.minChars     =3D this.options.minChars || 1;=0A=
    this.options.onShow       =3D this.options.onShow ||=0A=
      function(element, update){=0A=
        if(!update.style.position || =
update.style.position=3D=3D'absolute') {=0A=
          update.style.position =3D 'absolute';=0A=
          Position.clone(element, update, {=0A=
            setHeight: false,=0A=
            offsetTop: element.offsetHeight=0A=
          });=0A=
        }=0A=
        Effect.Appear(update,{duration:0.15});=0A=
      };=0A=
    this.options.onHide =3D this.options.onHide ||=0A=
      function(element, update){ new Effect.Fade(update,{duration:0.15}) =
};=0A=
=0A=
    if(typeof(this.options.tokens) =3D=3D 'string')=0A=
      this.options.tokens =3D new Array(this.options.tokens);=0A=
    // Force carriage returns as token delimiters anyway=0A=
    if (!this.options.tokens.include('\n'))=0A=
      this.options.tokens.push('\n');=0A=
=0A=
    this.observer =3D null;=0A=
=0A=
    this.element.setAttribute('autocomplete','off');=0A=
=0A=
    Element.hide(this.update);=0A=
=0A=
    Event.observe(this.element, 'blur', =
this.onBlur.bindAsEventListener(this));=0A=
    Event.observe(this.element, 'keydown', =
this.onKeyPress.bindAsEventListener(this));=0A=
  },=0A=
=0A=
  show: function() {=0A=
    if(Element.getStyle(this.update, 'display')=3D=3D'none') =
this.options.onShow(this.element, this.update);=0A=
    if(!this.iefix &&=0A=
      (Prototype.Browser.IE) &&=0A=
      (Element.getStyle(this.update, 'position')=3D=3D'absolute')) {=0A=
      new Insertion.After(this.update,=0A=
       '<iframe id=3D"' + this.update.id + '_iefix" '+=0A=
       =
'style=3D"display:none;position:absolute;filter:progid:DXImageTransform.M=
icrosoft.Alpha(opacity=3D0);" ' +=0A=
       'src=3D"javascript:false;" frameborder=3D"0" =
scrolling=3D"no"></iframe>');=0A=
      this.iefix =3D $(this.update.id+'_iefix');=0A=
    }=0A=
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);=0A=
  },=0A=
=0A=
  fixIEOverlapping: function() {=0A=
    Position.clone(this.update, this.iefix, =
{setTop:(!this.update.style.height)});=0A=
    this.iefix.style.zIndex =3D 1;=0A=
    this.update.style.zIndex =3D 2;=0A=
    Element.show(this.iefix);=0A=
  },=0A=
=0A=
  hide: function() {=0A=
    this.stopIndicator();=0A=
    if(Element.getStyle(this.update, 'display')!=3D'none') =
this.options.onHide(this.element, this.update);=0A=
    if(this.iefix) Element.hide(this.iefix);=0A=
  },=0A=
=0A=
  startIndicator: function() {=0A=
    if(this.options.indicator) Element.show(this.options.indicator);=0A=
  },=0A=
=0A=
  stopIndicator: function() {=0A=
    if(this.options.indicator) Element.hide(this.options.indicator);=0A=
  },=0A=
=0A=
  onKeyPress: function(event) {=0A=
    if(this.active)=0A=
      switch(event.keyCode) {=0A=
       case Event.KEY_TAB:=0A=
       case Event.KEY_RETURN:=0A=
         this.selectEntry();=0A=
         Event.stop(event);=0A=
       case Event.KEY_ESC:=0A=
         this.hide();=0A=
         this.active =3D false;=0A=
         Event.stop(event);=0A=
         return;=0A=
       case Event.KEY_LEFT:=0A=
       case Event.KEY_RIGHT:=0A=
         return;=0A=
       case Event.KEY_UP:=0A=
         this.markPrevious();=0A=
         this.render();=0A=
         Event.stop(event);=0A=
         return;=0A=
       case Event.KEY_DOWN:=0A=
         this.markNext();=0A=
         this.render();=0A=
         Event.stop(event);=0A=
         return;=0A=
      }=0A=
     else=0A=
       if(event.keyCode=3D=3DEvent.KEY_TAB || =
event.keyCode=3D=3DEvent.KEY_RETURN ||=0A=
         (Prototype.Browser.WebKit > 0 && event.keyCode =3D=3D 0)) =
return;=0A=
=0A=
    this.changed =3D true;=0A=
    this.hasFocus =3D true;=0A=
=0A=
    if(this.observer) clearTimeout(this.observer);=0A=
      this.observer =3D=0A=
        setTimeout(this.onObserverEvent.bind(this), =
this.options.frequency*1000);=0A=
  },=0A=
=0A=
  activate: function() {=0A=
    this.changed =3D false;=0A=
    this.hasFocus =3D true;=0A=
    this.getUpdatedChoices();=0A=
  },=0A=
=0A=
  onHover: function(event) {=0A=
    var element =3D Event.findElement(event, 'LI');=0A=
    if(this.index !=3D element.autocompleteIndex)=0A=
    {=0A=
        this.index =3D element.autocompleteIndex;=0A=
        this.render();=0A=
    }=0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
  onClick: function(event) {=0A=
    var element =3D Event.findElement(event, 'LI');=0A=
    this.index =3D element.autocompleteIndex;=0A=
    this.selectEntry();=0A=
    this.hide();=0A=
  },=0A=
=0A=
  onBlur: function(event) {=0A=
    // needed to make click events working=0A=
    setTimeout(this.hide.bind(this), 250);=0A=
    this.hasFocus =3D false;=0A=
    this.active =3D false;=0A=
  },=0A=
=0A=
  render: function() {=0A=
    if(this.entryCount > 0) {=0A=
      for (var i =3D 0; i < this.entryCount; i++)=0A=
        this.index=3D=3Di ?=0A=
          Element.addClassName(this.getEntry(i),"selected") :=0A=
          Element.removeClassName(this.getEntry(i),"selected");=0A=
      if(this.hasFocus) {=0A=
        this.show();=0A=
        this.active =3D true;=0A=
      }=0A=
    } else {=0A=
      this.active =3D false;=0A=
      this.hide();=0A=
    }=0A=
  },=0A=
=0A=
  markPrevious: function() {=0A=
    if(this.index > 0) this.index--;=0A=
      else this.index =3D this.entryCount-1;=0A=
    //this.getEntry(this.index).scrollIntoView(true); useless=0A=
  },=0A=
=0A=
  markNext: function() {=0A=
    if(this.index < this.entryCount-1) this.index++;=0A=
      else this.index =3D 0;=0A=
    this.getEntry(this.index).scrollIntoView(false);=0A=
  },=0A=
=0A=
  getEntry: function(index) {=0A=
    return this.update.firstChild.childNodes[index];=0A=
  },=0A=
=0A=
  getCurrentEntry: function() {=0A=
    return this.getEntry(this.index);=0A=
  },=0A=
=0A=
  selectEntry: function() {=0A=
    this.active =3D false;=0A=
    this.updateElement(this.getCurrentEntry());=0A=
  },=0A=
=0A=
  updateElement: function(selectedElement) {=0A=
    if (this.options.updateElement) {=0A=
      this.options.updateElement(selectedElement);=0A=
      return;=0A=
    }=0A=
    var value =3D '';=0A=
    if (this.options.select) {=0A=
      var nodes =3D $(selectedElement).select('.' + this.options.select) =
|| [];=0A=
      if(nodes.length>0) value =3D Element.collectTextNodes(nodes[0], =
this.options.select);=0A=
    } else=0A=
      value =3D Element.collectTextNodesIgnoreClass(selectedElement, =
'informal');=0A=
=0A=
    var bounds =3D this.getTokenBounds();=0A=
    if (bounds[0] !=3D -1) {=0A=
      var newValue =3D this.element.value.substr(0, bounds[0]);=0A=
      var whitespace =3D =
this.element.value.substr(bounds[0]).match(/^\s+/);=0A=
      if (whitespace)=0A=
        newValue +=3D whitespace[0];=0A=
      this.element.value =3D newValue + value + =
this.element.value.substr(bounds[1]);=0A=
    } else {=0A=
      this.element.value =3D value;=0A=
    }=0A=
    this.oldElementValue =3D this.element.value;=0A=
    this.element.focus();=0A=
=0A=
    if (this.options.afterUpdateElement)=0A=
      this.options.afterUpdateElement(this.element, selectedElement);=0A=
  },=0A=
=0A=
  updateChoices: function(choices) {=0A=
    if(!this.changed && this.hasFocus) {=0A=
      this.update.innerHTML =3D choices;=0A=
      Element.cleanWhitespace(this.update);=0A=
      Element.cleanWhitespace(this.update.down());=0A=
=0A=
      if(this.update.firstChild && this.update.down().childNodes) {=0A=
        this.entryCount =3D=0A=
          this.update.down().childNodes.length;=0A=
        for (var i =3D 0; i < this.entryCount; i++) {=0A=
          var entry =3D this.getEntry(i);=0A=
          entry.autocompleteIndex =3D i;=0A=
          this.addObservers(entry);=0A=
        }=0A=
      } else {=0A=
        this.entryCount =3D 0;=0A=
      }=0A=
=0A=
      this.stopIndicator();=0A=
      this.index =3D 0;=0A=
=0A=
      if(this.entryCount=3D=3D1 && this.options.autoSelect) {=0A=
        this.selectEntry();=0A=
        this.hide();=0A=
      } else {=0A=
        this.render();=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  addObservers: function(element) {=0A=
    Event.observe(element, "mouseover", =
this.onHover.bindAsEventListener(this));=0A=
    Event.observe(element, "click", =
this.onClick.bindAsEventListener(this));=0A=
  },=0A=
=0A=
  onObserverEvent: function() {=0A=
    this.changed =3D false;=0A=
    this.tokenBounds =3D null;=0A=
    if(this.getToken().length>=3Dthis.options.minChars) {=0A=
      this.getUpdatedChoices();=0A=
    } else {=0A=
      this.active =3D false;=0A=
      this.hide();=0A=
    }=0A=
    this.oldElementValue =3D this.element.value;=0A=
  },=0A=
=0A=
  getToken: function() {=0A=
    var bounds =3D this.getTokenBounds();=0A=
    return this.element.value.substring(bounds[0], bounds[1]).strip();=0A=
  },=0A=
=0A=
  getTokenBounds: function() {=0A=
    if (null !=3D this.tokenBounds) return this.tokenBounds;=0A=
    var value =3D this.element.value;=0A=
    if (value.strip().empty()) return [-1, 0];=0A=
    var diff =3D arguments.callee.getFirstDifferencePos(value, =
this.oldElementValue);=0A=
    var offset =3D (diff =3D=3D this.oldElementValue.length ? 1 : 0);=0A=
    var prevTokenPos =3D -1, nextTokenPos =3D value.length;=0A=
    var tp;=0A=
    for (var index =3D 0, l =3D this.options.tokens.length; index < l; =
++index) {=0A=
      tp =3D value.lastIndexOf(this.options.tokens[index], diff + offset =
- 1);=0A=
      if (tp > prevTokenPos) prevTokenPos =3D tp;=0A=
      tp =3D value.indexOf(this.options.tokens[index], diff + offset);=0A=
      if (-1 !=3D tp && tp < nextTokenPos) nextTokenPos =3D tp;=0A=
    }=0A=
    return (this.tokenBounds =3D [prevTokenPos + 1, nextTokenPos]);=0A=
  }=0A=
});=0A=
=0A=
Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos =3D =
function(newS, oldS) {=0A=
  var boundary =3D Math.min(newS.length, oldS.length);=0A=
  for (var index =3D 0; index < boundary; ++index)=0A=
    if (newS[index] !=3D oldS[index])=0A=
      return index;=0A=
  return boundary;=0A=
};=0A=
=0A=
Ajax.Autocompleter =3D Class.create(Autocompleter.Base, {=0A=
  initialize: function(element, update, url, options) {=0A=
    this.baseInitialize(element, update, options);=0A=
    this.options.asynchronous  =3D true;=0A=
    this.options.onComplete    =3D this.onComplete.bind(this);=0A=
    this.options.defaultParams =3D this.options.parameters || null;=0A=
    this.url                   =3D url;=0A=
  },=0A=
=0A=
  getUpdatedChoices: function() {=0A=
    this.startIndicator();=0A=
=0A=
    var entry =3D encodeURIComponent(this.options.paramName) + '=3D' +=0A=
      encodeURIComponent(this.getToken());=0A=
=0A=
    this.options.parameters =3D this.options.callback ?=0A=
      this.options.callback(this.element, entry) : entry;=0A=
=0A=
    if(this.options.defaultParams)=0A=
      this.options.parameters +=3D '&' + this.options.defaultParams;=0A=
=0A=
    new Ajax.Request(this.url, this.options);=0A=
  },=0A=
=0A=
  onComplete: function(request) {=0A=
    this.updateChoices(request.responseText);=0A=
  }=0A=
});=0A=
=0A=
// The local array autocompleter. Used when you'd prefer to=0A=
// inject an array of autocompletion options into the page, rather=0A=
// than sending out Ajax queries, which can be quite slow sometimes.=0A=
//=0A=
// The constructor takes four parameters. The first two are, as usual,=0A=
// the id of the monitored textbox, and id of the autocompletion menu.=0A=
// The third is the array you want to autocomplete from, and the fourth=0A=
// is the options block.=0A=
//=0A=
// Extra local autocompletion options:=0A=
// - choices - How many autocompletion choices to offer=0A=
//=0A=
// - partialSearch - If false, the autocompleter will match entered=0A=
//                    text only at the beginning of strings in the=0A=
//                    autocomplete array. Defaults to true, which will=0A=
//                    match text at the beginning of any *word* in the=0A=
//                    strings in the autocomplete array. If you want to=0A=
//                    search anywhere in the string, additionally set=0A=
//                    the option fullSearch to true (default: off).=0A=
//=0A=
// - fullSsearch - Search anywhere in autocomplete array strings.=0A=
//=0A=
// - partialChars - How many characters to enter before triggering=0A=
//                   a partial match (unlike minChars, which defines=0A=
//                   how many characters are required to do any match=0A=
//                   at all). Defaults to 2.=0A=
//=0A=
// - ignoreCase - Whether to ignore case when autocompleting.=0A=
//                 Defaults to true.=0A=
//=0A=
// It's possible to pass in a custom function as the 'selector'=0A=
// option, if you prefer to write your own autocompletion logic.=0A=
// In that case, the other options above will not apply unless=0A=
// you support them.=0A=
=0A=
Autocompleter.Local =3D Class.create(Autocompleter.Base, {=0A=
  initialize: function(element, update, array, options) {=0A=
    this.baseInitialize(element, update, options);=0A=
    this.options.array =3D array;=0A=
  },=0A=
=0A=
  getUpdatedChoices: function() {=0A=
    this.updateChoices(this.options.selector(this));=0A=
  },=0A=
=0A=
  setOptions: function(options) {=0A=
    this.options =3D Object.extend({=0A=
      choices: 10,=0A=
      partialSearch: true,=0A=
      partialChars: 2,=0A=
      ignoreCase: true,=0A=
      fullSearch: false,=0A=
      selector: function(instance) {=0A=
        var ret       =3D []; // Beginning matches=0A=
        var partial   =3D []; // Inside matches=0A=
        var entry     =3D instance.getToken();=0A=
        var count     =3D 0;=0A=
=0A=
        for (var i =3D 0; i < instance.options.array.length &&=0A=
          ret.length < instance.options.choices ; i++) {=0A=
=0A=
          var elem =3D instance.options.array[i];=0A=
          var foundPos =3D instance.options.ignoreCase ?=0A=
            elem.toLowerCase().indexOf(entry.toLowerCase()) :=0A=
            elem.indexOf(entry);=0A=
=0A=
          while (foundPos !=3D -1) {=0A=
            if (foundPos =3D=3D 0 && elem.length !=3D entry.length) {=0A=
              ret.push("<li><strong>" + elem.substr(0, entry.length) + =
"</strong>" +=0A=
                elem.substr(entry.length) + "</li>");=0A=
              break;=0A=
            } else if (entry.length >=3D instance.options.partialChars &&=0A=
              instance.options.partialSearch && foundPos !=3D -1) {=0A=
              if (instance.options.fullSearch || =
/\s/.test(elem.substr(foundPos-1,1))) {=0A=
                partial.push("<li>" + elem.substr(0, foundPos) + =
"<strong>" +=0A=
                  elem.substr(foundPos, entry.length) + "</strong>" + =
elem.substr(=0A=
                  foundPos + entry.length) + "</li>");=0A=
                break;=0A=
              }=0A=
            }=0A=
=0A=
            foundPos =3D instance.options.ignoreCase ?=0A=
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + =
1) :=0A=
              elem.indexOf(entry, foundPos + 1);=0A=
=0A=
          }=0A=
        }=0A=
        if (partial.length)=0A=
          ret =3D ret.concat(partial.slice(0, instance.options.choices - =
ret.length));=0A=
        return "<ul>" + ret.join('') + "</ul>";=0A=
      }=0A=
    }, options || { });=0A=
  }=0A=
});=0A=
=0A=
// AJAX in-place editor and collection editor=0A=
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April =
2007).=0A=
=0A=
// Use this if you notice weird scrolling problems on some browsers,=0A=
// the DOM might be a bit confused when this gets called so do this=0A=
// waits 1 ms (with setTimeout) until it does the activation=0A=
Field.scrollFreeActivate =3D function(field) {=0A=
  setTimeout(function() {=0A=
    Field.activate(field);=0A=
  }, 1);=0A=
};=0A=
=0A=
Ajax.InPlaceEditor =3D Class.create({=0A=
  initialize: function(element, url, options) {=0A=
    this.url =3D url;=0A=
    this.element =3D element =3D $(element);=0A=
    this.prepareOptions();=0A=
    this._controls =3D { };=0A=
    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION =
LAYER!!!=0A=
    Object.extend(this.options, options || { });=0A=
    if (!this.options.formId && this.element.id) {=0A=
      this.options.formId =3D this.element.id + '-inplaceeditor';=0A=
      if ($(this.options.formId))=0A=
        this.options.formId =3D '';=0A=
    }=0A=
    if (this.options.externalControl)=0A=
      this.options.externalControl =3D $(this.options.externalControl);=0A=
    if (!this.options.externalControl)=0A=
      this.options.externalControlOnly =3D false;=0A=
    this._originalBackground =3D =
this.element.getStyle('background-color') || 'transparent';=0A=
    this.element.title =3D this.options.clickToEditText;=0A=
    this._boundCancelHandler =3D this.handleFormCancellation.bind(this);=0A=
    this._boundComplete =3D (this.options.onComplete || =
Prototype.emptyFunction).bind(this);=0A=
    this._boundFailureHandler =3D this.handleAJAXFailure.bind(this);=0A=
    this._boundSubmitHandler =3D this.handleFormSubmission.bind(this);=0A=
    this._boundWrapperHandler =3D this.wrapUp.bind(this);=0A=
    this.registerListeners();=0A=
  },=0A=
  checkForEscapeOrReturn: function(e) {=0A=
    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;=0A=
    if (Event.KEY_ESC =3D=3D e.keyCode)=0A=
      this.handleFormCancellation(e);=0A=
    else if (Event.KEY_RETURN =3D=3D e.keyCode)=0A=
      this.handleFormSubmission(e);=0A=
  },=0A=
  createControl: function(mode, handler, extraClasses) {=0A=
    var control =3D this.options[mode + 'Control'];=0A=
    var text =3D this.options[mode + 'Text'];=0A=
    if ('button' =3D=3D control) {=0A=
      var btn =3D document.createElement('input');=0A=
      btn.type =3D 'submit';=0A=
      btn.value =3D text;=0A=
      btn.className =3D 'editor_' + mode + '_button';=0A=
      if ('cancel' =3D=3D mode)=0A=
        btn.onclick =3D this._boundCancelHandler;=0A=
      this._form.appendChild(btn);=0A=
      this._controls[mode] =3D btn;=0A=
    } else if ('link' =3D=3D control) {=0A=
      var link =3D document.createElement('a');=0A=
      link.href =3D '#';=0A=
      link.appendChild(document.createTextNode(text));=0A=
      link.onclick =3D 'cancel' =3D=3D mode ? this._boundCancelHandler : =
this._boundSubmitHandler;=0A=
      link.className =3D 'editor_' + mode + '_link';=0A=
      if (extraClasses)=0A=
        link.className +=3D ' ' + extraClasses;=0A=
      this._form.appendChild(link);=0A=
      this._controls[mode] =3D link;=0A=
    }=0A=
  },=0A=
  createEditField: function() {=0A=
    var text =3D (this.options.loadTextURL ? this.options.loadingText : =
this.getText());=0A=
    var fld;=0A=
    if (1 >=3D this.options.rows && !/\r|\n/.test(this.getText())) {=0A=
      fld =3D document.createElement('input');=0A=
      fld.type =3D 'text';=0A=
      var size =3D this.options.size || this.options.cols || 0;=0A=
      if (0 < size) fld.size =3D size;=0A=
    } else {=0A=
      fld =3D document.createElement('textarea');=0A=
      fld.rows =3D (1 >=3D this.options.rows ? this.options.autoRows : =
this.options.rows);=0A=
      fld.cols =3D this.options.cols || 40;=0A=
    }=0A=
    fld.name =3D this.options.paramName;=0A=
    fld.value =3D text; // No HTML breaks conversion anymore=0A=
    fld.className =3D 'editor_field';=0A=
    if (this.options.submitOnBlur)=0A=
      fld.onblur =3D this._boundSubmitHandler;=0A=
    this._controls.editor =3D fld;=0A=
    if (this.options.loadTextURL)=0A=
      this.loadExternalText();=0A=
    this._form.appendChild(this._controls.editor);=0A=
  },=0A=
  createForm: function() {=0A=
    var ipe =3D this;=0A=
    function addText(mode, condition) {=0A=
      var text =3D ipe.options['text' + mode + 'Controls'];=0A=
      if (!text || condition =3D=3D=3D false) return;=0A=
      ipe._form.appendChild(document.createTextNode(text));=0A=
    };=0A=
    this._form =3D $(document.createElement('form'));=0A=
    this._form.id =3D this.options.formId;=0A=
    this._form.addClassName(this.options.formClassName);=0A=
    this._form.onsubmit =3D this._boundSubmitHandler;=0A=
    this.createEditField();=0A=
    if ('textarea' =3D=3D this._controls.editor.tagName.toLowerCase())=0A=
      this._form.appendChild(document.createElement('br'));=0A=
    if (this.options.onFormCustomization)=0A=
      this.options.onFormCustomization(this, this._form);=0A=
    addText('Before', this.options.okControl || =
this.options.cancelControl);=0A=
    this.createControl('ok', this._boundSubmitHandler);=0A=
    addText('Between', this.options.okControl && =
this.options.cancelControl);=0A=
    this.createControl('cancel', this._boundCancelHandler, =
'editor_cancel');=0A=
    addText('After', this.options.okControl || =
this.options.cancelControl);=0A=
  },=0A=
  destroy: function() {=0A=
    if (this._oldInnerHTML)=0A=
      this.element.innerHTML =3D this._oldInnerHTML;=0A=
    this.leaveEditMode();=0A=
    this.unregisterListeners();=0A=
  },=0A=
  enterEditMode: function(e) {=0A=
    if (this._saving || this._editing) return;=0A=
    this._editing =3D true;=0A=
    this.triggerCallback('onEnterEditMode');=0A=
    if (this.options.externalControl)=0A=
      this.options.externalControl.hide();=0A=
    this.element.hide();=0A=
    this.createForm();=0A=
    this.element.parentNode.insertBefore(this._form, this.element);=0A=
    if (!this.options.loadTextURL)=0A=
      this.postProcessEditField();=0A=
    if (e) Event.stop(e);=0A=
  },=0A=
  enterHover: function(e) {=0A=
    if (this.options.hoverClassName)=0A=
      this.element.addClassName(this.options.hoverClassName);=0A=
    if (this._saving) return;=0A=
    this.triggerCallback('onEnterHover');=0A=
  },=0A=
  getText: function() {=0A=
    return this.element.innerHTML.unescapeHTML();=0A=
  },=0A=
  handleAJAXFailure: function(transport) {=0A=
    this.triggerCallback('onFailure', transport);=0A=
    if (this._oldInnerHTML) {=0A=
      this.element.innerHTML =3D this._oldInnerHTML;=0A=
      this._oldInnerHTML =3D null;=0A=
    }=0A=
  },=0A=
  handleFormCancellation: function(e) {=0A=
    this.wrapUp();=0A=
    if (e) Event.stop(e);=0A=
  },=0A=
  handleFormSubmission: function(e) {=0A=
    var form =3D this._form;=0A=
    var value =3D $F(this._controls.editor);=0A=
    this.prepareSubmission();=0A=
    var params =3D this.options.callback(form, value) || '';=0A=
    if (Object.isString(params))=0A=
      params =3D params.toQueryParams();=0A=
    params.editorId =3D this.element.id;=0A=
    if (this.options.htmlResponse) {=0A=
      var options =3D Object.extend({ evalScripts: true }, =
this.options.ajaxOptions);=0A=
      Object.extend(options, {=0A=
        parameters: params,=0A=
        onComplete: this._boundWrapperHandler,=0A=
        onFailure: this._boundFailureHandler=0A=
      });=0A=
      new Ajax.Updater({ success: this.element }, this.url, options);=0A=
    } else {=0A=
      var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
      Object.extend(options, {=0A=
        parameters: params,=0A=
        onComplete: this._boundWrapperHandler,=0A=
        onFailure: this._boundFailureHandler=0A=
      });=0A=
      new Ajax.Request(this.url, options);=0A=
    }=0A=
    if (e) Event.stop(e);=0A=
  },=0A=
  leaveEditMode: function() {=0A=
    this.element.removeClassName(this.options.savingClassName);=0A=
    this.removeForm();=0A=
    this.leaveHover();=0A=
    this.element.style.backgroundColor =3D this._originalBackground;=0A=
    this.element.show();=0A=
    if (this.options.externalControl)=0A=
      this.options.externalControl.show();=0A=
    this._saving =3D false;=0A=
    this._editing =3D false;=0A=
    this._oldInnerHTML =3D null;=0A=
    this.triggerCallback('onLeaveEditMode');=0A=
  },=0A=
  leaveHover: function(e) {=0A=
    if (this.options.hoverClassName)=0A=
      this.element.removeClassName(this.options.hoverClassName);=0A=
    if (this._saving) return;=0A=
    this.triggerCallback('onLeaveHover');=0A=
  },=0A=
  loadExternalText: function() {=0A=
    this._form.addClassName(this.options.loadingClassName);=0A=
    this._controls.editor.disabled =3D true;=0A=
    var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
    Object.extend(options, {=0A=
      parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
      onComplete: Prototype.emptyFunction,=0A=
      onSuccess: function(transport) {=0A=
        this._form.removeClassName(this.options.loadingClassName);=0A=
        var text =3D transport.responseText;=0A=
        if (this.options.stripLoadedTextTags)=0A=
          text =3D text.stripTags();=0A=
        this._controls.editor.value =3D text;=0A=
        this._controls.editor.disabled =3D false;=0A=
        this.postProcessEditField();=0A=
      }.bind(this),=0A=
      onFailure: this._boundFailureHandler=0A=
    });=0A=
    new Ajax.Request(this.options.loadTextURL, options);=0A=
  },=0A=
  postProcessEditField: function() {=0A=
    var fpc =3D this.options.fieldPostCreation;=0A=
    if (fpc)=0A=
      $(this._controls.editor)['focus' =3D=3D fpc ? 'focus' : =
'activate']();=0A=
  },=0A=
  prepareOptions: function() {=0A=
    this.options =3D Object.clone(Ajax.InPlaceEditor.DefaultOptions);=0A=
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);=0A=
    [this._extraDefaultOptions].flatten().compact().each(function(defs) {=0A=
      Object.extend(this.options, defs);=0A=
    }.bind(this));=0A=
  },=0A=
  prepareSubmission: function() {=0A=
    this._saving =3D true;=0A=
    this.removeForm();=0A=
    this.leaveHover();=0A=
    this.showSaving();=0A=
  },=0A=
  registerListeners: function() {=0A=
    this._listeners =3D { };=0A=
    var listener;=0A=
    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {=0A=
      listener =3D this[pair.value].bind(this);=0A=
      this._listeners[pair.key] =3D listener;=0A=
      if (!this.options.externalControlOnly)=0A=
        this.element.observe(pair.key, listener);=0A=
      if (this.options.externalControl)=0A=
        this.options.externalControl.observe(pair.key, listener);=0A=
    }.bind(this));=0A=
  },=0A=
  removeForm: function() {=0A=
    if (!this._form) return;=0A=
    this._form.remove();=0A=
    this._form =3D null;=0A=
    this._controls =3D { };=0A=
  },=0A=
  showSaving: function() {=0A=
    this._oldInnerHTML =3D this.element.innerHTML;=0A=
    this.element.innerHTML =3D this.options.savingText;=0A=
    this.element.addClassName(this.options.savingClassName);=0A=
    this.element.style.backgroundColor =3D this._originalBackground;=0A=
    this.element.show();=0A=
  },=0A=
  triggerCallback: function(cbName, arg) {=0A=
    if ('function' =3D=3D typeof this.options[cbName]) {=0A=
      this.options[cbName](this, arg);=0A=
    }=0A=
  },=0A=
  unregisterListeners: function() {=0A=
    $H(this._listeners).each(function(pair) {=0A=
      if (!this.options.externalControlOnly)=0A=
        this.element.stopObserving(pair.key, pair.value);=0A=
      if (this.options.externalControl)=0A=
        this.options.externalControl.stopObserving(pair.key, pair.value);=0A=
    }.bind(this));=0A=
  },=0A=
  wrapUp: function(transport) {=0A=
    this.leaveEditMode();=0A=
    // Can't use triggerCallback due to backward compatibility: requires=0A=
    // binding + direct element=0A=
    this._boundComplete(transport, this.element);=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Ajax.InPlaceEditor.prototype, {=0A=
  dispose: Ajax.InPlaceEditor.prototype.destroy=0A=
});=0A=
=0A=
Ajax.InPlaceCollectionEditor =3D Class.create(Ajax.InPlaceEditor, {=0A=
  initialize: function($super, element, url, options) {=0A=
    this._extraDefaultOptions =3D =
Ajax.InPlaceCollectionEditor.DefaultOptions;=0A=
    $super(element, url, options);=0A=
  },=0A=
=0A=
  createEditField: function() {=0A=
    var list =3D document.createElement('select');=0A=
    list.name =3D this.options.paramName;=0A=
    list.size =3D 1;=0A=
    this._controls.editor =3D list;=0A=
    this._collection =3D this.options.collection || [];=0A=
    if (this.options.loadCollectionURL)=0A=
      this.loadCollection();=0A=
    else=0A=
      this.checkForExternalText();=0A=
    this._form.appendChild(this._controls.editor);=0A=
  },=0A=
=0A=
  loadCollection: function() {=0A=
    this._form.addClassName(this.options.loadingClassName);=0A=
    this.showLoadingText(this.options.loadingCollectionText);=0A=
    var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
    Object.extend(options, {=0A=
      parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
      onComplete: Prototype.emptyFunction,=0A=
      onSuccess: function(transport) {=0A=
        var js =3D transport.responseText.strip();=0A=
        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check=0A=
          throw('Server returned an invalid collection representation.');=0A=
        this._collection =3D eval(js);=0A=
        this.checkForExternalText();=0A=
      }.bind(this),=0A=
      onFailure: this.onFailure=0A=
    });=0A=
    new Ajax.Request(this.options.loadCollectionURL, options);=0A=
  },=0A=
=0A=
  showLoadingText: function(text) {=0A=
    this._controls.editor.disabled =3D true;=0A=
    var tempOption =3D this._controls.editor.firstChild;=0A=
    if (!tempOption) {=0A=
      tempOption =3D document.createElement('option');=0A=
      tempOption.value =3D '';=0A=
      this._controls.editor.appendChild(tempOption);=0A=
      tempOption.selected =3D true;=0A=
    }=0A=
    tempOption.update((text || '').stripScripts().stripTags());=0A=
  },=0A=
=0A=
  checkForExternalText: function() {=0A=
    this._text =3D this.getText();=0A=
    if (this.options.loadTextURL)=0A=
      this.loadExternalText();=0A=
    else=0A=
      this.buildOptionList();=0A=
  },=0A=
=0A=
  loadExternalText: function() {=0A=
    this.showLoadingText(this.options.loadingText);=0A=
    var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
    Object.extend(options, {=0A=
      parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
      onComplete: Prototype.emptyFunction,=0A=
      onSuccess: function(transport) {=0A=
        this._text =3D transport.responseText.strip();=0A=
        this.buildOptionList();=0A=
      }.bind(this),=0A=
      onFailure: this.onFailure=0A=
    });=0A=
    new Ajax.Request(this.options.loadTextURL, options);=0A=
  },=0A=
=0A=
  buildOptionList: function() {=0A=
    this._form.removeClassName(this.options.loadingClassName);=0A=
    this._collection =3D this._collection.map(function(entry) {=0A=
      return 2 =3D=3D=3D entry.length ? entry : [entry, entry].flatten();=0A=
    });=0A=
    var marker =3D ('value' in this.options) ? this.options.value : =
this._text;=0A=
    var textFound =3D this._collection.any(function(entry) {=0A=
      return entry[0] =3D=3D marker;=0A=
    }.bind(this));=0A=
    this._controls.editor.update('');=0A=
    var option;=0A=
    this._collection.each(function(entry, index) {=0A=
      option =3D document.createElement('option');=0A=
      option.value =3D entry[0];=0A=
      option.selected =3D textFound ? entry[0] =3D=3D marker : 0 =3D=3D =
index;=0A=
      option.appendChild(document.createTextNode(entry[1]));=0A=
      this._controls.editor.appendChild(option);=0A=
    }.bind(this));=0A=
    this._controls.editor.disabled =3D false;=0A=
    Field.scrollFreeActivate(this._controls.editor);=0A=
  }=0A=
});=0A=
=0A=
//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****=0A=
//**** This only  exists for a while,  in order to  let ****=0A=
//**** users adapt to  the new API.  Read up on the new ****=0A=
//**** API and convert your code to it ASAP!            ****=0A=
=0A=
Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions =3D =
function(options) {=0A=
  if (!options) return;=0A=
  function fallback(name, expr) {=0A=
    if (name in options || expr =3D=3D=3D undefined) return;=0A=
    options[name] =3D expr;=0A=
  };=0A=
  fallback('cancelControl', (options.cancelLink ? 'link' : =
(options.cancelButton ? 'button' :=0A=
    options.cancelLink =3D=3D options.cancelButton =3D=3D false ? false =
: undefined)));=0A=
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? =
'button' :=0A=
    options.okLink =3D=3D options.okButton =3D=3D false ? false : =
undefined)));=0A=
  fallback('highlightColor', options.highlightcolor);=0A=
  fallback('highlightEndColor', options.highlightendcolor);=0A=
};=0A=
=0A=
Object.extend(Ajax.InPlaceEditor, {=0A=
  DefaultOptions: {=0A=
    ajaxOptions: { },=0A=
    autoRows: 3,                                // Use when multi-line =
w/ rows =3D=3D 1=0A=
    cancelControl: 'link',                      // 'link'|'button'|false=0A=
    cancelText: 'cancel',=0A=
    clickToEditText: 'Click to edit',=0A=
    externalControl: null,                      // id|elt=0A=
    externalControlOnly: false,=0A=
    fieldPostCreation: 'activate',              // =
'activate'|'focus'|false=0A=
    formClassName: 'inplaceeditor-form',=0A=
    formId: null,                               // id|elt=0A=
    highlightColor: '#ffff99',=0A=
    highlightEndColor: '#ffffff',=0A=
    hoverClassName: '',=0A=
    htmlResponse: true,=0A=
    loadingClassName: 'inplaceeditor-loading',=0A=
    loadingText: 'Loading...',=0A=
    okControl: 'button',                        // 'link'|'button'|false=0A=
    okText: 'ok',=0A=
    paramName: 'value',=0A=
    rows: 1,                                    // If 1 and multi-line, =
uses autoRows=0A=
    savingClassName: 'inplaceeditor-saving',=0A=
    savingText: 'Saving...',=0A=
    size: 0,=0A=
    stripLoadedTextTags: false,=0A=
    submitOnBlur: false,=0A=
    textAfterControls: '',=0A=
    textBeforeControls: '',=0A=
    textBetweenControls: ''=0A=
  },=0A=
  DefaultCallbacks: {=0A=
    callback: function(form) {=0A=
      return Form.serialize(form);=0A=
    },=0A=
    onComplete: function(transport, element) {=0A=
      // For backward compatibility, this one is bound to the IPE, and =
passes=0A=
      // the element directly.  It was too often customized, so we don't =
break it.=0A=
      new Effect.Highlight(element, {=0A=
        startcolor: this.options.highlightColor, keepBackgroundImage: =
true });=0A=
    },=0A=
    onEnterEditMode: null,=0A=
    onEnterHover: function(ipe) {=0A=
      ipe.element.style.backgroundColor =3D ipe.options.highlightColor;=0A=
      if (ipe._effect)=0A=
        ipe._effect.cancel();=0A=
    },=0A=
    onFailure: function(transport, ipe) {=0A=
      alert('Error communication with the server: ' + =
transport.responseText.stripTags());=0A=
    },=0A=
    onFormCustomization: null, // Takes the IPE and its generated form, =
after editor, before controls.=0A=
    onLeaveEditMode: null,=0A=
    onLeaveHover: function(ipe) {=0A=
      ipe._effect =3D new Effect.Highlight(ipe.element, {=0A=
        startcolor: ipe.options.highlightColor, endcolor: =
ipe.options.highlightEndColor,=0A=
        restorecolor: ipe._originalBackground, keepBackgroundImage: true=0A=
      });=0A=
    }=0A=
  },=0A=
  Listeners: {=0A=
    click: 'enterEditMode',=0A=
    keydown: 'checkForEscapeOrReturn',=0A=
    mouseover: 'enterHover',=0A=
    mouseout: 'leaveHover'=0A=
  }=0A=
});=0A=
=0A=
Ajax.InPlaceCollectionEditor.DefaultOptions =3D {=0A=
  loadingCollectionText: 'Loading options...'=0A=
};=0A=
=0A=
// Delayed observer, like Form.Element.Observer,=0A=
// but waits for delay after last key input=0A=
// Ideal for live-search fields=0A=
=0A=
Form.Element.DelayedObserver =3D Class.create({=0A=
  initialize: function(element, delay, callback) {=0A=
    this.delay     =3D delay || 0.5;=0A=
    this.element   =3D $(element);=0A=
    this.callback  =3D callback;=0A=
    this.timer     =3D null;=0A=
    this.lastValue =3D $F(this.element);=0A=
    =
Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListen=
er(this));=0A=
  },=0A=
  delayedListener: function(event) {=0A=
    if(this.lastValue =3D=3D $F(this.element)) return;=0A=
    if(this.timer) clearTimeout(this.timer);=0A=
    this.timer =3D setTimeout(this.onTimerEvent.bind(this), this.delay * =
1000);=0A=
    this.lastValue =3D $F(this.element);=0A=
  },=0A=
  onTimerEvent: function() {=0A=
    this.timer =3D null;=0A=
    this.callback(this.element, $F(this.element));=0A=
  }=0A=
});
------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/scriptaculous/slider.js

// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008=0A=
=0A=
// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
if (!Control) var Control =3D { };=0A=
=0A=
// options:=0A=
//  axis: 'vertical', or 'horizontal' (default)=0A=
//=0A=
// callbacks:=0A=
//  onChange(value)=0A=
//  onSlide(value)=0A=
Control.Slider =3D Class.create({=0A=
  initialize: function(handle, track, options) {=0A=
    var slider =3D this;=0A=
=0A=
    if (Object.isArray(handle)) {=0A=
      this.handles =3D handle.collect( function(e) { return $(e) });=0A=
    } else {=0A=
      this.handles =3D [$(handle)];=0A=
    }=0A=
=0A=
    this.track   =3D $(track);=0A=
    this.options =3D options || { };=0A=
=0A=
    this.axis      =3D this.options.axis || 'horizontal';=0A=
    this.increment =3D this.options.increment || 1;=0A=
    this.step      =3D parseInt(this.options.step || '1');=0A=
    this.range     =3D this.options.range || $R(0,1);=0A=
=0A=
    this.value     =3D 0; // assure backwards compat=0A=
    this.values    =3D this.handles.map( function() { return 0 });=0A=
    this.spans     =3D this.options.spans ? =
this.options.spans.map(function(s){ return $(s) }) : false;=0A=
    this.options.startSpan =3D $(this.options.startSpan || null);=0A=
    this.options.endSpan   =3D $(this.options.endSpan || null);=0A=
=0A=
    this.restricted =3D this.options.restricted || false;=0A=
=0A=
    this.maximum   =3D this.options.maximum || this.range.end;=0A=
    this.minimum   =3D this.options.minimum || this.range.start;=0A=
=0A=
    // Will be used to align the handle onto the track, if necessary=0A=
    this.alignX =3D parseInt(this.options.alignX || '0');=0A=
    this.alignY =3D parseInt(this.options.alignY || '0');=0A=
=0A=
    this.trackLength =3D this.maximumOffset() - this.minimumOffset();=0A=
=0A=
    this.handleLength =3D this.isVertical() ?=0A=
      (this.handles[0].offsetHeight !=3D 0 ?=0A=
        this.handles[0].offsetHeight : =
this.handles[0].style.height.replace(/px$/,"")) :=0A=
      (this.handles[0].offsetWidth !=3D 0 ? this.handles[0].offsetWidth :=0A=
        this.handles[0].style.width.replace(/px$/,""));=0A=
=0A=
    this.active   =3D false;=0A=
    this.dragging =3D false;=0A=
    this.disabled =3D false;=0A=
=0A=
    if (this.options.disabled) this.setDisabled();=0A=
=0A=
    // Allowed values array=0A=
    this.allowedValues =3D this.options.values ? =
this.options.values.sortBy(Prototype.K) : false;=0A=
    if (this.allowedValues) {=0A=
      this.minimum =3D this.allowedValues.min();=0A=
      this.maximum =3D this.allowedValues.max();=0A=
    }=0A=
=0A=
    this.eventMouseDown =3D this.startDrag.bindAsEventListener(this);=0A=
    this.eventMouseUp   =3D this.endDrag.bindAsEventListener(this);=0A=
    this.eventMouseMove =3D this.update.bindAsEventListener(this);=0A=
=0A=
    // Initialize handles in reverse (make sure first handle is active)=0A=
    this.handles.each( function(h,i) {=0A=
      i =3D slider.handles.length-1-i;=0A=
      slider.setValue(parseFloat(=0A=
        (Object.isArray(slider.options.sliderValue) ?=0A=
          slider.options.sliderValue[i] : slider.options.sliderValue) ||=0A=
         slider.range.start), i);=0A=
      h.makePositioned().observe("mousedown", slider.eventMouseDown);=0A=
    });=0A=
=0A=
    this.track.observe("mousedown", this.eventMouseDown);=0A=
    document.observe("mouseup", this.eventMouseUp);=0A=
    $(this.track.parentNode.parentNode).observe("mousemove", =
this.eventMouseMove);=0A=
=0A=
=0A=
    this.initialized =3D true;=0A=
  },=0A=
  dispose: function() {=0A=
    var slider =3D this;=0A=
    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);=0A=
    Event.stopObserving(document, "mouseup", this.eventMouseUp);=0A=
    Event.stopObserving(this.track.parentNode.parentNode, "mousemove", =
this.eventMouseMove);=0A=
    this.handles.each( function(h) {=0A=
      Event.stopObserving(h, "mousedown", slider.eventMouseDown);=0A=
    });=0A=
  },=0A=
  setDisabled: function(){=0A=
    this.disabled =3D true;=0A=
    this.track.parentNode.className =3D this.track.parentNode.className =
+ ' disabled';=0A=
  },=0A=
  setEnabled: function(){=0A=
    this.disabled =3D false;=0A=
  },=0A=
  getNearestValue: function(value){=0A=
    if (this.allowedValues){=0A=
      if (value >=3D this.allowedValues.max()) =
return(this.allowedValues.max());=0A=
      if (value <=3D this.allowedValues.min()) =
return(this.allowedValues.min());=0A=
=0A=
      var offset =3D Math.abs(this.allowedValues[0] - value);=0A=
      var newValue =3D this.allowedValues[0];=0A=
      this.allowedValues.each( function(v) {=0A=
        var currentOffset =3D Math.abs(v - value);=0A=
        if (currentOffset <=3D offset){=0A=
          newValue =3D v;=0A=
          offset =3D currentOffset;=0A=
        }=0A=
      });=0A=
      return newValue;=0A=
    }=0A=
    if (value > this.range.end) return this.range.end;=0A=
    if (value < this.range.start) return this.range.start;=0A=
    return value;=0A=
  },=0A=
  setValue: function(sliderValue, handleIdx){=0A=
    if (!this.active) {=0A=
      this.activeHandleIdx =3D handleIdx || 0;=0A=
      this.activeHandle    =3D this.handles[this.activeHandleIdx];=0A=
      this.updateStyles();=0A=
    }=0A=
    handleIdx =3D handleIdx || this.activeHandleIdx || 0;=0A=
    if (this.initialized && this.restricted) {=0A=
      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))=0A=
        sliderValue =3D this.values[handleIdx-1];=0A=
      if ((handleIdx < (this.handles.length-1)) && =
(sliderValue>this.values[handleIdx+1]))=0A=
        sliderValue =3D this.values[handleIdx+1];=0A=
    }=0A=
    sliderValue =3D this.getNearestValue(sliderValue);=0A=
    this.values[handleIdx] =3D sliderValue;=0A=
    this.value =3D this.values[0]; // assure backwards compat=0A=
=0A=
    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =3D=0A=
      this.translateToPx(sliderValue);=0A=
=0A=
    this.drawSpans();=0A=
    if (!this.dragging || !this.event) this.updateFinished();=0A=
  },=0A=
  setValueBy: function(delta, handleIdx) {=0A=
    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + =
delta,=0A=
      handleIdx || this.activeHandleIdx || 0);=0A=
  },=0A=
  translateToPx: function(value) {=0A=
    return Math.round(=0A=
      =
((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) =
*=0A=
      (value - this.range.start)) + "px";=0A=
  },=0A=
  translateToValue: function(offset) {=0A=
    return ((offset/(this.trackLength-this.handleLength) *=0A=
      (this.range.end-this.range.start)) + this.range.start);=0A=
  },=0A=
  getRange: function(range) {=0A=
    var v =3D this.values.sortBy(Prototype.K);=0A=
    range =3D range || 0;=0A=
    return $R(v[range],v[range+1]);=0A=
  },=0A=
  minimumOffset: function(){=0A=
    return(this.isVertical() ? this.alignY : this.alignX);=0A=
  },=0A=
  maximumOffset: function(){=0A=
    return(this.isVertical() ?=0A=
      (this.track.offsetHeight !=3D 0 ? this.track.offsetHeight :=0A=
        this.track.style.height.replace(/px$/,"")) - this.alignY :=0A=
      (this.track.offsetWidth !=3D 0 ? this.track.offsetWidth :=0A=
        this.track.style.width.replace(/px$/,"")) - this.alignX);=0A=
  },=0A=
  isVertical:  function(){=0A=
    return (this.axis =3D=3D 'vertical');=0A=
  },=0A=
  drawSpans: function() {=0A=
    var slider =3D this;=0A=
    if (this.spans)=0A=
      $R(0, this.spans.length-1).each(function(r) { =
slider.setSpan(slider.spans[r], slider.getRange(r)) });=0A=
    if (this.options.startSpan)=0A=
      this.setSpan(this.options.startSpan,=0A=
        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value =
));=0A=
    if (this.options.endSpan)=0A=
      this.setSpan(this.options.endSpan,=0A=
        $R(this.values.length>1 ? =
this.getRange(this.spans.length-1).max() : this.value, this.maximum));=0A=
  },=0A=
  setSpan: function(span, range) {=0A=
    if (this.isVertical()) {=0A=
      span.style.top =3D this.translateToPx(range.start);=0A=
      span.style.height =3D this.translateToPx(range.end - range.start + =
this.range.start);=0A=
    } else {=0A=
      span.style.left =3D this.translateToPx(range.start);=0A=
      span.style.width =3D this.translateToPx(range.end - range.start + =
this.range.start);=0A=
    }=0A=
  },=0A=
  updateStyles: function() {=0A=
    this.handles.each( function(h){ Element.removeClassName(h, =
'selected') });=0A=
    Element.addClassName(this.activeHandle, 'selected');=0A=
  },=0A=
  startDrag: function(event) {=0A=
    if (Event.isLeftClick(event)) {=0A=
      if (!this.disabled){=0A=
        this.active =3D true;=0A=
=0A=
        var handle =3D Event.element(event);=0A=
        var pointer  =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
        var track =3D handle;=0A=
        if (track=3D=3Dthis.track) {=0A=
          var offsets  =3D Position.cumulativeOffset(this.track);=0A=
          this.event =3D event;=0A=
          this.setValue(this.translateToValue(=0A=
           (this.isVertical() ? pointer[1]-offsets[1] : =
pointer[0]-offsets[0])-(this.handleLength/2)=0A=
          ));=0A=
          var offsets  =3D Position.cumulativeOffset(this.activeHandle);=0A=
          this.offsetX =3D (pointer[0] - offsets[0]);=0A=
          this.offsetY =3D (pointer[1] - offsets[1]);=0A=
        } else {=0A=
          // find the handle (prevents issues with Safari)=0A=
          while((this.handles.indexOf(handle) =3D=3D -1) && =
handle.parentNode)=0A=
            handle =3D handle.parentNode;=0A=
=0A=
          if (this.handles.indexOf(handle)!=3D-1) {=0A=
            this.activeHandle    =3D handle;=0A=
            this.activeHandleIdx =3D =
this.handles.indexOf(this.activeHandle);=0A=
            this.updateStyles();=0A=
=0A=
            var offsets  =3D =
Position.cumulativeOffset(this.activeHandle);=0A=
            this.offsetX =3D (pointer[0] - offsets[0]);=0A=
            this.offsetY =3D (pointer[1] - offsets[1]);=0A=
          }=0A=
        }=0A=
      }=0A=
      Event.stop(event);=0A=
    }=0A=
  },=0A=
  update: function(event) {=0A=
   if (this.active) {=0A=
      if (!this.dragging) this.dragging =3D true;=0A=
      this.draw(event);=0A=
      if (Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
      Event.stop(event);=0A=
   }=0A=
  },=0A=
  draw: function(event) {=0A=
    var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
    var offsets =3D Position.cumulativeOffset(this.track);=0A=
    pointer[0] -=3D this.offsetX + offsets[0];=0A=
    pointer[1] -=3D this.offsetY + offsets[1];=0A=
    this.event =3D event;=0A=
    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] =
: pointer[0] ));=0A=
    if (this.initialized && this.options.onSlide)=0A=
      this.options.onSlide(this.values.length>1 ? this.values : =
this.value, this);=0A=
  },=0A=
  endDrag: function(event) {=0A=
    if (this.active && this.dragging) {=0A=
      this.finishDrag(event, true);=0A=
      Event.stop(event);=0A=
    }=0A=
    this.active =3D false;=0A=
    this.dragging =3D false;=0A=
  },=0A=
  finishDrag: function(event, success) {=0A=
    this.active =3D false;=0A=
    this.dragging =3D false;=0A=
    this.updateFinished();=0A=
  },=0A=
  updateFinished: function() {=0A=
    if (this.initialized && this.options.onChange)=0A=
      this.options.onChange(this.values.length>1 ? this.values : =
this.value, this);=0A=
    this.event =3D null;=0A=
  }=0A=
});
------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/varien/js.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Varien=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
function popWin(url,win,para) {=0A=
    var win =3D window.open(url,win,para);=0A=
    win.focus();=0A=
}=0A=
=0A=
function setLocation(url){=0A=
    window.location.href =3D url;=0A=
}=0A=
=0A=
function setPLocation(url, setFocus){=0A=
    if( setFocus ) {=0A=
        window.opener.focus();=0A=
    }=0A=
    window.opener.location.href =3D url;=0A=
}=0A=
=0A=
function setLanguageCode(code, fromCode){=0A=
    //TODO: javascript cookies have different domain and path than php =
cookies=0A=
    var href =3D window.location.href;=0A=
    var after =3D '', dash;=0A=
    if (dash =3D href.match(/\#(.*)$/)) {=0A=
        href =3D href.replace(/\#(.*)$/, '');=0A=
        after =3D dash[0];=0A=
    }=0A=
=0A=
    if (href.match(/[?]/)) {=0A=
        var re =3D /([?&]store=3D)[a-z0-9_]*/;=0A=
        if (href.match(re)) {=0A=
            href =3D href.replace(re, '$1'+code);=0A=
        } else {=0A=
            href +=3D '&store=3D'+code;=0A=
        }=0A=
=0A=
        var re =3D /([?&]from_store=3D)[a-z0-9_]*/;=0A=
        if (href.match(re)) {=0A=
            href =3D href.replace(re, '');=0A=
        }=0A=
    } else {=0A=
        href +=3D '?store=3D'+code;=0A=
    }=0A=
    if (typeof(fromCode) !=3D 'undefined') {=0A=
        href +=3D '&from_store=3D'+fromCode;=0A=
    }=0A=
    href +=3D after;=0A=
=0A=
    setLocation(href);=0A=
}=0A=
=0A=
/**=0A=
 * Add classes to specified elements.=0A=
 * Supported classes are: 'odd', 'even', 'first', 'last'=0A=
 *=0A=
 * @param elements - array of elements to be decorated=0A=
 * [@param decorateParams] - array of classes to be set. If omitted, all =
available will be used=0A=
 */=0A=
function decorateGeneric(elements, decorateParams)=0A=
{=0A=
    var allSupportedParams =3D ['odd', 'even', 'first', 'last'];=0A=
    var _decorateParams =3D {};=0A=
    var total =3D elements.length;=0A=
=0A=
    if (total) {=0A=
        // determine params called=0A=
        if (typeof(decorateParams) =3D=3D 'undefined') {=0A=
            decorateParams =3D allSupportedParams;=0A=
        }=0A=
        if (!decorateParams.length) {=0A=
            return;=0A=
        }=0A=
        for (var k in allSupportedParams) {=0A=
            _decorateParams[allSupportedParams[k]] =3D false;=0A=
        }=0A=
        for (var k in decorateParams) {=0A=
            _decorateParams[decorateParams[k]] =3D true;=0A=
        }=0A=
=0A=
        // decorate elements=0A=
        // elements[0].addClassName('first'); // will cause bug in IE =
(#5587)=0A=
        if (_decorateParams.first) {=0A=
            Element.addClassName(elements[0], 'first');=0A=
        }=0A=
        if (_decorateParams.last) {=0A=
            Element.addClassName(elements[total-1], 'last');=0A=
        }=0A=
        for (var i =3D 0; i < total; i++) {=0A=
            if ((i + 1) % 2 =3D=3D 0) {=0A=
                if (_decorateParams.even) {=0A=
                    Element.addClassName(elements[i], 'even');=0A=
                }=0A=
            }=0A=
            else {=0A=
                if (_decorateParams.odd) {=0A=
                    Element.addClassName(elements[i], 'odd');=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
/**=0A=
 * Decorate table rows and cells, tbody etc=0A=
 * @see decorateGeneric()=0A=
 */=0A=
function decorateTable(table, options) {=0A=
    var table =3D $(table);=0A=
    if (table) {=0A=
        // set default options=0A=
        var _options =3D {=0A=
            'tbody'    : false,=0A=
            'tbody tr' : ['odd', 'even', 'first', 'last'],=0A=
            'thead tr' : ['first', 'last'],=0A=
            'tfoot tr' : ['first', 'last'],=0A=
            'tr td'    : ['last']=0A=
        };=0A=
        // overload options=0A=
        if (typeof(options) !=3D 'undefined') {=0A=
            for (var k in options) {=0A=
                _options[k] =3D options[k];=0A=
            }=0A=
        }=0A=
        // decorate=0A=
        if (_options['tbody']) {=0A=
            decorateGeneric(table.select('tbody'), _options['tbody']);=0A=
        }=0A=
        if (_options['tbody tr']) {=0A=
            decorateGeneric(table.select('tbody tr'), _options['tbody =
tr']);=0A=
        }=0A=
        if (_options['thead tr']) {=0A=
            decorateGeneric(table.select('thead tr'), _options['thead =
tr']);=0A=
        }=0A=
        if (_options['tfoot tr']) {=0A=
            decorateGeneric(table.select('tfoot tr'), _options['tfoot =
tr']);=0A=
        }=0A=
        if (_options['tr td']) {=0A=
            var allRows =3D table.select('tr');=0A=
            if (allRows.length) {=0A=
                for (var i =3D 0; i < allRows.length; i++) {=0A=
                    =
decorateGeneric(allRows[i].getElementsByTagName('TD'), _options['tr =
td']);=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
/**=0A=
 * Set "odd", "even" and "last" CSS classes for list items=0A=
 * @see decorateGeneric()=0A=
 */=0A=
function decorateList(list, nonRecursive) {=0A=
    if ($(list)) {=0A=
        if (typeof(nonRecursive) =3D=3D 'undefined') {=0A=
            var items =3D $(list).select('li')=0A=
        }=0A=
        else {=0A=
            var items =3D $(list).childElements();=0A=
        }=0A=
        decorateGeneric(items, ['odd', 'even', 'last']);=0A=
    }=0A=
}=0A=
=0A=
/**=0A=
 * Set "odd", "even" and "last" CSS classes for list items=0A=
 * @see decorateGeneric()=0A=
 */=0A=
function decorateDataList(list) {=0A=
    list =3D $(list);=0A=
    if (list) {=0A=
        decorateGeneric(list.select('dt'), ['odd', 'even', 'last']);=0A=
        decorateGeneric(list.select('dd'), ['odd', 'even', 'last']);=0A=
    }=0A=
}=0A=
=0A=
/**=0A=
 * Parse SID and produces the correct URL=0A=
 */=0A=
function parseSidUrl(baseUrl, urlExt) {=0A=
    var sidPos =3D baseUrl.indexOf('/?SID=3D');=0A=
    var sid =3D '';=0A=
    urlExt =3D (urlExt !=3D undefined) ? urlExt : '';=0A=
=0A=
    if(sidPos > -1) {=0A=
        sid =3D '?' + baseUrl.substring(sidPos + 2);=0A=
        baseUrl =3D baseUrl.substring(0, sidPos + 1);=0A=
    }=0A=
=0A=
    return baseUrl+urlExt+sid;=0A=
}=0A=
=0A=
/**=0A=
 * Formats currency using patern=0A=
 * format - JSON (pattern, decimal, decimalsDelimeter, groupsDelimeter)=0A=
 * showPlus - true (always show '+'or '-'),=0A=
 *      false (never show '-' even if number is negative)=0A=
 *      null (show '-' if number is negative)=0A=
 */=0A=
=0A=
function formatCurrency(price, format, showPlus){=0A=
    var precision =3D isNaN(format.precision =3D =
Math.abs(format.precision)) ? 2 : format.precision;=0A=
    var requiredPrecision =3D isNaN(format.requiredPrecision =3D =
Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision;=0A=
=0A=
    //precision =3D (precision > requiredPrecision) ? precision : =
requiredPrecision;=0A=
    //for now we don't need this difference so precision is =
requiredPrecision=0A=
    precision =3D requiredPrecision;=0A=
=0A=
    var integerRequired =3D isNaN(format.integerRequired =3D =
Math.abs(format.integerRequired)) ? 1 : format.integerRequired;=0A=
=0A=
    var decimalSymbol =3D format.decimalSymbol =3D=3D undefined ? "," : =
format.decimalSymbol;=0A=
    var groupSymbol =3D format.groupSymbol =3D=3D undefined ? "." : =
format.groupSymbol;=0A=
    var groupLength =3D format.groupLength =3D=3D undefined ? 3 : =
format.groupLength;=0A=
=0A=
    var s =3D '';=0A=
=0A=
    if (showPlus =3D=3D undefined || showPlus =3D=3D true) {=0A=
        s =3D price < 0 ? "-" : ( showPlus ? "+" : "");=0A=
    } else if (showPlus =3D=3D false) {=0A=
        s =3D '';=0A=
    }=0A=
=0A=
    var i =3D parseInt(price =3D Math.abs(+price || =
0).toFixed(precision)) + "";=0A=
    var pad =3D (i.length < integerRequired) ? (integerRequired - =
i.length) : 0;=0A=
    while (pad) { i =3D '0' + i; pad--; }=0A=
    j =3D (j =3D i.length) > groupLength ? j % groupLength : 0;=0A=
    re =3D new RegExp("(\\d{" + groupLength + "})(?=3D\\d)", "g");=0A=
=0A=
    /**=0A=
     * replace(/-/, 0) is only for fixing Safari bug which appears=0A=
     * when Math.abs(0).toFixed() executed on "0" number.=0A=
     * Result is "0.-0" :(=0A=
     */=0A=
    var r =3D (j ? i.substr(0, j) + groupSymbol : "") + =
i.substr(j).replace(re, "$1" + groupSymbol) + (precision ? decimalSymbol =
+ Math.abs(price - i).toFixed(precision).replace(/-/, 0).slice(2) : "")=0A=
    var pattern =3D '';=0A=
    if (format.pattern.indexOf('{sign}') =3D=3D -1) {=0A=
        pattern =3D s + format.pattern;=0A=
    } else {=0A=
        pattern =3D format.pattern.replace('{sign}', s);=0A=
    }=0A=
=0A=
    return pattern.replace('%s', r).replace(/^\s\s*/, =
'').replace(/\s\s*$/, '');=0A=
};=0A=
=0A=
function expandDetails(el, childClass) {=0A=
    if (Element.hasClassName(el,'show-details')) {=0A=
        $$(childClass).each(function(item){item.hide()});=0A=
        Element.removeClassName(el,'show-details');=0A=
    }=0A=
    else {=0A=
        $$(childClass).each(function(item){item.show()});=0A=
        Element.addClassName(el,'show-details');=0A=
    }=0A=
}=0A=
=0A=
// Version 1.0=0A=
var isIE =3D navigator.appVersion.match(/MSIE/) =3D=3D "MSIE";=0A=
=0A=
if (!window.Varien)=0A=
    var Varien =3D new Object();=0A=
=0A=
Varien.showLoading =3D function(){=0A=
    Element.show('loading-process');=0A=
}=0A=
Varien.hideLoading =3D function(){=0A=
    Element.hide('loading-process');=0A=
}=0A=
Varien.GlobalHandlers =3D {=0A=
    onCreate: function() {=0A=
        Varien.showLoading();=0A=
    },=0A=
=0A=
    onComplete: function() {=0A=
        if(Ajax.activeRequestCount =3D=3D 0) {=0A=
            Varien.hideLoading();=0A=
        }=0A=
    }=0A=
};=0A=
=0A=
Ajax.Responders.register(Varien.GlobalHandlers);=0A=
=0A=
/**=0A=
 * Quick Search form client model=0A=
 */=0A=
Varien.searchForm =3D Class.create();=0A=
Varien.searchForm.prototype =3D {=0A=
    initialize : function(form, field, emptyText){=0A=
        this.form   =3D $(form);=0A=
        this.field  =3D $(field);=0A=
        this.emptyText =3D emptyText;=0A=
=0A=
        Event.observe(this.form,  'submit', this.submit.bind(this));=0A=
        Event.observe(this.field, 'focus', this.focus.bind(this));=0A=
        Event.observe(this.field, 'blur', this.blur.bind(this));=0A=
        this.blur();=0A=
    },=0A=
=0A=
    submit : function(event){=0A=
        if (this.field.value =3D=3D this.emptyText || this.field.value =
=3D=3D ''){=0A=
            Event.stop(event);=0A=
            return false;=0A=
        }=0A=
        return true;=0A=
    },=0A=
=0A=
    focus : function(event){=0A=
        if(this.field.value=3D=3Dthis.emptyText){=0A=
            this.field.value=3D'';=0A=
        }=0A=
=0A=
    },=0A=
=0A=
    blur : function(event){=0A=
        if(this.field.value=3D=3D''){=0A=
            this.field.value=3Dthis.emptyText;=0A=
        }=0A=
    },=0A=
=0A=
    initAutocomplete : function(url, destinationElement){=0A=
        new Ajax.Autocompleter(=0A=
            this.field,=0A=
            destinationElement,=0A=
            url,=0A=
            {=0A=
                paramName: this.field.name,=0A=
                method: 'get',=0A=
                minChars: 2,=0A=
                updateElement: this._selectAutocompleteItem.bind(this),=0A=
                onShow : function(element, update) {=0A=
                    if(!update.style.position || =
update.style.position=3D=3D'absolute') {=0A=
                        update.style.position =3D 'absolute';=0A=
                        Position.clone(element, update, {=0A=
                            setHeight: false,=0A=
                            offsetTop: element.offsetHeight=0A=
                        });=0A=
                    }=0A=
                    Effect.Appear(update,{duration:0});=0A=
                }=0A=
=0A=
            }=0A=
        );=0A=
    },=0A=
=0A=
    _selectAutocompleteItem : function(element){=0A=
        if(element.title){=0A=
            this.field.value =3D element.title;=0A=
        }=0A=
        this.form.submit();=0A=
    }=0A=
}=0A=
=0A=
Varien.Tabs =3D Class.create();=0A=
Varien.Tabs.prototype =3D {=0A=
  initialize: function(selector) {=0A=
    var self=3Dthis;=0A=
    $$(selector+' a').each(this.initTab.bind(this));=0A=
  },=0A=
=0A=
  initTab: function(el) {=0A=
      el.href =3D 'javascript:void(0)';=0A=
      if ($(el.parentNode).hasClassName('active')) {=0A=
        this.showContent(el);=0A=
      }=0A=
      el.observe('click', this.showContent.bind(this, el));=0A=
  },=0A=
=0A=
  showContent: function(a) {=0A=
    var li =3D $(a.parentNode), ul =3D $(li.parentNode);=0A=
    ul.getElementsBySelector('li', 'ol').each(function(el){=0A=
      var contents =3D $(el.id+'_contents');=0A=
      if (el=3D=3Dli) {=0A=
        el.addClassName('active');=0A=
        contents.show();=0A=
      } else {=0A=
        el.removeClassName('active');=0A=
        contents.hide();=0A=
      }=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Varien.DateElement =3D Class.create();=0A=
Varien.DateElement.prototype =3D {=0A=
    initialize: function(type, content, required, format) {=0A=
        if (type =3D=3D 'id') {=0A=
            // id prefix=0A=
            this.day    =3D $(content + 'day');=0A=
            this.month  =3D $(content + 'month');=0A=
            this.year   =3D $(content + 'year');=0A=
            this.full   =3D $(content + 'full');=0A=
            this.advice =3D $(content + 'date-advice');=0A=
        } else if (type =3D=3D 'container') {=0A=
            // content must be container with data=0A=
            this.day    =3D content.day;=0A=
            this.month  =3D content.month;=0A=
            this.year   =3D content.year;=0A=
            this.full   =3D content.full;=0A=
            this.advice =3D content.advice;=0A=
        } else {=0A=
            return;=0A=
        }=0A=
=0A=
        this.required =3D required;=0A=
        this.format   =3D format;=0A=
=0A=
        this.day.addClassName('validate-custom');=0A=
        this.day.validate =3D this.validate.bind(this);=0A=
        this.month.addClassName('validate-custom');=0A=
        this.month.validate =3D this.validate.bind(this);=0A=
        this.year.addClassName('validate-custom');=0A=
        this.year.validate =3D this.validate.bind(this);=0A=
=0A=
        this.setDateRange(false, false);=0A=
        this.year.setAttribute('autocomplete','off');=0A=
=0A=
        this.advice.hide();=0A=
    },=0A=
    validate: function() {=0A=
        var error =3D false,=0A=
            day =3D parseInt(this.day.value.replace(/^0*/, '')) || 0,=0A=
            month =3D parseInt(this.month.value.replace(/^0*/, '')) || 0,=0A=
            year =3D parseInt(this.year.value) || 0;=0A=
        if (!day && !month && !year) {=0A=
            if (this.required) {=0A=
                error =3D 'This date is a required value.';=0A=
            } else {=0A=
                this.full.value =3D '';=0A=
            }=0A=
        } else if (!day || !month || !year) {=0A=
            error =3D 'Please enter a valid full date.';=0A=
        } else {=0A=
            var date =3D new Date, countDaysInMonth =3D 0, errorType =3D =
null;=0A=
            date.setYear(year);date.setMonth(month-1);date.setDate(32);=0A=
            countDaysInMonth =3D 32 - date.getDate();=0A=
            if(!countDaysInMonth || countDaysInMonth>31) =
countDaysInMonth =3D 31;=0A=
=0A=
            if (day<1 || day>countDaysInMonth) {=0A=
                errorType =3D 'day';=0A=
                error =3D 'Please enter a valid day (1-%d).';=0A=
            } else if (month<1 || month>12) {=0A=
                errorType =3D 'month';=0A=
                error =3D 'Please enter a valid month (1-12).';=0A=
            } else {=0A=
                if(day % 10 =3D=3D day) this.day.value =3D '0'+day;=0A=
                if(month % 10 =3D=3D month) this.month.value =3D =
'0'+month;=0A=
                this.full.value =3D this.format.replace(/%[mb]/i, =
this.month.value).replace(/%[de]/i, this.day.value).replace(/%y/i, =
this.year.value);=0A=
                var testFull =3D this.month.value + '/' + this.day.value =
+ '/'+ this.year.value;=0A=
                var test =3D new Date(testFull);=0A=
                if (isNaN(test)) {=0A=
                    error =3D 'Please enter a valid date.';=0A=
                } else {=0A=
                    this.setFullDate(test);=0A=
                }=0A=
            }=0A=
            var valueError =3D false;=0A=
            if (!error && !this.validateData()){//(year<1900 || =
year>curyear) {=0A=
                errorType =3D this.validateDataErrorType;//'year';=0A=
                valueError =3D this.validateDataErrorText;//'Please =
enter a valid year (1900-%d).';=0A=
                error =3D valueError;=0A=
            }=0A=
        }=0A=
=0A=
        if (error !=3D=3D false) {=0A=
            try {=0A=
                error =3D Translator.translate(error);=0A=
            }=0A=
            catch (e) {}=0A=
            if (!valueError) {=0A=
                this.advice.innerHTML =3D error.replace('%d', =
countDaysInMonth);=0A=
            } else {=0A=
                this.advice.innerHTML =3D this.errorTextModifier(error);=0A=
            }=0A=
            this.advice.show();=0A=
            return false;=0A=
        }=0A=
=0A=
        // fixing elements class=0A=
        this.day.removeClassName('validation-failed');=0A=
        this.month.removeClassName('validation-failed');=0A=
        this.year.removeClassName('validation-failed');=0A=
=0A=
        this.advice.hide();=0A=
        return true;=0A=
    },=0A=
    validateData: function() {=0A=
        var year =3D this.fullDate.getFullYear();=0A=
        var date =3D new Date;=0A=
        this.curyear =3D date.getFullYear();=0A=
        return (year>=3D1900 && year<=3Dthis.curyear);=0A=
    },=0A=
    validateDataErrorType: 'year',=0A=
    validateDataErrorText: 'Please enter a valid year (1900-%d).',=0A=
    errorTextModifier: function(text) {=0A=
        return text.replace('%d', this.curyear);=0A=
    },=0A=
    setDateRange: function(minDate, maxDate) {=0A=
        this.minDate =3D minDate;=0A=
        this.maxDate =3D maxDate;=0A=
    },=0A=
    setFullDate: function(date) {=0A=
        this.fullDate =3D date;=0A=
    }=0A=
};=0A=
=0A=
Varien.DOB =3D Class.create();=0A=
Varien.DOB.prototype =3D {=0A=
    initialize: function(selector, required, format) {=0A=
        var el =3D $$(selector)[0];=0A=
        var container       =3D {};=0A=
        container.day       =3D Element.select(el, '.dob-day input')[0];=0A=
        container.month     =3D Element.select(el, '.dob-month =
input')[0];=0A=
        container.year      =3D Element.select(el, '.dob-year input')[0];=0A=
        container.full      =3D Element.select(el, '.dob-full input')[0];=0A=
        container.advice    =3D Element.select(el, =
'.validation-advice')[0];=0A=
=0A=
        new Varien.DateElement('container', container, required, format);=0A=
    }=0A=
};=0A=
=0A=
Varien.dateRangeDate =3D Class.create();=0A=
Varien.dateRangeDate.prototype =3D Object.extend(new =
Varien.DateElement(), {=0A=
    validateData: function() {=0A=
        var validate =3D true;=0A=
        if (this.minDate || this.maxValue) {=0A=
            if (this.minDate) {=0A=
                this.minDate =3D new Date(this.minDate);=0A=
                this.minDate.setHours(0);=0A=
                if (isNaN(this.minDate)) {=0A=
                    this.minDate =3D new Date('1/1/1900');=0A=
                }=0A=
                validate =3D validate && (this.fullDate >=3D =
this.minDate)=0A=
            }=0A=
            if (this.maxDate) {=0A=
                this.maxDate =3D new Date(this.maxDate)=0A=
                this.minDate.setHours(0);=0A=
                if (isNaN(this.maxDate)) {=0A=
                    this.maxDate =3D new Date();=0A=
                }=0A=
                validate =3D validate && (this.fullDate <=3D =
this.maxDate)=0A=
            }=0A=
            if (this.maxDate && this.minDate) {=0A=
                this.validateDataErrorText =3D 'Please enter a valid =
date between %s and %s';=0A=
            } else if (this.maxDate) {=0A=
                this.validateDataErrorText =3D 'Please enter a valid =
date less than or equal to %s';=0A=
            } else if (this.minDate) {=0A=
                this.validateDataErrorText =3D 'Please enter a valid =
date equal to or greater than %s';=0A=
            } else {=0A=
                this.validateDataErrorText =3D '';=0A=
            }=0A=
        }=0A=
        return validate;=0A=
    },=0A=
    validateDataErrorText: 'Date should be between %s and %s',=0A=
    errorTextModifier: function(text) {=0A=
        if (this.minDate) {=0A=
            text =3D text.sub('%s', this.dateFormat(this.minDate));=0A=
        }=0A=
        if (this.maxDate) {=0A=
            text =3D text.sub('%s', this.dateFormat(this.maxDate));=0A=
        }=0A=
        return text;=0A=
    },=0A=
    dateFormat: function(date) {=0A=
        return (date.getMonth() + 1) + '/' + date.getDate() + '/' + =
date.getFullYear();=0A=
    }=0A=
});=0A=
=0A=
Varien.FileElement =3D Class.create();=0A=
Varien.FileElement.prototype =3D {=0A=
    initialize: function (id) {=0A=
        this.fileElement =3D $(id);=0A=
        this.hiddenElement =3D $(id + '_value');=0A=
=0A=
        this.fileElement.observe('change', this.selectFile.bind(this));=0A=
    },=0A=
    selectFile: function(event) {=0A=
        this.hiddenElement.value =3D this.fileElement.getValue();=0A=
    }=0A=
};=0A=
=0A=
Validation.addAllThese([=0A=
    ['validate-custom', ' ', function(v,elm) {=0A=
        return elm.validate();=0A=
    }]=0A=
]);=0A=
=0A=
function truncateOptions() {=0A=
    $$('.truncated').each(function(element){=0A=
        Event.observe(element, 'mouseover', function(){=0A=
            if (element.down('div.truncated_full_value')) {=0A=
                =
element.down('div.truncated_full_value').addClassName('show')=0A=
            }=0A=
        });=0A=
        Event.observe(element, 'mouseout', function(){=0A=
            if (element.down('div.truncated_full_value')) {=0A=
                =
element.down('div.truncated_full_value').removeClassName('show')=0A=
            }=0A=
        });=0A=
=0A=
    });=0A=
}=0A=
Event.observe(window, 'load', function(){=0A=
   truncateOptions();=0A=
});=0A=
=0A=
Element.addMethods({=0A=
    getInnerText: function(element)=0A=
    {=0A=
        element =3D $(element);=0A=
        if(element.innerText && !Prototype.Browser.Opera) {=0A=
            return element.innerText=0A=
        }=0A=
        return =
element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' =
').strip();=0A=
    }=0A=
});=0A=
=0A=
if (!("console" in window) || !("firebug" in console))=0A=
{=0A=
    var names =3D ["log", "debug", "info", "warn", "error", "assert", =
"dir", "dirxml",=0A=
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", =
"profileEnd"];=0A=
=0A=
    window.console =3D {};=0A=
    for (var i =3D 0; i < names.length; ++i)=0A=
        window.console[names[i]] =3D function() {}=0A=
}=0A=
=0A=
/**=0A=
 * Executes event handler on the element. Works with event handlers =
attached by Prototype,=0A=
 * in a browser-agnostic fashion.=0A=
 * @param element The element object=0A=
 * @param event Event name, like 'change'=0A=
 *=0A=
 * @example fireEvent($('my-input', 'click'));=0A=
 */=0A=
function fireEvent(element, event){=0A=
    if (document.createEventObject){=0A=
        // dispatch for IE=0A=
        var evt =3D document.createEventObject();=0A=
        return element.fireEvent('on'+event,evt)=0A=
    }=0A=
    else{=0A=
        // dispatch for firefox + others=0A=
        var evt =3D document.createEvent("HTMLEvents");=0A=
        evt.initEvent(event, true, true ); // event =
type,bubbling,cancelable=0A=
        return !element.dispatchEvent(evt);=0A=
    }=0A=
}=0A=
=0A=
/**=0A=
 * createContextualFragment is not supported in IE9. Adding its support.=0A=
 */=0A=
if ((typeof Range !=3D "undefined") && =
!Range.prototype.createContextualFragment)=0A=
{=0A=
    Range.prototype.createContextualFragment =3D function(html)=0A=
    {=0A=
        var frag =3D document.createDocumentFragment(),=0A=
        div =3D document.createElement("div");=0A=
        frag.appendChild(div);=0A=
        div.outerHTML =3D html;=0A=
        return frag;=0A=
    };=0A=
}=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/varien/form.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Varien=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
VarienForm =3D Class.create();=0A=
VarienForm.prototype =3D {=0A=
    initialize: function(formId, firstFieldFocus){=0A=
        this.form       =3D $(formId);=0A=
        if (!this.form) {=0A=
            return;=0A=
        }=0A=
        this.cache      =3D $A();=0A=
        this.currLoader =3D false;=0A=
        this.currDataIndex =3D false;=0A=
        this.validator  =3D new Validation(this.form);=0A=
        this.elementFocus   =3D =
this.elementOnFocus.bindAsEventListener(this);=0A=
        this.elementBlur    =3D =
this.elementOnBlur.bindAsEventListener(this);=0A=
        this.childLoader    =3D =
this.onChangeChildLoad.bindAsEventListener(this);=0A=
        this.highlightClass =3D 'highlight';=0A=
        this.extraChildParams =3D '';=0A=
        this.firstFieldFocus=3D firstFieldFocus || false;=0A=
        this.bindElements();=0A=
        if(this.firstFieldFocus){=0A=
            try{=0A=
                Form.Element.focus(Form.findFirstElement(this.form))=0A=
            }=0A=
            catch(e){}=0A=
        }=0A=
    },=0A=
=0A=
    submit : function(url){=0A=
        if(this.validator && this.validator.validate()){=0A=
             this.form.submit();=0A=
        }=0A=
        return false;=0A=
    },=0A=
=0A=
    bindElements:function (){=0A=
        var elements =3D Form.getElements(this.form);=0A=
        for (var row in elements) {=0A=
            if (elements[row].id) {=0A=
                Event.observe(elements[row],'focus',this.elementFocus);=0A=
                Event.observe(elements[row],'blur',this.elementBlur);=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    elementOnFocus: function(event){=0A=
        var element =3D Event.findElement(event, 'fieldset');=0A=
        if(element){=0A=
            Element.addClassName(element, this.highlightClass);=0A=
        }=0A=
    },=0A=
=0A=
    elementOnBlur: function(event){=0A=
        var element =3D Event.findElement(event, 'fieldset');=0A=
        if(element){=0A=
            Element.removeClassName(element, this.highlightClass);=0A=
        }=0A=
    },=0A=
=0A=
    setElementsRelation: function(parent, child, dataUrl, first){=0A=
        if (parent=3D$(parent)) {=0A=
            // TODO: array of relation and caching=0A=
            if (!this.cache[parent.id]){=0A=
                this.cache[parent.id] =3D $A();=0A=
                this.cache[parent.id]['child']     =3D child;=0A=
                this.cache[parent.id]['dataUrl']   =3D dataUrl;=0A=
                this.cache[parent.id]['data']      =3D $A();=0A=
                this.cache[parent.id]['first']      =3D first || false;=0A=
            }=0A=
            Event.observe(parent,'change',this.childLoader);=0A=
        }=0A=
    },=0A=
=0A=
    onChangeChildLoad: function(event){=0A=
        element =3D Event.element(event);=0A=
        this.elementChildLoad(element);=0A=
    },=0A=
=0A=
    elementChildLoad: function(element, callback){=0A=
        this.callback =3D callback || false;=0A=
        if (element.value) {=0A=
            this.currLoader =3D element.id;=0A=
            this.currDataIndex =3D element.value;=0A=
            if (this.cache[element.id]['data'][element.value]) {=0A=
                =
this.setDataToChild(this.cache[element.id]['data'][element.value]);=0A=
            }=0A=
            else{=0A=
                new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{=0A=
                        method: 'post',=0A=
                        parameters: {"parent":element.value},=0A=
                        onComplete: this.reloadChildren.bind(this)=0A=
                });=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    reloadChildren: function(transport){=0A=
        var data =3D eval('(' + transport.responseText + ')');=0A=
        this.cache[this.currLoader]['data'][this.currDataIndex] =3D data;=0A=
        this.setDataToChild(data);=0A=
    },=0A=
=0A=
    setDataToChild: function(data){=0A=
        if (data.length) {=0A=
            var child =3D $(this.cache[this.currLoader]['child']);=0A=
            if (child){=0A=
                var html =3D '<select name=3D"'+child.name+'" =
id=3D"'+child.id+'" class=3D"'+child.className+'" =
title=3D"'+child.title+'" '+this.extraChildParams+'>';=0A=
                if(this.cache[this.currLoader]['first']){=0A=
                    html+=3D '<option =
value=3D"">'+this.cache[this.currLoader]['first']+'</option>';=0A=
                }=0A=
                for (var i in data){=0A=
                    if(data[i].value) {=0A=
                        html+=3D '<option value=3D"'+data[i].value+'"';=0A=
                        if(child.value && (child.value =3D=3D =
data[i].value || child.value =3D=3D data[i].label)){=0A=
                            html+=3D ' selected';=0A=
                        }=0A=
                        html+=3D'>'+data[i].label+'</option>';=0A=
                    }=0A=
                }=0A=
                html+=3D '</select>';=0A=
                Element.insert(child, {before: html});=0A=
                Element.remove(child);=0A=
            }=0A=
        }=0A=
        else{=0A=
            var child =3D $(this.cache[this.currLoader]['child']);=0A=
            if (child){=0A=
                var html =3D '<input type=3D"text" =
name=3D"'+child.name+'" id=3D"'+child.id+'" =
class=3D"'+child.className+'" title=3D"'+child.title+'" =
'+this.extraChildParams+'>';=0A=
                Element.insert(child, {before: html});=0A=
                Element.remove(child);=0A=
            }=0A=
        }=0A=
=0A=
        this.bindElements();=0A=
        if (this.callback) {=0A=
            this.callback();=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
RegionUpdater =3D Class.create();=0A=
RegionUpdater.prototype =3D {=0A=
    initialize: function (countryEl, regionTextEl, regionSelectEl, =
regions, disableAction, zipEl)=0A=
    {=0A=
        this.countryEl =3D $(countryEl);=0A=
        this.regionTextEl =3D $(regionTextEl);=0A=
        this.regionSelectEl =3D $(regionSelectEl);=0A=
        this.zipEl =3D $(zipEl);=0A=
        this.regions =3D regions;=0A=
=0A=
        this.disableAction =3D (typeof disableAction=3D=3D'undefined') ? =
'hide' : disableAction;=0A=
        this.zipOptions =3D (typeof zipOptions=3D=3D'undefined') ? false =
: zipOptions;=0A=
=0A=
        if (this.regionSelectEl.options.length<=3D1) {=0A=
            this.update();=0A=
        }=0A=
=0A=
        Event.observe(this.countryEl, 'change', this.update.bind(this));=0A=
    },=0A=
=0A=
    update: function()=0A=
    {=0A=
        if (this.regions[this.countryEl.value]) {=0A=
            var i, option, region, def;=0A=
=0A=
            if (this.regionTextEl) {=0A=
                def =3D this.regionTextEl.value.toLowerCase();=0A=
                this.regionTextEl.value =3D '';=0A=
            }=0A=
            if (!def) {=0A=
                def =3D this.regionSelectEl.getAttribute('defaultValue');=0A=
            }=0A=
=0A=
            this.regionSelectEl.options.length =3D 1;=0A=
            for (regionId in this.regions[this.countryEl.value]) {=0A=
                region =3D this.regions[this.countryEl.value][regionId];=0A=
=0A=
                option =3D document.createElement('OPTION');=0A=
                option.value =3D regionId;=0A=
                option.text =3D region.name;=0A=
=0A=
                if (this.regionSelectEl.options.add) {=0A=
                    this.regionSelectEl.options.add(option);=0A=
                } else {=0A=
                    this.regionSelectEl.appendChild(option);=0A=
                }=0A=
=0A=
                if (regionId=3D=3Ddef || =
region.name.toLowerCase()=3D=3Ddef || =
region.code.toLowerCase()=3D=3Ddef) {=0A=
                    this.regionSelectEl.value =3D regionId;=0A=
                }=0A=
            }=0A=
=0A=
            if (this.disableAction=3D=3D'hide') {=0A=
                if (this.regionTextEl) {=0A=
                    this.regionTextEl.style.display =3D 'none';=0A=
                }=0A=
=0A=
                this.regionSelectEl.style.display =3D '';=0A=
            } else if (this.disableAction=3D=3D'disable') {=0A=
                if (this.regionTextEl) {=0A=
                    this.regionTextEl.disabled =3D true;=0A=
                }=0A=
                this.regionSelectEl.disabled =3D false;=0A=
            }=0A=
            this.setMarkDisplay(this.regionSelectEl, true);=0A=
        } else {=0A=
            if (this.disableAction=3D=3D'hide') {=0A=
                if (this.regionTextEl) {=0A=
                    this.regionTextEl.style.display =3D '';=0A=
                }=0A=
                this.regionSelectEl.style.display =3D 'none';=0A=
                Validation.reset(this.regionSelectEl);=0A=
            } else if (this.disableAction=3D=3D'disable') {=0A=
                if (this.regionTextEl) {=0A=
                    this.regionTextEl.disabled =3D false;=0A=
                }=0A=
                this.regionSelectEl.disabled =3D true;=0A=
            } else if (this.disableAction=3D=3D'nullify') {=0A=
                this.regionSelectEl.options.length =3D 1;=0A=
                this.regionSelectEl.value =3D '';=0A=
                this.regionSelectEl.selectedIndex =3D 0;=0A=
                this.lastCountryId =3D '';=0A=
            }=0A=
            this.setMarkDisplay(this.regionSelectEl, false);=0A=
        }=0A=
=0A=
        // Make Zip and its label required/optional=0A=
        var zipUpdater =3D new ZipUpdater(this.countryEl.value, =
this.zipEl);=0A=
        zipUpdater.update();=0A=
    },=0A=
=0A=
    setMarkDisplay: function(elem, display){=0A=
        elem =3D $(elem);=0A=
        var labelElement =3D elem.up(0).down('label > span.required') ||=0A=
                           elem.up(1).down('label > span.required') ||=0A=
                           elem.up(0).down('label.required > em') ||=0A=
                           elem.up(1).down('label.required > em');=0A=
        if(labelElement) {=0A=
            inputElement =3D labelElement.up().next('input');=0A=
            if (display) {=0A=
                labelElement.show();=0A=
                if (inputElement) {=0A=
                    inputElement.addClassName('required-entry');=0A=
                }=0A=
            } else {=0A=
                labelElement.hide();=0A=
                if (inputElement) {=0A=
                    inputElement.removeClassName('required-entry');=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
ZipUpdater =3D Class.create();=0A=
ZipUpdater.prototype =3D {=0A=
    initialize: function(country, zipElement)=0A=
    {=0A=
        this.country =3D country;=0A=
        this.zipElement =3D $(zipElement);=0A=
    },=0A=
=0A=
    update: function()=0A=
    {=0A=
        // Country ISO 2-letter codes must be pre-defined=0A=
        if (typeof optionalZipCountries =3D=3D 'undefined') {=0A=
            return false;=0A=
        }=0A=
=0A=
        // Ajax-request and normal content load compatibility=0A=
        if (this.zipElement !=3D undefined) {=0A=
            this._setPostcodeOptional();=0A=
        } else {=0A=
            Event.observe(window, "load", =
this._setPostcodeOptional.bind(this));=0A=
        }=0A=
    },=0A=
=0A=
    _setPostcodeOptional: function()=0A=
    {=0A=
        this.zipElement =3D $(this.zipElement);=0A=
        if (this.zipElement =3D=3D undefined) {=0A=
            return false;=0A=
        }=0A=
=0A=
        // find label=0A=
        var label =3D $$('label[for=3D"' + this.zipElement.id + '"]')[0];=0A=
        if (label !=3D undefined) {=0A=
            var wildCard =3D label.down('em') || =
label.down('span.required');=0A=
        }=0A=
=0A=
        // Make Zip and its label required/optional=0A=
        if (optionalZipCountries.indexOf(this.country) !=3D -1) {=0A=
            while (this.zipElement.hasClassName('required-entry')) {=0A=
                this.zipElement.removeClassName('required-entry');=0A=
            }=0A=
            if (wildCard !=3D undefined) {=0A=
                wildCard.hide();=0A=
            }=0A=
        } else {=0A=
            this.zipElement.addClassName('required-entry');=0A=
            if (wildCard !=3D undefined) {=0A=
                wildCard.show();=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/varien/menu.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Varien=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
=0A=
/**=0A=
 * @classDescription simple Navigation with replacing old handlers=0A=
 * @param {String} id id of ul element with navigation lists=0A=
 * @param {Object} settings object with settings=0A=
 */=0A=
var mainNav =3D function() {=0A=
=0A=
    var main =3D {=0A=
        obj_nav :   $(arguments[0]) || $("nav"),=0A=
=0A=
        settings :  {=0A=
            show_delay      :   0,=0A=
            hide_delay      :   0,=0A=
            _ie6            :   /MSIE 6.+Win/.test(navigator.userAgent),=0A=
            _ie7            :   /MSIE 7.+Win/.test(navigator.userAgent)=0A=
        },=0A=
=0A=
        init :  function(obj, level) {=0A=
            obj.lists =3D obj.childElements();=0A=
            obj.lists.each(function(el,ind){=0A=
                main.handlNavElement(el);=0A=
                if((main.settings._ie6 || main.settings._ie7) && level){=0A=
                    main.ieFixZIndex(el, ind, obj.lists.size());=0A=
                }=0A=
            });=0A=
            if(main.settings._ie6 && !level){=0A=
                document.execCommand("BackgroundImageCache", false, =
true);=0A=
            }=0A=
        },=0A=
=0A=
        handlNavElement :   function(list) {=0A=
            if(list !=3D=3D undefined){=0A=
                list.onmouseover =3D function(){=0A=
                    main.fireNavEvent(this,true);=0A=
                };=0A=
                list.onmouseout =3D function(){=0A=
                    main.fireNavEvent(this,false);=0A=
                };=0A=
                if(list.down("ul")){=0A=
                    main.init(list.down("ul"), true);=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        ieFixZIndex : function(el, i, l) {=0A=
            if(el.tagName.toString().toLowerCase().indexOf("iframe") =
=3D=3D -1){=0A=
                el.style.zIndex =3D l - i;=0A=
            } else {=0A=
                el.onmouseover =3D "null";=0A=
                el.onmouseout =3D "null";=0A=
            }=0A=
        },=0A=
=0A=
        fireNavEvent :  function(elm,ev) {=0A=
            if(ev){=0A=
                elm.addClassName("over");=0A=
                elm.down("a").addClassName("over");=0A=
                if (elm.childElements()[1]) {=0A=
                    main.show(elm.childElements()[1]);=0A=
                }=0A=
            } else {=0A=
                elm.removeClassName("over");=0A=
                elm.down("a").removeClassName("over");=0A=
                if (elm.childElements()[1]) {=0A=
                    main.hide(elm.childElements()[1]);=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        show : function (sub_elm) {=0A=
            if (sub_elm.hide_time_id) {=0A=
                clearTimeout(sub_elm.hide_time_id);=0A=
            }=0A=
            sub_elm.show_time_id =3D setTimeout(function() {=0A=
                if (!sub_elm.hasClassName("shown-sub")) {=0A=
                    sub_elm.addClassName("shown-sub");=0A=
                }=0A=
            }, main.settings.show_delay);=0A=
        },=0A=
=0A=
        hide : function (sub_elm) {=0A=
            if (sub_elm.show_time_id) {=0A=
                clearTimeout(sub_elm.show_time_id);=0A=
            }=0A=
            sub_elm.hide_time_id =3D setTimeout(function(){=0A=
                if (sub_elm.hasClassName("shown-sub")) {=0A=
                    sub_elm.removeClassName("shown-sub");=0A=
                }=0A=
            }, main.settings.hide_delay);=0A=
        }=0A=
=0A=
    };=0A=
    if (arguments[1]) {=0A=
        main.settings =3D Object.extend(main.settings, arguments[1]);=0A=
    }=0A=
    if (main.obj_nav) {=0A=
        main.init(main.obj_nav, false);=0A=
    }=0A=
};=0A=
=0A=
document.observe("dom:loaded", function() {=0A=
    //run navigation without delays and with default id=3D"#nav"=0A=
    //mainNav();=0A=
=0A=
    //run navigation with delays=0A=
    mainNav("nav", {"show_delay":"100","hide_delay":"100"});=0A=
});=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/mage/translate.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Mage=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
=0A=
var Translate =3D Class.create();=0A=
Translate.prototype =3D {=0A=
    initialize: function(data){=0A=
        this.data =3D $H(data);=0A=
    },=0A=
=0A=
    translate : function(){=0A=
        var args =3D arguments;=0A=
        var text =3D arguments[0];=0A=
=0A=
        if(this.data.get(text)){=0A=
            return this.data.get(text);=0A=
        }=0A=
        return text;=0A=
    },=0A=
    add : function() {=0A=
        if (arguments.length > 1) {=0A=
            this.data.set(arguments[0], arguments[1]);=0A=
        } else if (typeof arguments[0] =3D=3D'object') {=0A=
            $H(arguments[0]).each(function (pair){=0A=
                this.data.set(pair.key, pair.value);=0A=
            }.bind(this));=0A=
        }=0A=
    }=0A=
}=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/mage/cookies.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Mage=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
// old school cookie functions grabbed off the web=0A=
=0A=
if (!window.Mage) var Mage =3D {};=0A=
=0A=
Mage.Cookies =3D {};=0A=
Mage.Cookies.expires  =3D null;=0A=
Mage.Cookies.path     =3D '/';=0A=
Mage.Cookies.domain   =3D null;=0A=
Mage.Cookies.secure   =3D false;=0A=
Mage.Cookies.set =3D function(name, value){=0A=
     var argv =3D arguments;=0A=
     var argc =3D arguments.length;=0A=
     var expires =3D (argc > 2) ? argv[2] : Mage.Cookies.expires;=0A=
     var path =3D (argc > 3) ? argv[3] : Mage.Cookies.path;=0A=
     var domain =3D (argc > 4) ? argv[4] : Mage.Cookies.domain;=0A=
     var secure =3D (argc > 5) ? argv[5] : Mage.Cookies.secure;=0A=
     document.cookie =3D name + "=3D" + escape (value) +=0A=
       ((expires =3D=3D null) ? "" : ("; expires=3D" + =
expires.toGMTString())) +=0A=
       ((path =3D=3D null) ? "" : ("; path=3D" + path)) +=0A=
       ((domain =3D=3D null) ? "" : ("; domain=3D" + domain)) +=0A=
       ((secure =3D=3D true) ? "; secure" : "");=0A=
};=0A=
=0A=
Mage.Cookies.get =3D function(name){=0A=
    var arg =3D name + "=3D";=0A=
    var alen =3D arg.length;=0A=
    var clen =3D document.cookie.length;=0A=
    var i =3D 0;=0A=
    var j =3D 0;=0A=
    while(i < clen){=0A=
        j =3D i + alen;=0A=
        if (document.cookie.substring(i, j) =3D=3D arg)=0A=
            return Mage.Cookies.getCookieVal(j);=0A=
        i =3D document.cookie.indexOf(" ", i) + 1;=0A=
        if(i =3D=3D 0)=0A=
            break;=0A=
    }=0A=
    return null;=0A=
};=0A=
=0A=
Mage.Cookies.clear =3D function(name) {=0A=
  if(Mage.Cookies.get(name)){=0A=
    document.cookie =3D name + "=3D" +=0A=
    "; expires=3DThu, 01-Jan-70 00:00:01 GMT";=0A=
  }=0A=
};=0A=
=0A=
Mage.Cookies.getCookieVal =3D function(offset){=0A=
   var endstr =3D document.cookie.indexOf(";", offset);=0A=
   if(endstr =3D=3D -1){=0A=
       endstr =3D document.cookie.length;=0A=
   }=0A=
   return unescape(document.cookie.substring(offset, endstr));=0A=
};=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/flash/flashdetect.js

//v1.7=0A=
// Flash Player Version Detection=0A=
// Detect Client Browser type=0A=
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.=0A=
var isIE  =3D (navigator.appVersion.indexOf("MSIE") !=3D -1) ? true : =
false;=0A=
var isWin =3D (navigator.appVersion.toLowerCase().indexOf("win") !=3D =
-1) ? true : false;=0A=
var isOpera =3D (navigator.userAgent.indexOf("Opera") !=3D -1) ? true : =
false;=0A=
=0A=
function ControlVersion()=0A=
{=0A=
	var version;=0A=
	var axo;=0A=
	var e;=0A=
=0A=
	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't =
in the registry=0A=
=0A=
	try {=0A=
		// version will be set for 7.X or greater players=0A=
		axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");=0A=
		version =3D axo.GetVariable("$version");=0A=
	} catch (e) {=0A=
	}=0A=
=0A=
	if (!version)=0A=
	{=0A=
		try {=0A=
			// version will be set for 6.X players only=0A=
			axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");=0A=
			=0A=
			// installed player is some revision of 6.0=0A=
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,=0A=
			// so we have to be careful. =0A=
			=0A=
			// default to the first public version=0A=
			version =3D "WIN 6,0,21,0";=0A=
=0A=
			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		=0A=
			axo.AllowScriptAccess =3D "always";=0A=
=0A=
			// safe to call for 6.0r47 or greater=0A=
			version =3D axo.GetVariable("$version");=0A=
=0A=
		} catch (e) {=0A=
		}=0A=
	}=0A=
=0A=
	if (!version)=0A=
	{=0A=
		try {=0A=
			// version will be set for 4.X or 5.X player=0A=
			axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");=0A=
			version =3D axo.GetVariable("$version");=0A=
		} catch (e) {=0A=
		}=0A=
	}=0A=
=0A=
	if (!version)=0A=
	{=0A=
		try {=0A=
			// version will be set for 3.X player=0A=
			axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");=0A=
			version =3D "WIN 3,0,18,0";=0A=
		} catch (e) {=0A=
		}=0A=
	}=0A=
=0A=
	if (!version)=0A=
	{=0A=
		try {=0A=
			// version will be set for 2.X player=0A=
			axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash");=0A=
			version =3D "WIN 2,0,0,11";=0A=
		} catch (e) {=0A=
			version =3D -1;=0A=
		}=0A=
	}=0A=
	=0A=
	return version;=0A=
}=0A=
=0A=
// JavaScript helper required to detect Flash Player PlugIn version =
information=0A=
function GetSwfVer(){=0A=
	// NS/Opera version >=3D 3 check for Flash plugin in plugin array=0A=
	var flashVer =3D -1;=0A=
	=0A=
	if (navigator.plugins !=3D null && navigator.plugins.length > 0) {=0A=
		if (navigator.plugins["Shockwave Flash 2.0"] || =
navigator.plugins["Shockwave Flash"]) {=0A=
			var swVer2 =3D navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";=0A=
			var flashDescription =3D navigator.plugins["Shockwave Flash" + =
swVer2].description;=0A=
			var descArray =3D flashDescription.split(" ");=0A=
			var tempArrayMajor =3D descArray[2].split(".");			=0A=
			var versionMajor =3D tempArrayMajor[0];=0A=
			var versionMinor =3D tempArrayMajor[1];=0A=
			var versionRevision =3D descArray[3];=0A=
			if (versionRevision =3D=3D "") {=0A=
				versionRevision =3D descArray[4];=0A=
			}=0A=
			if (versionRevision[0] =3D=3D "d") {=0A=
				versionRevision =3D versionRevision.substring(1);=0A=
			} else if (versionRevision[0] =3D=3D "r") {=0A=
				versionRevision =3D versionRevision.substring(1);=0A=
				if (versionRevision.indexOf("d") > 0) {=0A=
					versionRevision =3D versionRevision.substring(0, =
versionRevision.indexOf("d"));=0A=
				}=0A=
			}=0A=
			var flashVer =3D versionMajor + "." + versionMinor + "." + =
versionRevision;=0A=
		}=0A=
	}=0A=
	// MSN/WebTV 2.6 supports Flash 4=0A=
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") !=3D =
-1) flashVer =3D 4;=0A=
	// WebTV 2.5 supports Flash 3=0A=
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") !=3D =
-1) flashVer =3D 3;=0A=
	// older WebTV supports Flash 2=0A=
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") !=3D -1) =
flashVer =3D 2;=0A=
	else if ( isIE && isWin && !isOpera ) {=0A=
		flashVer =3D ControlVersion();=0A=
	}	=0A=
	return flashVer;=0A=
}=0A=
=0A=
// When called with reqMajorVer, reqMinorVer, reqRevision returns true =
if that version or greater is available=0A=
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)=0A=
{=0A=
	versionStr =3D GetSwfVer();=0A=
	if (versionStr =3D=3D -1 ) {=0A=
		return false;=0A=
	} else if (versionStr !=3D 0) {=0A=
		if(isIE && isWin && !isOpera) {=0A=
			// Given "WIN 2,0,0,11"=0A=
			tempArray         =3D versionStr.split(" "); 	// ["WIN", "2,0,0,11"]=0A=
			tempString        =3D tempArray[1];			// "2,0,0,11"=0A=
			versionArray      =3D tempString.split(",");	// ['2', '0', '0', '11']=0A=
		} else {=0A=
			versionArray      =3D versionStr.split(".");=0A=
		}=0A=
		var versionMajor      =3D versionArray[0];=0A=
		var versionMinor      =3D versionArray[1];=0A=
		var versionRevision   =3D versionArray[2];=0A=
=0A=
        	// is the major.revision >=3D requested major.revision AND the =
minor version >=3D requested minor=0A=
		if (versionMajor > parseFloat(reqMajorVer)) {=0A=
			return true;=0A=
		} else if (versionMajor =3D=3D parseFloat(reqMajorVer)) {=0A=
			if (versionMinor > parseFloat(reqMinorVer))=0A=
				return true;=0A=
			else if (versionMinor =3D=3D parseFloat(reqMinorVer)) {=0A=
				if (versionRevision >=3D parseFloat(reqRevision))=0A=
					return true;=0A=
			}=0A=
		}=0A=
		return false;=0A=
	}=0A=
}=0A=
=0A=
function AC_AddExtension(src, ext)=0A=
{=0A=
  if (src.indexOf('?') !=3D -1)=0A=
    return src.replace(/\?/, ext+'?'); =0A=
  else=0A=
    return src + ext;=0A=
}=0A=
=0A=
function AC_Generateobj(objAttrs, params, embedAttrs) =0A=
{ =0A=
  var str =3D '';=0A=
  if (isIE && isWin && !isOpera)=0A=
  {=0A=
    str +=3D '<object ';=0A=
    for (var i in objAttrs)=0A=
    {=0A=
      str +=3D i + '=3D"' + objAttrs[i] + '" ';=0A=
    }=0A=
    str +=3D '>';=0A=
    for (var i in params)=0A=
    {=0A=
      str +=3D '<param name=3D"' + i + '" value=3D"' + params[i] + '" /> =
';=0A=
    }=0A=
    str +=3D '</object>';=0A=
  }=0A=
  else=0A=
  {=0A=
    str +=3D '<embed ';=0A=
    for (var i in embedAttrs)=0A=
    {=0A=
      str +=3D i + '=3D"' + embedAttrs[i] + '" ';=0A=
    }=0A=
    str +=3D '> </embed>';=0A=
  }=0A=
=0A=
  document.write(str);=0A=
}=0A=
=0A=
function AC_FL_RunContent(){=0A=
  var ret =3D =0A=
    AC_GetArgs=0A=
    (  arguments, ".swf", "movie", =
"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"=0A=
     , "application/x-shockwave-flash"=0A=
    );=0A=
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);=0A=
}=0A=
=0A=
function AC_SW_RunContent(){=0A=
  var ret =3D =0A=
    AC_GetArgs=0A=
    (  arguments, ".dcr", "src", =
"clsid:166B1BCA-3F9C-11CF-8075-444553540000"=0A=
     , null=0A=
    );=0A=
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);=0A=
}=0A=
=0A=
function AC_GetArgs(args, ext, srcParamName, classid, mimeType){=0A=
  var ret =3D new Object();=0A=
  ret.embedAttrs =3D new Object();=0A=
  ret.params =3D new Object();=0A=
  ret.objAttrs =3D new Object();=0A=
  for (var i=3D0; i < args.length; i=3Di+2){=0A=
    var currArg =3D args[i].toLowerCase();    =0A=
=0A=
    switch (currArg){	=0A=
      case "classid":=0A=
        break;=0A=
      case "pluginspage":=0A=
        ret.embedAttrs[args[i]] =3D args[i+1];=0A=
        break;=0A=
      case "src":=0A=
      case "movie":	=0A=
        args[i+1] =3D AC_AddExtension(args[i+1], ext);=0A=
        ret.embedAttrs["src"] =3D args[i+1];=0A=
        ret.params[srcParamName] =3D args[i+1];=0A=
        break;=0A=
      case "onafterupdate":=0A=
      case "onbeforeupdate":=0A=
      case "onblur":=0A=
      case "oncellchange":=0A=
      case "onclick":=0A=
      case "ondblclick":=0A=
      case "ondrag":=0A=
      case "ondragend":=0A=
      case "ondragenter":=0A=
      case "ondragleave":=0A=
      case "ondragover":=0A=
      case "ondrop":=0A=
      case "onfinish":=0A=
      case "onfocus":=0A=
      case "onhelp":=0A=
      case "onmousedown":=0A=
      case "onmouseup":=0A=
      case "onmouseover":=0A=
      case "onmousemove":=0A=
      case "onmouseout":=0A=
      case "onkeypress":=0A=
      case "onkeydown":=0A=
      case "onkeyup":=0A=
      case "onload":=0A=
      case "onlosecapture":=0A=
      case "onpropertychange":=0A=
      case "onreadystatechange":=0A=
      case "onrowsdelete":=0A=
      case "onrowenter":=0A=
      case "onrowexit":=0A=
      case "onrowsinserted":=0A=
      case "onstart":=0A=
      case "onscroll":=0A=
      case "onbeforeeditfocus":=0A=
      case "onactivate":=0A=
      case "onbeforedeactivate":=0A=
      case "ondeactivate":=0A=
      case "type":=0A=
      case "codebase":=0A=
      case "id":=0A=
        ret.objAttrs[args[i]] =3D args[i+1];=0A=
        break;=0A=
      case "width":=0A=
      case "height":=0A=
      case "align":=0A=
      case "vspace": =0A=
      case "hspace":=0A=
      case "class":=0A=
      case "title":=0A=
      case "accesskey":=0A=
      case "name":=0A=
      case "tabindex":=0A=
        ret.embedAttrs[args[i]] =3D ret.objAttrs[args[i]] =3D args[i+1];=0A=
        break;=0A=
      default:=0A=
        ret.embedAttrs[args[i]] =3D ret.params[args[i]] =3D args[i+1];=0A=
    }=0A=
  }=0A=
  ret.objAttrs["classid"] =3D classid;=0A=
  if (mimeType) ret.embedAttrs["type"] =3D mimeType;=0A=
  return ret;=0A=
}=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/flash/trackmovie.js

function trackMovie(videoId){ if(typeof _gaq !=3D=3D 'undefined'){ =
_gaq.push(['_trackEvent', 'Videos', 'Play', videoId]); } }
------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/prototype/window.js

// Copyright (c) 2006 S=C3=A9bastien Gruhier (http://xilinus.com, =
http://itseb.com)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// VERSION 1.3=0A=
=0A=
var Window =3D Class.create();=0A=
=0A=
Window.keepMultiModalWindow =3D false;=0A=
Window.hasEffectLib =3D (typeof Effect !=3D 'undefined');=0A=
Window.resizeEffectDuration =3D 0.4;=0A=
=0A=
Window.prototype =3D {=0A=
  // Constructor=0A=
  // Available parameters : className, blurClassName, title, minWidth, =
minHeight, maxWidth, maxHeight, width, height, top, left, bottom, right, =
resizable, zIndex, opacity, recenterAuto, wiredDrag=0A=
  //                        hideEffect, showEffect, showEffectOptions, =
hideEffectOptions, effectOptions, url, draggable, closable, minimizable, =
maximizable, parent, onload=0A=
  //                        add all callbacks (if you do not use an =
observer)=0A=
  //                        onDestroy onStartResize onStartMove onResize =
onMove onEndResize onEndMove onFocus onBlur onBeforeShow onShow onHide =
onMinimize onMaximize onClose=0A=
  =0A=
  initialize: function() {=0A=
    var id;=0A=
    var optionIndex =3D 0;=0A=
    // For backward compatibility like win=3D new Window("id", {...}) =
instead of win =3D new Window({id: "id", ...})=0A=
    if (arguments.length > 0) {=0A=
      if (typeof arguments[0] =3D=3D "string" ) {=0A=
        id =3D arguments[0];=0A=
        optionIndex =3D 1;=0A=
      }=0A=
      else=0A=
        id =3D arguments[0] ? arguments[0].id : null;=0A=
    }=0A=
    =0A=
    // Generate unique ID if not specified=0A=
    if (!id)=0A=
      id =3D "window_" + new Date().getTime();=0A=
      =0A=
    if ($(id))=0A=
      alert("Window " + id + " is already registered in the DOM! Make =
sure you use setDestroyOnClose() or destroyOnClose: true in the =
constructor");=0A=
=0A=
    this.options =3D Object.extend({=0A=
      className:         "dialog",=0A=
      windowClassName:   null,=0A=
      blurClassName:     null,=0A=
      minWidth:          100, =0A=
      minHeight:         20,=0A=
      resizable:         true,=0A=
      closable:          true,=0A=
      minimizable:       true,=0A=
      maximizable:       true,=0A=
      draggable:         true,=0A=
      userData:          null,=0A=
      showEffect:        (Window.hasEffectLib ? Effect.Appear : =
Element.show),=0A=
      hideEffect:        (Window.hasEffectLib ? Effect.Fade : =
Element.hide),=0A=
      showEffectOptions: {},=0A=
      hideEffectOptions: {},=0A=
      effectOptions:     null,=0A=
      parent:            document.body,=0A=
      title:             "&nbsp;",=0A=
      url:               null,=0A=
      onload:            Prototype.emptyFunction,=0A=
      width:             200,=0A=
      height:            300,=0A=
      opacity:           1,=0A=
      recenterAuto:      true,=0A=
      wiredDrag:         false,=0A=
      closeOnEsc:        true,=0A=
      closeCallback:     null,=0A=
      destroyOnClose:    false,=0A=
      gridX:             1, =0A=
      gridY:             1      =0A=
    }, arguments[optionIndex] || {});=0A=
    if (this.options.blurClassName)=0A=
      this.options.focusClassName =3D this.options.className;=0A=
      =0A=
    if (typeof this.options.top =3D=3D "undefined" &&  typeof =
this.options.bottom =3D=3D  "undefined") =0A=
      this.options.top =3D this._round(Math.random()*500, =
this.options.gridY);=0A=
    if (typeof this.options.left =3D=3D "undefined" &&  typeof =
this.options.right =3D=3D  "undefined") =0A=
      this.options.left =3D this._round(Math.random()*500, =
this.options.gridX);=0A=
=0A=
    if (this.options.effectOptions) {=0A=
      Object.extend(this.options.hideEffectOptions, =
this.options.effectOptions);=0A=
      Object.extend(this.options.showEffectOptions, =
this.options.effectOptions);=0A=
      if (this.options.showEffect =3D=3D Element.Appear)=0A=
        this.options.showEffectOptions.to =3D this.options.opacity;=0A=
    }=0A=
    if (Window.hasEffectLib) {=0A=
      if (this.options.showEffect =3D=3D Effect.Appear)=0A=
        this.options.showEffectOptions.to =3D this.options.opacity;=0A=
    =0A=
      if (this.options.hideEffect =3D=3D Effect.Fade)=0A=
        this.options.hideEffectOptions.from =3D this.options.opacity;=0A=
    }=0A=
    if (this.options.hideEffect =3D=3D Element.hide)=0A=
      this.options.hideEffect =3D function(){ =
Element.hide(this.element); if (this.options.destroyOnClose) =
this.destroy(); }.bind(this)=0A=
    =0A=
    if (this.options.parent !=3D document.body)  =0A=
      this.options.parent =3D $(this.options.parent);=0A=
      =0A=
    this.element =3D this._createWindow(id);       =0A=
    this.element.win =3D this;=0A=
    =0A=
    // Bind event listener=0A=
    this.eventMouseDown =3D this._initDrag.bindAsEventListener(this);=0A=
    this.eventMouseUp   =3D this._endDrag.bindAsEventListener(this);=0A=
    this.eventMouseMove =3D this._updateDrag.bindAsEventListener(this);=0A=
    this.eventOnLoad    =3D =
this._getWindowBorderSize.bindAsEventListener(this);=0A=
    this.eventMouseDownContent =3D =
this.toFront.bindAsEventListener(this);=0A=
    this.eventResize =3D this._recenter.bindAsEventListener(this);=0A=
    this.eventKeyUp =3D this._keyUp.bindAsEventListener(this);=0A=
 =0A=
    this.topbar =3D $(this.element.id + "_top");=0A=
    this.bottombar =3D $(this.element.id + "_bottom");=0A=
    this.content =3D $(this.element.id + "_content");=0A=
    =0A=
    Event.observe(this.topbar, "mousedown", this.eventMouseDown);=0A=
    Event.observe(this.bottombar, "mousedown", this.eventMouseDown);=0A=
    Event.observe(this.content, "mousedown", this.eventMouseDownContent);=0A=
    Event.observe(window, "load", this.eventOnLoad);=0A=
    Event.observe(window, "resize", this.eventResize);=0A=
    Event.observe(window, "scroll", this.eventResize);=0A=
    Event.observe(document, "keyup", this.eventKeyUp);=0A=
    Event.observe(this.options.parent, "scroll", this.eventResize);=0A=
    =0A=
    if (this.options.draggable)  {=0A=
      var that =3D this;=0A=
      [this.topbar, this.topbar.up().previous(), =
this.topbar.up().next()].each(function(element) {=0A=
        element.observe("mousedown", that.eventMouseDown);=0A=
        element.addClassName("top_draggable");=0A=
      });=0A=
      [this.bottombar.up(), this.bottombar.up().previous(), =
this.bottombar.up().next()].each(function(element) {=0A=
        element.observe("mousedown", that.eventMouseDown);=0A=
        element.addClassName("bottom_draggable");=0A=
      });=0A=
      =0A=
    }    =0A=
    =0A=
    if (this.options.resizable) {=0A=
      this.sizer =3D $(this.element.id + "_sizer");=0A=
      Event.observe(this.sizer, "mousedown", this.eventMouseDown);=0A=
    }  =0A=
    =0A=
    this.useLeft =3D null;=0A=
    this.useTop =3D null;=0A=
    if (typeof this.options.left !=3D "undefined") {=0A=
      this.element.setStyle({left: parseFloat(this.options.left) + =
'px'});=0A=
      this.useLeft =3D true;=0A=
    }=0A=
    else {=0A=
      this.element.setStyle({right: parseFloat(this.options.right) + =
'px'});=0A=
      this.useLeft =3D false;=0A=
    }=0A=
    =0A=
    if (typeof this.options.top !=3D "undefined") {=0A=
      this.element.setStyle({top: parseFloat(this.options.top) + 'px'});=0A=
      this.useTop =3D true;=0A=
    }=0A=
    else {=0A=
      this.element.setStyle({bottom: parseFloat(this.options.bottom) + =
'px'});      =0A=
      this.useTop =3D false;=0A=
    }=0A=
      =0A=
    this.storedLocation =3D null;=0A=
    =0A=
    this.setOpacity(this.options.opacity);=0A=
    if (this.options.zIndex)=0A=
      this.setZIndex(this.options.zIndex)=0A=
=0A=
    if (this.options.destroyOnClose)=0A=
      this.setDestroyOnClose(true);=0A=
=0A=
    this._getWindowBorderSize();=0A=
    this.width =3D this.options.width;=0A=
    this.height =3D this.options.height;=0A=
    this.visible =3D false;=0A=
    =0A=
    this.constraint =3D false;=0A=
    this.constraintPad =3D {top: 0, left:0, bottom:0, right:0};=0A=
    =0A=
    if (this.width && this.height)=0A=
      this.setSize(this.options.width, this.options.height);=0A=
    this.setTitle(this.options.title)=0A=
    Windows.register(this);      =0A=
  },=0A=
  =0A=
  // Destructor=0A=
  destroy: function() {=0A=
    this._notify("onDestroy");=0A=
    Event.stopObserving(this.topbar, "mousedown", this.eventMouseDown);=0A=
    Event.stopObserving(this.bottombar, "mousedown", =
this.eventMouseDown);=0A=
    Event.stopObserving(this.content, "mousedown", =
this.eventMouseDownContent);=0A=
    =0A=
    Event.stopObserving(window, "load", this.eventOnLoad);=0A=
    Event.stopObserving(window, "resize", this.eventResize);=0A=
    Event.stopObserving(window, "scroll", this.eventResize);=0A=
    =0A=
    Event.stopObserving(this.content, "load", this.options.onload);=0A=
    Event.stopObserving(document, "keyup", this.eventKeyUp);=0A=
=0A=
    if (this._oldParent) {=0A=
      var content =3D this.getContent();=0A=
      var originalContent =3D null;=0A=
      for(var i =3D 0; i < content.childNodes.length; i++) {=0A=
        originalContent =3D content.childNodes[i];=0A=
        if (originalContent.nodeType =3D=3D 1) =0A=
          break;=0A=
        originalContent =3D null;=0A=
      }=0A=
      if (originalContent)=0A=
        this._oldParent.appendChild(originalContent);=0A=
      this._oldParent =3D null;=0A=
    }=0A=
=0A=
    if (this.sizer)=0A=
        Event.stopObserving(this.sizer, "mousedown", =
this.eventMouseDown);=0A=
=0A=
    if (this.options.url) =0A=
      this.content.src =3D null=0A=
=0A=
     if(this.iefix) =0A=
      Element.remove(this.iefix);=0A=
=0A=
    Element.remove(this.element);=0A=
    Windows.unregister(this);      =0A=
  },=0A=
    =0A=
  // Sets close callback, if it sets, it should return true to be able =
to close the window.=0A=
  setCloseCallback: function(callback) {=0A=
    this.options.closeCallback =3D callback;=0A=
  },=0A=
  =0A=
  // Gets window content=0A=
  getContent: function () {=0A=
    return this.content;=0A=
  },=0A=
  =0A=
  // Sets the content with an element id=0A=
  setContent: function(id, autoresize, autoposition) {=0A=
    var element =3D $(id);=0A=
    if (null =3D=3D element) throw "Unable to find element '" + id + "' =
in DOM";=0A=
    this._oldParent =3D element.parentNode;=0A=
=0A=
    var d =3D null;=0A=
    var p =3D null;=0A=
=0A=
    if (autoresize) =0A=
      d =3D Element.getDimensions(element);=0A=
    if (autoposition) =0A=
      p =3D Position.cumulativeOffset(element);=0A=
=0A=
    var content =3D this.getContent();=0A=
    // Clear HTML (and even iframe)=0A=
    this.setHTMLContent("");=0A=
    content =3D this.getContent();=0A=
    =0A=
    content.appendChild(element);=0A=
    element.show();=0A=
    if (autoresize) =0A=
      this.setSize(d.width, d.height);=0A=
    if (autoposition) =0A=
      this.setLocation(p[1] - this.heightN, p[0] - this.widthW);    =0A=
  },=0A=
  =0A=
  setHTMLContent: function(html) {=0A=
    // It was an url (iframe), recreate a div content instead of iframe =
content=0A=
    if (this.options.url) {=0A=
      this.content.src =3D null;=0A=
      this.options.url =3D null;=0A=
      =0A=
  	  var content =3D"<div id=3D\"" + this.getId() + "_content\" =
class=3D\"" + this.options.className + "_content\"> </div>";=0A=
      $(this.getId() +"_table_content").innerHTML =3D content;=0A=
      =0A=
      this.content =3D $(this.element.id + "_content");=0A=
    }=0A=
      =0A=
    this.getContent().innerHTML =3D html;=0A=
  },=0A=
  =0A=
  setAjaxContent: function(url, options, showCentered, showModal) {=0A=
    this.showFunction =3D showCentered ? "showCenter" : "show";=0A=
    this.showModal =3D showModal || false;=0A=
  =0A=
    options =3D options || {};=0A=
=0A=
    // Clear HTML (and even iframe)=0A=
    this.setHTMLContent("");=0A=
 =0A=
    this.onComplete =3D options.onComplete;=0A=
    if (! this._onCompleteHandler)=0A=
      this._onCompleteHandler =3D this._setAjaxContent.bind(this);=0A=
    options.onComplete =3D this._onCompleteHandler;=0A=
=0A=
    new Ajax.Request(url, options);    =0A=
    options.onComplete =3D this.onComplete;=0A=
  },=0A=
  =0A=
  _setAjaxContent: function(originalRequest) {=0A=
    Element.update(this.getContent(), originalRequest.responseText);=0A=
    if (this.onComplete)=0A=
      this.onComplete(originalRequest);=0A=
    this.onComplete =3D null;=0A=
    this[this.showFunction](this.showModal)=0A=
  },=0A=
  =0A=
  setURL: function(url) {=0A=
    // Not an url content, change div to iframe=0A=
    if (this.options.url) =0A=
      this.content.src =3D null;=0A=
    this.options.url =3D url;=0A=
    var content=3D "<iframe frameborder=3D'0' name=3D'" + this.getId() + =
"_content'  id=3D'" + this.getId() + "_content' src=3D'" + url + "' =
width=3D'" + this.width + "' height=3D'" + this.height + "'> </iframe>";=0A=
    $(this.getId() +"_table_content").innerHTML =3D content;=0A=
    =0A=
    this.content =3D $(this.element.id + "_content");=0A=
  },=0A=
=0A=
  getURL: function() {=0A=
  	return this.options.url ? this.options.url : null;=0A=
  },=0A=
=0A=
  refresh: function() {=0A=
    if (this.options.url)=0A=
	    $(this.element.getAttribute('id') + '_content').src =3D =
this.options.url;=0A=
  },=0A=
  =0A=
  // Stores position/size in a cookie, by default named with window id=0A=
  setCookie: function(name, expires, path, domain, secure) {=0A=
    name =3D name || this.element.id;=0A=
    this.cookie =3D [name, expires, path, domain, secure];=0A=
    =0A=
    // Get cookie=0A=
    var value =3D WindowUtilities.getCookie(name)=0A=
    // If exists=0A=
    if (value) {=0A=
      var values =3D value.split(',');=0A=
      var x =3D values[0].split(':');=0A=
      var y =3D values[1].split(':');=0A=
=0A=
      var w =3D parseFloat(values[2]), h =3D parseFloat(values[3]);=0A=
      var mini =3D values[4];=0A=
      var maxi =3D values[5];=0A=
=0A=
      this.setSize(w, h);=0A=
      if (mini =3D=3D "true")=0A=
        this.doMinimize =3D true; // Minimize will be done at onload =
window event=0A=
      else if (maxi =3D=3D "true")=0A=
        this.doMaximize =3D true; // Maximize will be done at onload =
window event=0A=
=0A=
      this.useLeft =3D x[0] =3D=3D "l";=0A=
      this.useTop =3D y[0] =3D=3D "t";=0A=
=0A=
      this.element.setStyle(this.useLeft ? {left: x[1]} : {right: x[1]});=0A=
      this.element.setStyle(this.useTop ? {top: y[1]} : {bottom: y[1]});=0A=
    }=0A=
  },=0A=
  =0A=
  // Gets window ID=0A=
  getId: function() {=0A=
    return this.element.id;=0A=
  },=0A=
  =0A=
  // Detroys itself when closing =0A=
  setDestroyOnClose: function() {=0A=
    this.options.destroyOnClose =3D true;=0A=
  },=0A=
  =0A=
  setConstraint: function(bool, padding) {=0A=
    this.constraint =3D bool;=0A=
    this.constraintPad =3D Object.extend(this.constraintPad, padding || =
{});=0A=
    // Reset location to apply constraint=0A=
    if (this.useTop && this.useLeft)=0A=
      this.setLocation(parseFloat(this.element.style.top), =
parseFloat(this.element.style.left));=0A=
  },=0A=
  =0A=
  // initDrag event=0A=
=0A=
  _initDrag: function(event) {=0A=
    // No resize on minimized window=0A=
    if (Event.element(event) =3D=3D this.sizer && this.isMinimized())=0A=
      return;=0A=
=0A=
    // No move on maximzed window=0A=
    if (Event.element(event) !=3D this.sizer && this.isMaximized())=0A=
      return;=0A=
      =0A=
    if (Prototype.Browser.IE && this.heightN =3D=3D 0)=0A=
      this._getWindowBorderSize();=0A=
    =0A=
    // Get pointer X,Y=0A=
    this.pointer =3D [this._round(Event.pointerX(event), =
this.options.gridX), this._round(Event.pointerY(event), =
this.options.gridY)];=0A=
    if (this.options.wiredDrag) =0A=
      this.currentDrag =3D this._createWiredElement();=0A=
    else=0A=
      this.currentDrag =3D this.element;=0A=
      =0A=
    // Resize=0A=
    if (Event.element(event) =3D=3D this.sizer) {=0A=
      this.doResize =3D true;=0A=
      this.widthOrg =3D this.width;=0A=
      this.heightOrg =3D this.height;=0A=
      this.bottomOrg =3D parseFloat(this.element.getStyle('bottom'));=0A=
      this.rightOrg =3D parseFloat(this.element.getStyle('right'));=0A=
      this._notify("onStartResize");=0A=
    }=0A=
    else {=0A=
      this.doResize =3D false;=0A=
=0A=
      // Check if click on close button, =0A=
      var closeButton =3D $(this.getId() + '_close');=0A=
      if (closeButton && Position.within(closeButton, this.pointer[0], =
this.pointer[1])) {=0A=
        this.currentDrag =3D null;=0A=
        return;=0A=
      }=0A=
=0A=
      this.toFront();=0A=
=0A=
      if (! this.options.draggable) =0A=
        return;=0A=
      this._notify("onStartMove");=0A=
    }    =0A=
    // Register global event to capture mouseUp and mouseMove=0A=
    Event.observe(document, "mouseup", this.eventMouseUp, false);=0A=
    Event.observe(document, "mousemove", this.eventMouseMove, false);=0A=
    =0A=
    // Add an invisible div to keep catching mouse event over iframes=0A=
    WindowUtilities.disableScreen('__invisible__', '__invisible__', =
this.overlayOpacity);=0A=
=0A=
    // Stop selection while dragging=0A=
    document.body.ondrag =3D function () { return false; };=0A=
    document.body.onselectstart =3D function () { return false; };=0A=
    =0A=
    this.currentDrag.show();=0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  _round: function(val, round) {=0A=
    return round =3D=3D 1 ? val  : val =3D Math.floor(val / round) * =
round;=0A=
  },=0A=
=0A=
  // updateDrag event=0A=
  _updateDrag: function(event) {=0A=
    var pointer =3D  [this._round(Event.pointerX(event), =
this.options.gridX), this._round(Event.pointerY(event), =
this.options.gridY)];  =0A=
    var dx =3D pointer[0] - this.pointer[0];=0A=
    var dy =3D pointer[1] - this.pointer[1];=0A=
    =0A=
    // Resize case, update width/height=0A=
    if (this.doResize) {=0A=
      var w =3D this.widthOrg + dx;=0A=
      var h =3D this.heightOrg + dy;=0A=
      =0A=
      dx =3D this.width - this.widthOrg=0A=
      dy =3D this.height - this.heightOrg=0A=
      =0A=
      // Check if it's a right position, update it to keep upper-left =
corner at the same position=0A=
      if (this.useLeft) =0A=
        w =3D this._updateWidthConstraint(w)=0A=
      else =0A=
        this.currentDrag.setStyle({right: (this.rightOrg -dx) + 'px'});=0A=
      // Check if it's a bottom position, update it to keep upper-left =
corner at the same position=0A=
      if (this.useTop) =0A=
        h =3D this._updateHeightConstraint(h)=0A=
      else=0A=
        this.currentDrag.setStyle({bottom: (this.bottomOrg -dy) + 'px'});=0A=
        =0A=
      this.setSize(w , h);=0A=
      this._notify("onResize");=0A=
    }=0A=
    // Move case, update top/left=0A=
    else {=0A=
      this.pointer =3D pointer;=0A=
      =0A=
      if (this.useLeft) {=0A=
        var left =3D  parseFloat(this.currentDrag.getStyle('left')) + dx;=0A=
        var newLeft =3D this._updateLeftConstraint(left);=0A=
        // Keep mouse pointer correct=0A=
        this.pointer[0] +=3D newLeft-left;=0A=
        this.currentDrag.setStyle({left: newLeft + 'px'});=0A=
      }=0A=
      else =0A=
        this.currentDrag.setStyle({right: =
parseFloat(this.currentDrag.getStyle('right')) - dx + 'px'});=0A=
      =0A=
      if (this.useTop) {=0A=
        var top =3D  parseFloat(this.currentDrag.getStyle('top')) + dy;=0A=
        var newTop =3D this._updateTopConstraint(top);=0A=
        // Keep mouse pointer correct=0A=
        this.pointer[1] +=3D newTop - top;=0A=
        this.currentDrag.setStyle({top: newTop + 'px'});=0A=
      }=0A=
      else =0A=
        this.currentDrag.setStyle({bottom: =
parseFloat(this.currentDrag.getStyle('bottom')) - dy + 'px'});=0A=
=0A=
      this._notify("onMove");=0A=
    }=0A=
    if (this.iefix) =0A=
      this._fixIEOverlapping(); =0A=
      =0A=
    this._removeStoreLocation();=0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
   // endDrag callback=0A=
   _endDrag: function(event) {=0A=
    // Remove temporary div over iframes=0A=
     WindowUtilities.enableScreen('__invisible__');=0A=
    =0A=
    if (this.doResize)=0A=
      this._notify("onEndResize");=0A=
    else=0A=
      this._notify("onEndMove");=0A=
    =0A=
    // Release event observing=0A=
    Event.stopObserving(document, "mouseup", this.eventMouseUp,false);=0A=
    Event.stopObserving(document, "mousemove", this.eventMouseMove, =
false);=0A=
=0A=
    Event.stop(event);=0A=
    =0A=
    this._hideWiredElement();=0A=
=0A=
    // Store new location/size if need be=0A=
    this._saveCookie()=0A=
      =0A=
    // Restore selection=0A=
    document.body.ondrag =3D null;=0A=
    document.body.onselectstart =3D null;=0A=
  },=0A=
=0A=
  _updateLeftConstraint: function(left) {=0A=
    if (this.constraint && this.useLeft && this.useTop) {=0A=
      var width =3D this.options.parent =3D=3D document.body ? =
WindowUtilities.getPageSize().windowWidth : =
this.options.parent.getDimensions().width;=0A=
=0A=
      if (left < this.constraintPad.left)=0A=
        left =3D this.constraintPad.left;=0A=
      if (left + this.width + this.widthE + this.widthW > width - =
this.constraintPad.right) =0A=
        left =3D width - this.constraintPad.right - this.width - =
this.widthE - this.widthW;=0A=
    }=0A=
    return left;=0A=
  },=0A=
  =0A=
  _updateTopConstraint: function(top) {=0A=
    if (this.constraint && this.useLeft && this.useTop) {        =0A=
      var height =3D this.options.parent =3D=3D document.body ? =
WindowUtilities.getPageSize().windowHeight : =
this.options.parent.getDimensions().height;=0A=
      =0A=
      var h =3D this.height + this.heightN + this.heightS;=0A=
=0A=
      if (top < this.constraintPad.top)=0A=
        top =3D this.constraintPad.top;=0A=
      if (top + h > height - this.constraintPad.bottom) =0A=
        top =3D height - this.constraintPad.bottom - h;=0A=
    }=0A=
    return top;=0A=
  },=0A=
  =0A=
  _updateWidthConstraint: function(w) {=0A=
    if (this.constraint && this.useLeft && this.useTop) {=0A=
      var width =3D this.options.parent =3D=3D document.body ? =
WindowUtilities.getPageSize().windowWidth : =
this.options.parent.getDimensions().width;=0A=
      var left =3D  parseFloat(this.element.getStyle("left"));=0A=
=0A=
      if (left + w + this.widthE + this.widthW > width - =
this.constraintPad.right) =0A=
        w =3D width - this.constraintPad.right - left - this.widthE - =
this.widthW;=0A=
    }=0A=
    return w;=0A=
  },=0A=
  =0A=
  _updateHeightConstraint: function(h) {=0A=
    if (this.constraint && this.useLeft && this.useTop) {=0A=
      var height =3D this.options.parent =3D=3D document.body ? =
WindowUtilities.getPageSize().windowHeight : =
this.options.parent.getDimensions().height;=0A=
      var top =3D  parseFloat(this.element.getStyle("top"));=0A=
=0A=
      if (top + h + this.heightN + this.heightS > height - =
this.constraintPad.bottom) =0A=
        h =3D height - this.constraintPad.bottom - top - this.heightN - =
this.heightS;=0A=
    }=0A=
    return h;=0A=
  },=0A=
  =0A=
  =0A=
  // Creates HTML window code=0A=
  _createWindow: function(id) {=0A=
    var className =3D this.options.className;=0A=
    var win =3D document.createElement("div");=0A=
    win.setAttribute('id', id);=0A=
    win.className =3D "dialog";=0A=
    if (this.options.windowClassName) {=0A=
      win.className +=3D ' ' + this.options.windowClassName;=0A=
    }=0A=
=0A=
    var content;=0A=
    if (this.options.url)=0A=
      content=3D "<iframe frameborder=3D\"0\" name=3D\"" + id + =
"_content\"  id=3D\"" + id + "_content\" src=3D\"" + this.options.url + =
"\"> </iframe>";=0A=
    else=0A=
      content =3D"<div id=3D\"" + id + "_content\" class=3D\"" =
+className + "_content\"> </div>";=0A=
=0A=
    var closeDiv =3D this.options.closable ? "<div class=3D'"+ className =
+"_close' id=3D'"+ id +"_close' onclick=3D'Windows.close(\""+ id +"\", =
event)'> </div>" : "";=0A=
    var minDiv =3D this.options.minimizable ? "<div class=3D'"+ =
className + "_minimize' id=3D'"+ id +"_minimize' =
onclick=3D'Windows.minimize(\""+ id +"\", event)'> </div>" : "";=0A=
    var maxDiv =3D this.options.maximizable ? "<div class=3D'"+ =
className + "_maximize' id=3D'"+ id +"_maximize' =
onclick=3D'Windows.maximize(\""+ id +"\", event)'> </div>" : "";=0A=
    var seAttributes =3D this.options.resizable ? "class=3D'" + =
className + "_sizer' id=3D'" + id + "_sizer'" : "class=3D'"  + className =
+ "_se'";=0A=
    var blank =3D "../themes/default/blank.gif";=0A=
    =0A=
    win.innerHTML =3D closeDiv + minDiv + maxDiv + "\=0A=
      <a href=3D'#' id=3D'"+ id +"_focus_anchor'><!-- --></a>\=0A=
      <table id=3D'"+ id +"_row1' class=3D\"top table_window\">\=0A=
        <tr>\=0A=
          <td class=3D'"+ className +"_nw'></td>\=0A=
          <td class=3D'"+ className +"_n'><div id=3D'"+ id +"_top' =
class=3D'"+ className +"_title title_window'>"+ this.options.title =
+"</div></td>\=0A=
          <td class=3D'"+ className +"_ne'></td>\=0A=
        </tr>\=0A=
      </table>\=0A=
      <table id=3D'"+ id +"_row2' class=3D\"mid table_window\">\=0A=
        <tr>\=0A=
          <td class=3D'"+ className +"_w'></td>\=0A=
            <td id=3D'"+ id +"_table_content' class=3D'"+ className =
+"_content' valign=3D'top'>" + content + "</td>\=0A=
          <td class=3D'"+ className +"_e'></td>\=0A=
        </tr>\=0A=
      </table>\=0A=
        <table id=3D'"+ id +"_row3' class=3D\"bot table_window\">\=0A=
        <tr>\=0A=
          <td class=3D'"+ className +"_sw'></td>\=0A=
            <td class=3D'"+ className +"_s'><div id=3D'"+ id +"_bottom' =
class=3D'status_bar'><span style=3D'float:left; width:1px; =
height:1px'></span></div></td>\=0A=
            <td " + seAttributes + "></td>\=0A=
        </tr>\=0A=
      </table>\=0A=
    ";=0A=
    Element.hide(win);=0A=
    this.options.parent.insertBefore(win, =
this.options.parent.firstChild);=0A=
    Event.observe($(id + "_content"), "load", this.options.onload);=0A=
    return win;=0A=
  },=0A=
  =0A=
  =0A=
  changeClassName: function(newClassName) {    =0A=
    var className =3D this.options.className;=0A=
    var id =3D this.getId();=0A=
    $A(["_close", "_minimize", "_maximize", "_sizer", =
"_content"]).each(function(value) { this._toggleClassName($(id + value), =
className + value, newClassName + value) }.bind(this));=0A=
    this._toggleClassName($(id + "_top"), className + "_title", =
newClassName + "_title");=0A=
    $$("#" + id + " td").each(function(td) {td.className =3D =
td.className.sub(className,newClassName); });=0A=
    this.options.className =3D newClassName;=0A=
  },=0A=
  =0A=
  _toggleClassName: function(element, oldClassName, newClassName) { =0A=
    if (element) {=0A=
      element.removeClassName(oldClassName);=0A=
      element.addClassName(newClassName);=0A=
    }=0A=
  },=0A=
  =0A=
  // Sets window location=0A=
  setLocation: function(top, left) {=0A=
    top =3D this._updateTopConstraint(top);=0A=
    left =3D this._updateLeftConstraint(left);=0A=
=0A=
    var e =3D this.currentDrag || this.element;=0A=
    e.setStyle({top: top + 'px'});=0A=
    e.setStyle({left: left + 'px'});=0A=
=0A=
    this.useLeft =3D true;=0A=
    this.useTop =3D true;=0A=
  },=0A=
    =0A=
  getLocation: function() {=0A=
    var location =3D {};=0A=
    if (this.useTop)=0A=
      location =3D Object.extend(location, {top: =
this.element.getStyle("top")});=0A=
    else=0A=
      location =3D Object.extend(location, {bottom: =
this.element.getStyle("bottom")});=0A=
    if (this.useLeft)=0A=
      location =3D Object.extend(location, {left: =
this.element.getStyle("left")});=0A=
    else=0A=
      location =3D Object.extend(location, {right: =
this.element.getStyle("right")});=0A=
    =0A=
    return location;=0A=
  },=0A=
  =0A=
  // Gets window size=0A=
  getSize: function() {=0A=
    return {width: this.width, height: this.height};=0A=
  },=0A=
    =0A=
  // Sets window size=0A=
  setSize: function(width, height, useEffect) {    =0A=
    width =3D parseFloat(width);=0A=
    height =3D parseFloat(height);=0A=
    =0A=
    // Check min and max size=0A=
    if (!this.minimized && width < this.options.minWidth)=0A=
      width =3D this.options.minWidth;=0A=
=0A=
    if (!this.minimized && height < this.options.minHeight)=0A=
      height =3D this.options.minHeight;=0A=
      =0A=
    if (this.options. maxHeight && height > this.options. maxHeight)=0A=
      height =3D this.options. maxHeight;=0A=
=0A=
    if (this.options. maxWidth && width > this.options. maxWidth)=0A=
      width =3D this.options. maxWidth;=0A=
=0A=
    =0A=
    if (this.useTop && this.useLeft && Window.hasEffectLib && =
Effect.ResizeWindow && useEffect) {=0A=
      new Effect.ResizeWindow(this, null, null, width, height, =
{duration: Window.resizeEffectDuration});=0A=
    } else {=0A=
      this.width =3D width;=0A=
      this.height =3D height;=0A=
      var e =3D this.currentDrag ? this.currentDrag : this.element;=0A=
=0A=
      e.setStyle({width: width + this.widthW + this.widthE + "px"})=0A=
      e.setStyle({height: height  + this.heightN + this.heightS + "px"})=0A=
=0A=
      // Update content size=0A=
      if (!this.currentDrag || this.currentDrag =3D=3D this.element) {=0A=
        var content =3D $(this.element.id + '_content');=0A=
        content.setStyle({height: height  + 'px'});=0A=
        content.setStyle({width: width  + 'px'});=0A=
      }=0A=
    }=0A=
  },=0A=
  =0A=
  updateHeight: function() {=0A=
    this.setSize(this.width, this.content.scrollHeight, true);=0A=
  },=0A=
  =0A=
  updateWidth: function() {=0A=
    this.setSize(this.content.scrollWidth, this.height, true);=0A=
  },=0A=
  =0A=
  // Brings window to front=0A=
  toFront: function() {=0A=
    if (this.element.style.zIndex < Windows.maxZIndex)  =0A=
      this.setZIndex(Windows.maxZIndex + 1);=0A=
    if (this.iefix) =0A=
      this._fixIEOverlapping(); =0A=
  },=0A=
   =0A=
  getBounds: function(insideOnly) {=0A=
    if (! this.width || !this.height || !this.visible)  =0A=
      this.computeBounds();=0A=
    var w =3D this.width;=0A=
    var h =3D this.height;=0A=
=0A=
    if (!insideOnly) {=0A=
      w +=3D this.widthW + this.widthE;=0A=
      h +=3D this.heightN + this.heightS;=0A=
    }=0A=
    var bounds =3D Object.extend(this.getLocation(), {width: w + "px", =
height: h + "px"});=0A=
    return bounds;=0A=
  },=0A=
      =0A=
  computeBounds: function() {=0A=
     if (! this.width || !this.height) {=0A=
      var size =3D WindowUtilities._computeSize(this.content.innerHTML, =
this.content.id, this.width, this.height, 0, this.options.className)=0A=
      if (this.height)=0A=
        this.width =3D size + 5=0A=
      else=0A=
        this.height =3D size + 5=0A=
    }=0A=
=0A=
    this.setSize(this.width, this.height);=0A=
    if (this.centered)=0A=
      this._center(this.centerTop, this.centerLeft);    =0A=
  },=0A=
  =0A=
  // Displays window modal state or not=0A=
  show: function(modal) {=0A=
    this.visible =3D true;=0A=
    if (modal) {=0A=
      // Hack for Safari !!=0A=
      if (typeof this.overlayOpacity =3D=3D "undefined") {=0A=
        var that =3D this;=0A=
        setTimeout(function() {that.show(modal)}, 10);=0A=
        return;=0A=
      }=0A=
      Windows.addModalWindow(this);=0A=
      =0A=
      this.modal =3D true;      =0A=
      this.setZIndex(Windows.maxZIndex + 1);=0A=
      Windows.unsetOverflow(this);=0A=
    }=0A=
    else    =0A=
      if (!this.element.style.zIndex) =0A=
        this.setZIndex(Windows.maxZIndex + 1);        =0A=
      =0A=
    // To restore overflow if need be=0A=
    if (this.oldStyle)=0A=
      this.getContent().setStyle({overflow: this.oldStyle});=0A=
      =0A=
    this.computeBounds();=0A=
    =0A=
    this._notify("onBeforeShow");   =0A=
    if (this.options.showEffect !=3D Element.show && =
this.options.showEffectOptions)=0A=
      this.options.showEffect(this.element, =
this.options.showEffectOptions);  =0A=
    else=0A=
      this.options.showEffect(this.element);  =0A=
      =0A=
    this._checkIEOverlapping();=0A=
    WindowUtilities.focusedWindow =3D this=0A=
    this._notify("onShow");   =0A=
    $(this.element.id + '_focus_anchor').focus();=0A=
  },=0A=
  =0A=
  // Displays window modal state or not at the center of the page=0A=
  showCenter: function(modal, top, left) {=0A=
    this.centered =3D true;=0A=
    this.centerTop =3D top;=0A=
    this.centerLeft =3D left;=0A=
=0A=
    this.show(modal);=0A=
  },=0A=
  =0A=
  isVisible: function() {=0A=
    return this.visible;=0A=
  },=0A=
  =0A=
  _center: function(top, left) {    =0A=
    var windowScroll =3D =
WindowUtilities.getWindowScroll(this.options.parent);    =0A=
    var pageSize =3D WindowUtilities.getPageSize(this.options.parent);   =
 =0A=
    if (typeof top =3D=3D "undefined")=0A=
      top =3D (pageSize.windowHeight - (this.height + this.heightN + =
this.heightS))/2;=0A=
    top +=3D windowScroll.top=0A=
    =0A=
    if (typeof left =3D=3D "undefined")=0A=
      left =3D (pageSize.windowWidth - (this.width + this.widthW + =
this.widthE))/2;=0A=
    left +=3D windowScroll.left      =0A=
    this.setLocation(top, left);=0A=
    this.toFront();=0A=
  },=0A=
  =0A=
  _recenter: function(event) {     =0A=
    if (this.centered) {=0A=
      var pageSize =3D WindowUtilities.getPageSize(this.options.parent);=0A=
      var windowScroll =3D =
WindowUtilities.getWindowScroll(this.options.parent);    =0A=
=0A=
      // Check for this stupid IE that sends dumb events=0A=
      if (this.pageSize && this.pageSize.windowWidth =3D=3D =
pageSize.windowWidth && this.pageSize.windowHeight =3D=3D =
pageSize.windowHeight && =0A=
          this.windowScroll.left =3D=3D windowScroll.left && =
this.windowScroll.top =3D=3D windowScroll.top) =0A=
        return;=0A=
      this.pageSize =3D pageSize;=0A=
      this.windowScroll =3D windowScroll;=0A=
      // set height of Overlay to take up whole page and show=0A=
      if ($('overlay_modal')) =0A=
        $('overlay_modal').setStyle({height: (pageSize.pageHeight + =
'px')});=0A=
      =0A=
      if (this.options.recenterAuto)=0A=
        this._center(this.centerTop, this.centerLeft);    =0A=
    }=0A=
  },=0A=
  =0A=
  // Hides window=0A=
  hide: function() {=0A=
    this.visible =3D false;=0A=
    if (this.modal) {=0A=
      Windows.removeModalWindow(this);=0A=
      Windows.resetOverflow();=0A=
    }=0A=
    // To avoid bug on scrolling bar=0A=
    this.oldStyle =3D this.getContent().getStyle('overflow') || "auto"=0A=
    this.getContent().setStyle({overflow: "hidden"});=0A=
=0A=
    this.options.hideEffect(this.element, =
this.options.hideEffectOptions);  =0A=
=0A=
     if(this.iefix) =0A=
      this.iefix.hide();=0A=
=0A=
    if (!this.doNotNotifyHide)=0A=
      this._notify("onHide");=0A=
  },=0A=
=0A=
  close: function() {=0A=
    // Asks closeCallback if exists=0A=
    if (this.visible) {=0A=
      if (this.options.closeCallback && ! =
this.options.closeCallback(this)) =0A=
        return;=0A=
=0A=
      if (this.options.destroyOnClose) {=0A=
        var destroyFunc =3D this.destroy.bind(this);=0A=
        if (this.options.hideEffectOptions.afterFinish) {=0A=
          var func =3D this.options.hideEffectOptions.afterFinish;=0A=
          this.options.hideEffectOptions.afterFinish =3D function() =
{func();destroyFunc() }=0A=
        }=0A=
        else =0A=
          this.options.hideEffectOptions.afterFinish =3D function() =
{destroyFunc() }=0A=
      }=0A=
      Windows.updateFocusedWindow();=0A=
      =0A=
      this.doNotNotifyHide =3D true;=0A=
      this.hide();=0A=
      this.doNotNotifyHide =3D false;=0A=
      this._notify("onClose");=0A=
    }=0A=
  },=0A=
  =0A=
  minimize: function() {=0A=
    if (this.resizing)=0A=
      return;=0A=
    =0A=
    var r2 =3D $(this.getId() + "_row2");=0A=
    =0A=
    if (!this.minimized) {=0A=
      this.minimized =3D true;=0A=
=0A=
      var dh =3D r2.getDimensions().height;=0A=
      this.r2Height =3D dh;=0A=
      var h  =3D this.element.getHeight() - dh;=0A=
=0A=
      if (this.useLeft && this.useTop && Window.hasEffectLib && =
Effect.ResizeWindow) {=0A=
        new Effect.ResizeWindow(this, null, null, null, this.height -dh, =
{duration: Window.resizeEffectDuration});=0A=
      } else  {=0A=
        this.height -=3D dh;=0A=
        this.element.setStyle({height: h + "px"});=0A=
        r2.hide();=0A=
      }=0A=
=0A=
      if (! this.useTop) {=0A=
        var bottom =3D parseFloat(this.element.getStyle('bottom'));=0A=
        this.element.setStyle({bottom: (bottom + dh) + 'px'});=0A=
      }=0A=
    } =0A=
    else {      =0A=
      this.minimized =3D false;=0A=
      =0A=
      var dh =3D this.r2Height;=0A=
      this.r2Height =3D null;=0A=
      if (this.useLeft && this.useTop && Window.hasEffectLib && =
Effect.ResizeWindow) {=0A=
        new Effect.ResizeWindow(this, null, null, null, this.height + =
dh, {duration: Window.resizeEffectDuration});=0A=
      }=0A=
      else {=0A=
        var h  =3D this.element.getHeight() + dh;=0A=
        this.height +=3D dh;=0A=
        this.element.setStyle({height: h + "px"})=0A=
        r2.show();=0A=
      }=0A=
      if (! this.useTop) {=0A=
        var bottom =3D parseFloat(this.element.getStyle('bottom'));=0A=
        this.element.setStyle({bottom: (bottom - dh) + 'px'});=0A=
      }=0A=
      this.toFront();=0A=
    }=0A=
    this._notify("onMinimize");=0A=
    =0A=
    // Store new location/size if need be=0A=
    this._saveCookie()=0A=
  },=0A=
  =0A=
  maximize: function() {=0A=
    if (this.isMinimized() || this.resizing)=0A=
      return;=0A=
  =0A=
    if (Prototype.Browser.IE && this.heightN =3D=3D 0)=0A=
      this._getWindowBorderSize();=0A=
      =0A=
    if (this.storedLocation !=3D null) {=0A=
      this._restoreLocation();=0A=
      if(this.iefix) =0A=
        this.iefix.hide();=0A=
    }=0A=
    else {=0A=
      this._storeLocation();=0A=
      Windows.unsetOverflow(this);=0A=
      =0A=
      var windowScroll =3D =
WindowUtilities.getWindowScroll(this.options.parent);=0A=
      var pageSize =3D WindowUtilities.getPageSize(this.options.parent); =
   =0A=
      var left =3D windowScroll.left;=0A=
      var top =3D windowScroll.top;=0A=
      =0A=
      if (this.options.parent !=3D document.body) {=0A=
        windowScroll =3D  {top:0, left:0, bottom:0, right:0};=0A=
        var dim =3D this.options.parent.getDimensions();=0A=
        pageSize.windowWidth =3D dim.width;=0A=
        pageSize.windowHeight =3D dim.height;=0A=
        top =3D 0; =0A=
        left =3D 0;=0A=
      }=0A=
      =0A=
      if (this.constraint) {=0A=
        pageSize.windowWidth -=3D Math.max(0, this.constraintPad.left) + =
Math.max(0, this.constraintPad.right);=0A=
        pageSize.windowHeight -=3D Math.max(0, this.constraintPad.top) + =
Math.max(0, this.constraintPad.bottom);=0A=
        left +=3D  Math.max(0, this.constraintPad.left);=0A=
        top +=3D  Math.max(0, this.constraintPad.top);=0A=
      }=0A=
      =0A=
      var width =3D pageSize.windowWidth - this.widthW - this.widthE;=0A=
      var height=3D pageSize.windowHeight - this.heightN - this.heightS;=0A=
=0A=
      if (this.useLeft && this.useTop && Window.hasEffectLib && =
Effect.ResizeWindow) {=0A=
        new Effect.ResizeWindow(this, top, left, width, height, =
{duration: Window.resizeEffectDuration});=0A=
      }=0A=
      else {=0A=
        this.setSize(width, height);=0A=
        this.element.setStyle(this.useLeft ? {left: left} : {right: =
left});=0A=
        this.element.setStyle(this.useTop ? {top: top} : {bottom: top});=0A=
      }=0A=
        =0A=
      this.toFront();=0A=
      if (this.iefix) =0A=
        this._fixIEOverlapping(); =0A=
    }=0A=
    this._notify("onMaximize");=0A=
=0A=
    // Store new location/size if need be=0A=
    this._saveCookie()=0A=
  },=0A=
  =0A=
  isMinimized: function() {=0A=
    return this.minimized;=0A=
  },=0A=
  =0A=
  isMaximized: function() {=0A=
    return (this.storedLocation !=3D null);=0A=
  },=0A=
  =0A=
  setOpacity: function(opacity) {=0A=
    if (Element.setOpacity)=0A=
      Element.setOpacity(this.element, opacity);=0A=
  },=0A=
  =0A=
  setZIndex: function(zindex) {=0A=
    this.element.setStyle({zIndex: zindex});=0A=
    Windows.updateZindex(zindex, this);=0A=
  },=0A=
=0A=
  setTitle: function(newTitle) {=0A=
    if (!newTitle || newTitle =3D=3D "") =0A=
      newTitle =3D "&nbsp;";=0A=
      =0A=
    Element.update(this.element.id + '_top', newTitle);=0A=
  },=0A=
   =0A=
  getTitle: function() {=0A=
    return $(this.element.id + '_top').innerHTML;=0A=
  },=0A=
  =0A=
  setStatusBar: function(element) {=0A=
    var statusBar =3D $(this.getId() + "_bottom");=0A=
=0A=
    if (typeof(element) =3D=3D "object") {=0A=
      if (this.bottombar.firstChild)=0A=
        this.bottombar.replaceChild(element, this.bottombar.firstChild);=0A=
      else=0A=
        this.bottombar.appendChild(element);=0A=
    }=0A=
    else=0A=
      this.bottombar.innerHTML =3D element;=0A=
  },=0A=
=0A=
  _checkIEOverlapping: function() {=0A=
    if(!this.iefix && (navigator.appVersion.indexOf('MSIE')>0) && =
(navigator.userAgent.indexOf('Opera')<0) && =
(this.element.getStyle('position')=3D=3D'absolute')) {=0A=
        new Insertion.After(this.element.id, '<iframe id=3D"' + =
this.element.id + '_iefix" '+ =
'style=3D"display:none;position:absolute;filter:progid:DXImageTransform.M=
icrosoft.Alpha(opacity=3D0);" ' + 'src=3D"javascript:false;" =
frameborder=3D"0" scrolling=3D"no"></iframe>');=0A=
        this.iefix =3D $(this.element.id+'_iefix');=0A=
    }=0A=
    if(this.iefix) =0A=
      setTimeout(this._fixIEOverlapping.bind(this), 50);=0A=
  },=0A=
=0A=
  _fixIEOverlapping: function() {=0A=
      Position.clone(this.element, this.iefix);=0A=
      this.iefix.style.zIndex =3D this.element.style.zIndex - 1;=0A=
      this.iefix.show();=0A=
  },=0A=
  =0A=
  _keyUp: function(event) {=0A=
      if (27 =3D=3D event.keyCode && this.options.closeOnEsc) {=0A=
          this.close();=0A=
      }=0A=
  },=0A=
=0A=
  _getWindowBorderSize: function(event) {=0A=
    // Hack to get real window border size!!=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_n")=0A=
    this.heightN =3D Element.getDimensions(div).height;    =0A=
    div.parentNode.removeChild(div)=0A=
=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_s")=0A=
    this.heightS =3D Element.getDimensions(div).height;    =0A=
    div.parentNode.removeChild(div)=0A=
=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_e")=0A=
    this.widthE =3D Element.getDimensions(div).width;    =0A=
    div.parentNode.removeChild(div)=0A=
=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_w")=0A=
    this.widthW =3D Element.getDimensions(div).width;=0A=
    div.parentNode.removeChild(div);=0A=
    =0A=
    var div =3D document.createElement("div");=0A=
    div.className =3D "overlay_" + this.options.className ;=0A=
    document.body.appendChild(div);=0A=
    //alert("no timeout:\nopacity: " + div.getStyle("opacity") + =
"\nwidth: " + document.defaultView.getComputedStyle(div, null).width);=0A=
    var that =3D this;=0A=
    =0A=
    // Workaround for Safari!!=0A=
    setTimeout(function() {that.overlayOpacity =3D =
($(div).getStyle("opacity")); div.parentNode.removeChild(div);}, 10);=0A=
    =0A=
    // Workaround for IE!!=0A=
    if (Prototype.Browser.IE) {=0A=
      this.heightS =3D $(this.getId() +"_row3").getDimensions().height;=0A=
      this.heightN =3D $(this.getId() +"_row1").getDimensions().height;=0A=
    }=0A=
=0A=
    // Safari size fix=0A=
    if (Prototype.Browser.WebKit && Prototype.Browser.WebKitVersion < =
420)=0A=
      this.setSize(this.width, this.height);=0A=
    if (this.doMaximize)=0A=
      this.maximize();=0A=
    if (this.doMinimize)=0A=
      this.minimize();=0A=
  },=0A=
 =0A=
  _createHiddenDiv: function(className) {=0A=
    var objBody =3D document.body;=0A=
    var win =3D document.createElement("div");=0A=
    win.setAttribute('id', this.element.id+ "_tmp");=0A=
    win.className =3D className;=0A=
    win.style.display =3D 'none';=0A=
    win.innerHTML =3D '';=0A=
    objBody.insertBefore(win, objBody.firstChild);=0A=
    return win;=0A=
  },=0A=
  =0A=
  _storeLocation: function() {=0A=
    if (this.storedLocation =3D=3D null) {=0A=
      this.storedLocation =3D {useTop: this.useTop, useLeft: =
this.useLeft, =0A=
                             top: this.element.getStyle('top'), bottom: =
this.element.getStyle('bottom'),=0A=
                             left: this.element.getStyle('left'), right: =
this.element.getStyle('right'),=0A=
                             width: this.width, height: this.height };=0A=
    }=0A=
  },=0A=
  =0A=
  _restoreLocation: function() {=0A=
    if (this.storedLocation !=3D null) {=0A=
      this.useLeft =3D this.storedLocation.useLeft;=0A=
      this.useTop =3D this.storedLocation.useTop;=0A=
      =0A=
      if (this.useLeft && this.useTop && Window.hasEffectLib && =
Effect.ResizeWindow)=0A=
        new Effect.ResizeWindow(this, this.storedLocation.top, =
this.storedLocation.left, this.storedLocation.width, =
this.storedLocation.height, {duration: Window.resizeEffectDuration});=0A=
      else {=0A=
        this.element.setStyle(this.useLeft ? {left: =
this.storedLocation.left} : {right: this.storedLocation.right});=0A=
        this.element.setStyle(this.useTop ? {top: =
this.storedLocation.top} : {bottom: this.storedLocation.bottom});=0A=
        this.setSize(this.storedLocation.width, =
this.storedLocation.height);=0A=
      }=0A=
      =0A=
      Windows.resetOverflow();=0A=
      this._removeStoreLocation();=0A=
    }=0A=
  },=0A=
  =0A=
  _removeStoreLocation: function() {=0A=
    this.storedLocation =3D null;=0A=
  },=0A=
  =0A=
  _saveCookie: function() {=0A=
    if (this.cookie) {=0A=
      var value =3D "";=0A=
      if (this.useLeft)=0A=
        value +=3D "l:" +  (this.storedLocation ? =
this.storedLocation.left : this.element.getStyle('left'))=0A=
      else=0A=
        value +=3D "r:" + (this.storedLocation ? =
this.storedLocation.right : this.element.getStyle('right'))=0A=
      if (this.useTop)=0A=
        value +=3D ",t:" + (this.storedLocation ? =
this.storedLocation.top : this.element.getStyle('top'))=0A=
      else=0A=
        value +=3D ",b:" + (this.storedLocation ? =
this.storedLocation.bottom :this.element.getStyle('bottom'))=0A=
        =0A=
      value +=3D "," + (this.storedLocation ? this.storedLocation.width =
: this.width);=0A=
      value +=3D "," + (this.storedLocation ? this.storedLocation.height =
: this.height);=0A=
      value +=3D "," + this.isMinimized();=0A=
      value +=3D "," + this.isMaximized();=0A=
      WindowUtilities.setCookie(value, this.cookie)=0A=
    }=0A=
  },=0A=
  =0A=
  _createWiredElement: function() {=0A=
    if (! this.wiredElement) {=0A=
      if (Prototype.Browser.IE)=0A=
        this._getWindowBorderSize();=0A=
      var div =3D document.createElement("div");=0A=
      div.className =3D "wired_frame " + this.options.className + =
"_wired_frame";=0A=
      =0A=
      div.style.position =3D 'absolute';=0A=
      this.options.parent.insertBefore(div, =
this.options.parent.firstChild);=0A=
      this.wiredElement =3D $(div);=0A=
    }=0A=
    if (this.useLeft) =0A=
      this.wiredElement.setStyle({left: this.element.getStyle('left')});=0A=
    else =0A=
      this.wiredElement.setStyle({right: =
this.element.getStyle('right')});=0A=
      =0A=
    if (this.useTop) =0A=
      this.wiredElement.setStyle({top: this.element.getStyle('top')});=0A=
    else =0A=
      this.wiredElement.setStyle({bottom: =
this.element.getStyle('bottom')});=0A=
=0A=
    var dim =3D this.element.getDimensions();=0A=
    this.wiredElement.setStyle({width: dim.width + "px", height: =
dim.height +"px"});=0A=
=0A=
    this.wiredElement.setStyle({zIndex: Windows.maxZIndex+30});=0A=
    return this.wiredElement;=0A=
  },=0A=
  =0A=
  _hideWiredElement: function() {=0A=
    if (! this.wiredElement || ! this.currentDrag)=0A=
      return;=0A=
    if (this.currentDrag =3D=3D this.element) =0A=
      this.currentDrag =3D null;=0A=
    else {=0A=
      if (this.useLeft) =0A=
        this.element.setStyle({left: this.currentDrag.getStyle('left')});=0A=
      else =0A=
        this.element.setStyle({right: =
this.currentDrag.getStyle('right')});=0A=
=0A=
      if (this.useTop) =0A=
        this.element.setStyle({top: this.currentDrag.getStyle('top')});=0A=
      else =0A=
        this.element.setStyle({bottom: =
this.currentDrag.getStyle('bottom')});=0A=
=0A=
      this.currentDrag.hide();=0A=
      this.currentDrag =3D null;=0A=
      if (this.doResize)=0A=
        this.setSize(this.width, this.height);=0A=
    } =0A=
  },=0A=
  =0A=
  _notify: function(eventName) {=0A=
    if (this.options[eventName])=0A=
      this.options[eventName](this);=0A=
    else=0A=
      Windows.notify(eventName, this);=0A=
  }=0A=
};=0A=
=0A=
// Windows containers, register all page windows=0A=
var Windows =3D {=0A=
  windows: [],=0A=
  modalWindows: [],=0A=
  observers: [],=0A=
  focusedWindow: null,=0A=
  maxZIndex: 0,=0A=
  overlayShowEffectOptions: {duration: 0.5},=0A=
  overlayHideEffectOptions: {duration: 0.5},=0A=
=0A=
  addObserver: function(observer) {=0A=
    this.removeObserver(observer);=0A=
    this.observers.push(observer);=0A=
  },=0A=
  =0A=
  removeObserver: function(observer) {  =0A=
    this.observers =3D this.observers.reject( function(o) { return =
o=3D=3Dobserver });=0A=
  },=0A=
  =0A=
  // onDestroy onStartResize onStartMove onResize onMove onEndResize =
onEndMove onFocus onBlur onBeforeShow onShow onHide onMinimize =
onMaximize onClose=0A=
  notify: function(eventName, win) {  =0A=
    this.observers.each( function(o) {if(o[eventName]) =
o[eventName](eventName, win);});=0A=
  },=0A=
=0A=
  // Gets window from its id=0A=
  getWindow: function(id) {=0A=
    return this.windows.detect(function(d) { return d.getId() =3D=3Did =
});=0A=
  },=0A=
=0A=
  // Gets the last focused window=0A=
  getFocusedWindow: function() {=0A=
    return this.focusedWindow;=0A=
  },=0A=
=0A=
  updateFocusedWindow: function() {=0A=
    this.focusedWindow =3D this.windows.length >=3D2 ? =
this.windows[this.windows.length-2] : null;    =0A=
  },=0A=
  =0A=
  // Registers a new window (called by Windows constructor)=0A=
  register: function(win) {=0A=
    this.windows.push(win);=0A=
  },=0A=
    =0A=
  // Add a modal window in the stack=0A=
  addModalWindow: function(win) {=0A=
    // Disable screen if first modal window=0A=
    if (this.modalWindows.length =3D=3D 0) {=0A=
      WindowUtilities.disableScreen(win.options.className, =
'overlay_modal', win.overlayOpacity, win.getId(), win.options.parent);=0A=
    }=0A=
    else {=0A=
      // Move overlay over all windows=0A=
      if (Window.keepMultiModalWindow) {=0A=
        $('overlay_modal').style.zIndex =3D Windows.maxZIndex + 1;=0A=
        Windows.maxZIndex +=3D 1;=0A=
        WindowUtilities._hideSelect(this.modalWindows.last().getId());=0A=
      }=0A=
      // Hide current modal window=0A=
      else=0A=
        this.modalWindows.last().element.hide();=0A=
      // Fucking IE select issue=0A=
      WindowUtilities._showSelect(win.getId());=0A=
    }      =0A=
    this.modalWindows.push(win);    =0A=
  },=0A=
  =0A=
  removeModalWindow: function(win) {=0A=
    this.modalWindows.pop();=0A=
    =0A=
    // No more modal windows=0A=
    if (this.modalWindows.length =3D=3D 0)=0A=
      WindowUtilities.enableScreen();     =0A=
    else {=0A=
      if (Window.keepMultiModalWindow) {=0A=
        this.modalWindows.last().toFront();=0A=
        WindowUtilities._showSelect(this.modalWindows.last().getId());   =
     =0A=
      }=0A=
      else=0A=
        this.modalWindows.last().element.show();=0A=
    }=0A=
  },=0A=
  =0A=
  // Registers a new window (called by Windows constructor)=0A=
  register: function(win) {=0A=
    this.windows.push(win);=0A=
  },=0A=
  =0A=
  // Unregisters a window (called by Windows destructor)=0A=
  unregister: function(win) {=0A=
    this.windows =3D this.windows.reject(function(d) { return d=3D=3Dwin =
});=0A=
  }, =0A=
  =0A=
  // Closes all windows=0A=
  closeAll: function() {  =0A=
    this.windows.each( function(w) {Windows.close(w.getId())} );=0A=
  },=0A=
  =0A=
  closeAllModalWindows: function() {=0A=
    WindowUtilities.enableScreen();     =0A=
    this.modalWindows.each( function(win) {if (win) win.close()});    =0A=
  },=0A=
=0A=
  // Minimizes a window with its id=0A=
  minimize: function(id, event) {=0A=
    var win =3D this.getWindow(id)=0A=
    if (win && win.visible)=0A=
      win.minimize();=0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  // Maximizes a window with its id=0A=
  maximize: function(id, event) {=0A=
    var win =3D this.getWindow(id)=0A=
    if (win && win.visible)=0A=
      win.maximize();=0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
  // Closes a window with its id=0A=
  close: function(id, event) {=0A=
    var win =3D this.getWindow(id);=0A=
    if (win) =0A=
      win.close();=0A=
    if (event)=0A=
      Event.stop(event);=0A=
  },=0A=
  =0A=
  blur: function(id) {=0A=
    var win =3D this.getWindow(id);  =0A=
    if (!win)=0A=
      return;=0A=
    if (win.options.blurClassName)=0A=
      win.changeClassName(win.options.blurClassName);=0A=
    if (this.focusedWindow =3D=3D win)  =0A=
      this.focusedWindow =3D null;=0A=
    win._notify("onBlur");  =0A=
  },=0A=
  =0A=
  focus: function(id) {=0A=
    var win =3D this.getWindow(id);  =0A=
    if (!win)=0A=
      return;       =0A=
    if (this.focusedWindow)=0A=
      this.blur(this.focusedWindow.getId())=0A=
=0A=
    if (win.options.focusClassName)=0A=
      win.changeClassName(win.options.focusClassName);  =0A=
    this.focusedWindow =3D win;=0A=
    win._notify("onFocus");=0A=
  },=0A=
  =0A=
  unsetOverflow: function(except) {    =0A=
    this.windows.each(function(d) { d.oldOverflow =3D =
d.getContent().getStyle("overflow") || "auto" ; =
d.getContent().setStyle({overflow: "hidden"}) });=0A=
    if (except && except.oldOverflow)=0A=
      except.getContent().setStyle({overflow: except.oldOverflow});=0A=
  },=0A=
=0A=
  resetOverflow: function() {=0A=
    this.windows.each(function(d) { if (d.oldOverflow) =
d.getContent().setStyle({overflow: d.oldOverflow}) });=0A=
  },=0A=
=0A=
  updateZindex: function(zindex, win) { =0A=
    if (zindex > this.maxZIndex) {   =0A=
      this.maxZIndex =3D zindex;    =0A=
      if (this.focusedWindow) =0A=
        this.blur(this.focusedWindow.getId())=0A=
    }=0A=
    this.focusedWindow =3D win;=0A=
    if (this.focusedWindow) =0A=
      this.focus(this.focusedWindow.getId())=0A=
  }=0A=
};=0A=
=0A=
var Dialog =3D {=0A=
  dialogId: null,=0A=
  onCompleteFunc: null,=0A=
  callFunc: null, =0A=
  parameters: null, =0A=
    =0A=
  confirm: function(content, parameters) {=0A=
    // Get Ajax return before=0A=
    if (content && typeof content !=3D "string") {=0A=
      Dialog._runAjaxRequest(content, parameters, Dialog.confirm);=0A=
      return =0A=
    }=0A=
    content =3D content || "";=0A=
    =0A=
    parameters =3D parameters || {};=0A=
    var okLabel =3D parameters.okLabel ? parameters.okLabel : "Ok";=0A=
    var cancelLabel =3D parameters.cancelLabel ? parameters.cancelLabel =
: "Cancel";=0A=
=0A=
    // Backward compatibility=0A=
    parameters =3D Object.extend(parameters, parameters.windowParameters =
|| {});=0A=
    parameters.windowParameters =3D parameters.windowParameters || {};=0A=
=0A=
    parameters.className =3D parameters.className || "alert";=0A=
=0A=
    var okButtonClass =3D "class =3D'" + (parameters.buttonClass ? =
parameters.buttonClass + " " : "") + " ok_button'" =0A=
    var cancelButtonClass =3D "class =3D'" + (parameters.buttonClass ? =
parameters.buttonClass + " " : "") + " cancel_button'" =0A=
    var content =3D "\=0A=
      <div class=3D'" + parameters.className + "_message'>" + content  + =
"</div>\=0A=
        <div class=3D'" + parameters.className + "_buttons'>\=0A=
          <input type=3D'button' value=3D'" + okLabel + "' =
onclick=3D'Dialog.okCallback()' " + okButtonClass + "/>\=0A=
          <input type=3D'button' value=3D'" + cancelLabel + "' =
onclick=3D'Dialog.cancelCallback()' " + cancelButtonClass + "/>\=0A=
        </div>\=0A=
    ";=0A=
    return this._openDialog(content, parameters)=0A=
  },=0A=
  =0A=
  alert: function(content, parameters) {=0A=
    // Get Ajax return before=0A=
    if (content && typeof content !=3D "string") {=0A=
      Dialog._runAjaxRequest(content, parameters, Dialog.alert);=0A=
      return =0A=
    }=0A=
    content =3D content || "";=0A=
    =0A=
    parameters =3D parameters || {};=0A=
    var okLabel =3D parameters.okLabel ? parameters.okLabel : "Ok";=0A=
=0A=
    // Backward compatibility    =0A=
    parameters =3D Object.extend(parameters, parameters.windowParameters =
|| {});=0A=
    parameters.windowParameters =3D parameters.windowParameters || {};=0A=
    =0A=
    parameters.className =3D parameters.className || "alert";=0A=
    =0A=
    var okButtonClass =3D "class =3D'" + (parameters.buttonClass ? =
parameters.buttonClass + " " : "") + " ok_button'" =0A=
    var content =3D "\=0A=
      <div class=3D'" + parameters.className + "_message'>" + content  + =
"</div>\=0A=
        <div class=3D'" + parameters.className + "_buttons'>\=0A=
          <input type=3D'button' value=3D'" + okLabel + "' =
onclick=3D'Dialog.okCallback()' " + okButtonClass + "/>\=0A=
        </div>";                  =0A=
    return this._openDialog(content, parameters)=0A=
  },=0A=
  =0A=
  info: function(content, parameters) {=0A=
    // Get Ajax return before=0A=
    if (content && typeof content !=3D "string") {=0A=
      Dialog._runAjaxRequest(content, parameters, Dialog.info);=0A=
      return =0A=
    }=0A=
    content =3D content || "";=0A=
     =0A=
    // Backward compatibility=0A=
    parameters =3D parameters || {};=0A=
    parameters =3D Object.extend(parameters, parameters.windowParameters =
|| {});=0A=
    parameters.windowParameters =3D parameters.windowParameters || {};=0A=
    =0A=
    parameters.className =3D parameters.className || "alert";=0A=
    =0A=
    var content =3D "<div id=3D'modal_dialog_message' class=3D'" + =
parameters.className + "_message'>" + content  + "</div>";=0A=
    if (parameters.showProgress)=0A=
      content +=3D "<div id=3D'modal_dialog_progress' class=3D'" + =
parameters.className + "_progress'>  </div>";=0A=
=0A=
    parameters.ok =3D null;=0A=
    parameters.cancel =3D null;=0A=
    =0A=
    return this._openDialog(content, parameters)=0A=
  },=0A=
  =0A=
  setInfoMessage: function(message) {=0A=
    $('modal_dialog_message').update(message);=0A=
  },=0A=
  =0A=
  closeInfo: function() {=0A=
    Windows.close(this.dialogId);=0A=
  },=0A=
  =0A=
  _openDialog: function(content, parameters) {=0A=
    var className =3D parameters.className;=0A=
    =0A=
    if (! parameters.height && ! parameters.width) {=0A=
      parameters.width =3D =
WindowUtilities.getPageSize(parameters.options.parent || =
document.body).pageWidth / 2;=0A=
    }=0A=
    if (parameters.id)=0A=
      this.dialogId =3D parameters.id;=0A=
    else { =0A=
      var t =3D new Date();=0A=
      this.dialogId =3D 'modal_dialog_' + t.getTime();=0A=
      parameters.id =3D this.dialogId;=0A=
    }=0A=
=0A=
    // compute height or width if need be=0A=
    if (! parameters.height || ! parameters.width) {=0A=
      var size =3D WindowUtilities._computeSize(content, this.dialogId, =
parameters.width, parameters.height, 5, className)=0A=
      if (parameters.height)=0A=
        parameters.width =3D size + 5=0A=
      else=0A=
        parameters.height =3D size + 5=0A=
    }=0A=
    parameters.effectOptions =3D parameters.effectOptions ;=0A=
    parameters.resizable   =3D parameters.resizable || false;=0A=
    parameters.minimizable =3D parameters.minimizable || false;=0A=
    parameters.maximizable =3D parameters.maximizable ||  false;=0A=
    parameters.draggable   =3D parameters.draggable || false;=0A=
    parameters.closable    =3D parameters.closable || false;=0A=
=0A=
    var win =3D new Window(parameters);=0A=
    win.getContent().innerHTML =3D content;=0A=
    =0A=
    win.showCenter(true, parameters.top, parameters.left);  =0A=
    win.setDestroyOnClose();=0A=
    =0A=
    win.cancelCallback =3D parameters.onCancel || parameters.cancel; =0A=
    win.okCallback =3D parameters.onOk || parameters.ok;=0A=
    =0A=
    return win;    =0A=
  },=0A=
  =0A=
  _getAjaxContent: function(originalRequest)  {=0A=
      Dialog.callFunc(originalRequest.responseText, Dialog.parameters)=0A=
  },=0A=
  =0A=
  _runAjaxRequest: function(message, parameters, callFunc) {=0A=
    if (message.options =3D=3D null)=0A=
      message.options =3D {}  =0A=
    Dialog.onCompleteFunc =3D message.options.onComplete;=0A=
    Dialog.parameters =3D parameters;=0A=
    Dialog.callFunc =3D callFunc;=0A=
    =0A=
    message.options.onComplete =3D Dialog._getAjaxContent;=0A=
    new Ajax.Request(message.url, message.options);=0A=
  },=0A=
  =0A=
  okCallback: function() {=0A=
    var win =3D Windows.focusedWindow;=0A=
    if (!win.okCallback || win.okCallback(win)) {=0A=
      // Remove onclick on button=0A=
      $$("#" + win.getId()+" input").each(function(element) =
{element.onclick=3Dnull;})=0A=
      win.close();=0A=
    }=0A=
  },=0A=
=0A=
  cancelCallback: function() {=0A=
    var win =3D Windows.focusedWindow;=0A=
    // Remove onclick on button=0A=
    $$("#" + win.getId()+" input").each(function(element) =
{element.onclick=3Dnull})=0A=
    win.close();=0A=
    if (win.cancelCallback)=0A=
      win.cancelCallback(win);=0A=
  }=0A=
}=0A=
/*=0A=
  Based on Lightbox JS: Fullsize Image Overlays =0A=
  by Lokesh Dhakar - http://www.huddletogether.com=0A=
=0A=
  For more information on this script, visit:=0A=
  http://huddletogether.com/projects/lightbox/=0A=
=0A=
  Licensed under the Creative Commons Attribution 2.5 License - =
http://creativecommons.org/licenses/by/2.5/=0A=
  (basically, do anything you want, just leave my name and link)=0A=
*/=0A=
=0A=
if (Prototype.Browser.WebKit) {=0A=
  var array =3D navigator.userAgent.match(new =
RegExp(/AppleWebKit\/([\d\.\+]*)/));=0A=
  Prototype.Browser.WebKitVersion =3D parseFloat(array[1]);=0A=
}=0A=
=0A=
var WindowUtilities =3D {  =0A=
  // From dragdrop.js=0A=
  getWindowScroll: function(parent) {=0A=
    var T, L, W, H;=0A=
    parent =3D parent || document.body;              =0A=
    if (parent !=3D document.body) {=0A=
      T =3D parent.scrollTop;=0A=
      L =3D parent.scrollLeft;=0A=
      W =3D parent.scrollWidth;=0A=
      H =3D parent.scrollHeight;=0A=
    } =0A=
    else {=0A=
      var w =3D window;=0A=
      with (w.document) {=0A=
        if (w.document.documentElement && documentElement.scrollTop) {=0A=
          T =3D documentElement.scrollTop;=0A=
          L =3D documentElement.scrollLeft;=0A=
        } else if (w.document.body) {=0A=
          T =3D body.scrollTop;=0A=
          L =3D body.scrollLeft;=0A=
        }=0A=
        if (w.innerWidth) {=0A=
          W =3D w.innerWidth;=0A=
          H =3D w.innerHeight;=0A=
        } else if (w.document.documentElement && =
documentElement.clientWidth) {=0A=
          W =3D documentElement.clientWidth;=0A=
          H =3D documentElement.clientHeight;=0A=
        } else {=0A=
          W =3D body.offsetWidth;=0A=
          H =3D body.offsetHeight=0A=
        }=0A=
      }=0A=
    }=0A=
    return { top: T, left: L, width: W, height: H };=0A=
  }, =0A=
  //=0A=
  // getPageSize()=0A=
  // Returns array with page width, height and window width, height=0A=
  // Core code from - quirksmode.org=0A=
  // Edit for Firefox by pHaez=0A=
  //=0A=
  getPageSize: function(parent){=0A=
    parent =3D parent || document.body;              =0A=
    var windowWidth, windowHeight;=0A=
    var pageHeight, pageWidth;=0A=
    if (parent !=3D document.body) {=0A=
      windowWidth =3D parent.getWidth();=0A=
      windowHeight =3D parent.getHeight();                               =
 =0A=
      pageWidth =3D parent.scrollWidth;=0A=
      pageHeight =3D parent.scrollHeight;                                =0A=
    } =0A=
    else {=0A=
      var xScroll, yScroll;=0A=
=0A=
      if (window.innerHeight && window.scrollMaxY) {  =0A=
        xScroll =3D document.body.scrollWidth;=0A=
        yScroll =3D window.innerHeight + window.scrollMaxY;=0A=
      } else if (document.body.scrollHeight > =
document.body.offsetHeight){ // all but Explorer Mac=0A=
        xScroll =3D document.body.scrollWidth;=0A=
        yScroll =3D document.body.scrollHeight;=0A=
      } else { // Explorer Mac...would also work in Explorer 6 Strict, =
Mozilla and Safari=0A=
        xScroll =3D document.body.offsetWidth;=0A=
        yScroll =3D document.body.offsetHeight;=0A=
      }=0A=
=0A=
=0A=
      if (self.innerHeight) {  // all except Explorer=0A=
        windowWidth =3D =
document.documentElement.clientWidth;//self.innerWidth;=0A=
        windowHeight =3D self.innerHeight;=0A=
      } else if (document.documentElement && =
document.documentElement.clientHeight) { // Explorer 6 Strict Mode=0A=
        windowWidth =3D document.documentElement.clientWidth;=0A=
        windowHeight =3D document.documentElement.clientHeight;=0A=
      } else if (document.body) { // other Explorers=0A=
        windowWidth =3D document.body.clientWidth;=0A=
        windowHeight =3D document.body.clientHeight;=0A=
      }  =0A=
=0A=
      // for small pages with total height less then height of the =
viewport=0A=
      if(yScroll < windowHeight){=0A=
        pageHeight =3D windowHeight;=0A=
      } else { =0A=
        pageHeight =3D yScroll;=0A=
      }=0A=
=0A=
      // for small pages with total width less then width of the viewport=0A=
      if(xScroll < windowWidth){  =0A=
        pageWidth =3D windowWidth;=0A=
      } else {=0A=
        pageWidth =3D xScroll;=0A=
      }=0A=
    }             =0A=
    return {pageWidth: pageWidth ,pageHeight: pageHeight , windowWidth: =
windowWidth, windowHeight: windowHeight};=0A=
  },=0A=
=0A=
  disableScreen: function(className, overlayId, overlayOpacity, =
contentId, parent) {=0A=
    WindowUtilities.initLightbox(overlayId, className, function() =
{this._disableScreen(className, overlayId, overlayOpacity, =
contentId)}.bind(this), parent || document.body);=0A=
  },=0A=
=0A=
  _disableScreen: function(className, overlayId, overlayOpacity, =
contentId) {=0A=
    // prep objects=0A=
    var objOverlay =3D $(overlayId);=0A=
=0A=
    var pageSize =3D WindowUtilities.getPageSize(objOverlay.parentNode);=0A=
=0A=
    // Hide select boxes as they will 'peek' through the image in IE, =
store old value=0A=
    if (contentId && Prototype.Browser.IE) {=0A=
      WindowUtilities._hideSelect();=0A=
      WindowUtilities._showSelect(contentId);=0A=
    }  =0A=
  =0A=
    // set height of Overlay to take up whole page and show=0A=
    objOverlay.style.height =3D (pageSize.pageHeight + 'px');=0A=
    objOverlay.style.display =3D 'none'; =0A=
    if (overlayId =3D=3D "overlay_modal" && Window.hasEffectLib && =
Windows.overlayShowEffectOptions) {=0A=
      objOverlay.overlayOpacity =3D overlayOpacity;=0A=
      new Effect.Appear(objOverlay, Object.extend({from: 0, to: =
overlayOpacity}, Windows.overlayShowEffectOptions));=0A=
    }=0A=
    else=0A=
      objOverlay.style.display =3D "block";=0A=
  },=0A=
  =0A=
  enableScreen: function(id) {=0A=
    id =3D id || 'overlay_modal';=0A=
    var objOverlay =3D  $(id);=0A=
    if (objOverlay) {=0A=
      // hide lightbox and overlay=0A=
      if (id =3D=3D "overlay_modal" && Window.hasEffectLib && =
Windows.overlayHideEffectOptions)=0A=
        new Effect.Fade(objOverlay, Object.extend({from: =
objOverlay.overlayOpacity, to:0}, Windows.overlayHideEffectOptions));=0A=
      else {=0A=
        objOverlay.style.display =3D 'none';=0A=
        objOverlay.parentNode.removeChild(objOverlay);=0A=
      }=0A=
      =0A=
      // make select boxes visible using old value=0A=
      if (id !=3D "__invisible__") =0A=
        WindowUtilities._showSelect();=0A=
    }=0A=
  },=0A=
=0A=
  _hideSelect: function(id) {=0A=
    if (Prototype.Browser.IE) {=0A=
      id =3D id =3D=3D  null ? "" : "#" + id + " ";=0A=
      $$(id + 'select').each(function(element) {=0A=
        if (! WindowUtilities.isDefined(element.oldVisibility)) {=0A=
          element.oldVisibility =3D element.style.visibility ? =
element.style.visibility : "visible";=0A=
          element.style.visibility =3D "hidden";=0A=
        }=0A=
      });=0A=
    }=0A=
  },=0A=
  =0A=
  _showSelect: function(id) {=0A=
    if (Prototype.Browser.IE) {=0A=
      id =3D id =3D=3D  null ? "" : "#" + id + " ";=0A=
      $$(id + 'select').each(function(element) {=0A=
        if (WindowUtilities.isDefined(element.oldVisibility)) {=0A=
          // Why?? Ask IE=0A=
          try {=0A=
            element.style.visibility =3D element.oldVisibility;=0A=
          } catch(e) {=0A=
            element.style.visibility =3D "visible";=0A=
          }=0A=
          element.oldVisibility =3D null;=0A=
        }=0A=
        else {=0A=
          if (element.style.visibility)=0A=
            element.style.visibility =3D "visible";=0A=
        }=0A=
      });=0A=
    }=0A=
  },=0A=
=0A=
  isDefined: function(object) {=0A=
    return typeof(object) !=3D "undefined" && object !=3D null;=0A=
  },=0A=
  =0A=
  // initLightbox()=0A=
  // Function runs on window load, going through link tags looking for =
rel=3D"lightbox".=0A=
  // These links receive onclick events that enable the lightbox display =
for their targets.=0A=
  // The function also inserts html markup at the top of the page which =
will be used as a=0A=
  // container for the overlay pattern and the inline image.=0A=
  initLightbox: function(id, className, doneHandler, parent) {=0A=
    // Already done, just update zIndex=0A=
    if ($(id)) {=0A=
      Element.setStyle(id, {zIndex: Windows.maxZIndex + 1});=0A=
      Windows.maxZIndex++;=0A=
      doneHandler();=0A=
    }=0A=
    // create overlay div and hardcode some functional styles (aesthetic =
styles are in CSS file)=0A=
    else {=0A=
      var objOverlay =3D document.createElement("div");=0A=
      objOverlay.setAttribute('id', id);=0A=
      objOverlay.className =3D "overlay_" + className=0A=
      objOverlay.style.display =3D 'none';=0A=
      objOverlay.style.position =3D 'absolute';=0A=
      objOverlay.style.top =3D '0';=0A=
      objOverlay.style.left =3D '0';=0A=
      objOverlay.style.zIndex =3D Windows.maxZIndex + 1;=0A=
      Windows.maxZIndex++;=0A=
      objOverlay.style.width =3D '100%';=0A=
      parent.insertBefore(objOverlay, parent.firstChild);=0A=
      if (Prototype.Browser.WebKit && id =3D=3D "overlay_modal") {=0A=
        setTimeout(function() {doneHandler()}, 10);=0A=
      }=0A=
      else=0A=
        doneHandler();=0A=
    }    =0A=
  },=0A=
  =0A=
  setCookie: function(value, parameters) {=0A=
    document.cookie=3D parameters[0] + "=3D" + escape(value) +=0A=
      ((parameters[1]) ? "; expires=3D" + parameters[1].toGMTString() : =
"") +=0A=
      ((parameters[2]) ? "; path=3D" + parameters[2] : "") +=0A=
      ((parameters[3]) ? "; domain=3D" + parameters[3] : "") +=0A=
      ((parameters[4]) ? "; secure" : "");=0A=
  },=0A=
=0A=
  getCookie: function(name) {=0A=
    var dc =3D document.cookie;=0A=
    var prefix =3D name + "=3D";=0A=
    var begin =3D dc.indexOf("; " + prefix);=0A=
    if (begin =3D=3D -1) {=0A=
      begin =3D dc.indexOf(prefix);=0A=
      if (begin !=3D 0) return null;=0A=
    } else {=0A=
      begin +=3D 2;=0A=
    }=0A=
    var end =3D document.cookie.indexOf(";", begin);=0A=
    if (end =3D=3D -1) {=0A=
      end =3D dc.length;=0A=
    }=0A=
    return unescape(dc.substring(begin + prefix.length, end));=0A=
  },=0A=
    =0A=
  _computeSize: function(content, id, width, height, margin, className) {=0A=
    var objBody =3D document.body;=0A=
    var tmpObj =3D document.createElement("div");=0A=
    tmpObj.setAttribute('id', id);=0A=
    tmpObj.className =3D className + "_content";=0A=
=0A=
    if (height)=0A=
      tmpObj.style.height =3D height + "px"=0A=
    else=0A=
      tmpObj.style.width =3D width + "px"=0A=
  =0A=
    tmpObj.style.position =3D 'absolute';=0A=
    tmpObj.style.top =3D '0';=0A=
    tmpObj.style.left =3D '0';=0A=
    tmpObj.style.display =3D 'none';=0A=
=0A=
    tmpObj.innerHTML =3D content;=0A=
    objBody.insertBefore(tmpObj, objBody.firstChild);=0A=
=0A=
    var size;=0A=
    if (height)=0A=
      size =3D $(tmpObj).getDimensions().width + margin;=0A=
    else=0A=
      size =3D $(tmpObj).getDimensions().height + margin;=0A=
    objBody.removeChild(tmpObj);=0A=
    return size;=0A=
  }  =0A=
}=0A=
=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/prototype/window_effects.js

Effect.ResizeWindow =3D Class.create();=0A=
Object.extend(Object.extend(Effect.ResizeWindow.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(win, top, left, width, height) {=0A=
    this.window =3D win;=0A=
    this.window.resizing =3D true;=0A=
    =0A=
    var size =3D win.getSize();=0A=
    this.initWidth    =3D parseFloat(size.width);=0A=
    this.initHeight   =3D parseFloat(size.height);=0A=
=0A=
    var location =3D win.getLocation();=0A=
    this.initTop    =3D parseFloat(location.top);=0A=
    this.initLeft   =3D parseFloat(location.left);=0A=
=0A=
    this.width    =3D width !=3D null  ? parseFloat(width)  : =
this.initWidth;=0A=
    this.height   =3D height !=3D null ? parseFloat(height) : =
this.initHeight;=0A=
    this.top      =3D top !=3D null    ? parseFloat(top)    : =
this.initTop;=0A=
    this.left     =3D left !=3D null   ? parseFloat(left)   : =
this.initLeft;=0A=
=0A=
    this.dx     =3D this.left   - this.initLeft;=0A=
    this.dy     =3D this.top    - this.initTop;=0A=
    this.dw     =3D this.width  - this.initWidth;=0A=
    this.dh     =3D this.height - this.initHeight;=0A=
    =0A=
    this.r2      =3D $(this.window.getId() + "_row2");=0A=
    this.content =3D $(this.window.getId() + "_content");=0A=
        =0A=
    this.contentOverflow =3D this.content.getStyle("overflow") || "auto";=0A=
    this.content.setStyle({overflow: "hidden"});=0A=
    =0A=
    // Wired mode=0A=
    if (this.window.options.wiredDrag) {=0A=
      this.window.currentDrag =3D win._createWiredElement();=0A=
      this.window.currentDrag.show();=0A=
      this.window.element.hide();=0A=
    }=0A=
=0A=
    this.start(arguments[5]);=0A=
  },=0A=
  =0A=
  update: function(position) {=0A=
    var width  =3D Math.floor(this.initWidth  + this.dw * position);=0A=
    var height =3D Math.floor(this.initHeight + this.dh * position);=0A=
    var top    =3D Math.floor(this.initTop    + this.dy * position);=0A=
    var left   =3D Math.floor(this.initLeft   + this.dx * position);=0A=
=0A=
    if (window.ie) {=0A=
      if (Math.floor(height) =3D=3D 0)  =0A=
        this.r2.hide();=0A=
      else if (Math.floor(height) >1)  =0A=
        this.r2.show();=0A=
    }      =0A=
    this.r2.setStyle({height: height});=0A=
    this.window.setSize(width, height);=0A=
    this.window.setLocation(top, left);=0A=
  },=0A=
  =0A=
  finish: function(position) {=0A=
    // Wired mode=0A=
    if (this.window.options.wiredDrag) {=0A=
      this.window._hideWiredElement();=0A=
      this.window.element.show();=0A=
    }=0A=
=0A=
    this.window.setSize(this.width, this.height);=0A=
    this.window.setLocation(this.top, this.left);=0A=
    this.r2.setStyle({height: null});=0A=
    =0A=
    this.content.setStyle({overflow: this.contentOverflow});=0A=
      =0A=
    this.window.resizing =3D false;=0A=
  }=0A=
});=0A=
=0A=
Effect.ModalSlideDown =3D function(element) {=0A=
  var windowScroll =3D WindowUtilities.getWindowScroll();    =0A=
  var height =3D element.getStyle("height");  =0A=
  element.setStyle({top: - (parseFloat(height) - windowScroll.top) + =
"px"});=0A=
  =0A=
  element.show();=0A=
  return new Effect.Move(element, Object.extend({ x: 0, y: =
parseFloat(height) }, arguments[1] || {}));=0A=
};=0A=
=0A=
=0A=
Effect.ModalSlideUp =3D function(element) {=0A=
  var height =3D element.getStyle("height");=0A=
  return new Effect.Move(element, Object.extend({ x: 0, y: =
-parseFloat(height) }, arguments[1] || {}));=0A=
};=0A=
=0A=
PopupEffect =3D Class.create();=0A=
PopupEffect.prototype =3D {    =0A=
  initialize: function(htmlElement) {=0A=
    this.html =3D $(htmlElement);      =0A=
    this.options =3D Object.extend({className: "popup_effect", duration: =
0.4}, arguments[1] || {});=0A=
    =0A=
  },=0A=
  show: function(element, options) { =0A=
    var position =3D Position.cumulativeOffset(this.html);      =0A=
    var size =3D this.html.getDimensions();=0A=
    var bounds =3D element.win.getBounds();=0A=
    this.window =3D  element.win;      =0A=
    // Create a div=0A=
    if (!this.div) {=0A=
      this.div =3D document.createElement("div");=0A=
      this.div.className =3D this.options.className;=0A=
      this.div.style.height =3D size.height + "px";=0A=
      this.div.style.width  =3D size.width  + "px";=0A=
      this.div.style.top    =3D position[1] + "px";=0A=
      this.div.style.left   =3D position[0] + "px";   =0A=
      this.div.style.position =3D "absolute"=0A=
      document.body.appendChild(this.div);=0A=
    }                                                   =0A=
    if (this.options.fromOpacity)=0A=
      this.div.setStyle({opacity: this.options.fromOpacity})=0A=
    this.div.show();          =0A=
    var style =3D "top:" + bounds.top + ";left:" +bounds.left + =
";width:" + bounds.width +";height:" + bounds.height;=0A=
    if (this.options.toOpacity)=0A=
      style +=3D ";opacity:" + this.options.toOpacity;=0A=
    =0A=
    new Effect.Morph(this.div ,{style: style, duration: =
this.options.duration, afterFinish: this._showWindow.bind(this)});    =0A=
  },=0A=
=0A=
  hide: function(element, options) {     =0A=
    var position =3D Position.cumulativeOffset(this.html);      =0A=
    var size =3D this.html.getDimensions();    =0A=
    this.window.visible =3D true; =0A=
    var bounds =3D this.window.getBounds();=0A=
    this.window.visible =3D false; =0A=
=0A=
    this.window.element.hide();=0A=
=0A=
    this.div.style.height =3D bounds.height;=0A=
    this.div.style.width  =3D bounds.width;=0A=
    this.div.style.top    =3D bounds.top;=0A=
    this.div.style.left   =3D bounds.left;=0A=
    =0A=
    if (this.options.toOpacity)=0A=
      this.div.setStyle({opacity: this.options.toOpacity})=0A=
=0A=
    this.div.show();                                 =0A=
    var style =3D "top:" + position[1] + "px;left:" + position[0] + =
"px;width:" + size.width +"px;height:" + size.height + "px";=0A=
=0A=
    if (this.options.fromOpacity)=0A=
      style +=3D ";opacity:" + this.options.fromOpacity;=0A=
    new Effect.Morph(this.div ,{style: style, duration: =
this.options.duration, afterFinish: this._hideDiv.bind(this)});    =0A=
  },=0A=
  =0A=
  _showWindow: function() {=0A=
    this.div.hide();=0A=
    this.window.element.show(); =0A=
  },=0A=
  =0A=
  _hideDiv: function() {=0A=
    this.div.hide();=0A=
  }=0A=
}=0A=
=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/varien/product.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Varien=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
if(typeof Product=3D=3D'undefined') {=0A=
    var Product =3D {};=0A=
}=0A=
=0A=
/********************* IMAGE ZOOMER ***********************/=0A=
=0A=
Product.Zoom =3D Class.create();=0A=
/**=0A=
 * Image zoom control=0A=
 *=0A=
 * @author      Magento Core Team <core@magentocommerce.com>=0A=
 */=0A=
Product.Zoom.prototype =3D {=0A=
    initialize: function(imageEl, trackEl, handleEl, zoomInEl, =
zoomOutEl, hintEl){=0A=
        this.containerEl =3D $(imageEl).parentNode;=0A=
        this.imageEl =3D $(imageEl);=0A=
        this.handleEl =3D $(handleEl);=0A=
        this.trackEl =3D $(trackEl);=0A=
        this.hintEl =3D $(hintEl);=0A=
=0A=
        this.containerDim =3D Element.getDimensions(this.containerEl);=0A=
        this.imageDim =3D Element.getDimensions(this.imageEl);=0A=
=0A=
        this.imageDim.ratio =3D this.imageDim.width/this.imageDim.height;=0A=
=0A=
        this.floorZoom =3D 1;=0A=
=0A=
        if (this.imageDim.width > this.imageDim.height) {=0A=
            this.ceilingZoom =3D this.imageDim.width / =
this.containerDim.width;=0A=
        } else {=0A=
            this.ceilingZoom =3D this.imageDim.height / =
this.containerDim.height;=0A=
        }=0A=
=0A=
        if (this.imageDim.width <=3D this.containerDim.width=0A=
            && this.imageDim.height <=3D this.containerDim.height) {=0A=
            this.trackEl.up().hide();=0A=
            this.hintEl.hide();=0A=
            this.containerEl.removeClassName('product-image-zoom');=0A=
            return;=0A=
        }=0A=
=0A=
        this.imageX =3D 0;=0A=
        this.imageY =3D 0;=0A=
        this.imageZoom =3D 1;=0A=
=0A=
        this.sliderSpeed =3D 0;=0A=
        this.sliderAccel =3D 0;=0A=
        this.zoomBtnPressed =3D false;=0A=
=0A=
        this.showFull =3D false;=0A=
=0A=
        this.selects =3D document.getElementsByTagName('select');=0A=
=0A=
        this.draggable =3D new Draggable(imageEl, {=0A=
            starteffect:false,=0A=
            reverteffect:false,=0A=
            endeffect:false,=0A=
            snap:this.contain.bind(this)=0A=
        });=0A=
=0A=
        this.slider =3D new Control.Slider(handleEl, trackEl, {=0A=
            axis:'horizontal',=0A=
            minimum:0,=0A=
            maximum:Element.getDimensions(this.trackEl).width,=0A=
            alignX:0,=0A=
            increment:1,=0A=
            sliderValue:0,=0A=
            onSlide:this.scale.bind(this),=0A=
            onChange:this.scale.bind(this)=0A=
        });=0A=
=0A=
        this.scale(0);=0A=
=0A=
        Event.observe(this.imageEl, 'dblclick', =
this.toggleFull.bind(this));=0A=
=0A=
        Event.observe($(zoomInEl), 'mousedown', =
this.startZoomIn.bind(this));=0A=
        Event.observe($(zoomInEl), 'mouseup', =
this.stopZooming.bind(this));=0A=
        Event.observe($(zoomInEl), 'mouseout', =
this.stopZooming.bind(this));=0A=
=0A=
        Event.observe($(zoomOutEl), 'mousedown', =
this.startZoomOut.bind(this));=0A=
        Event.observe($(zoomOutEl), 'mouseup', =
this.stopZooming.bind(this));=0A=
        Event.observe($(zoomOutEl), 'mouseout', =
this.stopZooming.bind(this));=0A=
    },=0A=
=0A=
    toggleFull: function () {=0A=
        this.showFull =3D !this.showFull;=0A=
=0A=
        //Hide selects for IE6 only=0A=
        if (typeof document.body.style.maxHeight =3D=3D "undefined")  {=0A=
            for (i=3D0; i<this.selects.length; i++) {=0A=
                this.selects[i].style.visibility =3D this.showFull ? =
'hidden' : 'visible';=0A=
            }=0A=
        }=0A=
        val_scale =3D !this.showFull ? this.slider.value : 1;=0A=
        this.scale(val_scale);=0A=
=0A=
        this.trackEl.style.visibility =3D this.showFull ? 'hidden' : =
'visible';=0A=
        this.containerEl.style.overflow =3D this.showFull ? 'visible' : =
'hidden';=0A=
        this.containerEl.style.zIndex =3D this.showFull ? '1000' : '9';=0A=
=0A=
        return this;=0A=
    },=0A=
=0A=
    scale: function (v) {=0A=
        var centerX  =3D =
(this.containerDim.width*(1-this.imageZoom)/2-this.imageX)/this.imageZoom=
;=0A=
        var centerY  =3D =
(this.containerDim.height*(1-this.imageZoom)/2-this.imageY)/this.imageZoo=
m;=0A=
        var overSize =3D (this.imageDim.width > this.containerDim.width =
|| this.imageDim.height > this.containerDim.height);=0A=
=0A=
        this.imageZoom =3D =
this.floorZoom+(v*(this.ceilingZoom-this.floorZoom));=0A=
=0A=
        if (overSize) {=0A=
            if (this.imageDim.width > this.containerDim.width) {=0A=
                this.imageEl.style.width =3D =
(this.imageZoom*this.containerDim.width)+'px';=0A=
            } else if (this.imageDim.height > this.containerDim.height) {=0A=
                this.imageEl.style.height =3D =
(this.imageZoom*this.containerDim.height)+'px';=0A=
            }=0A=
=0A=
            if(this.containerDim.ratio){=0A=
                this.imageEl.style.height =3D =
(this.imageZoom*this.containerDim.width*this.containerDim.ratio)+'px'; =
// for safari=0A=
            }=0A=
        } else {=0A=
            this.slider.setDisabled();=0A=
        }=0A=
=0A=
        this.imageX =3D =
this.containerDim.width*(1-this.imageZoom)/2-centerX*this.imageZoom;=0A=
        this.imageY =3D =
this.containerDim.height*(1-this.imageZoom)/2-centerY*this.imageZoom;=0A=
=0A=
        this.contain(this.imageX, this.imageY, this.draggable);=0A=
=0A=
        return true;=0A=
    },=0A=
=0A=
    startZoomIn: function()=0A=
    {=0A=
        if (!this.slider.disabled) {=0A=
            this.zoomBtnPressed =3D true;=0A=
            this.sliderAccel =3D .002;=0A=
            this.periodicalZoom();=0A=
            this.zoomer =3D new =
PeriodicalExecuter(this.periodicalZoom.bind(this), .05);=0A=
        }=0A=
        return this;=0A=
    },=0A=
=0A=
    startZoomOut: function()=0A=
    {=0A=
        if (!this.slider.disabled) {=0A=
            this.zoomBtnPressed =3D true;=0A=
            this.sliderAccel =3D -.002;=0A=
            this.periodicalZoom();=0A=
            this.zoomer =3D new =
PeriodicalExecuter(this.periodicalZoom.bind(this), .05);=0A=
        }=0A=
        return this;=0A=
    },=0A=
=0A=
    stopZooming: function()=0A=
    {=0A=
        if (!this.zoomer || this.sliderSpeed=3D=3D0) {=0A=
            return;=0A=
        }=0A=
        this.zoomBtnPressed =3D false;=0A=
        this.sliderAccel =3D 0;=0A=
    },=0A=
=0A=
    periodicalZoom: function()=0A=
    {=0A=
        if (!this.zoomer) {=0A=
            return this;=0A=
        }=0A=
=0A=
        if (this.zoomBtnPressed) {=0A=
            this.sliderSpeed +=3D this.sliderAccel;=0A=
        } else {=0A=
            this.sliderSpeed /=3D 1.5;=0A=
            if (Math.abs(this.sliderSpeed)<.001) {=0A=
                this.sliderSpeed =3D 0;=0A=
                this.zoomer.stop();=0A=
                this.zoomer =3D null;=0A=
            }=0A=
        }=0A=
        this.slider.value +=3D this.sliderSpeed;=0A=
=0A=
        this.slider.setValue(this.slider.value);=0A=
        this.scale(this.slider.value);=0A=
=0A=
        return this;=0A=
    },=0A=
=0A=
    contain: function (x,y,draggable) {=0A=
=0A=
        var dim =3D Element.getDimensions(draggable.element);=0A=
=0A=
        var xMin =3D 0, xMax =3D this.containerDim.width-dim.width;=0A=
        var yMin =3D 0, yMax =3D this.containerDim.height-dim.height;=0A=
=0A=
        x =3D x>xMin ? xMin : x;=0A=
        x =3D x<xMax ? xMax : x;=0A=
        y =3D y>yMin ? yMin : y;=0A=
        y =3D y<yMax ? yMax : y;=0A=
=0A=
        if (this.containerDim.width > dim.width) {=0A=
            x =3D (this.containerDim.width/2) - (dim.width/2);=0A=
        }=0A=
=0A=
        if (this.containerDim.height > dim.height) {=0A=
            y =3D (this.containerDim.height/2) - (dim.height/2);=0A=
        }=0A=
=0A=
        this.imageX =3D x;=0A=
        this.imageY =3D y;=0A=
=0A=
        this.imageEl.style.left =3D this.imageX+'px';=0A=
        this.imageEl.style.top =3D this.imageY+'px';=0A=
=0A=
        return [x,y];=0A=
    }=0A=
}=0A=
=0A=
/**************************** CONFIGURABLE PRODUCT =
**************************/=0A=
Product.Config =3D Class.create();=0A=
Product.Config.prototype =3D {=0A=
    initialize: function(config){=0A=
        this.config     =3D config;=0A=
        this.taxConfig  =3D this.config.taxConfig;=0A=
        this.settings   =3D $$('.super-attribute-select');=0A=
        this.state      =3D new Hash();=0A=
        this.priceTemplate =3D new Template(this.config.template);=0A=
        this.prices     =3D config.prices;=0A=
=0A=
        this.settings.each(function(element){=0A=
            Event.observe(element, 'change', this.configure.bind(this))=0A=
        }.bind(this));=0A=
=0A=
        // fill state=0A=
        this.settings.each(function(element){=0A=
            var attributeId =3D element.id.replace(/[a-z]*/, '');=0A=
            if(attributeId && this.config.attributes[attributeId]) {=0A=
                element.config =3D this.config.attributes[attributeId];=0A=
                element.attributeId =3D attributeId;=0A=
                this.state[attributeId] =3D false;=0A=
            }=0A=
        }.bind(this))=0A=
=0A=
        // Init settings dropdown=0A=
        var childSettings =3D [];=0A=
        for(var i=3Dthis.settings.length-1;i>=3D0;i--){=0A=
            var prevSetting =3D this.settings[i-1] ? this.settings[i-1] =
: false;=0A=
            var nextSetting =3D this.settings[i+1] ? this.settings[i+1] =
: false;=0A=
            if(i=3D=3D0){=0A=
                this.fillSelect(this.settings[i])=0A=
            }=0A=
            else {=0A=
                this.settings[i].disabled=3Dtrue;=0A=
            }=0A=
            $(this.settings[i]).childSettings =3D childSettings.clone();=0A=
            $(this.settings[i]).prevSetting   =3D prevSetting;=0A=
            $(this.settings[i]).nextSetting   =3D nextSetting;=0A=
            childSettings.push(this.settings[i]);=0A=
        }=0A=
=0A=
        // Set default values - from config and overwrite them by url =
values=0A=
        if (config.defaultValues) {=0A=
            this.values =3D config.defaultValues;=0A=
        }=0A=
=0A=
        var separatorIndex =3D window.location.href.indexOf('#');=0A=
        if (separatorIndex !=3D -1) {=0A=
            var paramsStr =3D =
window.location.href.substr(separatorIndex+1);=0A=
            var urlValues =3D paramsStr.toQueryParams();=0A=
            if (!this.values) {=0A=
                this.values =3D {};=0A=
            }=0A=
            for (var i in urlValues) {=0A=
                this.values[i] =3D urlValues[i];=0A=
            }=0A=
        }=0A=
=0A=
        this.configureForValues();=0A=
        document.observe("dom:loaded", =
this.configureForValues.bind(this));=0A=
    },=0A=
=0A=
    configureForValues: function () {=0A=
        if (this.values) {=0A=
            this.settings.each(function(element){=0A=
                var attributeId =3D element.attributeId;=0A=
                element.value =3D (typeof(this.values[attributeId]) =
=3D=3D 'undefined')? '' : this.values[attributeId];=0A=
                this.configureElement(element);=0A=
            }.bind(this));=0A=
        }=0A=
    },=0A=
=0A=
    configure: function(event){=0A=
        var element =3D Event.element(event);=0A=
        this.configureElement(element);=0A=
    },=0A=
=0A=
    configureElement : function(element) {=0A=
        this.reloadOptionLabels(element);=0A=
        if(element.value){=0A=
            this.state[element.config.id] =3D element.value;=0A=
            if(element.nextSetting){=0A=
                element.nextSetting.disabled =3D false;=0A=
                this.fillSelect(element.nextSetting);=0A=
                this.resetChildren(element.nextSetting);=0A=
            }=0A=
        }=0A=
        else {=0A=
            this.resetChildren(element);=0A=
        }=0A=
        this.reloadPrice();=0A=
//      Calculator.updatePrice();=0A=
    },=0A=
=0A=
    reloadOptionLabels: function(element){=0A=
        var selectedPrice;=0A=
        if(element.options[element.selectedIndex].config){=0A=
            selectedPrice =3D =
parseFloat(element.options[element.selectedIndex].config.price)=0A=
        }=0A=
        else{=0A=
            selectedPrice =3D 0;=0A=
        }=0A=
        for(var i=3D0;i<element.options.length;i++){=0A=
            if(element.options[i].config){=0A=
                element.options[i].text =3D =
this.getOptionLabel(element.options[i].config, =
element.options[i].config.price-selectedPrice);=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    resetChildren : function(element){=0A=
        if(element.childSettings) {=0A=
            for(var i=3D0;i<element.childSettings.length;i++){=0A=
                element.childSettings[i].selectedIndex =3D 0;=0A=
                element.childSettings[i].disabled =3D true;=0A=
                if(element.config){=0A=
                    this.state[element.config.id] =3D false;=0A=
                }=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    fillSelect: function(element){=0A=
        var attributeId =3D element.id.replace(/[a-z]*/, '');=0A=
        var options =3D this.getAttributeOptions(attributeId);=0A=
        this.clearSelect(element);=0A=
        element.options[0] =3D new Option(this.config.chooseText, '');=0A=
=0A=
        var prevConfig =3D false;=0A=
        if(element.prevSetting){=0A=
            prevConfig =3D =
element.prevSetting.options[element.prevSetting.selectedIndex];=0A=
        }=0A=
=0A=
        if(options) {=0A=
            var index =3D 1;=0A=
            for(var i=3D0;i<options.length;i++){=0A=
                var allowedProducts =3D [];=0A=
                if(prevConfig) {=0A=
                    for(var j=3D0;j<options[i].products.length;j++){=0A=
                        if(prevConfig.config.allowedProducts=0A=
                            && =
prevConfig.config.allowedProducts.indexOf(options[i].products[j])>-1){=0A=
                            allowedProducts.push(options[i].products[j]);=0A=
                        }=0A=
                    }=0A=
                } else {=0A=
                    allowedProducts =3D options[i].products.clone();=0A=
                }=0A=
=0A=
                if(allowedProducts.size()>0){=0A=
                    options[i].allowedProducts =3D allowedProducts;=0A=
                    element.options[index] =3D new =
Option(this.getOptionLabel(options[i], options[i].price), options[i].id);=0A=
                    element.options[index].config =3D options[i];=0A=
                    index++;=0A=
                }=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    getOptionLabel: function(option, price){=0A=
        var price =3D parseFloat(price);=0A=
        if (this.taxConfig.includeTax) {=0A=
            var tax =3D price / (100 + this.taxConfig.defaultTax) * =
this.taxConfig.defaultTax;=0A=
            var excl =3D price - tax;=0A=
            var incl =3D excl*(1+(this.taxConfig.currentTax/100));=0A=
        } else {=0A=
            var tax =3D price * (this.taxConfig.currentTax / 100);=0A=
            var excl =3D price;=0A=
            var incl =3D excl + tax;=0A=
        }=0A=
=0A=
        if (this.taxConfig.showIncludeTax || =
this.taxConfig.showBothPrices) {=0A=
            price =3D incl;=0A=
        } else {=0A=
            price =3D excl;=0A=
        }=0A=
=0A=
        var str =3D option.label;=0A=
        if(price){=0A=
            if (this.taxConfig.showBothPrices) {=0A=
                str+=3D ' ' + this.formatPrice(excl, true) + ' (' + =
this.formatPrice(price, true) + ' ' + this.taxConfig.inclTaxTitle + ')';=0A=
            } else {=0A=
                str+=3D ' ' + this.formatPrice(price, true);=0A=
            }=0A=
        }=0A=
        return str;=0A=
    },=0A=
=0A=
    formatPrice: function(price, showSign){=0A=
        var str =3D '';=0A=
        price =3D parseFloat(price);=0A=
        if(showSign){=0A=
            if(price<0){=0A=
                str+=3D '-';=0A=
                price =3D -price;=0A=
            }=0A=
            else{=0A=
                str+=3D '+';=0A=
            }=0A=
        }=0A=
=0A=
        var roundedPrice =3D (Math.round(price*100)/100).toString();=0A=
=0A=
        if (this.prices && this.prices[roundedPrice]) {=0A=
            str+=3D this.prices[roundedPrice];=0A=
        }=0A=
        else {=0A=
            str+=3D =
this.priceTemplate.evaluate({price:price.toFixed(2)});=0A=
        }=0A=
        return str;=0A=
    },=0A=
=0A=
    clearSelect: function(element){=0A=
        for(var i=3Delement.options.length-1;i>=3D0;i--){=0A=
            element.remove(i);=0A=
        }=0A=
    },=0A=
=0A=
    getAttributeOptions: function(attributeId){=0A=
        if(this.config.attributes[attributeId]){=0A=
            return this.config.attributes[attributeId].options;=0A=
        }=0A=
    },=0A=
=0A=
    reloadPrice: function(){=0A=
        var price    =3D 0;=0A=
        var oldPrice =3D 0;=0A=
        for(var i=3Dthis.settings.length-1;i>=3D0;i--){=0A=
            var selected =3D =
this.settings[i].options[this.settings[i].selectedIndex];=0A=
            if(selected.config){=0A=
                price    +=3D parseFloat(selected.config.price);=0A=
                oldPrice +=3D parseFloat(selected.config.oldPrice);=0A=
            }=0A=
        }=0A=
=0A=
        optionsPrice.changePrice('config', {'price': price, 'oldPrice': =
oldPrice});=0A=
        optionsPrice.reload();=0A=
=0A=
        return price;=0A=
=0A=
        if($('product-price-'+this.config.productId)){=0A=
            $('product-price-'+this.config.productId).innerHTML =3D =
price;=0A=
        }=0A=
        this.reloadOldPrice();=0A=
    },=0A=
=0A=
    reloadOldPrice: function(){=0A=
        if ($('old-price-'+this.config.productId)) {=0A=
=0A=
            var price =3D parseFloat(this.config.oldPrice);=0A=
            for(var i=3Dthis.settings.length-1;i>=3D0;i--){=0A=
                var selected =3D =
this.settings[i].options[this.settings[i].selectedIndex];=0A=
                if(selected.config){=0A=
                    price+=3D parseFloat(selected.config.price);=0A=
                }=0A=
            }=0A=
            if (price < 0)=0A=
                price =3D 0;=0A=
            price =3D this.formatPrice(price);=0A=
=0A=
            if($('old-price-'+this.config.productId)){=0A=
                $('old-price-'+this.config.productId).innerHTML =3D =
price;=0A=
            }=0A=
=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
=0A=
/**************************** SUPER PRODUCTS =
********************************/=0A=
=0A=
Product.Super =3D {};=0A=
Product.Super.Configurable =3D Class.create();=0A=
=0A=
Product.Super.Configurable.prototype =3D {=0A=
    initialize: function(container, observeCss, updateUrl, =
updatePriceUrl, priceContainerId) {=0A=
        this.container =3D $(container);=0A=
        this.observeCss =3D observeCss;=0A=
        this.updateUrl =3D updateUrl;=0A=
        this.updatePriceUrl =3D updatePriceUrl;=0A=
        this.priceContainerId =3D priceContainerId;=0A=
        this.registerObservers();=0A=
    },=0A=
    registerObservers: function() {=0A=
        var elements =3D =
this.container.getElementsByClassName(this.observeCss);=0A=
        elements.each(function(element){=0A=
            Event.observe(element, 'change', =
this.update.bindAsEventListener(this));=0A=
        }.bind(this));=0A=
        return this;=0A=
    },=0A=
    update: function(event) {=0A=
        var elements =3D =
this.container.getElementsByClassName(this.observeCss);=0A=
        var parameters =3D Form.serializeElements(elements, true);=0A=
=0A=
        new Ajax.Updater(this.container, this.updateUrl + '?ajax=3D1', {=0A=
                parameters:parameters,=0A=
                onComplete:this.registerObservers.bind(this)=0A=
        });=0A=
        var priceContainer =3D $(this.priceContainerId);=0A=
        if(priceContainer) {=0A=
            new Ajax.Updater(priceContainer, this.updatePriceUrl + =
'?ajax=3D1', {=0A=
                parameters:parameters=0A=
            });=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
/**************************** PRICE RELOADER =
********************************/=0A=
Product.OptionsPrice =3D Class.create();=0A=
Product.OptionsPrice.prototype =3D {=0A=
    initialize: function(config) {=0A=
        this.productId          =3D config.productId;=0A=
        this.priceFormat        =3D config.priceFormat;=0A=
        this.includeTax         =3D config.includeTax;=0A=
        this.defaultTax         =3D config.defaultTax;=0A=
        this.currentTax         =3D config.currentTax;=0A=
        this.productPrice       =3D config.productPrice;=0A=
        this.showIncludeTax     =3D config.showIncludeTax;=0A=
        this.showBothPrices     =3D config.showBothPrices;=0A=
        this.productOldPrice    =3D config.productOldPrice;=0A=
        this.priceInclTax       =3D config.priceInclTax;=0A=
        this.priceExclTax       =3D config.priceExclTax;=0A=
        this.skipCalculate      =3D config.skipCalculate;//@deprecated =
after 1.5.1.0=0A=
        this.duplicateIdSuffix  =3D config.idSuffix;=0A=
        this.specialTaxPrice    =3D config.specialTaxPrice;=0A=
=0A=
        this.oldPlusDisposition =3D config.oldPlusDisposition;=0A=
        this.plusDisposition    =3D config.plusDisposition;=0A=
=0A=
        this.oldMinusDisposition =3D config.oldMinusDisposition;=0A=
        this.minusDisposition    =3D config.minusDisposition;=0A=
=0A=
        this.optionPrices    =3D {};=0A=
        this.containers      =3D {};=0A=
=0A=
        this.displayZeroPrice   =3D true;=0A=
=0A=
        this.initPrices();=0A=
    },=0A=
=0A=
    setDuplicateIdSuffix: function(idSuffix) {=0A=
        this.duplicateIdSuffix =3D idSuffix;=0A=
    },=0A=
=0A=
    initPrices: function() {=0A=
        this.containers[0] =3D 'product-price-' + this.productId;=0A=
        this.containers[1] =3D 'bundle-price-' + this.productId;=0A=
        this.containers[2] =3D 'price-including-tax-' + this.productId;=0A=
        this.containers[3] =3D 'price-excluding-tax-' + this.productId;=0A=
        this.containers[4] =3D 'old-price-' + this.productId;=0A=
    },=0A=
=0A=
    changePrice: function(key, price) {=0A=
        this.optionPrices[key] =3D price;=0A=
    },=0A=
=0A=
    getOptionPrices: function() {=0A=
        var price =3D 0;=0A=
        var nonTaxable =3D 0;=0A=
        var oldPrice =3D 0;=0A=
        var priceInclTax =3D 0;=0A=
        var currentTax =3D this.currentTax;=0A=
        $H(this.optionPrices).each(function(pair) {=0A=
            if ('undefined' !=3D typeof(pair.value.price) && 'undefined' =
!=3D typeof(pair.value.oldPrice)) {=0A=
                price +=3D parseFloat(pair.value.price);=0A=
                oldPrice +=3D parseFloat(pair.value.oldPrice);=0A=
            } else if (pair.key =3D=3D 'nontaxable') {=0A=
                nonTaxable =3D pair.value;=0A=
            } else if (pair.key =3D=3D 'priceInclTax') {=0A=
                priceInclTax +=3D pair.value;=0A=
            } else if (pair.key =3D=3D 'optionsPriceInclTax') {=0A=
                priceInclTax +=3D pair.value * (100 + currentTax) / 100;=0A=
            } else {=0A=
                price +=3D parseFloat(pair.value);=0A=
                oldPrice +=3D parseFloat(pair.value);=0A=
            }=0A=
        });=0A=
        var result =3D [price, nonTaxable, oldPrice, priceInclTax];=0A=
        return result;=0A=
    },=0A=
=0A=
    reload: function() {=0A=
        var price;=0A=
        var formattedPrice;=0A=
        var optionPrices =3D this.getOptionPrices();=0A=
        var nonTaxable =3D optionPrices[1];=0A=
        var optionOldPrice =3D optionPrices[2];=0A=
        var priceInclTax =3D optionPrices[3];=0A=
        optionPrices =3D optionPrices[0];=0A=
=0A=
        $H(this.containers).each(function(pair) {=0A=
            var _productPrice;=0A=
            var _plusDisposition;=0A=
            var _minusDisposition;=0A=
            var _priceInclTax;=0A=
            if ($(pair.value)) {=0A=
                if (pair.value =3D=3D 'old-price-'+this.productId && =
this.productOldPrice !=3D this.productPrice) {=0A=
                    _productPrice =3D this.productOldPrice;=0A=
                    _plusDisposition =3D this.oldPlusDisposition;=0A=
                    _minusDisposition =3D this.oldMinusDisposition;=0A=
                } else {=0A=
                    _productPrice =3D this.productPrice;=0A=
                    _plusDisposition =3D this.plusDisposition;=0A=
                    _minusDisposition =3D this.minusDisposition;=0A=
                }=0A=
                _priceInclTax =3D priceInclTax;=0A=
=0A=
                if (pair.value =3D=3D 'old-price-'+this.productId && =
optionOldPrice !=3D=3D undefined) {=0A=
                    price =3D optionOldPrice+parseFloat(_productPrice);=0A=
                } else if (this.specialTaxPrice =3D=3D 'true' && =
this.priceInclTax !=3D=3D undefined && this.priceExclTax !=3D=3D =
undefined) {=0A=
                    price =3D optionPrices+parseFloat(this.priceExclTax);=0A=
                    _priceInclTax +=3D this.priceInclTax;=0A=
                } else {=0A=
                    price =3D optionPrices+parseFloat(_productPrice);=0A=
                    _priceInclTax +=3D parseFloat(_productPrice) * (100 =
+ this.currentTax) / 100;=0A=
                }=0A=
=0A=
                if (this.specialTaxPrice =3D=3D 'true') {=0A=
                    var excl =3D price;=0A=
                    var incl =3D _priceInclTax;=0A=
                } else if (this.includeTax =3D=3D 'true') {=0A=
                    // tax =3D tax included into product price by admin=0A=
                    var tax =3D price / (100 + this.defaultTax) * =
this.defaultTax;=0A=
                    var excl =3D price - tax;=0A=
                    var incl =3D excl*(1+(this.currentTax/100));=0A=
                } else {=0A=
                    var tax =3D price * (this.currentTax / 100);=0A=
                    var excl =3D price;=0A=
                    var incl =3D excl + tax;=0A=
                }=0A=
=0A=
                excl +=3D parseFloat(_plusDisposition);=0A=
                incl +=3D parseFloat(_plusDisposition);=0A=
                excl -=3D parseFloat(_minusDisposition);=0A=
                incl -=3D parseFloat(_minusDisposition);=0A=
=0A=
                //adding nontaxlable part of options=0A=
                excl +=3D parseFloat(nonTaxable);=0A=
                incl +=3D parseFloat(nonTaxable);=0A=
=0A=
                if (pair.value =3D=3D =
'price-including-tax-'+this.productId) {=0A=
                    price =3D incl;=0A=
                } else if (pair.value =3D=3D =
'price-excluding-tax-'+this.productId) {=0A=
                    price =3D excl;=0A=
                } else if (pair.value =3D=3D =
'old-price-'+this.productId) {=0A=
                    if (this.showIncludeTax || this.showBothPrices) {=0A=
                        price =3D incl;=0A=
                    } else {=0A=
                        price =3D excl;=0A=
                    }=0A=
                } else {=0A=
                    if (this.showIncludeTax) {=0A=
                        price =3D incl;=0A=
                    } else {=0A=
                        price =3D excl;=0A=
                    }=0A=
                }=0A=
=0A=
                if (price < 0) price =3D 0;=0A=
=0A=
                if (price > 0 || this.displayZeroPrice) {=0A=
                    formattedPrice =3D this.formatPrice(price);=0A=
                } else {=0A=
                    formattedPrice =3D '';=0A=
                }=0A=
=0A=
                if ($(pair.value).select('.price')[0]) {=0A=
                    $(pair.value).select('.price')[0].innerHTML =3D =
formattedPrice;=0A=
                    if ($(pair.value+this.duplicateIdSuffix) && =
$(pair.value+this.duplicateIdSuffix).select('.price')[0]) {=0A=
                        =
$(pair.value+this.duplicateIdSuffix).select('.price')[0].innerHTML =3D =
formattedPrice;=0A=
                    }=0A=
                } else {=0A=
                    $(pair.value).innerHTML =3D formattedPrice;=0A=
                    if ($(pair.value+this.duplicateIdSuffix)) {=0A=
                        $(pair.value+this.duplicateIdSuffix).innerHTML =
=3D formattedPrice;=0A=
                    }=0A=
                }=0A=
            };=0A=
        }.bind(this));=0A=
    },=0A=
    formatPrice: function(price) {=0A=
        return formatCurrency(price, this.priceFormat);=0A=
    }=0A=
}=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/varien/configurable.js

/**=0A=
 * Magento=0A=
 *=0A=
 * NOTICE OF LICENSE=0A=
 *=0A=
 * This source file is subject to the Academic Free License (AFL 3.0)=0A=
 * that is bundled with this package in the file LICENSE_AFL.txt.=0A=
 * It is also available through the world-wide-web at this URL:=0A=
 * http://opensource.org/licenses/afl-3.0.php=0A=
 * If you did not receive a copy of the license and are unable to=0A=
 * obtain it through the world-wide-web, please send an email=0A=
 * to license@magentocommerce.com so we can send you a copy immediately.=0A=
 *=0A=
 * DISCLAIMER=0A=
 *=0A=
 * Do not edit or add to this file if you wish to upgrade Magento to =
newer=0A=
 * versions in the future. If you wish to customize Magento for your=0A=
 * needs please refer to http://www.magentocommerce.com for more =
information.=0A=
 *=0A=
 * @category    Varien=0A=
 * @package     js=0A=
 * @copyright   Copyright (c) 2011 Magento Inc. =
(http://www.magentocommerce.com)=0A=
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic =
Free License (AFL 3.0)=0A=
 */=0A=
if (typeof Product =3D=3D 'undefined') {=0A=
    var Product =3D {};=0A=
}=0A=
=0A=
/**************************** CONFIGURABLE PRODUCT =
**************************/=0A=
Product.Config =3D Class.create();=0A=
Product.Config.prototype =3D {=0A=
    initialize: function(config){=0A=
        this.config     =3D config;=0A=
        this.taxConfig  =3D this.config.taxConfig;=0A=
        if (config.containerId) {=0A=
            this.settings   =3D $$('#' + config.containerId + ' ' + =
'.super-attribute-select');=0A=
        } else {=0A=
            this.settings   =3D $$('.super-attribute-select');=0A=
        }=0A=
        this.state      =3D new Hash();=0A=
        this.priceTemplate =3D new Template(this.config.template);=0A=
        this.prices     =3D config.prices;=0A=
        =0A=
        // Set default values from config=0A=
        if (config.defaultValues) {=0A=
            this.values =3D config.defaultValues;=0A=
        }=0A=
        =0A=
        // Overwrite defaults by url=0A=
        var separatorIndex =3D window.location.href.indexOf('#');=0A=
        if (separatorIndex !=3D -1) {=0A=
            var paramsStr =3D =
window.location.href.substr(separatorIndex+1);=0A=
            var urlValues =3D paramsStr.toQueryParams();=0A=
            if (!this.values) {=0A=
                this.values =3D {};=0A=
            }=0A=
            for (var i in urlValues) {=0A=
                this.values[i] =3D urlValues[i];=0A=
            }=0A=
        }=0A=
        =0A=
        // Overwrite defaults by inputs values if needed=0A=
        if (config.inputsInitialized) {=0A=
            this.values =3D {};=0A=
            this.settings.each(function(element) {=0A=
                if (element.value) {=0A=
                    var attributeId =3D element.id.replace(/[a-z]*/, '');=0A=
                    this.values[attributeId] =3D element.value;=0A=
                }=0A=
            }.bind(this));=0A=
        }=0A=
            =0A=
        // Put events to check select reloads =0A=
        this.settings.each(function(element){=0A=
            Event.observe(element, 'change', this.configure.bind(this))=0A=
        }.bind(this));=0A=
=0A=
        // fill state=0A=
        this.settings.each(function(element){=0A=
            var attributeId =3D element.id.replace(/[a-z]*/, '');=0A=
            if(attributeId && this.config.attributes[attributeId]) {=0A=
                element.config =3D this.config.attributes[attributeId];=0A=
                element.attributeId =3D attributeId;=0A=
                this.state[attributeId] =3D false;=0A=
            }=0A=
        }.bind(this))=0A=
=0A=
        // Init settings dropdown=0A=
        var childSettings =3D [];=0A=
        for(var i=3Dthis.settings.length-1;i>=3D0;i--){=0A=
            var prevSetting =3D this.settings[i-1] ? this.settings[i-1] =
: false;=0A=
            var nextSetting =3D this.settings[i+1] ? this.settings[i+1] =
: false;=0A=
            if (i =3D=3D 0){=0A=
                this.fillSelect(this.settings[i])=0A=
            } else {=0A=
                this.settings[i].disabled =3D true;=0A=
            }=0A=
            $(this.settings[i]).childSettings =3D childSettings.clone();=0A=
            $(this.settings[i]).prevSetting   =3D prevSetting;=0A=
            $(this.settings[i]).nextSetting   =3D nextSetting;=0A=
            childSettings.push(this.settings[i]);=0A=
        }=0A=
=0A=
        // Set values to inputs=0A=
        this.configureForValues();=0A=
        document.observe("dom:loaded", =
this.configureForValues.bind(this));=0A=
    },=0A=
    =0A=
    configureForValues: function () {=0A=
        if (this.values) {=0A=
            this.settings.each(function(element){=0A=
                var attributeId =3D element.attributeId;=0A=
                element.value =3D (typeof(this.values[attributeId]) =
=3D=3D 'undefined')? '' : this.values[attributeId];=0A=
                this.configureElement(element);=0A=
            }.bind(this));=0A=
        }=0A=
    },=0A=
=0A=
    configure: function(event){=0A=
        var element =3D Event.element(event);=0A=
        this.configureElement(element);=0A=
    },=0A=
=0A=
    configureElement : function(element) {=0A=
        this.reloadOptionLabels(element);=0A=
        if(element.value){=0A=
            this.state[element.config.id] =3D element.value;=0A=
            if(element.nextSetting){=0A=
                element.nextSetting.disabled =3D false;=0A=
                this.fillSelect(element.nextSetting);=0A=
                this.resetChildren(element.nextSetting);=0A=
            }=0A=
        }=0A=
        else {=0A=
            this.resetChildren(element);=0A=
        }=0A=
        this.reloadPrice();=0A=
    },=0A=
=0A=
    reloadOptionLabels: function(element){=0A=
        var selectedPrice;=0A=
        if(element.options[element.selectedIndex].config && =
!this.config.stablePrices){=0A=
            selectedPrice =3D =
parseFloat(element.options[element.selectedIndex].config.price)=0A=
        }=0A=
        else{=0A=
            selectedPrice =3D 0;=0A=
        }=0A=
        for(var i=3D0;i<element.options.length;i++){=0A=
            if(element.options[i].config){=0A=
                element.options[i].text =3D =
this.getOptionLabel(element.options[i].config, =
element.options[i].config.price-selectedPrice);=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    resetChildren : function(element){=0A=
        if(element.childSettings) {=0A=
            for(var i=3D0;i<element.childSettings.length;i++){=0A=
                element.childSettings[i].selectedIndex =3D 0;=0A=
                element.childSettings[i].disabled =3D true;=0A=
                if(element.config){=0A=
                    this.state[element.config.id] =3D false;=0A=
                }=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    fillSelect: function(element){=0A=
        var attributeId =3D element.id.replace(/[a-z]*/, '');=0A=
        var options =3D this.getAttributeOptions(attributeId);=0A=
        this.clearSelect(element);=0A=
        element.options[0] =3D new Option(this.config.chooseText, '');=0A=
=0A=
        var prevConfig =3D false;=0A=
        if(element.prevSetting){=0A=
            prevConfig =3D =
element.prevSetting.options[element.prevSetting.selectedIndex];=0A=
        }=0A=
=0A=
        if(options) {=0A=
            var index =3D 1;=0A=
            for(var i=3D0;i<options.length;i++){=0A=
                var allowedProducts =3D [];=0A=
                if(prevConfig) {=0A=
                    for(var j=3D0;j<options[i].products.length;j++){=0A=
                        if(prevConfig.config.allowedProducts=0A=
                            && =
prevConfig.config.allowedProducts.indexOf(options[i].products[j])>-1){=0A=
                            allowedProducts.push(options[i].products[j]);=0A=
                        }=0A=
                    }=0A=
                } else {=0A=
                    allowedProducts =3D options[i].products.clone();=0A=
                }=0A=
=0A=
                if(allowedProducts.size()>0){=0A=
                    options[i].allowedProducts =3D allowedProducts;=0A=
                    element.options[index] =3D new =
Option(this.getOptionLabel(options[i], options[i].price), options[i].id);=0A=
                    if (typeof options[i].price !=3D 'undefined') {=0A=
                        element.options[index].setAttribute('price', =
options[i].price);=0A=
                    }=0A=
                    element.options[index].config =3D options[i];=0A=
                    index++;=0A=
                }=0A=
            }=0A=
        }=0A=
    },=0A=
=0A=
    getOptionLabel: function(option, price){=0A=
        var price =3D parseFloat(price);=0A=
        if (this.taxConfig.includeTax) {=0A=
            var tax =3D price / (100 + this.taxConfig.defaultTax) * =
this.taxConfig.defaultTax;=0A=
            var excl =3D price - tax;=0A=
            var incl =3D excl*(1+(this.taxConfig.currentTax/100));=0A=
        } else {=0A=
            var tax =3D price * (this.taxConfig.currentTax / 100);=0A=
            var excl =3D price;=0A=
            var incl =3D excl + tax;=0A=
        }=0A=
=0A=
        if (this.taxConfig.showIncludeTax || =
this.taxConfig.showBothPrices) {=0A=
            price =3D incl;=0A=
        } else {=0A=
            price =3D excl;=0A=
        }=0A=
=0A=
        var str =3D option.label;=0A=
        if(price){=0A=
            if (this.taxConfig.showBothPrices) {=0A=
                str+=3D ' ' + this.formatPrice(excl, true) + ' (' + =
this.formatPrice(price, true) + ' ' + this.taxConfig.inclTaxTitle + ')';=0A=
            } else {=0A=
                str+=3D ' ' + this.formatPrice(price, true);=0A=
            }=0A=
        }=0A=
        return str;=0A=
    },=0A=
=0A=
    formatPrice: function(price, showSign){=0A=
        var str =3D '';=0A=
        price =3D parseFloat(price);=0A=
        if(showSign){=0A=
            if(price<0){=0A=
                str+=3D '-';=0A=
                price =3D -price;=0A=
            }=0A=
            else{=0A=
                str+=3D '+';=0A=
            }=0A=
        }=0A=
=0A=
        var roundedPrice =3D (Math.round(price*100)/100).toString();=0A=
=0A=
        if (this.prices && this.prices[roundedPrice]) {=0A=
            str+=3D this.prices[roundedPrice];=0A=
        }=0A=
        else {=0A=
            str+=3D =
this.priceTemplate.evaluate({price:price.toFixed(2)});=0A=
        }=0A=
        return str;=0A=
    },=0A=
=0A=
    clearSelect: function(element){=0A=
        for(var i=3Delement.options.length-1;i>=3D0;i--){=0A=
            element.remove(i);=0A=
        }=0A=
    },=0A=
=0A=
    getAttributeOptions: function(attributeId){=0A=
        if(this.config.attributes[attributeId]){=0A=
            return this.config.attributes[attributeId].options;=0A=
        }=0A=
    },=0A=
=0A=
    reloadPrice: function(){=0A=
        if (this.config.disablePriceReload) {=0A=
            return;=0A=
        }=0A=
        var price    =3D 0;=0A=
        var oldPrice =3D 0;=0A=
        for(var i=3Dthis.settings.length-1;i>=3D0;i--){=0A=
            var selected =3D =
this.settings[i].options[this.settings[i].selectedIndex];=0A=
            if(selected.config){=0A=
                price    +=3D parseFloat(selected.config.price);=0A=
                oldPrice +=3D parseFloat(selected.config.oldPrice);=0A=
            }=0A=
        }=0A=
=0A=
        optionsPrice.changePrice('config', {'price': price, 'oldPrice': =
oldPrice});=0A=
        optionsPrice.reload();=0A=
=0A=
        return price;=0A=
=0A=
        if($('product-price-'+this.config.productId)){=0A=
            $('product-price-'+this.config.productId).innerHTML =3D =
price;=0A=
        }=0A=
        this.reloadOldPrice();=0A=
    },=0A=
=0A=
    reloadOldPrice: function(){=0A=
        if (this.config.disablePriceReload) {=0A=
            return;=0A=
        }=0A=
        if ($('old-price-'+this.config.productId)) {=0A=
=0A=
            var price =3D parseFloat(this.config.oldPrice);=0A=
            for(var i=3Dthis.settings.length-1;i>=3D0;i--){=0A=
                var selected =3D =
this.settings[i].options[this.settings[i].selectedIndex];=0A=
                if(selected.config){=0A=
                    price+=3D parseFloat(selected.config.price);=0A=
                }=0A=
            }=0A=
            if (price < 0)=0A=
                price =3D 0;=0A=
            price =3D this.formatPrice(price);=0A=
=0A=
            if($('old-price-'+this.config.productId)){=0A=
                $('old-price-'+this.config.productId).innerHTML =3D =
price;=0A=
            }=0A=
=0A=
        }=0A=
    }=0A=
}=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/calendar/calendar.js

/*  Copyright Mihai Bazon, 2002-2005  |  www.bazon.net/mishoo=0A=
 * -----------------------------------------------------------=0A=
 *=0A=
 * The DHTML Calendar, version 1.0 "It is happening again"=0A=
 *=0A=
 * Details and latest version at:=0A=
 * www.dynarch.com/projects/calendar=0A=
 *=0A=
 * This script is developed by Dynarch.com.  Visit us at www.dynarch.com.=0A=
 *=0A=
 * This script is distributed under the GNU Lesser General Public =
License.=0A=
 * Read the entire license text here: =
http://www.gnu.org/licenses/lgpl.html=0A=
 */=0A=
=0A=
// $Id: calendar.js,v 1.51 2005/03/07 16:44:31 mishoo Exp $=0A=
=0A=
/** The Calendar object constructor. */=0A=
Calendar =3D function (firstDayOfWeek, dateStr, onSelected, onClose) {=0A=
	// member variables=0A=
	this.activeDiv =3D null;=0A=
	this.currentDateEl =3D null;=0A=
	this.getDateStatus =3D null;=0A=
	this.getDateToolTip =3D null;=0A=
	this.getDateText =3D null;=0A=
	this.timeout =3D null;=0A=
	this.onSelected =3D onSelected || null;=0A=
	this.onClose =3D onClose || null;=0A=
	this.dragging =3D false;=0A=
	this.hidden =3D false;=0A=
	this.minYear =3D 1970;=0A=
	this.maxYear =3D 2050;=0A=
	this.dateFormat =3D Calendar._TT["DEF_DATE_FORMAT"];=0A=
	this.ttDateFormat =3D Calendar._TT["TT_DATE_FORMAT"];=0A=
	this.isPopup =3D true;=0A=
	this.weekNumbers =3D true;=0A=
	this.firstDayOfWeek =3D typeof firstDayOfWeek =3D=3D "number" ? =
firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.=0A=
	this.showsOtherMonths =3D false;=0A=
	this.dateStr =3D dateStr;=0A=
	this.ar_days =3D null;=0A=
	this.showsTime =3D false;=0A=
	this.time24 =3D true;=0A=
	this.yearStep =3D 2;=0A=
	this.hiliteToday =3D true;=0A=
	this.multiple =3D null;=0A=
	// HTML elements=0A=
	this.table =3D null;=0A=
	this.element =3D null;=0A=
	this.tbody =3D null;=0A=
	this.firstdayname =3D null;=0A=
	// Combo boxes=0A=
	this.monthsCombo =3D null;=0A=
	this.yearsCombo =3D null;=0A=
	this.hilitedMonth =3D null;=0A=
	this.activeMonth =3D null;=0A=
	this.hilitedYear =3D null;=0A=
	this.activeYear =3D null;=0A=
	// Information=0A=
	this.dateClicked =3D false;=0A=
=0A=
	// one-time initializations=0A=
	if (typeof Calendar._SDN =3D=3D "undefined") {=0A=
		// table of short day names=0A=
		if (typeof Calendar._SDN_len =3D=3D "undefined")=0A=
			Calendar._SDN_len =3D 3;=0A=
		var ar =3D new Array();=0A=
		for (var i =3D 8; i > 0;) {=0A=
			ar[--i] =3D Calendar._DN[i].substr(0, Calendar._SDN_len);=0A=
		}=0A=
		Calendar._SDN =3D ar;=0A=
		// table of short month names=0A=
		if (typeof Calendar._SMN_len =3D=3D "undefined")=0A=
			Calendar._SMN_len =3D 3;=0A=
		ar =3D new Array();=0A=
		for (var i =3D 12; i > 0;) {=0A=
			ar[--i] =3D Calendar._MN[i].substr(0, Calendar._SMN_len);=0A=
		}=0A=
		Calendar._SMN =3D ar;=0A=
	}=0A=
};=0A=
=0A=
// ** constants=0A=
=0A=
/// "static", needed for event handlers.=0A=
Calendar._C =3D null;=0A=
=0A=
/// detect a special case of "web browser"=0A=
Calendar.is_ie =3D ( /msie/i.test(navigator.userAgent) &&=0A=
		   !/opera/i.test(navigator.userAgent) );=0A=
=0A=
Calendar.is_ie5 =3D ( Calendar.is_ie && /msie =
5\.0/i.test(navigator.userAgent) );=0A=
=0A=
/// detect Opera browser=0A=
Calendar.is_opera =3D /opera/i.test(navigator.userAgent);=0A=
=0A=
/// detect KHTML-based browsers=0A=
Calendar.is_khtml =3D =
/Konqueror|Safari|KHTML/i.test(navigator.userAgent);=0A=
=0A=
/// detect Gecko browsers=0A=
Calendar.is_gecko =3D navigator.userAgent.match(/gecko/i);=0A=
=0A=
// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a =
separate=0A=
//        library, at some point.=0A=
=0A=
// Returns CSS property for element=0A=
Calendar.getStyle =3D function(element, style) {=0A=
    if (element.currentStyle) {=0A=
        var y =3D element.currentStyle[style];=0A=
    } else if (window.getComputedStyle) {=0A=
        var y =3D =
document.defaultView.getComputedStyle(element,null).getPropertyValue(styl=
e);=0A=
    }=0A=
=0A=
    return y;=0A=
};=0A=
=0A=
/*=0A=
 * Different ways to find element's absolute position=0A=
 */=0A=
Calendar.getAbsolutePos =3D function(element) {=0A=
=0A=
    var res =3D new Object();=0A=
    res.x =3D 0; res.y =3D 0;=0A=
=0A=
    // variant 1 (working best, copy-paste from prototype library)=0A=
    do {=0A=
        res.x +=3D element.offsetLeft || 0;=0A=
        res.y +=3D element.offsetTop  || 0;=0A=
        element =3D element.offsetParent;=0A=
        if (element) {=0A=
            if (element.tagName.toUpperCase() =3D=3D 'BODY') break;=0A=
            var p =3D Calendar.getStyle(element, 'position');=0A=
            if ((p !=3D=3D 'static') && (p !=3D=3D 'relative')) break;=0A=
        }=0A=
    } while (element);=0A=
=0A=
    return res;=0A=
=0A=
    // variant 2 (good solution, but lost in IE8)=0A=
    if (element !=3D=3D null) {=0A=
        res.x =3D element.offsetLeft;=0A=
        res.y =3D element.offsetTop;=0A=
=0A=
        var offsetParent =3D element.offsetParent;=0A=
        var parentNode =3D element.parentNode;=0A=
=0A=
        while (offsetParent !=3D=3D null) {=0A=
            res.x +=3D offsetParent.offsetLeft;=0A=
            res.y +=3D offsetParent.offsetTop;=0A=
=0A=
            if (offsetParent !=3D document.body && offsetParent !=3D =
document.documentElement) {=0A=
                res.x -=3D offsetParent.scrollLeft;=0A=
                res.y -=3D offsetParent.scrollTop;=0A=
            }=0A=
            //next lines are necessary to support FireFox problem with =
offsetParent=0A=
            if (Calendar.is_gecko) {=0A=
                while (offsetParent !=3D parentNode && parentNode =
!=3D=3D null) {=0A=
                    res.x -=3D parentNode.scrollLeft;=0A=
                    res.y -=3D parentNode.scrollTop;=0A=
                    parentNode =3D parentNode.parentNode;=0A=
                }=0A=
            }=0A=
            parentNode =3D offsetParent.parentNode;=0A=
            offsetParent =3D offsetParent.offsetParent;=0A=
        }=0A=
    }=0A=
    return res;=0A=
=0A=
    // variant 2 (not working)=0A=
=0A=
//	var SL =3D 0, ST =3D 0;=0A=
//	var is_div =3D /^div$/i.test(el.tagName);=0A=
//	if (is_div && el.scrollLeft)=0A=
//		SL =3D el.scrollLeft;=0A=
//	if (is_div && el.scrollTop)=0A=
//		ST =3D el.scrollTop;=0A=
//	var r =3D { x: el.offsetLeft - SL, y: el.offsetTop - ST };=0A=
//	if (el.offsetParent) {=0A=
//		var tmp =3D this.getAbsolutePos(el.offsetParent);=0A=
//		r.x +=3D tmp.x;=0A=
//		r.y +=3D tmp.y;=0A=
//	}=0A=
//	return r;=0A=
};=0A=
=0A=
Calendar.isRelated =3D function (el, evt) {=0A=
	var related =3D evt.relatedTarget;=0A=
	if (!related) {=0A=
		var type =3D evt.type;=0A=
		if (type =3D=3D "mouseover") {=0A=
			related =3D evt.fromElement;=0A=
		} else if (type =3D=3D "mouseout") {=0A=
			related =3D evt.toElement;=0A=
		}=0A=
	}=0A=
	while (related) {=0A=
		if (related =3D=3D el) {=0A=
			return true;=0A=
		}=0A=
		related =3D related.parentNode;=0A=
	}=0A=
	return false;=0A=
};=0A=
=0A=
Calendar.removeClass =3D function(el, className) {=0A=
	if (!(el && el.className)) {=0A=
		return;=0A=
	}=0A=
	var cls =3D el.className.split(" ");=0A=
	var ar =3D new Array();=0A=
	for (var i =3D cls.length; i > 0;) {=0A=
		if (cls[--i] !=3D className) {=0A=
			ar[ar.length] =3D cls[i];=0A=
		}=0A=
	}=0A=
	el.className =3D ar.join(" ");=0A=
};=0A=
=0A=
Calendar.addClass =3D function(el, className) {=0A=
	Calendar.removeClass(el, className);=0A=
	el.className +=3D " " + className;=0A=
};=0A=
=0A=
// FIXME: the following 2 functions totally suck, are useless and should =
be replaced immediately.=0A=
Calendar.getElement =3D function(ev) {=0A=
	var f =3D Calendar.is_ie ? window.event.srcElement : ev.currentTarget;=0A=
	while (f.nodeType !=3D 1 || /^div$/i.test(f.tagName))=0A=
		f =3D f.parentNode;=0A=
	return f;=0A=
};=0A=
=0A=
Calendar.getTargetElement =3D function(ev) {=0A=
	var f =3D Calendar.is_ie ? window.event.srcElement : ev.target;=0A=
	while (f.nodeType !=3D 1)=0A=
		f =3D f.parentNode;=0A=
	return f;=0A=
};=0A=
=0A=
Calendar.stopEvent =3D function(ev) {=0A=
	ev || (ev =3D window.event);=0A=
	if (Calendar.is_ie) {=0A=
		ev.cancelBubble =3D true;=0A=
		ev.returnValue =3D false;=0A=
	} else {=0A=
		ev.preventDefault();=0A=
		ev.stopPropagation();=0A=
	}=0A=
	return false;=0A=
};=0A=
=0A=
Calendar.addEvent =3D function(el, evname, func) {=0A=
	if (el.attachEvent) { // IE=0A=
		el.attachEvent("on" + evname, func);=0A=
	} else if (el.addEventListener) { // Gecko / W3C=0A=
		el.addEventListener(evname, func, true);=0A=
	} else {=0A=
		el["on" + evname] =3D func;=0A=
	}=0A=
};=0A=
=0A=
Calendar.removeEvent =3D function(el, evname, func) {=0A=
	if (el.detachEvent) { // IE=0A=
		el.detachEvent("on" + evname, func);=0A=
	} else if (el.removeEventListener) { // Gecko / W3C=0A=
		el.removeEventListener(evname, func, true);=0A=
	} else {=0A=
		el["on" + evname] =3D null;=0A=
	}=0A=
};=0A=
=0A=
Calendar.createElement =3D function(type, parent) {=0A=
	var el =3D null;=0A=
	if (document.createElementNS) {=0A=
		// use the XHTML namespace; IE won't normally get here unless=0A=
		// _they_ "fix" the DOM2 implementation.=0A=
		el =3D document.createElementNS("http://www.w3.org/1999/xhtml", type);=0A=
	} else {=0A=
		el =3D document.createElement(type);=0A=
	}=0A=
	if (typeof parent !=3D "undefined") {=0A=
		parent.appendChild(el);=0A=
	}=0A=
	return el;=0A=
};=0A=
=0A=
// END: UTILITY FUNCTIONS=0A=
=0A=
// BEGIN: CALENDAR STATIC FUNCTIONS=0A=
=0A=
/** Internal -- adds a set of events to make some element behave like a =
button. */=0A=
Calendar._add_evs =3D function(el) {=0A=
	with (Calendar) {=0A=
		addEvent(el, "mouseover", dayMouseOver);=0A=
		addEvent(el, "mousedown", dayMouseDown);=0A=
		addEvent(el, "mouseout", dayMouseOut);=0A=
		if (is_ie) {=0A=
			addEvent(el, "dblclick", dayMouseDblClick);=0A=
			el.setAttribute("unselectable", true);=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
Calendar.findMonth =3D function(el) {=0A=
	if (typeof el.month !=3D "undefined") {=0A=
		return el;=0A=
	} else if (typeof el.parentNode.month !=3D "undefined") {=0A=
		return el.parentNode;=0A=
	}=0A=
	return null;=0A=
};=0A=
=0A=
Calendar.findYear =3D function(el) {=0A=
	if (typeof el.year !=3D "undefined") {=0A=
		return el;=0A=
	} else if (typeof el.parentNode.year !=3D "undefined") {=0A=
		return el.parentNode;=0A=
	}=0A=
	return null;=0A=
};=0A=
=0A=
Calendar.showMonthsCombo =3D function () {=0A=
	var cal =3D Calendar._C;=0A=
	if (!cal) {=0A=
		return false;=0A=
	}=0A=
	var cal =3D cal;=0A=
	var cd =3D cal.activeDiv;=0A=
	var mc =3D cal.monthsCombo;=0A=
	if (cal.hilitedMonth) {=0A=
		Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
	}=0A=
	if (cal.activeMonth) {=0A=
		Calendar.removeClass(cal.activeMonth, "active");=0A=
	}=0A=
	var mon =3D =
cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];=0A=
	Calendar.addClass(mon, "active");=0A=
	cal.activeMonth =3D mon;=0A=
	var s =3D mc.style;=0A=
	s.display =3D "block";=0A=
	if (cd.navtype < 0)=0A=
		s.left =3D cd.offsetLeft + "px";=0A=
	else {=0A=
		var mcw =3D mc.offsetWidth;=0A=
		if (typeof mcw =3D=3D "undefined")=0A=
			// Konqueror brain-dead techniques=0A=
			mcw =3D 50;=0A=
		s.left =3D (cd.offsetLeft + cd.offsetWidth - mcw) + "px";=0A=
	}=0A=
	s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A=
};=0A=
=0A=
Calendar.showYearsCombo =3D function (fwd) {=0A=
	var cal =3D Calendar._C;=0A=
	if (!cal) {=0A=
		return false;=0A=
	}=0A=
	var cal =3D cal;=0A=
	var cd =3D cal.activeDiv;=0A=
	var yc =3D cal.yearsCombo;=0A=
	if (cal.hilitedYear) {=0A=
		Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
	}=0A=
	if (cal.activeYear) {=0A=
		Calendar.removeClass(cal.activeYear, "active");=0A=
	}=0A=
	cal.activeYear =3D null;=0A=
	var Y =3D cal.date.getFullYear() + (fwd ? 1 : -1);=0A=
	var yr =3D yc.firstChild;=0A=
	var show =3D false;=0A=
	for (var i =3D 12; i > 0; --i) {=0A=
		if (Y >=3D cal.minYear && Y <=3D cal.maxYear) {=0A=
			yr.innerHTML =3D Y;=0A=
			yr.year =3D Y;=0A=
			yr.style.display =3D "block";=0A=
			show =3D true;=0A=
		} else {=0A=
			yr.style.display =3D "none";=0A=
		}=0A=
		yr =3D yr.nextSibling;=0A=
		Y +=3D fwd ? cal.yearStep : -cal.yearStep;=0A=
	}=0A=
	if (show) {=0A=
		var s =3D yc.style;=0A=
		s.display =3D "block";=0A=
		if (cd.navtype < 0)=0A=
			s.left =3D cd.offsetLeft + "px";=0A=
		else {=0A=
			var ycw =3D yc.offsetWidth;=0A=
			if (typeof ycw =3D=3D "undefined")=0A=
				// Konqueror brain-dead techniques=0A=
				ycw =3D 50;=0A=
			s.left =3D (cd.offsetLeft + cd.offsetWidth - ycw) + "px";=0A=
		}=0A=
		s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A=
	}=0A=
};=0A=
=0A=
// event handlers=0A=
=0A=
Calendar.tableMouseUp =3D function(ev) {=0A=
	var cal =3D Calendar._C;=0A=
	if (!cal) {=0A=
		return false;=0A=
	}=0A=
	if (cal.timeout) {=0A=
		clearTimeout(cal.timeout);=0A=
	}=0A=
	var el =3D cal.activeDiv;=0A=
	if (!el) {=0A=
		return false;=0A=
	}=0A=
	var target =3D Calendar.getTargetElement(ev);=0A=
	ev || (ev =3D window.event);=0A=
	Calendar.removeClass(el, "active");=0A=
	if (target =3D=3D el || target.parentNode =3D=3D el) {=0A=
		Calendar.cellClick(el, ev);=0A=
	}=0A=
	var mon =3D Calendar.findMonth(target);=0A=
	var date =3D null;=0A=
	if (mon) {=0A=
		date =3D new CalendarDateObject(cal.date);=0A=
		if (mon.month !=3D date.getMonth()) {=0A=
			date.setMonth(mon.month);=0A=
			cal.setDate(date);=0A=
			cal.dateClicked =3D false;=0A=
			cal.callHandler();=0A=
		}=0A=
	} else {=0A=
		var year =3D Calendar.findYear(target);=0A=
		if (year) {=0A=
			date =3D new CalendarDateObject(cal.date);=0A=
			if (year.year !=3D date.getFullYear()) {=0A=
				date.setFullYear(year.year);=0A=
				cal.setDate(date);=0A=
				cal.dateClicked =3D false;=0A=
				cal.callHandler();=0A=
			}=0A=
		}=0A=
	}=0A=
	with (Calendar) {=0A=
		removeEvent(document, "mouseup", tableMouseUp);=0A=
		removeEvent(document, "mouseover", tableMouseOver);=0A=
		removeEvent(document, "mousemove", tableMouseOver);=0A=
		cal._hideCombos();=0A=
		_C =3D null;=0A=
		return stopEvent(ev);=0A=
	}=0A=
};=0A=
=0A=
Calendar.tableMouseOver =3D function (ev) {=0A=
	var cal =3D Calendar._C;=0A=
	if (!cal) {=0A=
		return;=0A=
	}=0A=
	var el =3D cal.activeDiv;=0A=
	var target =3D Calendar.getTargetElement(ev);=0A=
	if (target =3D=3D el || target.parentNode =3D=3D el) {=0A=
		Calendar.addClass(el, "hilite active");=0A=
		Calendar.addClass(el.parentNode, "rowhilite");=0A=
	} else {=0A=
		if (typeof el.navtype =3D=3D "undefined" || (el.navtype !=3D 50 && =
(el.navtype =3D=3D 0 || Math.abs(el.navtype) > 2)))=0A=
			Calendar.removeClass(el, "active");=0A=
		Calendar.removeClass(el, "hilite");=0A=
		Calendar.removeClass(el.parentNode, "rowhilite");=0A=
	}=0A=
	ev || (ev =3D window.event);=0A=
	if (el.navtype =3D=3D 50 && target !=3D el) {=0A=
		var pos =3D Calendar.getAbsolutePos(el);=0A=
		var w =3D el.offsetWidth;=0A=
		var x =3D ev.clientX;=0A=
		var dx;=0A=
		var decrease =3D true;=0A=
		if (x > pos.x + w) {=0A=
			dx =3D x - pos.x - w;=0A=
			decrease =3D false;=0A=
		} else=0A=
			dx =3D pos.x - x;=0A=
=0A=
		if (dx < 0) dx =3D 0;=0A=
		var range =3D el._range;=0A=
		var current =3D el._current;=0A=
		var count =3D Math.floor(dx / 10) % range.length;=0A=
		for (var i =3D range.length; --i >=3D 0;)=0A=
			if (range[i] =3D=3D current)=0A=
				break;=0A=
		while (count-- > 0)=0A=
			if (decrease) {=0A=
				if (--i < 0)=0A=
					i =3D range.length - 1;=0A=
			} else if ( ++i >=3D range.length )=0A=
				i =3D 0;=0A=
		var newval =3D range[i];=0A=
		el.innerHTML =3D newval;=0A=
=0A=
		cal.onUpdateTime();=0A=
	}=0A=
	var mon =3D Calendar.findMonth(target);=0A=
	if (mon) {=0A=
		if (mon.month !=3D cal.date.getMonth()) {=0A=
			if (cal.hilitedMonth) {=0A=
				Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
			}=0A=
			Calendar.addClass(mon, "hilite");=0A=
			cal.hilitedMonth =3D mon;=0A=
		} else if (cal.hilitedMonth) {=0A=
			Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
		}=0A=
	} else {=0A=
		if (cal.hilitedMonth) {=0A=
			Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
		}=0A=
		var year =3D Calendar.findYear(target);=0A=
		if (year) {=0A=
			if (year.year !=3D cal.date.getFullYear()) {=0A=
				if (cal.hilitedYear) {=0A=
					Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
				}=0A=
				Calendar.addClass(year, "hilite");=0A=
				cal.hilitedYear =3D year;=0A=
			} else if (cal.hilitedYear) {=0A=
				Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
			}=0A=
		} else if (cal.hilitedYear) {=0A=
			Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
		}=0A=
	}=0A=
	return Calendar.stopEvent(ev);=0A=
};=0A=
=0A=
Calendar.tableMouseDown =3D function (ev) {=0A=
	if (Calendar.getTargetElement(ev) =3D=3D Calendar.getElement(ev)) {=0A=
		return Calendar.stopEvent(ev);=0A=
	}=0A=
};=0A=
=0A=
Calendar.calDragIt =3D function (ev) {=0A=
	var cal =3D Calendar._C;=0A=
	if (!(cal && cal.dragging)) {=0A=
		return false;=0A=
	}=0A=
	var posX;=0A=
	var posY;=0A=
	if (Calendar.is_ie) {=0A=
		posY =3D window.event.clientY + document.body.scrollTop;=0A=
		posX =3D window.event.clientX + document.body.scrollLeft;=0A=
	} else {=0A=
		posX =3D ev.pageX;=0A=
		posY =3D ev.pageY;=0A=
	}=0A=
	cal.hideShowCovered();=0A=
	var st =3D cal.element.style;=0A=
	st.left =3D (posX - cal.xOffs) + "px";=0A=
	st.top =3D (posY - cal.yOffs) + "px";=0A=
	return Calendar.stopEvent(ev);=0A=
};=0A=
=0A=
Calendar.calDragEnd =3D function (ev) {=0A=
	var cal =3D Calendar._C;=0A=
	if (!cal) {=0A=
		return false;=0A=
	}=0A=
	cal.dragging =3D false;=0A=
	with (Calendar) {=0A=
		removeEvent(document, "mousemove", calDragIt);=0A=
		removeEvent(document, "mouseup", calDragEnd);=0A=
		tableMouseUp(ev);=0A=
	}=0A=
	cal.hideShowCovered();=0A=
};=0A=
=0A=
Calendar.dayMouseDown =3D function(ev) {=0A=
	var el =3D Calendar.getElement(ev);=0A=
	if (el.disabled) {=0A=
		return false;=0A=
	}=0A=
	var cal =3D el.calendar;=0A=
	cal.activeDiv =3D el;=0A=
	Calendar._C =3D cal;=0A=
	if (el.navtype !=3D 300) with (Calendar) {=0A=
		if (el.navtype =3D=3D 50) {=0A=
			el._current =3D el.innerHTML;=0A=
			addEvent(document, "mousemove", tableMouseOver);=0A=
		} else=0A=
			addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", =
tableMouseOver);=0A=
		addClass(el, "hilite active");=0A=
		addEvent(document, "mouseup", tableMouseUp);=0A=
	} else if (cal.isPopup) {=0A=
		cal._dragStart(ev);=0A=
	}=0A=
	if (el.navtype =3D=3D -1 || el.navtype =3D=3D 1) {=0A=
		if (cal.timeout) clearTimeout(cal.timeout);=0A=
		cal.timeout =3D setTimeout("Calendar.showMonthsCombo()", 250);=0A=
	} else if (el.navtype =3D=3D -2 || el.navtype =3D=3D 2) {=0A=
		if (cal.timeout) clearTimeout(cal.timeout);=0A=
		cal.timeout =3D setTimeout((el.navtype > 0) ? =
"Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);=0A=
	} else {=0A=
		cal.timeout =3D null;=0A=
	}=0A=
	return Calendar.stopEvent(ev);=0A=
};=0A=
=0A=
Calendar.dayMouseDblClick =3D function(ev) {=0A=
	Calendar.cellClick(Calendar.getElement(ev), ev || window.event);=0A=
	if (Calendar.is_ie) {=0A=
		document.selection.empty();=0A=
	}=0A=
};=0A=
=0A=
Calendar.dayMouseOver =3D function(ev) {=0A=
	var el =3D Calendar.getElement(ev);=0A=
	if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {=0A=
		return false;=0A=
	}=0A=
	if (el.ttip) {=0A=
		if (el.ttip.substr(0, 1) =3D=3D "_") {=0A=
			el.ttip =3D el.caldate.print(el.calendar.ttDateFormat) + =
el.ttip.substr(1);=0A=
		}=0A=
		el.calendar.tooltips.innerHTML =3D el.ttip;=0A=
	}=0A=
	if (el.navtype !=3D 300) {=0A=
		Calendar.addClass(el, "hilite");=0A=
		if (el.caldate) {=0A=
			Calendar.addClass(el.parentNode, "rowhilite");=0A=
		}=0A=
	}=0A=
	return Calendar.stopEvent(ev);=0A=
};=0A=
=0A=
Calendar.dayMouseOut =3D function(ev) {=0A=
	with (Calendar) {=0A=
		var el =3D getElement(ev);=0A=
		if (isRelated(el, ev) || _C || el.disabled)=0A=
			return false;=0A=
		removeClass(el, "hilite");=0A=
		if (el.caldate)=0A=
			removeClass(el.parentNode, "rowhilite");=0A=
		if (el.calendar)=0A=
			el.calendar.tooltips.innerHTML =3D _TT["SEL_DATE"];=0A=
		return stopEvent(ev);=0A=
	}=0A=
};=0A=
=0A=
/**=0A=
 *  A generic "click" handler :) handles all types of buttons defined in =
this=0A=
 *  calendar.=0A=
 */=0A=
Calendar.cellClick =3D function(el, ev) {=0A=
	var cal =3D el.calendar;=0A=
	var closing =3D false;=0A=
	var newdate =3D false;=0A=
	var date =3D null;=0A=
	if (typeof el.navtype =3D=3D "undefined") {=0A=
		if (cal.currentDateEl) {=0A=
			Calendar.removeClass(cal.currentDateEl, "selected");=0A=
			Calendar.addClass(el, "selected");=0A=
			closing =3D (cal.currentDateEl =3D=3D el);=0A=
			if (!closing) {=0A=
				cal.currentDateEl =3D el;=0A=
			}=0A=
		}=0A=
		cal.date.setDateOnly(el.caldate);=0A=
		date =3D cal.date;=0A=
		var other_month =3D !(cal.dateClicked =3D !el.otherMonth);=0A=
		if (!other_month && !cal.currentDateEl)=0A=
			cal._toggleMultipleDate(new CalendarDateObject(date));=0A=
		else=0A=
			newdate =3D !el.disabled;=0A=
		// a date was clicked=0A=
		if (other_month)=0A=
			cal._init(cal.firstDayOfWeek, date);=0A=
	} else {=0A=
		if (el.navtype =3D=3D 200) {=0A=
			Calendar.removeClass(el, "hilite");=0A=
			cal.callCloseHandler();=0A=
			return;=0A=
		}=0A=
		date =3D new CalendarDateObject(cal.date);=0A=
		if (el.navtype =3D=3D 0)=0A=
			date.setDateOnly(new CalendarDateObject()); // TODAY=0A=
		// unless "today" was clicked, we assume no date was clicked so=0A=
		// the selected handler will know not to close the calenar when=0A=
		// in single-click mode.=0A=
		// cal.dateClicked =3D (el.navtype =3D=3D 0);=0A=
		cal.dateClicked =3D false;=0A=
		var year =3D date.getFullYear();=0A=
		var mon =3D date.getMonth();=0A=
		function setMonth(m) {=0A=
			var day =3D date.getDate();=0A=
			var max =3D date.getMonthDays(m);=0A=
			if (day > max) {=0A=
				date.setDate(max);=0A=
			}=0A=
			date.setMonth(m);=0A=
		};=0A=
		switch (el.navtype) {=0A=
		    case 400:=0A=
			Calendar.removeClass(el, "hilite");=0A=
			var text =3D Calendar._TT["ABOUT"];=0A=
			if (typeof text !=3D "undefined") {=0A=
				text +=3D cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";=0A=
			} else {=0A=
				// FIXME: this should be removed as soon as lang files get updated!=0A=
				text =3D "Help and about box text is not translated into this =
language.\n" +=0A=
					"If you know this language and you feel generous please update\n" +=0A=
					"the corresponding file in \"lang\" subdir to match =
calendar-en.js\n" +=0A=
					"and send it back to <mihai_bazon@yahoo.com> to get it into the =
distribution  ;-)\n\n" +=0A=
					"Thank you!\n" +=0A=
					"http://dynarch.com/mishoo/calendar.epl\n";=0A=
			}=0A=
			alert(text);=0A=
			return;=0A=
		    case -2:=0A=
			if (year > cal.minYear) {=0A=
				date.setFullYear(year - 1);=0A=
			}=0A=
			break;=0A=
		    case -1:=0A=
			if (mon > 0) {=0A=
				setMonth(mon - 1);=0A=
			} else if (year-- > cal.minYear) {=0A=
				date.setFullYear(year);=0A=
				setMonth(11);=0A=
			}=0A=
			break;=0A=
		    case 1:=0A=
			if (mon < 11) {=0A=
				setMonth(mon + 1);=0A=
			} else if (year < cal.maxYear) {=0A=
				date.setFullYear(year + 1);=0A=
				setMonth(0);=0A=
			}=0A=
			break;=0A=
		    case 2:=0A=
			if (year < cal.maxYear) {=0A=
				date.setFullYear(year + 1);=0A=
			}=0A=
			break;=0A=
		    case 100:=0A=
			cal.setFirstDayOfWeek(el.fdow);=0A=
			return;=0A=
		    case 50:=0A=
			var range =3D el._range;=0A=
			var current =3D el.innerHTML;=0A=
			for (var i =3D range.length; --i >=3D 0;)=0A=
				if (range[i] =3D=3D current)=0A=
					break;=0A=
			if (ev && ev.shiftKey) {=0A=
				if (--i < 0)=0A=
					i =3D range.length - 1;=0A=
			} else if ( ++i >=3D range.length )=0A=
				i =3D 0;=0A=
			var newval =3D range[i];=0A=
			el.innerHTML =3D newval;=0A=
			cal.onUpdateTime();=0A=
			return;=0A=
		    case 0:=0A=
			// TODAY will bring us here=0A=
			if ((typeof cal.getDateStatus =3D=3D "function") &&=0A=
			    cal.getDateStatus(date, date.getFullYear(), date.getMonth(), =
date.getDate())) {=0A=
				return false;=0A=
			}=0A=
			break;=0A=
		}=0A=
		if (!date.equalsTo(cal.date)) {=0A=
			cal.setDate(date);=0A=
			newdate =3D true;=0A=
		} else if (el.navtype =3D=3D 0)=0A=
			newdate =3D closing =3D true;=0A=
	}=0A=
	if (newdate) {=0A=
		ev && cal.callHandler();=0A=
	}=0A=
	if (closing) {=0A=
		Calendar.removeClass(el, "hilite");=0A=
		ev && cal.callCloseHandler();=0A=
	}=0A=
};=0A=
=0A=
// END: CALENDAR STATIC FUNCTIONS=0A=
=0A=
// BEGIN: CALENDAR OBJECT FUNCTIONS=0A=
=0A=
/**=0A=
 *  This function creates the calendar inside the given parent.  If _par =
is=0A=
 *  null than it creates a popup calendar inside the BODY element.  If =
_par is=0A=
 *  an element, be it BODY, then it creates a non-popup calendar (still=0A=
 *  hidden).  Some properties need to be set before calling this =
function.=0A=
 */=0A=
Calendar.prototype.create =3D function (_par) {=0A=
	var parent =3D null;=0A=
	if (! _par) {=0A=
		// default parent is the document body, in which case we create=0A=
		// a popup calendar.=0A=
		parent =3D document.getElementsByTagName("body")[0];=0A=
		this.isPopup =3D true;=0A=
	} else {=0A=
		parent =3D _par;=0A=
		this.isPopup =3D false;=0A=
	}=0A=
	this.date =3D this.dateStr ? new CalendarDateObject(this.dateStr) : new =
CalendarDateObject();=0A=
=0A=
	var table =3D Calendar.createElement("table");=0A=
	this.table =3D table;=0A=
	table.cellSpacing =3D 0;=0A=
	table.cellPadding =3D 0;=0A=
	table.calendar =3D this;=0A=
	Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);=0A=
=0A=
	var div =3D Calendar.createElement("div");=0A=
	this.element =3D div;=0A=
	div.className =3D "calendar";=0A=
	if (this.isPopup) {=0A=
		div.style.position =3D "absolute";=0A=
		div.style.display =3D "none";=0A=
	}=0A=
	div.appendChild(table);=0A=
=0A=
	var thead =3D Calendar.createElement("thead", table);=0A=
	var cell =3D null;=0A=
	var row =3D null;=0A=
=0A=
	var cal =3D this;=0A=
	var hh =3D function (text, cs, navtype) {=0A=
		cell =3D Calendar.createElement("td", row);=0A=
		cell.colSpan =3D cs;=0A=
		cell.className =3D "button";=0A=
		if (navtype !=3D 0 && Math.abs(navtype) <=3D 2)=0A=
			cell.className +=3D " nav";=0A=
		Calendar._add_evs(cell);=0A=
		cell.calendar =3D cal;=0A=
		cell.navtype =3D navtype;=0A=
		cell.innerHTML =3D "<div unselectable=3D'on'>" + text + "</div>";=0A=
		return cell;=0A=
	};=0A=
=0A=
	row =3D Calendar.createElement("tr", thead);=0A=
	var title_length =3D 6;=0A=
	(this.isPopup) && --title_length;=0A=
	(this.weekNumbers) && ++title_length;=0A=
=0A=
	hh("?", 1, 400).ttip =3D Calendar._TT["INFO"];=0A=
	this.title =3D hh("", title_length, 300);=0A=
	this.title.className =3D "title";=0A=
	if (this.isPopup) {=0A=
		this.title.ttip =3D Calendar._TT["DRAG_TO_MOVE"];=0A=
		this.title.style.cursor =3D "move";=0A=
		hh("&#x00d7;", 1, 200).ttip =3D Calendar._TT["CLOSE"];=0A=
	}=0A=
=0A=
	row =3D Calendar.createElement("tr", thead);=0A=
	row.className =3D "headrow";=0A=
=0A=
	this._nav_py =3D hh("&#x00ab;", 1, -2);=0A=
	this._nav_py.ttip =3D Calendar._TT["PREV_YEAR"];=0A=
=0A=
	this._nav_pm =3D hh("&#x2039;", 1, -1);=0A=
	this._nav_pm.ttip =3D Calendar._TT["PREV_MONTH"];=0A=
=0A=
	this._nav_now =3D hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, =
0);=0A=
	this._nav_now.ttip =3D Calendar._TT["GO_TODAY"];=0A=
=0A=
	this._nav_nm =3D hh("&#x203a;", 1, 1);=0A=
	this._nav_nm.ttip =3D Calendar._TT["NEXT_MONTH"];=0A=
=0A=
	this._nav_ny =3D hh("&#x00bb;", 1, 2);=0A=
	this._nav_ny.ttip =3D Calendar._TT["NEXT_YEAR"];=0A=
=0A=
	// day names=0A=
	row =3D Calendar.createElement("tr", thead);=0A=
	row.className =3D "daynames";=0A=
	if (this.weekNumbers) {=0A=
		cell =3D Calendar.createElement("td", row);=0A=
		cell.className =3D "name wn";=0A=
		cell.innerHTML =3D Calendar._TT["WK"];=0A=
	}=0A=
	for (var i =3D 7; i > 0; --i) {=0A=
		cell =3D Calendar.createElement("td", row);=0A=
		if (!i) {=0A=
			cell.navtype =3D 100;=0A=
			cell.calendar =3D this;=0A=
			Calendar._add_evs(cell);=0A=
		}=0A=
	}=0A=
	this.firstdayname =3D (this.weekNumbers) ? row.firstChild.nextSibling : =
row.firstChild;=0A=
	this._displayWeekdays();=0A=
=0A=
	var tbody =3D Calendar.createElement("tbody", table);=0A=
	this.tbody =3D tbody;=0A=
=0A=
	for (i =3D 6; i > 0; --i) {=0A=
		row =3D Calendar.createElement("tr", tbody);=0A=
		if (this.weekNumbers) {=0A=
			cell =3D Calendar.createElement("td", row);=0A=
		}=0A=
		for (var j =3D 7; j > 0; --j) {=0A=
			cell =3D Calendar.createElement("td", row);=0A=
			cell.calendar =3D this;=0A=
			Calendar._add_evs(cell);=0A=
		}=0A=
	}=0A=
=0A=
	if (this.showsTime) {=0A=
		row =3D Calendar.createElement("tr", tbody);=0A=
		row.className =3D "time";=0A=
=0A=
		cell =3D Calendar.createElement("td", row);=0A=
		cell.className =3D "time";=0A=
		cell.colSpan =3D 2;=0A=
		cell.innerHTML =3D Calendar._TT["TIME"] || "&nbsp;";=0A=
=0A=
		cell =3D Calendar.createElement("td", row);=0A=
		cell.className =3D "time";=0A=
		cell.colSpan =3D this.weekNumbers ? 4 : 3;=0A=
=0A=
		(function(){=0A=
			function makeTimePart(className, init, range_start, range_end) {=0A=
				var part =3D Calendar.createElement("span", cell);=0A=
				part.className =3D className;=0A=
				part.innerHTML =3D init;=0A=
				part.calendar =3D cal;=0A=
				part.ttip =3D Calendar._TT["TIME_PART"];=0A=
				part.navtype =3D 50;=0A=
				part._range =3D [];=0A=
				if (typeof range_start !=3D "number")=0A=
					part._range =3D range_start;=0A=
				else {=0A=
					for (var i =3D range_start; i <=3D range_end; ++i) {=0A=
						var txt;=0A=
						if (i < 10 && range_end >=3D 10) txt =3D '0' + i;=0A=
						else txt =3D '' + i;=0A=
						part._range[part._range.length] =3D txt;=0A=
					}=0A=
				}=0A=
				Calendar._add_evs(part);=0A=
				return part;=0A=
			};=0A=
			var hrs =3D cal.date.getHours();=0A=
			var mins =3D cal.date.getMinutes();=0A=
			var t12 =3D !cal.time24;=0A=
			var pm =3D (hrs > 12);=0A=
			if (t12 && pm) hrs -=3D 12;=0A=
			var H =3D makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);=0A=
			var span =3D Calendar.createElement("span", cell);=0A=
			span.innerHTML =3D ":";=0A=
			span.className =3D "colon";=0A=
			var M =3D makeTimePart("minute", mins, 0, 59);=0A=
			var AP =3D null;=0A=
			cell =3D Calendar.createElement("td", row);=0A=
			cell.className =3D "time";=0A=
			cell.colSpan =3D 2;=0A=
			if (t12)=0A=
				AP =3D makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);=0A=
			else=0A=
				cell.innerHTML =3D "&nbsp;";=0A=
=0A=
			cal.onSetTime =3D function() {=0A=
				var pm, hrs =3D this.date.getHours(),=0A=
					mins =3D this.date.getMinutes();=0A=
				if (t12) {=0A=
					pm =3D (hrs >=3D 12);=0A=
					if (pm) hrs -=3D 12;=0A=
					if (hrs =3D=3D 0) hrs =3D 12;=0A=
					AP.innerHTML =3D pm ? "pm" : "am";=0A=
				}=0A=
				H.innerHTML =3D (hrs < 10) ? ("0" + hrs) : hrs;=0A=
				M.innerHTML =3D (mins < 10) ? ("0" + mins) : mins;=0A=
			};=0A=
=0A=
			cal.onUpdateTime =3D function() {=0A=
				var date =3D this.date;=0A=
				var h =3D parseInt(H.innerHTML, 10);=0A=
				if (t12) {=0A=
					if (/pm/i.test(AP.innerHTML) && h < 12)=0A=
						h +=3D 12;=0A=
					else if (/am/i.test(AP.innerHTML) && h =3D=3D 12)=0A=
						h =3D 0;=0A=
				}=0A=
				var d =3D date.getDate();=0A=
				var m =3D date.getMonth();=0A=
				var y =3D date.getFullYear();=0A=
				date.setHours(h);=0A=
				date.setMinutes(parseInt(M.innerHTML, 10));=0A=
				date.setFullYear(y);=0A=
				date.setMonth(m);=0A=
				date.setDate(d);=0A=
				this.dateClicked =3D false;=0A=
				this.callHandler();=0A=
			};=0A=
		})();=0A=
	} else {=0A=
		this.onSetTime =3D this.onUpdateTime =3D function() {};=0A=
	}=0A=
=0A=
	var tfoot =3D Calendar.createElement("tfoot", table);=0A=
=0A=
	row =3D Calendar.createElement("tr", tfoot);=0A=
	row.className =3D "footrow";=0A=
=0A=
	cell =3D hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);=0A=
	cell.className =3D "ttip";=0A=
	if (this.isPopup) {=0A=
		cell.ttip =3D Calendar._TT["DRAG_TO_MOVE"];=0A=
		cell.style.cursor =3D "move";=0A=
	}=0A=
	this.tooltips =3D cell;=0A=
=0A=
	div =3D Calendar.createElement("div", this.element);=0A=
	this.monthsCombo =3D div;=0A=
	div.className =3D "combo";=0A=
	for (i =3D 0; i < Calendar._MN.length; ++i) {=0A=
		var mn =3D Calendar.createElement("div");=0A=
		mn.className =3D Calendar.is_ie ? "label-IEfix" : "label";=0A=
		mn.month =3D i;=0A=
		mn.innerHTML =3D Calendar._SMN[i];=0A=
		div.appendChild(mn);=0A=
	}=0A=
=0A=
	div =3D Calendar.createElement("div", this.element);=0A=
	this.yearsCombo =3D div;=0A=
	div.className =3D "combo";=0A=
	for (i =3D 12; i > 0; --i) {=0A=
		var yr =3D Calendar.createElement("div");=0A=
		yr.className =3D Calendar.is_ie ? "label-IEfix" : "label";=0A=
		div.appendChild(yr);=0A=
	}=0A=
=0A=
	this._init(this.firstDayOfWeek, this.date);=0A=
	parent.appendChild(this.element);=0A=
};=0A=
=0A=
/** keyboard navigation, only for popup calendars */=0A=
Calendar._keyEvent =3D function(ev) {=0A=
	var cal =3D window._dynarch_popupCalendar;=0A=
	if (!cal || cal.multiple)=0A=
		return false;=0A=
	(Calendar.is_ie) && (ev =3D window.event);=0A=
	var act =3D (Calendar.is_ie || ev.type =3D=3D "keypress"),=0A=
		K =3D ev.keyCode;=0A=
	if (ev.ctrlKey) {=0A=
		switch (K) {=0A=
		    case 37: // KEY left=0A=
			act && Calendar.cellClick(cal._nav_pm);=0A=
			break;=0A=
		    case 38: // KEY up=0A=
			act && Calendar.cellClick(cal._nav_py);=0A=
			break;=0A=
		    case 39: // KEY right=0A=
			act && Calendar.cellClick(cal._nav_nm);=0A=
			break;=0A=
		    case 40: // KEY down=0A=
			act && Calendar.cellClick(cal._nav_ny);=0A=
			break;=0A=
		    default:=0A=
			return false;=0A=
		}=0A=
	} else switch (K) {=0A=
	    case 32: // KEY space (now)=0A=
		Calendar.cellClick(cal._nav_now);=0A=
		break;=0A=
	    case 27: // KEY esc=0A=
		act && cal.callCloseHandler();=0A=
		break;=0A=
	    case 37: // KEY left=0A=
	    case 38: // KEY up=0A=
	    case 39: // KEY right=0A=
	    case 40: // KEY down=0A=
		if (act) {=0A=
			var prev, x, y, ne, el, step;=0A=
			prev =3D K =3D=3D 37 || K =3D=3D 38;=0A=
			step =3D (K =3D=3D 37 || K =3D=3D 39) ? 1 : 7;=0A=
			function setVars() {=0A=
				el =3D cal.currentDateEl;=0A=
				var p =3D el.pos;=0A=
				x =3D p & 15;=0A=
				y =3D p >> 4;=0A=
				ne =3D cal.ar_days[y][x];=0A=
			};setVars();=0A=
			function prevMonth() {=0A=
				var date =3D new CalendarDateObject(cal.date);=0A=
				date.setDate(date.getDate() - step);=0A=
				cal.setDate(date);=0A=
			};=0A=
			function nextMonth() {=0A=
				var date =3D new CalendarDateObject(cal.date);=0A=
				date.setDate(date.getDate() + step);=0A=
				cal.setDate(date);=0A=
			};=0A=
			while (1) {=0A=
				switch (K) {=0A=
				    case 37: // KEY left=0A=
					if (--x >=3D 0)=0A=
						ne =3D cal.ar_days[y][x];=0A=
					else {=0A=
						x =3D 6;=0A=
						K =3D 38;=0A=
						continue;=0A=
					}=0A=
					break;=0A=
				    case 38: // KEY up=0A=
					if (--y >=3D 0)=0A=
						ne =3D cal.ar_days[y][x];=0A=
					else {=0A=
						prevMonth();=0A=
						setVars();=0A=
					}=0A=
					break;=0A=
				    case 39: // KEY right=0A=
					if (++x < 7)=0A=
						ne =3D cal.ar_days[y][x];=0A=
					else {=0A=
						x =3D 0;=0A=
						K =3D 40;=0A=
						continue;=0A=
					}=0A=
					break;=0A=
				    case 40: // KEY down=0A=
					if (++y < cal.ar_days.length)=0A=
						ne =3D cal.ar_days[y][x];=0A=
					else {=0A=
						nextMonth();=0A=
						setVars();=0A=
					}=0A=
					break;=0A=
				}=0A=
				break;=0A=
			}=0A=
			if (ne) {=0A=
				if (!ne.disabled)=0A=
					Calendar.cellClick(ne);=0A=
				else if (prev)=0A=
					prevMonth();=0A=
				else=0A=
					nextMonth();=0A=
			}=0A=
		}=0A=
		break;=0A=
	    case 13: // KEY enter=0A=
		if (act)=0A=
			Calendar.cellClick(cal.currentDateEl, ev);=0A=
		break;=0A=
	    default:=0A=
		return false;=0A=
	}=0A=
	return Calendar.stopEvent(ev);=0A=
};=0A=
=0A=
/**=0A=
 *  (RE)Initializes the calendar to the given date and firstDayOfWeek=0A=
 */=0A=
Calendar.prototype._init =3D function (firstDayOfWeek, date) {=0A=
	var today =3D new CalendarDateObject(),=0A=
		TY =3D today.getFullYear(),=0A=
		TM =3D today.getMonth(),=0A=
		TD =3D today.getDate();=0A=
	this.table.style.visibility =3D "hidden";=0A=
	var year =3D date.getFullYear();=0A=
	if (year < this.minYear) {=0A=
		year =3D this.minYear;=0A=
		date.setFullYear(year);=0A=
	} else if (year > this.maxYear) {=0A=
		year =3D this.maxYear;=0A=
		date.setFullYear(year);=0A=
	}=0A=
	this.firstDayOfWeek =3D firstDayOfWeek;=0A=
	this.date =3D new CalendarDateObject(date);=0A=
	var month =3D date.getMonth();=0A=
	var mday =3D date.getDate();=0A=
	var no_days =3D date.getMonthDays();=0A=
=0A=
	// calendar voodoo for computing the first day that would actually be=0A=
	// displayed in the calendar, even if it's from the previous month.=0A=
	// WARNING: this is magic. ;-)=0A=
	date.setDate(1);=0A=
	var day1 =3D (date.getDay() - this.firstDayOfWeek) % 7;=0A=
	if (day1 < 0)=0A=
		day1 +=3D 7;=0A=
	date.setDate(-day1);=0A=
	date.setDate(date.getDate() + 1);=0A=
=0A=
	var row =3D this.tbody.firstChild;=0A=
	var MN =3D Calendar._SMN[month];=0A=
	var ar_days =3D this.ar_days =3D new Array();=0A=
	var weekend =3D Calendar._TT["WEEKEND"];=0A=
	var dates =3D this.multiple ? (this.datesCells =3D {}) : null;=0A=
	for (var i =3D 0; i < 6; ++i, row =3D row.nextSibling) {=0A=
		var cell =3D row.firstChild;=0A=
		if (this.weekNumbers) {=0A=
			cell.className =3D "day wn";=0A=
			cell.innerHTML =3D date.getWeekNumber();=0A=
			cell =3D cell.nextSibling;=0A=
		}=0A=
		row.className =3D "daysrow";=0A=
		var hasdays =3D false, iday, dpos =3D ar_days[i] =3D [];=0A=
		for (var j =3D 0; j < 7; ++j, cell =3D cell.nextSibling, =
date.setDate(iday + 1)) {=0A=
			iday =3D date.getDate();=0A=
			var wday =3D date.getDay();=0A=
			cell.className =3D "day";=0A=
			cell.pos =3D i << 4 | j;=0A=
			dpos[j] =3D cell;=0A=
			var current_month =3D (date.getMonth() =3D=3D month);=0A=
			if (!current_month) {=0A=
				if (this.showsOtherMonths) {=0A=
					cell.className +=3D " othermonth";=0A=
					cell.otherMonth =3D true;=0A=
				} else {=0A=
					cell.className =3D "emptycell";=0A=
					cell.innerHTML =3D "&nbsp;";=0A=
					cell.disabled =3D true;=0A=
					continue;=0A=
				}=0A=
			} else {=0A=
				cell.otherMonth =3D false;=0A=
				hasdays =3D true;=0A=
			}=0A=
			cell.disabled =3D false;=0A=
			cell.innerHTML =3D this.getDateText ? this.getDateText(date, iday) : =
iday;=0A=
			if (dates)=0A=
				dates[date.print("%Y%m%d")] =3D cell;=0A=
			if (this.getDateStatus) {=0A=
				var status =3D this.getDateStatus(date, year, month, iday);=0A=
				if (this.getDateToolTip) {=0A=
					var toolTip =3D this.getDateToolTip(date, year, month, iday);=0A=
					if (toolTip)=0A=
						cell.title =3D toolTip;=0A=
				}=0A=
				if (status =3D=3D=3D true) {=0A=
					cell.className +=3D " disabled";=0A=
					cell.disabled =3D true;=0A=
				} else {=0A=
					if (/disabled/i.test(status))=0A=
						cell.disabled =3D true;=0A=
					cell.className +=3D " " + status;=0A=
				}=0A=
			}=0A=
			if (!cell.disabled) {=0A=
				cell.caldate =3D new CalendarDateObject(date);=0A=
				cell.ttip =3D "_";=0A=
				if (!this.multiple && current_month=0A=
				    && iday =3D=3D mday && this.hiliteToday) {=0A=
					cell.className +=3D " selected";=0A=
					this.currentDateEl =3D cell;=0A=
				}=0A=
				if (date.getFullYear() =3D=3D TY &&=0A=
				    date.getMonth() =3D=3D TM &&=0A=
				    iday =3D=3D TD) {=0A=
					cell.className +=3D " today";=0A=
					cell.ttip +=3D Calendar._TT["PART_TODAY"];=0A=
				}=0A=
				if (weekend.indexOf(wday.toString()) !=3D -1)=0A=
					cell.className +=3D cell.otherMonth ? " oweekend" : " weekend";=0A=
			}=0A=
		}=0A=
		if (!(hasdays || this.showsOtherMonths))=0A=
			row.className =3D "emptyrow";=0A=
	}=0A=
	this.title.innerHTML =3D Calendar._MN[month] + ", " + year;=0A=
	this.onSetTime();=0A=
	this.table.style.visibility =3D "visible";=0A=
	this._initMultipleDates();=0A=
	// PROFILE=0A=
	// this.tooltips.innerHTML =3D "Generated in " + ((new =
CalendarDateObject()) - today) + " ms";=0A=
};=0A=
=0A=
Calendar.prototype._initMultipleDates =3D function() {=0A=
	if (this.multiple) {=0A=
		for (var i in this.multiple) {=0A=
			var cell =3D this.datesCells[i];=0A=
			var d =3D this.multiple[i];=0A=
			if (!d)=0A=
				continue;=0A=
			if (cell)=0A=
				cell.className +=3D " selected";=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
Calendar.prototype._toggleMultipleDate =3D function(date) {=0A=
	if (this.multiple) {=0A=
		var ds =3D date.print("%Y%m%d");=0A=
		var cell =3D this.datesCells[ds];=0A=
		if (cell) {=0A=
			var d =3D this.multiple[ds];=0A=
			if (!d) {=0A=
				Calendar.addClass(cell, "selected");=0A=
				this.multiple[ds] =3D date;=0A=
			} else {=0A=
				Calendar.removeClass(cell, "selected");=0A=
				delete this.multiple[ds];=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
Calendar.prototype.setDateToolTipHandler =3D function (unaryFunction) {=0A=
	this.getDateToolTip =3D unaryFunction;=0A=
};=0A=
=0A=
/**=0A=
 *  Calls _init function above for going to a certain date (but only if =
the=0A=
 *  date is different than the currently selected one).=0A=
 */=0A=
Calendar.prototype.setDate =3D function (date) {=0A=
	if (!date.equalsTo(this.date)) {=0A=
		this._init(this.firstDayOfWeek, date);=0A=
	}=0A=
};=0A=
=0A=
/**=0A=
 *  Refreshes the calendar.  Useful if the "disabledHandler" function is=0A=
 *  dynamic, meaning that the list of disabled date can change at =
runtime.=0A=
 *  Just * call this function if you think that the list of disabled =
dates=0A=
 *  should * change.=0A=
 */=0A=
Calendar.prototype.refresh =3D function () {=0A=
	this._init(this.firstDayOfWeek, this.date);=0A=
};=0A=
=0A=
/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for =
Monday, etc.). */=0A=
Calendar.prototype.setFirstDayOfWeek =3D function (firstDayOfWeek) {=0A=
	this._init(firstDayOfWeek, this.date);=0A=
	this._displayWeekdays();=0A=
};=0A=
=0A=
/**=0A=
 *  Allows customization of what dates are enabled.  The "unaryFunction"=0A=
 *  parameter must be a function object that receives the date (as a JS =
Date=0A=
 *  object) and returns a boolean value.  If the returned value is true =
then=0A=
 *  the passed date will be marked as disabled.=0A=
 */=0A=
Calendar.prototype.setDateStatusHandler =3D =
Calendar.prototype.setDisabledHandler =3D function (unaryFunction) {=0A=
	this.getDateStatus =3D unaryFunction;=0A=
};=0A=
=0A=
/** Customization of allowed year range for the calendar. */=0A=
Calendar.prototype.setRange =3D function (a, z) {=0A=
	this.minYear =3D a;=0A=
	this.maxYear =3D z;=0A=
};=0A=
=0A=
/** Calls the first user handler (selectedHandler). */=0A=
Calendar.prototype.callHandler =3D function () {=0A=
	if (this.onSelected) {=0A=
		this.onSelected(this, this.date.print(this.dateFormat));=0A=
	}=0A=
};=0A=
=0A=
/** Calls the second user handler (closeHandler). */=0A=
Calendar.prototype.callCloseHandler =3D function () {=0A=
	if (this.onClose) {=0A=
		this.onClose(this);=0A=
	}=0A=
	this.hideShowCovered();=0A=
};=0A=
=0A=
/** Removes the calendar object from the DOM tree and destroys it. */=0A=
Calendar.prototype.destroy =3D function () {=0A=
	var el =3D this.element.parentNode;=0A=
	el.removeChild(this.element);=0A=
	Calendar._C =3D null;=0A=
	window._dynarch_popupCalendar =3D null;=0A=
};=0A=
=0A=
/**=0A=
 *  Moves the calendar element to a different section in the DOM tree =
(changes=0A=
 *  its parent).=0A=
 */=0A=
Calendar.prototype.reparent =3D function (new_parent) {=0A=
	var el =3D this.element;=0A=
	el.parentNode.removeChild(el);=0A=
	new_parent.appendChild(el);=0A=
};=0A=
=0A=
// This gets called when the user presses a mouse button anywhere in the=0A=
// document, if the calendar is shown.  If the click was outside the open=0A=
// calendar this function closes it.=0A=
Calendar._checkCalendar =3D function(ev) {=0A=
	var calendar =3D window._dynarch_popupCalendar;=0A=
	if (!calendar) {=0A=
		return false;=0A=
	}=0A=
	var el =3D Calendar.is_ie ? Calendar.getElement(ev) : =
Calendar.getTargetElement(ev);=0A=
	for (; el !=3D null && el !=3D calendar.element; el =3D el.parentNode);=0A=
	if (el =3D=3D null) {=0A=
		// calls closeHandler which should hide the calendar.=0A=
		window._dynarch_popupCalendar.callCloseHandler();=0A=
		return Calendar.stopEvent(ev);=0A=
	}=0A=
};=0A=
=0A=
/** Shows the calendar. */=0A=
Calendar.prototype.show =3D function () {=0A=
	var rows =3D this.table.getElementsByTagName("tr");=0A=
	for (var i =3D rows.length; i > 0;) {=0A=
		var row =3D rows[--i];=0A=
		Calendar.removeClass(row, "rowhilite");=0A=
		var cells =3D row.getElementsByTagName("td");=0A=
		for (var j =3D cells.length; j > 0;) {=0A=
			var cell =3D cells[--j];=0A=
			Calendar.removeClass(cell, "hilite");=0A=
			Calendar.removeClass(cell, "active");=0A=
		}=0A=
	}=0A=
	this.element.style.display =3D "block";=0A=
	this.hidden =3D false;=0A=
	if (this.isPopup) {=0A=
		window._dynarch_popupCalendar =3D this;=0A=
		Calendar.addEvent(document, "keydown", Calendar._keyEvent);=0A=
		Calendar.addEvent(document, "keypress", Calendar._keyEvent);=0A=
		Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);=0A=
	}=0A=
	this.hideShowCovered();=0A=
};=0A=
=0A=
/**=0A=
 *  Hides the calendar.  Also removes any "hilite" from the class of any =
TD=0A=
 *  element.=0A=
 */=0A=
Calendar.prototype.hide =3D function () {=0A=
	if (this.isPopup) {=0A=
		Calendar.removeEvent(document, "keydown", Calendar._keyEvent);=0A=
		Calendar.removeEvent(document, "keypress", Calendar._keyEvent);=0A=
		Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);=0A=
	}=0A=
	this.element.style.display =3D "none";=0A=
	this.hidden =3D true;=0A=
	this.hideShowCovered();=0A=
};=0A=
=0A=
/**=0A=
 *  Shows the calendar at a given absolute position (beware that, =
depending on=0A=
 *  the calendar element style -- position property -- this might be =
relative=0A=
 *  to the parent's containing rectangle).=0A=
 */=0A=
Calendar.prototype.showAt =3D function (x, y) {=0A=
	var s =3D this.element.style;=0A=
	s.left =3D x + "px";=0A=
	s.top =3D y + "px";=0A=
	this.show();=0A=
};=0A=
=0A=
/** Shows the calendar near a given element. */=0A=
Calendar.prototype.showAtElement =3D function (el, opts) {=0A=
	var self =3D this;=0A=
	var p =3D Calendar.getAbsolutePos(el);=0A=
	if (!opts || typeof opts !=3D "string") {=0A=
		this.showAt(p.x, p.y + el.offsetHeight);=0A=
		return true;=0A=
	}=0A=
	function fixPosition(box) {=0A=
		if (box.x < 0)=0A=
			box.x =3D 0;=0A=
		if (box.y < 0)=0A=
			box.y =3D 0;=0A=
		var cp =3D document.createElement("div");=0A=
		var s =3D cp.style;=0A=
		s.position =3D "absolute";=0A=
		s.right =3D s.bottom =3D s.width =3D s.height =3D "0px";=0A=
		document.body.appendChild(cp);=0A=
		var br =3D Calendar.getAbsolutePos(cp);=0A=
		document.body.removeChild(cp);=0A=
		if (Calendar.is_ie) {=0A=
			br.y +=3D document.body.scrollTop;=0A=
			br.x +=3D document.body.scrollLeft;=0A=
		} else {=0A=
			br.y +=3D window.scrollY;=0A=
			br.x +=3D window.scrollX;=0A=
		}=0A=
		var tmp =3D box.x + box.width - br.x;=0A=
		if (tmp > 0) box.x -=3D tmp;=0A=
		tmp =3D box.y + box.height - br.y;=0A=
		if (tmp > 0) box.y -=3D tmp;=0A=
	};=0A=
	this.element.style.display =3D "block";=0A=
	Calendar.continuation_for_the_fucking_khtml_browser =3D function() {=0A=
		var w =3D self.element.offsetWidth;=0A=
		var h =3D self.element.offsetHeight;=0A=
		self.element.style.display =3D "none";=0A=
		var valign =3D opts.substr(0, 1);=0A=
		var halign =3D "l";=0A=
		if (opts.length > 1) {=0A=
			halign =3D opts.substr(1, 1);=0A=
		}=0A=
		// vertical alignment=0A=
		switch (valign) {=0A=
		    case "T": p.y -=3D h; break;=0A=
		    case "B": p.y +=3D el.offsetHeight; break;=0A=
		    case "C": p.y +=3D (el.offsetHeight - h) / 2; break;=0A=
		    case "t": p.y +=3D el.offsetHeight - h; break;=0A=
		    case "b": break; // already there=0A=
		}=0A=
		// horizontal alignment=0A=
		switch (halign) {=0A=
		    case "L": p.x -=3D w; break;=0A=
		    case "R": p.x +=3D el.offsetWidth; break;=0A=
		    case "C": p.x +=3D (el.offsetWidth - w) / 2; break;=0A=
		    case "l": p.x +=3D el.offsetWidth - w; break;=0A=
		    case "r": break; // already there=0A=
		}=0A=
		p.width =3D w;=0A=
		p.height =3D h + 40;=0A=
		self.monthsCombo.style.display =3D "none";=0A=
		fixPosition(p);=0A=
		self.showAt(p.x, p.y);=0A=
	};=0A=
	if (Calendar.is_khtml)=0A=
		setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", =
10);=0A=
	else=0A=
		Calendar.continuation_for_the_fucking_khtml_browser();=0A=
};=0A=
=0A=
/** Customizes the date format. */=0A=
Calendar.prototype.setDateFormat =3D function (str) {=0A=
	this.dateFormat =3D str;=0A=
};=0A=
=0A=
/** Customizes the tooltip date format. */=0A=
Calendar.prototype.setTtDateFormat =3D function (str) {=0A=
	this.ttDateFormat =3D str;=0A=
};=0A=
=0A=
/**=0A=
 *  Tries to identify the date represented in a string.  If successful =
it also=0A=
 *  calls this.setDate which moves the calendar to the given date.=0A=
 */=0A=
Calendar.prototype.parseDate =3D function(str, fmt) {=0A=
	if (!fmt)=0A=
		fmt =3D this.dateFormat;=0A=
	this.setDate(Date.parseDate(str, fmt));=0A=
};=0A=
=0A=
Calendar.prototype.hideShowCovered =3D function () {=0A=
	if (!Calendar.is_ie && !Calendar.is_opera)=0A=
		return;=0A=
	function getVisib(obj){=0A=
		var value =3D obj.style.visibility;=0A=
		if (!value) {=0A=
			if (document.defaultView && typeof =
(document.defaultView.getComputedStyle) =3D=3D "function") { // Gecko, =
W3C=0A=
				if (!Calendar.is_khtml)=0A=
					value =3D document.defaultView.=0A=
						getComputedStyle(obj, "").getPropertyValue("visibility");=0A=
				else=0A=
					value =3D '';=0A=
			} else if (obj.currentStyle) { // IE=0A=
				value =3D obj.currentStyle.visibility;=0A=
			} else=0A=
				value =3D '';=0A=
		}=0A=
		return value;=0A=
	};=0A=
=0A=
	var tags =3D new Array("applet", "iframe", "select");=0A=
	var el =3D this.element;=0A=
=0A=
	var p =3D Calendar.getAbsolutePos(el);=0A=
	var EX1 =3D p.x;=0A=
	var EX2 =3D el.offsetWidth + EX1;=0A=
	var EY1 =3D p.y;=0A=
	var EY2 =3D el.offsetHeight + EY1;=0A=
=0A=
	for (var k =3D tags.length; k > 0; ) {=0A=
		var ar =3D document.getElementsByTagName(tags[--k]);=0A=
		var cc =3D null;=0A=
=0A=
		for (var i =3D ar.length; i > 0;) {=0A=
			cc =3D ar[--i];=0A=
=0A=
			p =3D Calendar.getAbsolutePos(cc);=0A=
			var CX1 =3D p.x;=0A=
			var CX2 =3D cc.offsetWidth + CX1;=0A=
			var CY1 =3D p.y;=0A=
			var CY2 =3D cc.offsetHeight + CY1;=0A=
=0A=
			if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 =
< EY1)) {=0A=
				if (!cc.__msh_save_visibility) {=0A=
					cc.__msh_save_visibility =3D getVisib(cc);=0A=
				}=0A=
				cc.style.visibility =3D cc.__msh_save_visibility;=0A=
			} else {=0A=
				if (!cc.__msh_save_visibility) {=0A=
					cc.__msh_save_visibility =3D getVisib(cc);=0A=
				}=0A=
				cc.style.visibility =3D "hidden";=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
/** Internal function; it displays the bar with the names of the =
weekday. */=0A=
Calendar.prototype._displayWeekdays =3D function () {=0A=
	var fdow =3D this.firstDayOfWeek;=0A=
	var cell =3D this.firstdayname;=0A=
	var weekend =3D Calendar._TT["WEEKEND"];=0A=
	for (var i =3D 0; i < 7; ++i) {=0A=
		cell.className =3D "day name";=0A=
		var realday =3D (i + fdow) % 7;=0A=
		if (i) {=0A=
			cell.ttip =3D Calendar._TT["DAY_FIRST"].replace("%s", =
Calendar._DN[realday]);=0A=
			cell.navtype =3D 100;=0A=
			cell.calendar =3D this;=0A=
			cell.fdow =3D realday;=0A=
			Calendar._add_evs(cell);=0A=
		}=0A=
		if (weekend.indexOf(realday.toString()) !=3D -1) {=0A=
			Calendar.addClass(cell, "weekend");=0A=
		}=0A=
		cell.innerHTML =3D Calendar._SDN[(i + fdow) % 7];=0A=
		cell =3D cell.nextSibling;=0A=
	}=0A=
};=0A=
=0A=
/** Internal function.  Hides all combo boxes that might be displayed. */=0A=
Calendar.prototype._hideCombos =3D function () {=0A=
	this.monthsCombo.style.display =3D "none";=0A=
	this.yearsCombo.style.display =3D "none";=0A=
};=0A=
=0A=
/** Internal function.  Starts dragging the element. */=0A=
Calendar.prototype._dragStart =3D function (ev) {=0A=
	if (this.dragging) {=0A=
		return;=0A=
	}=0A=
	this.dragging =3D true;=0A=
	var posX;=0A=
	var posY;=0A=
	if (Calendar.is_ie) {=0A=
		posY =3D window.event.clientY + document.body.scrollTop;=0A=
		posX =3D window.event.clientX + document.body.scrollLeft;=0A=
	} else {=0A=
		posY =3D ev.clientY + window.scrollY;=0A=
		posX =3D ev.clientX + window.scrollX;=0A=
	}=0A=
	var st =3D this.element.style;=0A=
	this.xOffs =3D posX - parseInt(st.left);=0A=
	this.yOffs =3D posY - parseInt(st.top);=0A=
	with (Calendar) {=0A=
		addEvent(document, "mousemove", calDragIt);=0A=
		addEvent(document, "mouseup", calDragEnd);=0A=
	}=0A=
};=0A=
=0A=
// BEGIN: DATE OBJECT PATCHES=0A=
=0A=
/** Adds the number of days array to the Date object. */=0A=
Date._MD =3D new Array(31,28,31,30,31,30,31,31,30,31,30,31);=0A=
=0A=
/** Constants used for time computations */=0A=
Date.SECOND =3D 1000 /* milliseconds */;=0A=
Date.MINUTE =3D 60 * Date.SECOND;=0A=
Date.HOUR   =3D 60 * Date.MINUTE;=0A=
Date.DAY    =3D 24 * Date.HOUR;=0A=
Date.WEEK   =3D  7 * Date.DAY;=0A=
=0A=
Date.parseDate =3D function(str, fmt) {=0A=
	var today =3D new CalendarDateObject();=0A=
	var y =3D 0;=0A=
	var m =3D -1;=0A=
	var d =3D 0;=0A=
=0A=
	// translate date into en_US, because split() cannot parse non-latin =
stuff=0A=
	var a =3D str;=0A=
	var i;=0A=
	for (i =3D 0; i < Calendar._MN.length; i++) {=0A=
		a =3D a.replace(Calendar._MN[i], enUS.m.wide[i]);=0A=
	}=0A=
	for (i =3D 0; i < Calendar._SMN.length; i++) {=0A=
		a =3D a.replace(Calendar._SMN[i], enUS.m.abbr[i]);=0A=
	}=0A=
	a =3D a.replace(Calendar._am, 'am');=0A=
	a =3D a.replace(Calendar._am.toLowerCase(), 'am');=0A=
	a =3D a.replace(Calendar._pm, 'pm');=0A=
	a =3D a.replace(Calendar._pm.toLowerCase(), 'pm');=0A=
=0A=
	a =3D a.split(/\W+/);=0A=
=0A=
	var b =3D fmt.match(/%./g);=0A=
	var i =3D 0, j =3D 0;=0A=
	var hr =3D 0;=0A=
	var min =3D 0;=0A=
	for (i =3D 0; i < a.length; ++i) {=0A=
		if (!a[i])=0A=
			continue;=0A=
		switch (b[i]) {=0A=
		    case "%d":=0A=
		    case "%e":=0A=
			d =3D parseInt(a[i], 10);=0A=
			break;=0A=
=0A=
		    case "%m":=0A=
			m =3D parseInt(a[i], 10) - 1;=0A=
			break;=0A=
=0A=
		    case "%Y":=0A=
		    case "%y":=0A=
			y =3D parseInt(a[i], 10);=0A=
			(y < 100) && (y +=3D (y > 29) ? 1900 : 2000);=0A=
			break;=0A=
=0A=
		    case "%b":=0A=
			for (j =3D 0; j < 12; ++j) {=0A=
				if (enUS.m.abbr[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { m =3D j; break; }=0A=
			}=0A=
			break;=0A=
=0A=
		    case "%B":=0A=
			for (j =3D 0; j < 12; ++j) {=0A=
				if (enUS.m.wide[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { m =3D j; break; }=0A=
			}=0A=
			break;=0A=
=0A=
		    case "%H":=0A=
		    case "%I":=0A=
		    case "%k":=0A=
		    case "%l":=0A=
			hr =3D parseInt(a[i], 10);=0A=
			break;=0A=
=0A=
		    case "%P":=0A=
		    case "%p":=0A=
			if (/pm/i.test(a[i]) && hr < 12)=0A=
				hr +=3D 12;=0A=
			else if (/am/i.test(a[i]) && hr >=3D 12)=0A=
				hr -=3D 12;=0A=
			break;=0A=
=0A=
		    case "%M":=0A=
			min =3D parseInt(a[i], 10);=0A=
			break;=0A=
		}=0A=
	}=0A=
	if (isNaN(y)) y =3D today.getFullYear();=0A=
	if (isNaN(m)) m =3D today.getMonth();=0A=
	if (isNaN(d)) d =3D today.getDate();=0A=
	if (isNaN(hr)) hr =3D today.getHours();=0A=
	if (isNaN(min)) min =3D today.getMinutes();=0A=
	if (y !=3D 0 && m !=3D -1 && d !=3D 0)=0A=
		return new CalendarDateObject(y, m, d, hr, min, 0);=0A=
	y =3D 0; m =3D -1; d =3D 0;=0A=
	for (i =3D 0; i < a.length; ++i) {=0A=
		if (a[i].search(/[a-zA-Z]+/) !=3D -1) {=0A=
			var t =3D -1;=0A=
			for (j =3D 0; j < 12; ++j) {=0A=
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { t =3D j; break; }=0A=
			}=0A=
			if (t !=3D -1) {=0A=
				if (m !=3D -1) {=0A=
					d =3D m+1;=0A=
				}=0A=
				m =3D t;=0A=
			}=0A=
		} else if (parseInt(a[i], 10) <=3D 12 && m =3D=3D -1) {=0A=
			m =3D a[i]-1;=0A=
		} else if (parseInt(a[i], 10) > 31 && y =3D=3D 0) {=0A=
			y =3D parseInt(a[i], 10);=0A=
			(y < 100) && (y +=3D (y > 29) ? 1900 : 2000);=0A=
		} else if (d =3D=3D 0) {=0A=
			d =3D a[i];=0A=
		}=0A=
	}=0A=
	if (y =3D=3D 0)=0A=
		y =3D today.getFullYear();=0A=
	if (m !=3D -1 && d !=3D 0)=0A=
		return new CalendarDateObject(y, m, d, hr, min, 0);=0A=
	return today;=0A=
};=0A=
=0A=
/** Returns the number of days in the current month */=0A=
Date.prototype.getMonthDays =3D function(month) {=0A=
	var year =3D this.getFullYear();=0A=
	if (typeof month =3D=3D "undefined") {=0A=
		month =3D this.getMonth();=0A=
	}=0A=
	if (((0 =3D=3D (year%4)) && ( (0 !=3D (year%100)) || (0 =3D=3D =
(year%400)))) && month =3D=3D 1) {=0A=
		return 29;=0A=
	} else {=0A=
		return Date._MD[month];=0A=
	}=0A=
};=0A=
=0A=
/** Returns the number of day in the year. */=0A=
Date.prototype.getDayOfYear =3D function() {=0A=
	var now =3D new CalendarDateObject(this.getFullYear(), this.getMonth(), =
this.getDate(), 0, 0, 0);=0A=
	var then =3D new CalendarDateObject(this.getFullYear(), 0, 0, 0, 0, 0);=0A=
	var time =3D now - then;=0A=
	return Math.floor(time / Date.DAY);=0A=
};=0A=
=0A=
/** Returns the number of the week in year, as defined in ISO 8601. */=0A=
Date.prototype.getWeekNumber =3D function() {=0A=
	var d =3D new CalendarDateObject(this.getFullYear(), this.getMonth(), =
this.getDate(), 0, 0, 0);=0A=
	var DoW =3D d.getDay();=0A=
	d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu=0A=
	var ms =3D d.valueOf(); // GMT=0A=
	d.setMonth(0);=0A=
	d.setDate(4); // Thu in Week 1=0A=
	return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;=0A=
};=0A=
=0A=
/** Checks date and time equality */=0A=
Date.prototype.equalsTo =3D function(date) {=0A=
	return ((this.getFullYear() =3D=3D date.getFullYear()) &&=0A=
		(this.getMonth() =3D=3D date.getMonth()) &&=0A=
		(this.getDate() =3D=3D date.getDate()) &&=0A=
		(this.getHours() =3D=3D date.getHours()) &&=0A=
		(this.getMinutes() =3D=3D date.getMinutes()));=0A=
};=0A=
=0A=
/** Set only the year, month, date parts (keep existing time) */=0A=
Date.prototype.setDateOnly =3D function(date) {=0A=
	var tmp =3D new CalendarDateObject(date);=0A=
	this.setDate(1);=0A=
	this.setFullYear(tmp.getFullYear());=0A=
	this.setMonth(tmp.getMonth());=0A=
	this.setDate(tmp.getDate());=0A=
};=0A=
=0A=
/** Prints the date in a string according to the given format. */=0A=
Date.prototype.print =3D function (str) {=0A=
	var m =3D this.getMonth();=0A=
	var d =3D this.getDate();=0A=
	var y =3D this.getFullYear();=0A=
	var wn =3D this.getWeekNumber();=0A=
	var w =3D this.getDay();=0A=
	var s =3D {};=0A=
	var hr =3D this.getHours();=0A=
	var pm =3D (hr >=3D 12);=0A=
	var ir =3D (pm) ? (hr - 12) : hr;=0A=
	var dy =3D this.getDayOfYear();=0A=
	if (ir =3D=3D 0)=0A=
		ir =3D 12;=0A=
	var min =3D this.getMinutes();=0A=
	var sec =3D this.getSeconds();=0A=
	s["%a"] =3D Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]=0A=
	s["%A"] =3D Calendar._DN[w]; // full weekday name=0A=
	s["%b"] =3D Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]=0A=
	s["%B"] =3D Calendar._MN[m]; // full month name=0A=
	// FIXME: %c : preferred date and time representation for the current =
locale=0A=
	s["%C"] =3D 1 + Math.floor(y / 100); // the century number=0A=
	s["%d"] =3D (d < 10) ? ("0" + d) : d; // the day of the month (range 01 =
to 31)=0A=
	s["%e"] =3D d; // the day of the month (range 1 to 31)=0A=
	// FIXME: %D : american date style: %m/%d/%y=0A=
	// FIXME: %E, %F, %G, %g, %h (man strftime)=0A=
	s["%H"] =3D (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h =
format)=0A=
	s["%I"] =3D (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h =
format)=0A=
	s["%j"] =3D (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; =
// day of the year (range 001 to 366)=0A=
	s["%k"] =3D hr;		// hour, range 0 to 23 (24h format)=0A=
	s["%l"] =3D ir;		// hour, range 1 to 12 (12h format)=0A=
	s["%m"] =3D (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12=0A=
	s["%M"] =3D (min < 10) ? ("0" + min) : min; // minute, range 00 to 59=0A=
	s["%n"] =3D "\n";		// a newline character=0A=
	s["%p"] =3D pm ? Calendar._pm.toUpperCase() : =
Calendar._am.toUpperCase();=0A=
	s["%P"] =3D pm ? Calendar._pm.toLowerCase() : =
Calendar._am.toLowerCase();=0A=
	// FIXME: %r : the time in am/pm notation %I:%M:%S %p=0A=
	// FIXME: %R : the time in 24-hour notation %H:%M=0A=
	s["%s"] =3D Math.floor(this.getTime() / 1000);=0A=
	s["%S"] =3D (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59=0A=
	s["%t"] =3D "\t";		// a tab character=0A=
	// FIXME: %T : the time in 24-hour notation (%H:%M:%S)=0A=
	s["%U"] =3D s["%W"] =3D s["%V"] =3D (wn < 10) ? ("0" + wn) : wn;=0A=
	s["%u"] =3D w + 1;	// the day of the week (range 1 to 7, 1 =3D MON)=0A=
	s["%w"] =3D w;		// the day of the week (range 0 to 6, 0 =3D SUN)=0A=
	// FIXME: %x : preferred date representation for the current locale =
without the time=0A=
	// FIXME: %X : preferred time representation for the current locale =
without the date=0A=
	s["%y"] =3D ('' + y).substr(2, 2); // year without the century (range =
00 to 99)=0A=
	s["%Y"] =3D y;		// year with the century=0A=
	s["%%"] =3D "%";		// a literal '%' character=0A=
=0A=
	var re =3D /%./g;=0A=
	if (!Calendar.is_ie5 && !Calendar.is_khtml)=0A=
		return str.replace(re, function (par) { return s[par] || par; });=0A=
=0A=
	var a =3D str.match(re);=0A=
	for (var i =3D 0; i < a.length; i++) {=0A=
		var tmp =3D s[a[i]];=0A=
		if (tmp) {=0A=
			re =3D new RegExp(a[i], 'g');=0A=
			str =3D str.replace(re, tmp);=0A=
		}=0A=
	}=0A=
=0A=
	return str;=0A=
};=0A=
=0A=
Date.prototype.__msh_oldSetFullYear =3D Date.prototype.setFullYear;=0A=
Date.prototype.setFullYear =3D function(y) {=0A=
	var d =3D new CalendarDateObject(this);=0A=
	d.__msh_oldSetFullYear(y);=0A=
	if (d.getMonth() !=3D this.getMonth())=0A=
		this.setDate(28);=0A=
	this.__msh_oldSetFullYear(y);=0A=
};=0A=
=0A=
CalendarDateObject.prototype =3D new Date();=0A=
CalendarDateObject.prototype.constructor =3D CalendarDateObject;=0A=
CalendarDateObject.prototype.parent =3D Date.prototype;=0A=
function CalendarDateObject() {=0A=
    var dateObj;=0A=
    if (arguments.length > 1) {=0A=
        dateObj =3D eval("new =
this.parent.constructor("+Array.prototype.slice.call(arguments).join(",")=
+");");=0A=
    } else if (arguments.length > 0) {=0A=
        dateObj =3D new this.parent.constructor(arguments[0]);=0A=
    } else {=0A=
        dateObj =3D new this.parent.constructor();=0A=
        if (typeof(CalendarDateObject._SERVER_TIMZEONE_SECONDS) !=3D =
"undefined") {=0A=
            dateObj.setTime((CalendarDateObject._SERVER_TIMZEONE_SECONDS =
+ dateObj.getTimezoneOffset()*60)*1000);=0A=
        }=0A=
    }=0A=
    return dateObj;=0A=
}=0A=
=0A=
// END: DATE OBJECT PATCHES=0A=
=0A=
=0A=
// global object that remembers the calendar=0A=
window._dynarch_popupCalendar =3D null;=0A=

------=_NextPart_000_0000_01CCDA07.C1F09EE0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.buymatadore.com/js/calendar/calendar-setup.js

/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/=0A=
 * =
-------------------------------------------------------------------------=
--=0A=
 *=0A=
 * The DHTML Calendar=0A=
 *=0A=
 * Details and latest version at:=0A=
 * http://dynarch.com/mishoo/calendar.epl=0A=
 *=0A=
 * This script is distributed under the GNU Lesser General Public =
License.=0A=
 * Read the entire license text here: =
http://www.gnu.org/licenses/lgpl.html=0A=
 *=0A=
 * This file defines helper functions for setting up the calendar.  They =
are=0A=
 * intended to help non-programmers get a working calendar on their site=0A=
 * quickly.  This script should not be seen as part of the calendar.  It =
just=0A=
 * shows you what one can do with the calendar, while in the same time=0A=
 * providing a quick and simple method for setting it up.  If you need=0A=
 * exhaustive customization of the calendar creation process feel free to=0A=
 * modify this code to suit your needs (this is recommended and much =
better=0A=
 * than modifying calendar.js itself).=0A=
 */=0A=
Calendar.setup=3Dfunction(params){function =
param_default(pname,def){if(typeof =
params[pname]=3D=3D"undefined"){params[pname]=3Ddef;}};param_default("inp=
utField",null);param_default("displayArea",null);param_default("button",n=
ull);param_default("eventName","click");param_default("ifFormat","%Y/%m/%=
d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true=
);param_default("disableFunc",null);param_default("dateStatusFunc",params=
["disableFunc"]);param_default("dateText",null);param_default("firstDay",=
null);param_default("align","Br");param_default("range",[1900,2999]);para=
m_default("weekNumbers",true);param_default("flat",null);param_default("f=
latCallback",null);param_default("onSelect",null);param_default("onClose"=
,null);param_default("onUpdate",null);param_default("date",null);param_de=
fault("showsTime",false);param_default("timeFormat","24");param_default("=
electric",true);param_default("step",2);param_default("position",null);pa=
ram_default("cache",false);param_default("showOthers",false);param_defaul=
t("multiple",null);var =
tmp=3D["inputField","displayArea","button"];for(var i in tmp){if(typeof =
params[tmp[i]]=3D=3D"string"){params[tmp[i]]=3Ddocument.getElementById(pa=
rams[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||par=
ams.displayArea||params.button)){alert("Calendar.setup:\n  Nothing to =
setup (no fields found).  Please check your code");return =
false;}function onSelect(cal){var p=3Dcal.params;var =
update=3D(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputFi=
eld.value=3Dcal.date.print(p.ifFormat);if(typeof =
p.inputField.onchange=3D=3D"function")p.inputField.onchange();if(typeof =
fireEvent =3D=3D 'function')fireEvent(p.inputField, =
"change");}if(update&&p.displayArea)p.displayArea.innerHTML=3Dcal.date.pr=
int(p.daFormat);if(update&&typeof =
p.onUpdate=3D=3D"function")p.onUpdate(cal);if(update&&p.flat){if(typeof =
p.flatCallback=3D=3D"function")p.flatCallback(cal);}if(update&&p.singleCl=
ick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=3Dnull){if(=
typeof =
params.flat=3D=3D"string")params.flat=3Ddocument.getElementById(params.fl=
at);if(!params.flat){alert("Calendar.setup:\n  Flat specified but can't =
find parent.");return false;}var cal=3Dnew =
Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.shows=
OtherMonths=3Dparams.showOthers;cal.showsTime=3Dparams.showsTime;cal.time=
24=3D(params.timeFormat=3D=3D"24");cal.params=3Dparams;cal.weekNumbers=3D=
params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setD=
ateStatusHandler(params.dateStatusFunc);cal.getDateText=3Dparams.dateText=
;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputF=
ield&&typeof =
params.inputField.value=3D=3D"string"){cal.parseDate(params.inputField.va=
lue);}cal.create(params.flat);cal.show();return false;}var =
triggerEl=3Dparams.button||params.displayArea||params.inputField;triggerE=
l["on"+params.eventName]=3Dfunction(){var =
dateEl=3Dparams.inputField||params.displayArea;var =
dateFmt=3Dparams.inputField?params.ifFormat:params.daFormat;var =
mustCreate=3Dfalse;var =
cal=3Dwindow.calendar;if(dateEl)params.date=3DDate.parseDate(dateEl.value=
||dateEl.innerHTML,dateFmt);if(!(cal&&params.cache)){window.calendar=3Dca=
l=3Dnew =
Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onC=
lose||function(cal){cal.hide();});cal.showsTime=3Dparams.showsTime;cal.ti=
me24=3D(params.timeFormat=3D=3D"24");cal.weekNumbers=3Dparams.weekNumbers=
;mustCreate=3Dtrue;}else{if(params.date)cal.setDate(params.date);cal.hide=
();}if(params.multiple){cal.multiple=3D{};for(var =
i=3Dparams.multiple.length;--i>=3D0;){var d=3Dparams.multiple[i];var =
ds=3Dd.print("%Y%m%d");cal.multiple[ds]=3Dd;}}cal.showsOtherMonths=3Dpara=
ms.showOthers;cal.yearStep=3Dparams.step;cal.setRange(params.range[0],par=
ams.range[1]);cal.params=3Dparams;cal.setDateStatusHandler(params.dateSta=
tusFunc);cal.getDateText=3Dparams.dateText;cal.setDateFormat(dateFmt);if(=
mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtEleme=
nt(params.button||params.displayArea||params.inputField,params.align);els=
e cal.showAt(params.position[0],params.position[1]);return =
false;};return cal;};
------=_NextPart_000_0000_01CCDA07.C1F09EE0--

