From: <Saved by Windows Internet Explorer 7>
Subject: TofinoAuctions.com - Markham Gras 2012 PTA Auction - Simplified Auction Management
Date: Mon, 30 Jan 2012 08:32:12 -0800
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_0000_01CCDF29.AA133360"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://markham.tofinoauctions.com/2012auction/images/tofino_banner.gif?1313468621

R0lGODlh5ABJANUAAAAAAPiQAP/KgJdMAFAvAJ5RAP////+tLc95ACATAP/er/+9YIBLAMFpAP/r
z/+cEN+CAEAlAP+2UKxbAHBBABAJAP/Xn++MAP/47/+wQDAcAP/DcP+jGmYzAP/MZv/lv7NfAMhu
AI9UAP+ZAP/y359dANV4AOOCAP/FWf/Rj69mAP+wM85zAL9wAKVWAP++TLpkANx9AP+0Of+mIAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAB4ALAAAAADkAEkAAAb/QI/Q
85qNjsikcslsOp/QqHRKrVqv2KzycUANv0ateEwum8/o8erreaTf8Lh8HLjMm7Nh+M7v+88XLC4D
hAMFDXZ+MkR/jY6PUQENhZSFIX8oHJCbnI4XBZWhAxMBfQedqKlxF6KtE31uqrKzWgGgraKXtHIq
ImUIJQwMJRC7fZO4rYnGaAgAAL5ZEBQVz9YAEQjMq8m4MNsjLeLixVkqzwRZDM8JIi0qBNct4GnI
3aKlqhAlHRrX/wASRCDAwN08KPEAlLhywR80JQkD0kNz616oE6lURADIseOzChEGChu5EdsVBNUU
LnFmTdtEMqwsimLRCUFJayFHjiQQMoJD/48AEyy0AiFltCXyXpIxITMXpxLWNIhwGWWdNQrCKPSM
0GEY1SoNn0VwElUpmRBNQ8XYZDXCQSo/O8ChYK0cE40UlpnNYi8tIb1JLpgIAWKC4QYhTuQTA1Ul
0Wsq3rSwJnfvnQl+KTExMSgZCBNaijq2IsJaBTg37VqOgznzgG9JYlS8VwDjlQ4AKGSJ+6YxgMqr
5cBwPWBZgOGZdVG5UKEC4CkQIL+5+TY4HLSZGyAJ0Nk17CnngFuh+1GytQTW5zD1+5078UJrp6wb
eiUB5Te4nzFILydmU+1IdPfeAItBsVF1VLD0TGRoXHCNavylMVs3oCHR14DKGQgAglOQB//AaWmU
9owGljFAEAPi7AcHCzJleMKAlRQwBW7iUWHfMzWW8dNRZo3FQAdYxRGARTIm0RqMhTzHRGMi2AEB
hE0oCACDZ0RX12o+YpVOHNglU+ERLyJJCU1RMPdPBVAu4SGIZYojhW/oPXFBC0oigQCHSUDQwlcJ
tgDhQuIAM4eAougFgpiUZPiEVdfQ58SNv0FxAQOQYlPdpDr9pIFOI2kVQUpbKgFBBymNtUQJPyXA
pxMtRPQhA3XO4V8rSQyJqCVU5HflE1JSyQQDoP5oDX0iAmVsqEgwao0SCPxkDbJRlpQAVjdqEGt/
ySyz3q0DkDkFqgBogKcSazpxQUkVUGX/FZpHaNTTTyBttVWljob1D7IlVAOrlc9AkS+OSJiZGySz
VuLthWJeOwakOR5hb7p5WqMiuc+yatoyYQk12YLJBkTVNU/4VmN+zhFMKCFFjnBkCIlcgFxmKb/R
KxP2boiUWEz85KgSxQLXUAXRWBnnCLhZiwS/pi6J0xKMjjvGCS8bAkN8SHSZ6BGYwVCgwyff8+Ub
5eZ8FRMgi/rgoy0hoYIGVJGn2wjrGI1EsRMrcc5HUDJadxkXHBlKbYFF/ZfKXythS1ouzMEwEx4m
8By/AJxaVpSTN3FjMVDJjcRPq44g2jM8IqHr3mNs66XhJhyapMIFd6OwGDMrsfEzO7db/3YSur7N
hK61qz1iOAEBNvvQStxEfBI/ka6F6d1QvcQFigWggAEffCBABs8T+boYYSuRahMekqhESjY3QX6s
+RHT3KoRhW77sDRLx7df18JwwgMYGKC/ASQIEIvDE6oECLb2hsUpwTej8d59kqAgNkkOYE0wk3P8
4asjQE5JkDqe73ZFhgDeQ0kXGARGMrC//WHAf0ngTChAYJs5xA5552kC5HZWLGglISJOa0xXAKA8
DzXsbrRrgq40mAXmNYVl2+mSbSxQwv2R4BRKOIEUFeOH7tnpGsobQbEAAKGI9M5zMXRCSeJGM/Kl
KSIlYwL5GoYF1RHHBYapBBJm0EQTLv8gFQZMgoe4aLnKIcGMTWCU+452HgB0zjdJC8w12IjACmqB
W4RIHBIcUMf93ZETUuIQpMS3hNklcAQKIuIRIBUrZWXxJ44cQSObYLwzQHIAADoCEyupPwlwonFL
gNwgiRbGJBRLd7JbYB/ZoaRQCtE0MmyUKyGpl+nR0gAY2IMjIAXM9z0jTbpcQkRSyctnOO2FSuBd
E3izu/NsbwqQjNkISPBM/X0AElJaFaNEOUQ1LquM7GDgV3SVyMCkJI03C2IulXmGrr3nayRsZy0f
gUumVWygaWPWQx/4kCOgBFnk65wqJWanBNjlGp3TlQ3HgLD3vAIJD6CkQqn3iDX+iqP/2oQpz6yx
y5skQgUVcBwSROaEn5QDJYm8HQMvlobWvUcvs1ypAaDoh1UuAYikAyIbI9I5fm0pbl+JSJqAB8HS
AHQEPxHbhzQ6Br+9x1sP+IBS9yeAP1ygUnhy0DOqiZIR1SklovRhCeyjOTDqxwm6EsdGIKZHawBG
nHAwKntQqtK1srQPEHBWRZeQH51aNCUdqJOC2FipuS5BRF9VJED6akGa4u4jTiuDEdPynZQ61oRy
gMCPPtURDZxoGZ+LgApaQLJdHqFYqfRkQPB0oyxqESDGJU8FULRXsWwVDau1SIaS+loDyKEx8spu
Ndhlp5t8pAPPPUJElDQ83+bTCUCs/wB4oQCsf2jgi3A4gQdxAbg5VreE4ECACAqS2iSACr0MIKtF
AwwFFaBoOQZmgArCKwcTzJcSBSjcCDZw3/1FSKKgu/AdLkAYvxVgAkhkglorbF0NH4FRDDbxI9hJ
YhWPoCScdLEqSGwAB6hYrpOVcSpobAEVAzHFOvYDi+97SQ3np59B5oQz7yvNCKXEURtAggCmbIQN
COCOM7ByCiwwgwNM+csC8DKVj7CAKafACDMQQJSPYOU7PsDKFvjfCDIgAAvY8sszeMCYj6BnAcxA
Al9ewAPofOUjEFrQYPZzma/X5y+PQMxTxp4SFlBhBaiYJcSjdCweYABbHsHSEiBBLP8WIIENnMJ6
E84Apz3tgEsuAAOn4PSaR9DjEaTAlhuQ9Ahm8M4H9HjVfDZACpBAaVa3dQM2ToGNkaBsQ5c41yNw
wLDn/OxTpOCdE36iEobsWKZemDyOEsAHimwAXbcVA0XedRhQHYtyj2ABJEjCByw9AgWg+whtrXet
/3cAWI+g3br+AAZiwURJo3oE5RZ3EhRObUMf4eAkPIKnGT4CAcQ7CQl17LQtg9MKminGB1jAApaN
cHOTUNdKOPgR3K0AbOO7xGG+d777TQKU01rYAJcyqhdw8oe3VQIYqLjLhe7sKdMb4gYQQAryTXES
etvWjiX5XiT4FfJ8Zekp8HfJpUz/R08vQeVbb/nCg17xR6M73/9mYpMzgIFauxvfbPf11kdgvQNs
wA0UJ3rDbe1zZ/+b6S4nYZNvvtIPyNkss6vAUETkqAdM2wK1vje+6V5riSMB7O7WNBIUMO2ZY4De
xkaCpyVQ4rd7me41nzvYm87wiMs7365/tN5pPfQkULidaA9OZ1GbhBlYYM0bwIAtlV1l7B3AAWu2
wCUPQAIFQJH0KLSA4Sc8fQkoIAwSwLYD8rx9JFh5wsOG/gP0zOXsPzrpXGg+Uy1Q8wwoXwFP1HOn
Y8H867+70xmQQI8tIHw6x9kJvpc/JUQCZxYhdWUasKIEM5ABksaADahm0gRoAiABhLHggFDkgPQ3
ZV7HgEwFRWm2AU1WZp6GgYOWAUZwCgfAgFzAgUewgA5oghxYgqp2BClogi7ogDNwgzMoBRlQZhnw
dPxxAcFwYElWhFbwAJpghEpoFgfwAkv4hBPhBYMHhVSICosgBIdXhVr4CHkABlv4hY6wBmxABFMI
hmZYBlzgBUMQBAA7

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: https://d1dc57evlm7o0i.cloudfront.net/tofinoauctions.com/markham/2012auction/homepage_images/1/markham_auction_mask.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAd
Hx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3
Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAB+AHYDASIA
AhEBAxEB/8QAHAAAAAcBAQAAAAAAAAAAAAAAAAECBAUGBwMI/8QAPBAAAgEDAgQEBAIGCgMAAAAA
AQIDAAQRBSEGEjFBE1FhcQcUIoEykRVCYnKh0SQzUlOCkrHB4fAXI/H/xAAaAQACAwEBAAAAAAAA
AAAAAAADBAACBQEG/8QALBEAAgICAQMCBAYDAAAAAAAAAQIAAwQREgUhMSJBE2GBoRQyUZGx8CNx
wf/aAAwDAQACEQMRAD8A3GhQoiwFcJA8yQ6QzgUlpBim7vk0rdkhR2lgu44EgpQcGmSyqw+lgR6H
NKHNnIbag15XLxLcY9zQJA602jnOcEHakST85wDR7clUXc5wO5zuZVt761kjY4nkMUi52P0swOPM
cuPY+1Pg48xVdlukm1lYlOVsgXkI6eIy4Vc+YUsT+8nnUisocZU7Z6nalxmMdAiXFR8x+ZAKITb4
poGYA5IOem+aKNjzVVsllIG5zhHNxdxW0LzTyLHEilnd2wFA6kntVDvfi/w5a3TQol7cKhw0scQ5
R+ZBqD+LWvM+pQaKrlbaBFnuQp/rHJ+hftjOPUHtWSzWl3fXEjwx+Jy5MjHIRB5bUVbiT3OhELMj
TlR4E9UaDrlhr1gl7pswlhb03U+RFCsy+A9pfWg1FZ8i1cAwn9VyDhiPQdM+efI0KZVyRDoxI2Zr
zGuMhqlcf/Ea14Vk+Thg+avyoYoWwqZ6ZPc98eXcbVRLX4ta1cShpfkYlY7IYjj88mgZDnR0JV71
r895tLmm8zMY2CHlbGxIzg1XuHuK01qN4pYhBdxjLIDkMPMU+kuZC30k157KvC+feaGLxvQOh7Th
pS3sFw7XsgYcoUYYEt5scKB9sf7YnY5wV2ORULJNgnbrTa81C2tI0a5uIoRn6edwM+w71THu4DtG
2xwwnTULe2W9nn1i1v7wu/8ARzHG8scaY2Cqn4T1yxGSe+MANLTUNSvZ7u1sIntIIZfD+avPqkTK
KxCpk5I5ti52yMhsYop9VvLq3RLCCSNCSTdXEZUAfsIcFjt3AX1PSjsJ1sovBQEoCSSzZZmJyWJ7
kkkk0TJzgnb3/iUrxWPjxJS3htbG1SCL6F5iS7vlncnJLMfxMTuT3rrHlgYzuSfp9DULeQpfTWs5
Zw9u5ZeXGCDjIOR3wOmDjIzgmpWK48CFpGblVRlj/wA0DGyybAu978whrKLqOI2kICljTrxoraB5
riRVjUZLE9Kybib4mxxPJDpRKoNvHVQzN+6CQMftH7A1Q01XUOI74QzahcKrEsXnLSkeyjbPsBW/
X0+yxwzCLuUbY3JnUxNxLxJf3pkCxvPtuNsfSBnONlC59T32zoOk2dlpOmwWM9pZy2kg+pELMZSe
pdsjmz6risq0B57LVZLPniK2UzeJKRzeJjI5VDDAzuckbd+wJavruqT6jJMszhDsVhwFA8sn09BQ
MvFyGsCKwAEWr/A459e2Y/35T0tocVqtlHLZoVjmRXBYksQRtuc9B27UKpXwg4i1XXLG5GoAtDBy
rFMVALHuNtjjahWjS2kAbzABgw2Jl3xhtLqHja4eUMI5sFGPTBrrwvwna6vbTTRajFBcQAcy3DAA
7ds1s/HegQ63pzx/LxyXAxyMwGeXI5gD2OMgE9Disr06ZdHv5rdY2tkU/RDbK3iYz+sAObP/AH1p
DJyW0UTyIXH6Y2UTybQH3jOx1K44Z162+a5WWJuTmRsqyHtn/T8vKtPt9Y06/txcW93EFIyQ7BWX
3BrPeJSus26csMcZ/vLy9PMPXkXmI+5B9Kol1Y3yMUju4J1DABUkyBvj9YUGvD/GKCfS30ncesYT
lQ4YH9/2m1XXFmh28nhPqKzSDblgUyH8lBp1Za/p9xhorTUmC9ZFs3GKxK+t5bPTFuP0jNE5blWJ
k5C+wydhgdfM+uKj9J0TVddkcWFtJccn427D3Jpk9CSsetvvH7Mkk8VHeejbfXNGvSIrW6ieVc4j
kJjcH91gCftSQZTcHmYCMblVGBisFueDuI7KIs1jKUByfCbOPypxw7xzrHD83hXBe6gX6WgnYgr7
HqKRu6DzHxMZwf7+siX/AA+zgiblBERgVm/xO41Kyvodlgwof6SR0kP9g/sjqR36edSr/Eq2m0aW
az028W45PpLchRT5/iyfyFY5dXTz3huJRk82cMc53zv5knc+9E6P0a+m34mQNSZV44/7ls4Q4Ou+
Ji17clo7XmILY3c+npR8QaXp+i66lho2pSWc0UJe4uGkbKseijl36b7eYpynxLvk02LT9Osrawjj
TkDoC5/j/I1TrmRZA8ryObmSQs7PnLg+v3Oc+lb+PVmG97r2AT2Ai5esIAo+ssvBfD8mu8Xfoa5m
LWsLO1w8RxzhWxsR5k7Vq0/w/wCH9I5LlrYXNkrKsiXP1NGCQAysMEgEjIbO3QjGCz+E3DM2j6fL
q+pJyXt7ghCMGNOw9D3/APlWXVZjq1/aaNFnk50ur1uywo2VX3d1A/dV6y8zJD3cB9YJqFI2RLPp
Vjb2FuILSFIYl6IowBQp1B+GhT2OgFYECfPacLpctvWHfGq/1e31aK353SwZF8FVJCk9WJ7E5yMd
gB51u08ZYbVX9YtYJo2W8iikiXdhKAVHrvWdcgqu+IV3CqhtXiDqee+G9N1TWLtBGhlCkfU+Sieu
9X2LhFdJglu5pYblYk5i4kMBiA3PQHO2RkFSATjJ62OZ2RQmm2scMOdpWTlU+qqMFvfYeRNIOnWt
zCzXwa7ZSDy3GGj69kxgH7E+tLtl6fkw18oenpVYHI9z9hMk4wjtZpylpD8jApaUpLMZDzMoIA2G
BtgDc5Jz6P8AgTjocP2PyMmniS3LlnlRsPk9zUpx9w6hlSa2QLDKcnkAGM9Rj3Ib2LeVUt9I1NI3
tFSEqrZIDqjZ6ZIJB6Ctym/GyauF58iFtqeuzkgmi3nxSsoImNrZO8mNhK4UfwyazS/u7vibWZbq
48JXkOW5FCoij/jzqQ0jhQXU4F/qEUQB/qbQG6nf0CplR7swAq/aHwRBDiS5tjBahuZLeRg7yeRk
I2P7o296W3h9Pr1j+/z3O1q+Q+rOwHt+sacK6ILmwjjgsreK05fqu7yMzSTfuISFRfUgk0WqfC+C
YNNZ36o56o8PKPzU7fka0O2jRRggBQNgKOaNChznHUYrMOfeG3yjhprJ0RMe/wDGmps4HzFoiD9b
xGb+HIP9atfC3Aem6Ncx3d2zXtyhBUuuEQ+YXff1NXm3toVxzu2eXPKFzj3rq0Koyk4YHcds1e7q
LGvRMoKqFPYQXF+IBbq4J8edYUC+ZBOfsATS+HYVg1TU1nIW6muPEUHq8QRQhHmBgj0OfPeGsZ49
e4jjltcHS9JL5lH4ZrllK4U9wilsnzb0q0z2NpfxLHe2sFzGDkJNGrgH2IpOqsIw5eT5idrbB14k
lZXtrPLLBbzJK8OBJyHIQ/2SRsD6daFdLGCG2tkhtoY4YkGFjjQKqj0A2FCvTVkcRqIHzHGM1C31
ut7dyCQBobcrhD0aTGcnzwCMepJ6gYm6YXiywF5oYWmV8c6IRzZG2RkgHbAxnt9qrcgZZ1DoyAvr
cMPq3xUfcxeEngqNxu5Pc/8AFPbzWNNjci6kuLc9xNaTJ/Epj+NR9xruhyysF1ex3O3NMq/64rEs
x2BLETXpyB2BMZ3ll89YyQFQzEZQN0J8j6EEg+hNcNHng1HTlS8t45poD4chljBY46E57kEE+ufK
p6CGMos3iKYW3Vl3De3nUBfxppfEcU0LEW2oLyNnosoyR7ZJ+5dvKg8Cw0Oxh2sUvv2kxbrDHhIY
kjGNgq4oGUPIsbHG+M5pCn6S3Krb4ORTaaIjMsZPJ3z1X3/nWU7XI+zDBV3qS6tEWMUkQRQSAy9R
7+dI1C6sNLhEmo3ltbRN+FpZVXPtk5P2qC+ZvdcxJYStaWDje5UAyTEdfDzkKv7RBJ7DGCZDStA0
+zlM9vboLg7vczEySt7u2W/jTfoUf5O5+X/Yo29bUzhPrjXbudE0q/vVP4Znj+Wh/wA0mCR7Ka4n
R9Y1cBNbvVitD+Ky0/mUMPJ5T9RHoAoqyYGCBICTt9W1JKOsTBwRuMZ79aAlzNb6V1v38/fwPpKA
bGiYuztY7WCO2tIFhhjXlWNF5VUeQFStsMAc2M+VMosqqknqNqcWSs03NnatapNMIC38sl0GFFCj
T8IFCvQINKJnGKpLDNKpJqP4kjedfoPUexqIvJPBhkeeblhRSzl2+kADJJz6VNTNgYPeq/qVqt1b
3EDk8syFGwexGKz7NgjUbo7yCOnWk6G70fFpcv8AUCsZjWQ+UkeBkHzI5h1BprqduNY4fIUFJZ0D
xZO8Lj/fII/OpmxtZ4TLJfzo7tIX5kUqEXy3Pbff+WTHcNoZdDtLh1IFz4lwgPZJJGdf4MKUdHZe
R/MDH1Kg8faNdA1JtQ0yKd15ZCCky43SRSQw/PP2NDVImu/ltPyRFdSkXGNuaJVLMv8AiIVT6E0q
3tBpnE8kWyWurKZEB6LcoPqH+JBn3Q1OyaazcjJyiWNuZSenQjB9CCf+ilLKG+ICvj+/xLm4FOJ8
xduiciqsaoq9FHT/ALsKcFOVcgDHfPemV1qFvZWsk2oRXNssKlmPgs6nHk6gg57A4PoKjIJjfoks
0t9d3b7rYae0iRw56K0g5VJHdnbGeg6Cj19PcjbRVrl9pNOEY4TIPk3867wwk7Fffak2NjcLbwR3
rB7lY1EzqNi2Bkj75qW8BY1AU5PrV68DT7I7SPcANCVzhzTdRs/Gj1CNSoI5JRLzeN1yxHUdjvjG
cb4zVmgRUjyoG3lQijlAYt9tq6wKfq6Yp9MZUHpillhbzOsLc6ZxihSwMUKdXsIuYdEaOixXTJOc
ijGSM00liXJPLt32p/iorXNP1G/RILHUvkImP/vljiDTFfJCThT+0QfTzoD1bMurlZWOIWbWr1+G
dLcksB+lLhOltCesef7xxsB2GT5VPCwMUaxxDkjUBVRegA6AU+0fSrLRbNbPTrcRRcxZjkszserM
x3Zj3J3p60YIqpoUjUItzA7lO1zS7i6tCIcC5idZrZj+rKpyv2PQ+hNPtMu1vbSG6TPJKgYKeq+Y
PqDkH1FTjpk8rDNQtharYaxc2bkfL3jNc2o6cj7eKn3J5x+8/lQhQQNCGN+/InTULV7ixICkqs0M
rKBksqSo5GO+ynapmBkliWRJFlRt1cNkH2NHAoCYxRR20UUskscUaPJjnZVALY6Z86OoIXRizttt
xeBnHekmLmwRtXQ0BU37SuzDxkYpMScgxS6OihZzcFChQq85BQoUKkkFChQqSQiKLfNKoVzUkSVB
qN1iylmtvFtQDdW7iaDJxl1z9PswLKfRjUpRHpU4id2Zxsp4rq1huICTHKgdSRg4Izv613pnYWxt
XuI1I8FpDLGP7PNuw/zcx++O1PKmpyFihijoVNCSChQoV2SChQoVJJ//2Q==

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/shared_stylesheets/print.css?1320108691

* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
DIV#header {
	DISPLAY: none
}
#display_report_menu {
	DISPLAY: none
}
BODY {
	FONT-SIZE: 0.9em; LINE-HEIGHT: 1.2em; FONT-FAMILY: verdana, helvetica, =
arial, sans-serif
}
H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 2em; MARGIN-BOTTOM: 0.3em; =
LETTER-SPACING: -0.04em
}
.data_list {
	LINE-HEIGHT: 1.4em; BORDER-COLLAPSE: separate; border-spacing: 0px 0px
}
#data_list {
	LINE-HEIGHT: 1.4em; BORDER-COLLAPSE: separate; border-spacing: 0px 0px
}
.data_list CAPTION {
	FONT-WEIGHT: bold; TEXT-ALIGN: left
}
#data_list CAPTION {
	FONT-WEIGHT: bold; TEXT-ALIGN: left
}
.data_list TH {
	BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #999 1px =
solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #999 1px =
solid; PADDING-TOP: 1px; BORDER-BOTTOM: #999 1px solid; WHITE-SPACE: =
nowrap
}
#data_list TH {
	BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #999 1px =
solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #999 1px =
solid; PADDING-TOP: 1px; BORDER-BOTTOM: #999 1px solid; WHITE-SPACE: =
nowrap
}
.data_list TD {
	BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #999 1px =
solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #999 1px =
solid; PADDING-TOP: 1px; BORDER-BOTTOM: #999 1px solid; WHITE-SPACE: =
nowrap
}
#data_list TD {
	BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #999 1px =
solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #999 1px =
solid; PADDING-TOP: 1px; BORDER-BOTTOM: #999 1px solid; WHITE-SPACE: =
nowrap
}
#back_link {
	DISPLAY: none
}
#order_reciept {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
MARGIN-LEFT: auto; WIDTH: 700px; MARGIN-RIGHT: auto; PADDING-TOP: 5px; =
FONT-FAMILY: verdana, helvetica, arial, sans-serif; BACKGROUND-COLOR: =
#eee
}
.data_list CAPTION {
	FONT-WEIGHT: bold; TEXT-ALIGN: left
}
#data_list CAPTION {
	FONT-WEIGHT: bold; TEXT-ALIGN: left
}
.data_list THEAD TH {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
#data_list THEAD TH {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
.data_list TFOOT TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
#data_list TFOOT TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
.data_list THEAD TH A {
	COLOR: #fff; TEXT-DECORATION: none
}
#data_list THEAD TH A {
	COLOR: #fff; TEXT-DECORATION: none
}
.data_list THEAD TH A:hover {
	COLOR: #fff; TEXT-DECORATION: underline
}
#data_list THEAD TH A:hover {
	COLOR: #fff; TEXT-DECORATION: underline
}
.data_list {
	BACKGROUND: #fff; MARGIN-BOTTOM: 5px; WIDTH: 500px; BORDER-COLLAPSE: =
collapse
}
#data_list {
	BACKGROUND: #fff; MARGIN-BOTTOM: 5px; WIDTH: 500px; BORDER-COLLAPSE: =
collapse
}
.data_list TH {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; BORDER-LEFT: =
#a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #a65300 1px solid; =
WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse
}
#data_list TH {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; BORDER-LEFT: =
#a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #a65300 1px solid; =
WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse
}
.data_list TD {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; BORDER-LEFT: =
#a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #a65300 1px solid; =
WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse
}
#data_list TD {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; BORDER-LEFT: =
#a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #a65300 1px solid; =
WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse
}
.data_list A {
	COLOR: #000
}
#data_list A {
	COLOR: #000
}
.data_list A:hover {
	COLOR: #a70000; TEXT-DECORATION: underline
}
#data_list A:hover {
	COLOR: #a70000; TEXT-DECORATION: underline
}
.data_list TR.ruled {
	BACKGROUND: #a1b4c2; COLOR: #fff
}
#data_list TR.ruled {
	BACKGROUND: #a1b4c2; COLOR: #fff
}

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/stylesheets/base.css?1327471913

BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 6px
}
* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.data_list CAPTION {
	FONT-WEIGHT: bold; TEXT-ALIGN: left
}
#data_list CAPTION {
	FONT-WEIGHT: bold; TEXT-ALIGN: left
}
.data_list THEAD TH {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
#data_list THEAD TH {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
.data_list TFOOT TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
#data_list TFOOT TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 3px; BACKGROUND: #ca630f; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; WHITE-SPACE: nowrap; TEXT-ALIGN: =
left
}
.data_list THEAD TH A {
	COLOR: #fff; TEXT-DECORATION: none
}
#data_list THEAD TH A {
	COLOR: #fff; TEXT-DECORATION: none
}
.data_list THEAD TH A:hover {
	COLOR: #fff; TEXT-DECORATION: underline
}
#data_list THEAD TH A:hover {
	COLOR: #fff; TEXT-DECORATION: underline
}
.data_list {
	BACKGROUND: #fff; MARGIN-BOTTOM: 5px; WIDTH: 500px; BORDER-COLLAPSE: =
collapse
}
#data_list {
	BACKGROUND: #fff; MARGIN-BOTTOM: 5px; WIDTH: 500px; BORDER-COLLAPSE: =
collapse
}
.data_list TH {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 13px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; OVERFLOW: =
hidden; BORDER-LEFT: #a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#a65300 1px solid; WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse; =
TEXT-OVERFLOW: ellipsis
}
#data_list TH {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 13px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; OVERFLOW: =
hidden; BORDER-LEFT: #a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#a65300 1px solid; WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse; =
TEXT-OVERFLOW: ellipsis
}
.data_list TD {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 13px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; OVERFLOW: =
hidden; BORDER-LEFT: #a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#a65300 1px solid; WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse; =
TEXT-OVERFLOW: ellipsis
}
#data_list TD {
	BORDER-RIGHT: #a65300 1px solid; PADDING-RIGHT: 13px; BORDER-TOP: =
#a65300 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 1px; OVERFLOW: =
hidden; BORDER-LEFT: #a65300 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#a65300 1px solid; WHITE-SPACE: nowrap; BORDER-COLLAPSE: collapse; =
TEXT-OVERFLOW: ellipsis
}
.data_list A {
	COLOR: #000
}
#data_list A {
	COLOR: #000
}
.data_list A:hover {
	COLOR: #a70000; TEXT-DECORATION: underline
}
#data_list A:hover {
	COLOR: #a70000; TEXT-DECORATION: underline
}
.data_list TR.ruled {
	BACKGROUND: #a1b4c2; COLOR: #fff
}
#data_list TR.ruled {
	BACKGROUND: #a1b4c2; COLOR: #fff
}
.payment_item {
	BACKGROUND-COLOR: silver
}
.order_list_item_row_status_incomplete {
	BACKGROUND-COLOR: #fb999a
}
.order_list_item_row_status_complete {
	BACKGROUND-COLOR: transparent
}
.order_list_item_row_status_open {
	BACKGROUND-COLOR: #ffb
}
.label {
=09
}
BODY {
	BACKGROUND-POSITION: 0px -25px; MIN-WIDTH: 970px; FONT-SIZE: 0.9em; =
BACKGROUND-IMAGE: =
url(/2012auction/images/header_background.gif?1313468621); =
MARGIN-BOTTOM: 1em; COLOR: #333333; LINE-HEIGHT: 1.3em; =
BACKGROUND-REPEAT: repeat-x; FONT-FAMILY: verdana, helvetica, arial, =
sans-serif; BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: center
}
H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 2em; MARGIN-BOTTOM: 0.5em; =
LETTER-SPACING: -0.04em
}
H2 {
	MARGIN-TOP: 1em; FONT-WEIGHT: normal; FONT-SIZE: 1.5em; MARGIN-BOTTOM: =
0.5em; LETTER-SPACING: -0.04em
}
IMG {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
P {
	MARGIN-BOTTOM: 1em
}
SMALL {
	COLOR: #aaaaaa
}
UL {
	MARGIN-TOP: 1em; MARGIN-BOTTOM: 1em; LIST-STYLE-TYPE: none
}
INPUT {
	PADDING-RIGHT: 0.2em; PADDING-LEFT: 0.2em; FONT-SIZE: 1em; =
PADDING-BOTTOM: 0.2em; MARGIN: 1px 0px 0px 1px; PADDING-TOP: 0.2em; =
FONT-FAMILY: verdana, helvetica, arial, sans-serif
}
TEXTAREA {
	PADDING-RIGHT: 0.2em; PADDING-LEFT: 0.2em; FONT-SIZE: 1em; =
PADDING-BOTTOM: 0.2em; MARGIN: 1px 0px 0px 1px; PADDING-TOP: 0.2em; =
FONT-FAMILY: verdana, helvetica, arial, sans-serif
}
SELECT {
	PADDING-RIGHT: 0.2em; PADDING-LEFT: 0.2em; FONT-SIZE: 1em; =
PADDING-BOTTOM: 0.2em; MARGIN: 1px 0px 0px 1px; PADDING-TOP: 0.2em; =
FONT-FAMILY: verdana, helvetica, arial, sans-serif
}
INPUT:focus {
=09
}
TEXTAREA:focus {
=09
}
SELECT:focus {
=09
}
BLOCKQUOTE {
	PADDING-LEFT: 2em; MARGIN-BOTTOM: 1em; COLOR: #888888; FONT-STYLE: =
italic
}
PRE {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; FONT-SIZE: 1em; MARGIN-BOTTOM: =
1em; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; BACKGROUND-COLOR: #eeeeee
}
DIV#user_info {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
20px; COLOR: #844100; PADDING-TOP: 20px; TEXT-ALIGN: right
}
DIV#container {
	MARGIN-TOP: 0px; FONT-SIZE: 1em; MARGIN-LEFT: auto; WIDTH: 90%; =
MARGIN-RIGHT: auto; POSITION: relative; TEXT-ALIGN: left
}
DIV#header {
	OVERFLOW: hidden; HEIGHT: 140px
}
DIV#header H1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0px 140px; TEXT-INDENT: -5000px; PADDING-TOP: 0px; HEIGHT: 70px
}
DIV#logo {
	FLOAT: left; WIDTH: 236px; MARGIN-RIGHT: 31px; HEIGHT: 73px
}
DIV#custom_logo {
	FLOAT: left
}
#logo {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#logo IMG {
	DISPLAY: block
}
#header H1 {
	DISPLAY: none
}
UL#navMain {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 3px 0px 0px; PADDING-TOP: 14px; LIST-STYLE-TYPE: none; =
HEIGHT: 42px
}
UL#navMain LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; =
BACKGROUND-IMAGE: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: =
0px
}
UL#navMain LI.first-child {
	BORDER-LEFT-STYLE: none
}
UL#navMain LI A {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.8em; PADDING-BOTTOM: 0.2em; =
COLOR: #333; PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
UL#navMain LI.first-child A {
	PADDING-LEFT: 0px
}
UL#navMain LI A:hover {
	BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline
}
DIV.auto_complete {
	BACKGROUND: #fff; FLOAT: none; WIDTH: 350px; POSITION: absolute
}
DIV.auto_complete UL {
	BORDER-RIGHT: #888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #888 1px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: =
#888 1px solid; WIDTH: 100%; PADDING-TOP: 0px; BORDER-BOTTOM: #888 1px =
solid; LIST-STYLE-TYPE: none
}
DIV.auto_complete UL LI {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: =
0px; PADDING-TOP: 3px; TEXT-ALIGN: left
}
DIV.auto_complete UL LI.selected {
	BACKGROUND-COLOR: #ffb
}
DIV.auto_complete UL STRONG.highlight {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; COLOR: #800; PADDING-TOP: 0px
}
DIV.row {
	CLEAR: both
}
DIV.row SPAN.left {
	FLOAT: left; WIDTH: 50%; TEXT-ALIGN: left
}
DIV.row SPAN.right {
	BACKGROUND: #ffe3b3; FLOAT: right; WIDTH: 50%; TEXT-ALIGN: left
}
DIV.spacer {
	CLEAR: both
}
DIV#status_panel {
	PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffca69
}
DIV#status_panel_initial {
	PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffca69
}
DIV#status_panel_initial {
	FONT: 18px Arial; COLOR: #0048c0; PADDING-TOP: 35px; TEXT-ALIGN: center
}
DIV.message_dismiss_link {
	PADDING-RIGHT: 10px; FONT-SIZE: 10pt
}
TD.message_priority_1 {
	FONT-WEIGHT: bold; FONT-SIZE: 20px; WIDTH: 100%; HEIGHT: 50px; =
BACKGROUND-COLOR: #feffc8
}
TD.message_priority_2 {
	FONT-WEIGHT: bold; FONT-SIZE: 14px; WIDTH: 100%; HEIGHT: 50px; =
BACKGROUND-COLOR: #ffcb5d
}
TD.message_priority_3 {
	FONT-WEIGHT: bold; FONT-SIZE: 14px; WIDTH: 100%; HEIGHT: 50px; =
BACKGROUND-COLOR: #d79800
}
TD H3 {
	DISPLAY: inline; FONT: 1.5em "Lucida Grande", Lucida, Verdana, =
sans-serif
}
.item_admin_links {
	PADDING-LEFT: 5px
}
.item_admin_links A {
	FONT-SIZE: 0.8em; COLOR: #7f7f7f
}
.item_details {
	COLOR: #7f7f7f
}
.item_details A {
	COLOR: #7f7f7f
}
HR {
	MARGIN: 4px auto; WIDTH: 95%; COLOR: #ccc; BORDER-TOP-STYLE: none; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 1px; =
BACKGROUND-COLOR: #ccc; BORDER-BOTTOM-STYLE: none
}
OPTION {
	PADDING-RIGHT: 10px
}
.form_label {
	FLOAT: left; WIDTH: 150px
}
.form_row {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
DIV.form_field_container {
	PADDING-BOTTOM: 1em
}
#gutter {
	PADDING-LEFT: 5px
}
#gutter #section {
	MARGIN-BOTTOM: 7px
}
.gutter_container {
	PADDING-LEFT: 10px
}
.gutter_list {
	PADDING-LEFT: 5px; MARGIN-BOTTOM: 7px; LINE-HEIGHT: 1em
}
.gutter_list DIV {
	FONT-SIZE: 0.8em
}
.gutter_list A {
	TEXT-DECORATION: none
}
.gutter_list A:hover {
	TEXT-DECORATION: underline
}
.highlight_container {
	BORDER-RIGHT: #ca630f 3px solid; BORDER-TOP: #ca630f 3px solid; =
BORDER-LEFT: #ca630f 3px solid; BORDER-BOTTOM: #ca630f 3px solid; =
BACKGROUND-COLOR: white
}
#gutter H2 {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 3px
}
#map_canvas {
	WIDTH: 100%; HEIGHT: 300px
}
#homepage_title H1 {
	MARGIN-BOTTOM: 3px
}
#homepage_title H4 {
	MARGIN-BOTTOM: 10px
}
#homepage_image_upload {
	MARGIN-LEFT: 1.4em
}
.graph {
	BORDER-RIGHT: #ca630f 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#ca630f 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#ca630f 1px solid; WIDTH: 200px; PADDING-TOP: 2px; BORDER-BOTTOM: =
#ca630f 1px solid
}
.graph .bar {
	DISPLAY: block; BACKGROUND: #ca630f; COLOR: #333; LINE-HEIGHT: 2em; =
HEIGHT: 2em; TEXT-ALIGN: center
}
.graph .bar SPAN {
	LEFT: 1em; POSITION: absolute
}
#display_report_menu {
	PADDING-BOTTOM: 5px
}
#order_reciept {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #ffe3b3; =
PADDING-BOTTOM: 5px; WIDTH: 700px; PADDING-TOP: 5px
}
#tab_container {
	BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; =
BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid
}
.fixed_width {
	WIDTH: 900px
}
UL.tabselector {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 3px; MARGIN: =
1em 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #c0c0c0 1px solid; =
LIST-STYLE-TYPE: none; TEXT-ALIGN: left
}
UL.tabselector LI {
	DISPLAY: inline
}
UL.tabselector LI.tab-selected {
	BORDER-BOTTOM: #fff 5px solid; BACKGROUND-COLOR: #fff
}
UL.tabselector LI.tab-selected A {
	COLOR: #000; PADDING-TOP: 4px; BORDER-BOTTOM: #fff 1px solid; POSITION: =
relative; BACKGROUND-COLOR: #fff
}
UL.tabselector LI A {
	BORDER-RIGHT: #c0c0c0 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: =
#c0c0c0 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: =
#c0c0c0 1px solid; COLOR: #666; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; =
BORDER-BOTTOM: #c0c0c0 1px; BACKGROUND-COLOR: #f0f0f0; TEXT-DECORATION: =
none
}
UL.tabselector A:hover {
	BACKGROUND: #fff
}
.panes {
	PADDING-LEFT: 0px; MIN-HEIGHT: 300px; MARGIN: 2%; OVERFLOW: auto; =
WIDTH: 97%
}
.pane-selector {
	PADDING-LEFT: 0px; MIN-HEIGHT: 300px; MARGIN: 2%; OVERFLOW: auto; =
WIDTH: 97%
}
.pane-selected {
	PADDING-RIGHT: 3px; DISPLAY: block; PADDING-LEFT: 3px; PADDING-BOTTOM: =
3px; PADDING-TOP: 3px; LIST-STYLE-TYPE: none
}
.pane-unselected {
	DISPLAY: none; LIST-STYLE-TYPE: none
}
#errorExplanation {
	BORDER-RIGHT: #c00 1px solid; BORDER-TOP: #c00 1px solid; =
MARGIN-BOTTOM: 20px; BORDER-LEFT: #c00 1px solid; BORDER-BOTTOM: #c00 =
1px solid; BACKGROUND-COLOR: #f0f0f0
}
#errorExplanation H2 {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; PADDING-BOTTOM: 5px; MARGIN: -7px; COLOR: #fff; PADDING-TOP: 5px; =
BACKGROUND-COLOR: #c00; TEXT-ALIGN: left
}
#errorExplanation P {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 0px; =
PADDING-BOTTOM: 5px; COLOR: #333; PADDING-TOP: 5px
}
#errorExplanation UL LI {
	FONT-SIZE: 12px; MARGIN-LEFT: 30px; LIST-STYLE-TYPE: disc
}
.form_section_title {
	FONT-WEIGHT: bold; FONT-SIZE: 1.5em; MARGIN-BOTTOM: -30px; PADDING-TOP: =
10px
}
.form_section_title_small {
	FONT-WEIGHT: bold; FONT-SIZE: 1.2em; PADDING-TOP: 10px
}
.form_sub_title {
	FONT-WEIGHT: bold; FONT-SIZE: 1.2em; PADDING-TOP: 10px
}
.form_sub_section {
	MARGIN-BOTTOM: 10px; MARGIN-LEFT: 20px
}
.form_section {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #ddd; =
PADDING-BOTTOM: 8px; MARGIN: 30px 0px 10px; PADDING-TOP: 8px
}
.registration_form_section {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #ddd; =
PADDING-BOTTOM: 8px; MARGIN: 30px 0px 10px; PADDING-TOP: 8px
}
#user_login_information {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #ddd; =
PADDING-BOTTOM: 8px; MARGIN: 30px 0px 10px; PADDING-TOP: 8px
}
#payment_information {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #ddd; =
PADDING-BOTTOM: 8px; MARGIN: 30px 0px 10px; PADDING-TOP: 8px
}
#user_section {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #ddd; =
PADDING-BOTTOM: 8px; MARGIN: 30px 0px 10px; PADDING-TOP: 8px
}
#positiveExplanation {
	BORDER-RIGHT: #267c32 2px solid; PADDING-RIGHT: 7px; BORDER-TOP: =
#267c32 2px solid; PADDING-LEFT: 7px; MARGIN-BOTTOM: 20px; =
PADDING-BOTTOM: 12px; BORDER-LEFT: #267c32 2px solid; WIDTH: 400px; =
PADDING-TOP: 7px; BORDER-BOTTOM: #267c32 2px solid; BACKGROUND-COLOR: =
#f0f0f0
}
#warningExplanation {
	BORDER-RIGHT: #267c32 2px solid; PADDING-RIGHT: 7px; BORDER-TOP: =
#267c32 2px solid; PADDING-LEFT: 7px; MARGIN-BOTTOM: 20px; =
PADDING-BOTTOM: 12px; BORDER-LEFT: #267c32 2px solid; WIDTH: 400px; =
PADDING-TOP: 7px; BORDER-BOTTOM: #267c32 2px solid; BACKGROUND-COLOR: =
#f0f0f0
}
#positiveExplanation H2 {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; PADDING-BOTTOM: 5px; MARGIN: -7px; COLOR: #fff; PADDING-TOP: 5px; =
BACKGROUND-COLOR: #267c32; TEXT-ALIGN: left
}
#warningExplanation H2 {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; PADDING-BOTTOM: 5px; MARGIN: -7px; COLOR: #fff; PADDING-TOP: 5px; =
BACKGROUND-COLOR: #267c32; TEXT-ALIGN: left
}
#positiveExplanation P {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 0px; =
PADDING-BOTTOM: 5px; COLOR: #333; PADDING-TOP: 8px
}
#warningExplanation P {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 0px; =
PADDING-BOTTOM: 5px; COLOR: #333; PADDING-TOP: 8px
}
#positiveExplanation UL LI {
	FONT-SIZE: 12px; MARGIN-LEFT: 30px; LIST-STYLE-TYPE: disc
}
#warningExplanation {
	BORDER-LEFT-COLOR: #fdc70d; BORDER-BOTTOM-COLOR: #fdc70d; =
BORDER-TOP-COLOR: #fdc70d; BORDER-RIGHT-COLOR: #fdc70d
}
#warningExplanation H2 {
	COLOR: #1b1b1b; BACKGROUND-COLOR: #fdc70d
}
#form_fields LI {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 20px; MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 3px; =
BORDER-LEFT: black 1px solid; CURSOR: move; LINE-HEIGHT: 120%; =
PADDING-TOP: 3px; BORDER-BOTTOM: black 1px solid
}
#form_sections LI {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 20px; MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 3px; =
BORDER-LEFT: black 1px solid; CURSOR: move; LINE-HEIGHT: 120%; =
PADDING-TOP: 3px; BORDER-BOTTOM: black 1px solid
}
.emphasize {
	FONT-SIZE: 1.2em
}
#form_fields LI:hover {
	BACKGROUND: url(/2012auction/images/drag_handle.png) #ccc no-repeat 3px =
center
}
#form_sections LI:hover {
	BACKGROUND: url(/2012auction/images/drag_handle.png) #ccc no-repeat 3px =
center
}
TABLE#donation_item_table TD {
	PADDING-RIGHT: 15px; PADDING-BOTTOM: 2px
}
TABLE#dashboard_table {
	WIDTH: 100%
}
TABLE#dashboard_table TD {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; =
VERTICAL-ALIGN: top; PADDING-TOP: 2px
}
TR.total_row TD {
	BORDER-TOP: gray 4px double; FONT-WEIGHT: bold
}
DIV.dashboard_header {
	BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; FONT-SIZE: =
18px; BACKGROUND-IMAGE: url(/2012auction/images/grey_gradient.png); =
BORDER-LEFT: #000 1px solid; COLOR: #000; BORDER-BOTTOM: #000 1px solid; =
TEXT-ALIGN: center
}
DIV.dashboard_item {
	FONT-WEIGHT: bold; FONT-SIZE: 18px
}
TD.dashboard_detail {
	BORDER-BOTTOM: #ccc 1px solid
}
TD.dashboard_detail_status {
	BACKGROUND-COLOR: #ffe3b3
}
#dash_board {
	FONT: 11px/1.5em 'Lucida Grande', tahoma, Arial, sans-serif; COLOR: =
#333
}
DIV#tips {
=09
}
DIV#activity_diagram {
=09
}
DIV#stats {
	DISPLAY: block; FLOAT: left; WIDTH: 47%
}
DIV#support {
	DISPLAY: block; LEFT: 459px; FLOAT: right; WIDTH: 47%; POSITION: =
absolute
}
DIV#dash_board DIV {
	PADDING-RIGHT: 10px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px
}
DIV#dash_board DIV DIV {
	PADDING-BOTTOM: 1px
}
.round1 {
	DISPLAY: block; FONT-SIZE: 1px; MARGIN-LEFT: 4px; OVERFLOW: hidden; =
WIDTH: 900px; LINE-HEIGHT: 1px; MARGIN-RIGHT: 4px; HEIGHT: 1px; =
BACKGROUND-COLOR: #000
}
.round2 {
	BORDER-RIGHT: #000 2px solid; DISPLAY: block; FONT-SIZE: 1px; =
MARGIN-LEFT: 2px; OVERFLOW: hidden; BORDER-LEFT: #000 2px solid; WIDTH: =
900px; LINE-HEIGHT: 1px; MARGIN-RIGHT: 2px; HEIGHT: 1px
}
.round3 {
	BORDER-RIGHT: #000 1px solid; DISPLAY: block; FONT-SIZE: 1px; =
MARGIN-LEFT: 1px; OVERFLOW: hidden; BORDER-LEFT: #000 1px solid; WIDTH: =
904px; LINE-HEIGHT: 2px; MARGIN-RIGHT: 1px; HEIGHT: 2px
}
.round_title .round2 {
	BACKGROUND-COLOR: #cc6633
}
.round_title .round3 {
	BACKGROUND-COLOR: #cc6633
}
DIV.boxinner {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #000 1px =
solid; DISPLAY: block; PADDING-LEFT: 10px; MARGIN: 0px 1px; OVERFLOW: =
hidden; BORDER-LEFT: #000 1px solid; WIDTH: 894px; PADDING-TOP: 5px
}
DIV.boxcontent {
	WIDTH: 764px
}
DIV.boxtitle {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 10px; DISPLAY: block; =
PADDING-LEFT: 10px; MARGIN: 0px 1px; BORDER-LEFT: #000 1px solid; WIDTH: =
894px; BACKGROUND-COLOR: #cc6633
}
.miniround1 {
	DISPLAY: block; FONT-SIZE: 1px; MARGIN-LEFT: 4px; OVERFLOW: hidden; =
WIDTH: 441px; LINE-HEIGHT: 1px; MARGIN-RIGHT: 4px; HEIGHT: 1px; =
BACKGROUND-COLOR: #000
}
.miniround2 {
	BORDER-RIGHT: #000 2px solid; DISPLAY: block; FONT-SIZE: 1px; =
MARGIN-LEFT: 2px; OVERFLOW: hidden; BORDER-LEFT: #000 2px solid; WIDTH: =
441px; LINE-HEIGHT: 1px; MARGIN-RIGHT: 2px; HEIGHT: 1px
}
.miniround3 {
	BORDER-RIGHT: #000 1px solid; DISPLAY: block; FONT-SIZE: 1px; =
MARGIN-LEFT: 1px; OVERFLOW: hidden; BORDER-LEFT: #000 1px solid; WIDTH: =
445px; LINE-HEIGHT: 2px; MARGIN-RIGHT: 1px; HEIGHT: 2px
}
.miniround_title .miniround2 {
	BACKGROUND-COLOR: #cc6633
}
.miniround_title .miniround3 {
	BACKGROUND-COLOR: #cc6633
}
DIV.miniboxtitle {
	BORDER-RIGHT: #000 1px solid; DISPLAY: block; MARGIN: 0px 1px; =
BORDER-LEFT: #000 1px solid; WIDTH: 435px; BACKGROUND-COLOR: #cc6633
}
DIV.miniboxinner {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #000 1px =
solid; DISPLAY: block; PADDING-LEFT: 10px; MARGIN: 0px 1px; OVERFLOW: =
hidden; BORDER-LEFT: #000 1px solid; WIDTH: 435px; PADDING-TOP: 5px; =
HEIGHT: 200px
}
DIV.innercontent {
	MARGIN-LEFT: 5px
}
DIV.innerboxtitle {
	FONT-WEIGHT: bold; FONT-SIZE: 0.9em; PADDING-BOTTOM: 0px; MARGIN-LEFT: =
10px; COLOR: white; LINE-HEIGHT: 1.1em; LETTER-SPACING: 0.2em; =
TEXT-ALIGN: center
}
OL {
	PADDING-LEFT: 25px
}
.highlight {
	COLOR: darkred
}
.no_results {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; DISPLAY: =
block; FONT-SIZE: 2em; MARGIN-BOTTOM: 10px; BORDER-LEFT: black 1px =
solid; COLOR: #999; LINE-HEIGHT: 100px; BORDER-BOTTOM: black 1px solid; =
TEXT-ALIGN: center
}
UL {
	MARGIN: 0px 0px 1.5em 1.5em
}
OL {
	MARGIN: 0px 0px 1.5em 1.5em
}
UL {
	LIST-STYLE-TYPE: disc
}
OL {
	LIST-STYLE-TYPE: decimal
}
* HTML .clearfix {
	OVERFLOW: visible; HEIGHT: 1%
}
* + HTML .clearfix {
	MIN-HEIGHT: 1%
}
.clearfix:unknown {
	CLEAR: both; DISPLAY: block; FONT-SIZE: 0px; VISIBILITY: hidden; =
HEIGHT: 0px; content: "."
}
INPUT[type=3Dbutton].small_button {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 3px; FONT-SIZE: 11px; BACKGROUND: rgb(250,250,250); =
PADDING-BOTTOM: 1px; MARGIN-LEFT: 2px; BORDER-LEFT: #000 1px solid; =
LINE-HEIGHT: normal; MARGIN-RIGHT: 0px; PADDING-TOP: 1px; BORDER-BOTTOM: =
#000 1px solid; FONT-FAMILY: 'Lucida Grande'
}
INPUT[type=3Dsubmit].small_button {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 3px; FONT-SIZE: 11px; BACKGROUND: rgb(250,250,250); =
PADDING-BOTTOM: 1px; MARGIN-LEFT: 2px; BORDER-LEFT: #000 1px solid; =
LINE-HEIGHT: normal; MARGIN-RIGHT: 0px; PADDING-TOP: 1px; BORDER-BOTTOM: =
#000 1px solid; FONT-FAMILY: 'Lucida Grande'
}
.editable-content {
	COLOR: blue; TEXT-DECORATION: underline
}
.cell {
	FLOAT: left; WIDTH: 125px; BACKGROUND-COLOR: #ccc
}
.drag_handle {
	BACKGROUND: url(/images/grip.png) 0px 0px; FLOAT: left; WIDTH: 25px; =
CURSOR: move; HEIGHT: 100%
}
.section_caption {
	CLEAR: both; MARGIN-TOP: 25px; FONT-WEIGHT: bold; OVERFLOW: auto; =
WIDTH: 100%; CURSOR: move
}
.row {
	CLEAR: both; CURSOR: move
}
.row:hover {
=09
}
.empty_section {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 1.2em; =
PADDING-BOTTOM: 3px; COLOR: #999; LINE-HEIGHT: 2em; PADDING-TOP: 3px; =
TEXT-ALIGN: center
}
#form_section_container {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MARGIN-BOTTOM: 20px; =
PADDING-BOTTOM: 10px; PADDING-TOP: 0px
}
#udf_list {
	BORDER-RIGHT: #aaa 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #aaa 1px =
solid; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; OVERFLOW: auto; BORDER-LEFT: #aaa 1px solid; PADDING-TOP: 0px; =
BORDER-BOTTOM: #aaa 1px solid; BACKGROUND-COLOR: #ccc
}
#udf_list UL {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 15px; MARGIN: =
0px; PADDING-TOP: 15px
}
.add_link {
	PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: =
0px; PADDING-TOP: 0px
}
.stat_box_container {
	PADDING-RIGHT: 20px; FLOAT: left; WIDTH: 580px
}
.stat_box_container H5 SPAN {
	FONT-WEIGHT: normal; FONT-SIZE: 1.7em; FONT-FAMILY: 'Helevtica Neue', =
Helvetica, Arial, sans-serif
}
.stat_box {
	BORDER-RIGHT: #aaa 2px solid; BORDER-TOP: #aaa 2px solid; =
MARGIN-BOTTOM: 20px; BORDER-LEFT: #aaa 2px solid; BORDER-BOTTOM: #aaa =
2px solid; border-radius: 3px
}
.stat_list TH {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; COLOR: =
white; PADDING-TOP: 0px; HEIGHT: 1.7em; BACKGROUND-COLOR: #4982de
}
.stat_list {
	MARGIN-LEFT: 0px; WIDTH: 100%
}
.stat_list TD {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; HEIGHT: 1.5em
}
.stat_list TR TD A {
	DISPLAY: block; WIDTH: 100%; COLOR: black; HEIGHT: 100%; =
TEXT-DECORATION: none
}
.stat_list TR TD A:hover {
	TEXT-DECORATION: underline
}
.stat_list .odd_row {
	BACKGROUND-COLOR: lightgrey
}
.stat_list TR.last_row TD {
	BORDER-BOTTOM: #444 4px double
}
.stat_list TR.total TD {
	FONT-WEIGHT: bold
}
.stat_list TR.sub_total TD {
	FONT-WEIGHT: bold
}
.stat_list TR.note TD {
	FONT-SIZE: small; VERTICAL-ALIGN: bottom; HEIGHT: auto
}
.stat_list TR.note TD A {
	FONT-SIZE: small; VERTICAL-ALIGN: bottom; HEIGHT: auto
}
.form_disclosure_indent {
	PADDING-RIGHT: 0px; PADDING-LEFT: 18px; MARGIN-BOTTOM: 3px; =
PADDING-BOTTOM: 18px; PADDING-TOP: 5px; BACKGROUND-COLOR: #d3d3d3
}
.image_panel {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black =
1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-SIZE: 1em; FLOAT: =
left; PADDING-BOTTOM: 5px; MARGIN: 5px; BORDER-LEFT: black 1px solid; =
WIDTH: 120px; COLOR: #999; LINE-HEIGHT: 120px; PADDING-TOP: 5px; =
BORDER-BOTTOM: black 1px solid; HEIGHT: 120px; BACKGROUND-COLOR: =
#fdfdfd; TEXT-ALIGN: center
}
#donation_item_images {
	BORDER-RIGHT: #808080 2px solid; BORDER-TOP: #808080 2px solid; =
MARGIN-TOP: 0px; DISPLAY: block; BORDER-LEFT: #808080 2px solid; WIDTH: =
740px; BORDER-BOTTOM: #808080 2px solid; BACKGROUND-COLOR: #d3d3d3
}
.block_with_border {
	BORDER-RIGHT: #808080 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#808080 2px solid; DISPLAY: block; PADDING-LEFT: 5px; PADDING-BOTTOM: =
5px; BORDER-LEFT: #808080 2px solid; PADDING-TOP: 5px; BORDER-BOTTOM: =
#808080 2px solid; BACKGROUND-COLOR: #d3d3d3
}
.panel {
	BORDER-RIGHT: #808080 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#808080 2px solid; DISPLAY: inline; PADDING-LEFT: 5px; PADDING-BOTTOM: =
5px; BORDER-LEFT: #808080 2px solid; PADDING-TOP: 5px; BORDER-BOTTOM: =
#808080 2px solid; BACKGROUND-COLOR: #d3d3d3
}
#advanced_search {
	MARGIN: 5px 0px 0px 5px
}
#column_selection {
	BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; =
MARGIN-BOTTOM: 5px; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: =
#808080 1px solid; BORDER-COLLAPSE: collapse
}
#advanced_options {
	BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; =
MARGIN-BOTTOM: 5px; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: =
#808080 1px solid; BORDER-COLLAPSE: collapse
}
#column_selection TH {
	BORDER-RIGHT: #808080 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; =
PADDING-BOTTOM: 1px; PADDING-TOP: 2px; BORDER-BOTTOM: #808080 1px solid; =
BACKGROUND-COLOR: #d3d3d3
}
#column_selection TD {
	BORDER-RIGHT: #808080 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#808080 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#808080 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #808080 1px solid
}
#advanced_options TD {
	BORDER-RIGHT: #808080 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#808080 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#808080 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #808080 1px solid
}
#column_selection TD {
	TEXT-ALIGN: center
}
.small_note {
	FONT-SIZE: 0.8em
}
.btn {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 14px; BORDER-TOP: #ccc 1px =
solid; DISPLAY: inline-block; PADDING-LEFT: 14px; FONT-SIZE: 13px; =
FILTER: =
progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#ffffff', =
endColorstr=3D'#e6e6e6', GradientType=3D0); PADDING-BOTTOM: 6px; =
BORDER-LEFT: #ccc 1px solid; CURSOR: pointer; COLOR: #333; LINE-HEIGHT: =
normal; PADDING-TOP: 5px; BORDER-BOTTOM: #bbb 1px solid; =
BACKGROUND-REPEAT: no-repeat; BACKGROUND-COLOR: #e6e6e6; border-radius: =
4px; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); =
-webkit-border-radius: 4px; -moz-border-radius: 4px; -webkit-box-shadow: =
inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); =
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px =
rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), =
0 1px 2px rgba(0, 0, 0, 0.05); -webkit-transition: 0.1s linear all; =
-moz-transition: 0.1s linear all; -ms-transition: 0.1s linear all; =
-o-transition: 0.1s linear all; transition: 0.1s linear all
}
.btn:hover {
	BACKGROUND-POSITION: 0px -15px; COLOR: #333; TEXT-DECORATION: none
}
.btn:focus {
	outline: 1px dotted #666
}
.primary.btn {
	BORDER-LEFT-COLOR: #0064cd; FILTER: =
progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#049cdb', =
endColorstr=3D'#0064cd', GradientType=3D0); BORDER-BOTTOM-COLOR: =
#003f81; COLOR: #ffffff; BORDER-TOP-COLOR: #0064cd; BACKGROUND-REPEAT: =
repeat-x; BACKGROUND-COLOR: #0064cd; BORDER-RIGHT-COLOR: #0064cd; =
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25)
}
.danger.btn {
	COLOR: #ffffff
}
.danger.btn:hover {
	COLOR: #ffffff
}
.danger.btn {
	BORDER-LEFT-COLOR: #c43c35; FILTER: =
progid:DXImageTransform.Microsoft.gradient(startColorstr=3D'#ee5f5b', =
endColorstr=3D'#c43c35', GradientType=3D0); BORDER-BOTTOM-COLOR: =
#882a25; BORDER-TOP-COLOR: #c43c35; BACKGROUND-REPEAT: repeat-x; =
BACKGROUND-COLOR: #c43c35; BORDER-RIGHT-COLOR: #c43c35; text-shadow: 0 =
-1px 0 rgba(0, 0, 0, 0.25)
}
.small.btn {
	PADDING-RIGHT: 9px; PADDING-LEFT: 9px; FONT-SIZE: 11px; PADDING-BOTTOM: =
7px; PADDING-TOP: 7px
}
.right {
	FLOAT: right
}
.modal_form {
	DISPLAY: none
}
.modal-footer {
	PADDING-TOP: 20px
}
.left-text {
	TEXT-ALIGN: left
}
.donation_item_price {
	FONT-WEIGHT: bold; FONT-SIZE: 1em; BACKGROUND: =
url(/2012auction/images/dontaion_price_background.gif?1313468621) =
no-repeat; VERTICAL-ALIGN: middle; WIDTH: 176px; CURSOR: pointer; COLOR: =
#780b05; HEIGHT: 76px; TEXT-ALIGN: center
}
.donation_item_price DIV {
	FONT-SIZE: 1em
}
.donation_item_price DIV.admin {
	FONT-SIZE: 0.85em
}
.donation_item_price A {
	COLOR: #f00; TEXT-DECORATION: none
}
.donation_item_price .price {
	DISPLAY: block; TEXT-ALIGN: left
}
.donation_item_price .price-label {
	DISPLAY: block; FLOAT: left; WIDTH: 90px; COLOR: #000; MARGIN-RIGHT: =
5px; TEXT-ALIGN: right
}
.donation_item_price .tooltip {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 3px; BACKGROUND: #fff68f; PADDING-BOTTOM: 3px; =
BORDER-LEFT: #ccc 1px solid; WIDTH: auto; COLOR: #000; PADDING-TOP: 3px; =
BORDER-BOTTOM: #ccc 1px solid
}
DIV.auto_complete {
	BACKGROUND: #fff; WIDTH: 350px
}
DIV.auto_complete UL {
	BORDER-RIGHT: #888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #888 1px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: =
#888 1px solid; WIDTH: 100%; PADDING-TOP: 0px; BORDER-BOTTOM: #888 1px =
solid; LIST-STYLE-TYPE: none
}
DIV.auto_complete UL LI {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: =
0px; PADDING-TOP: 3px
}
DIV.auto_complete UL LI.selected {
	BACKGROUND-COLOR: #ffb
}
DIV.auto_complete UL STRONG.highlight {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; COLOR: #800; PADDING-TOP: 0px
}
.list {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.list LI {
	CLEAR: left; CURSOR: move; HEIGHT: 20px
}
.list LI.header DIV {
	BORDER-TOP: #ccc 1px solid; FONT-WEIGHT: bold; CURSOR: default; COLOR: =
white; BACKGROUND-COLOR: #4982de
}
.list LI DIV {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 2px; MIN-WIDTH: 70px; =
DISPLAY: block; PADDING-LEFT: 2px; FLOAT: left; PADDING-BOTTOM: 2px; =
OVERFLOW: hidden; WIDTH: 70px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px =
solid; HEIGHT: 20px
}
.list LI DIV#sellatcheck {
	MIN-WIDTH: 100px; WIDTH: 100px
}
.list LI DIV#linked {
	MIN-WIDTH: 80px; WIDTH: 80px
}
.list LI DIV#price {
	MIN-WIDTH: 60px; WIDTH: 60px
}
.list LI DIV#fmv {
	MIN-WIDTH: 60px; WIDTH: 60px
}
.list LI DIV#name {
	MIN-WIDTH: 260px; BORDER-LEFT: #ccc 1px solid; WIDTH: 260px
}
.list LI DIV#name IMG {
	MARGIN-BOTTOM: -2px
}

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/shared_stylesheets/colorPicker.css?1320108691

#colorpicker {
	BORDER-RIGHT: #c0c0c0 2px outset; BORDER-TOP: #c0c0c0 2px outset; =
Z-INDEX: 1000; BACKGROUND: #f9f9f9; OVERFLOW: hidden; BORDER-LEFT: =
#c0c0c0 2px outset; WIDTH: 145px; BORDER-BOTTOM: #c0c0c0 2px outset; =
POSITION: absolute; HEIGHT: 135px
}
#colorpicker-hue-container {
	LEFT: 120px; WIDTH: 18px; POSITION: absolute; TOP: 4px; HEIGHT: 110px
}
#colorpicker-hue-bg-img {
	WIDTH: 100%; HEIGHT: 100%
}
#colorpicker-hue-slider {
	LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; HEIGHT: 100%
}
#colorpicker-hue-thumb {
	Z-INDEX: 1009; LEFT: 0px; WIDTH: 18px; CURSOR: default; POSITION: =
absolute; TOP: 0px; HEIGHT: 18px
}
#colorpicker-bar {
	PADDING-RIGHT: 10px; TEXT-ALIGN: right
}
#colorpicker-close {
	FONT-WEIGHT: bold; FONT-SIZE: 10px; CURSOR: pointer; COLOR: blue; =
FONT-FAMILY: Tahoma, Helvetica, Sans-Serif
}
#colorpicker-div {
	BORDER-RIGHT: #666 1px solid; BORDER-TOP: #666 1px solid; LEFT: 8px; =
BORDER-LEFT: #666 1px solid; WIDTH: 100px; BORDER-BOTTOM: #666 1px =
solid; POSITION: absolute; TOP: 8px; HEIGHT: 100px
}
#colorpicker-bg {
	Z-INDEX: 1001; LEFT: 0px; OVERFLOW: hidden; WIDTH: 100%; POSITION: =
absolute; TOP: 0px; HEIGHT: 100%
}
#colorpicker-bg-overlay {
	Z-INDEX: 1001; LEFT: 0px; OVERFLOW: hidden; WIDTH: 100%; POSITION: =
absolute; TOP: 0px; HEIGHT: 100%
}
#colorpicker-selector {
	MARGIN-TOP: -6px; Z-INDEX: 1009; LEFT: 0px; MARGIN-LEFT: -6px; WIDTH: =
11px; CURSOR: default; POSITION: absolute; TOP: 0px; HEIGHT: 11px
}
#colorpicker-selector IMG {
	LEFT: 0px; POSITION: absolute; TOP: 0px
}
#colorpicker-footer {
	LEFT: 10px; WIDTH: 127px; POSITION: absolute; TOP: 114px
}
#colorpicker-value {
	FLOAT: left
}
#colorpicker-value {
	FONT-SIZE: 9px! important; FONT-FAMILY: Helvetica, Verdana, Sans-Serif; =
HEIGHT: 10px
}
#colorpicker-value-input {
	FONT-SIZE: 9px! important; FONT-FAMILY: Helvetica, Verdana, Sans-Serif; =
HEIGHT: 10px
}
#colorpicker-value-input {
	WIDTH: 40px
}
#colorpicker-okbutton {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 10px; FONT-SIZE: 10px; BACKGROUND: =
#3366ff; FLOAT: right; PADDING-BOTTOM: 0px; BORDER-LEFT: #666666 1px =
solid; COLOR: #ffffff; PADDING-TOP: 0px; BORDER-BOTTOM: #666666 1px =
solid; FONT-FAMILY: Tahoma, Helvetica, Sans-Serif
}

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/stylesheets/calendar_date_select/silver.css?1313468625

.calendar_date_select {
	BORDER-RIGHT: #777 1px solid; BORDER-TOP: #777 1px solid; DISPLAY: =
block; Z-INDEX: 1000; BORDER-LEFT: #777 1px solid; WIDTH: 195px; COLOR: =
white; BORDER-BOTTOM: #777 1px solid
}
IFRAME.ie6_blocker {
	Z-INDEX: 999; POSITION: absolute
}
.calendar_date_select THEAD TH {
	BORDER-TOP: #777 1px solid; FONT-WEIGHT: bold; COLOR: white! important; =
BORDER-BOTTOM: #333 2px solid; BACKGROUND-COLOR: #000
}
.calendar_date_select .cds_buttons {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px; BACKGROUND-COLOR: #555; TEXT-ALIGN: center
}
.calendar_date_select .cds_footer {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 12px; PADDING-BOTTOM: =
3px; PADDING-TOP: 3px; BACKGROUND-COLOR: black; TEXT-ALIGN: center
}
.calendar_date_select TABLE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.calendar_date_select .cds_header {
	BORDER-BOTTOM: #aaa 2px solid; BACKGROUND-COLOR: #ccc; TEXT-ALIGN: =
center
}
.calendar_date_select .cds_header SPAN {
	FONT-WEIGHT: bold; FONT-SIZE: 15px; COLOR: black
}
.calendar_date_select SELECT {
	FONT-SIZE: 11px
}
.calendar_date_select .cds_header A:hover {
	COLOR: white
}
.calendar_date_select .cds_header A {
	FONT-SIZE: 14px; WIDTH: 22px; COLOR: black! important; HEIGHT: 20px; =
TEXT-DECORATION: none
}
.calendar_date_select .cds_header A.prev {
	FLOAT: left
}
.calendar_date_select .cds_header A.next {
	FLOAT: right
}
.calendar_date_select .cds_header A.close {
	DISPLAY: none; FLOAT: right
}
.calendar_date_select .cds_header SELECT.month {
	WIDTH: 90px
}
.calendar_date_select .cds_header SELECT.year {
	WIDTH: 61px
}
.calendar_date_select .cds_buttons A {
	FONT-SIZE: 9px; COLOR: white
}
.calendar_date_select TD {
	FONT-SIZE: 12px; VERTICAL-ALIGN: middle; WIDTH: 24px; HEIGHT: 21px; =
BACKGROUND-COLOR: #666666; TEXT-ALIGN: center
}
.calendar_date_select TD.weekend {
	BACKGROUND-COLOR: #606060
}
.calendar_date_select TD DIV {
	COLOR: #fff
}
.calendar_date_select TD DIV.other {
	COLOR: #888
}
.calendar_date_select TD.selected DIV {
	COLOR: black
}
.calendar_date_select TBODY TD {
	BORDER-BOTTOM: #555 1px solid
}
.calendar_date_select TD.selected {
	BACKGROUND-COLOR: white
}
.calendar_date_select TD:hover {
	BACKGROUND-COLOR: #ccc
}
.calendar_date_select TD.today {
	BORDER-RIGHT: #999 1px dashed; BORDER-TOP: #999 1px dashed; =
BORDER-LEFT: #999 1px dashed; BORDER-BOTTOM: #999 1px dashed
}
.calendar_date_select TD.disabled DIV {
	COLOR: #454545
}
.fieldWithErrors .calendar_date_select {
	BORDER-RIGHT: red 2px solid; BORDER-TOP: red 2px solid; BORDER-LEFT: =
red 2px solid; BORDER-BOTTOM: red 2px solid
}

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_000D_01CCDF29.AA157D50"


------=_NextPart_001_000D_01CCDF29.AA157D50
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>TofinoAuctions.com - =
Markham Gras 2012 PTA Auction - Simplified Auction Management</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<META=20
content=3D"Auction, Schools, Fundraising, Nonprofit, TofinoAuctions.com, =
SchoolAuction.net"=20
name=3Dkeywords>
<META=20
content=3D"SchoolAuction.net and TofinoAuctions.com are web applications =
designed to simplify and streamline managing fundraising auctions."=20
name=3Ddescription><LINK media=3Dprint=20
href=3D"http://markham.tofinoauctions.com/2012auction/shared_stylesheets/=
print.css?1320108691"=20
type=3Dtext/css rel=3Dstylesheet><LINK media=3Dscreen=20
href=3D"http://markham.tofinoauctions.com/2012auction/stylesheets/base.cs=
s?1327471913"=20
type=3Dtext/css rel=3Dstylesheet><LINK media=3Dscreen=20
href=3D"http://markham.tofinoauctions.com/2012auction/shared_stylesheets/=
colorPicker.css?1320108691"=20
type=3Dtext/css rel=3Dstylesheet><LINK media=3Dscreen=20
href=3D"/2012auction/stylesheets/colors.css" type=3Dtext/css =
rel=3Dstylesheet>
<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/prototyp=
e.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/effects.=
js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/dragdrop=
.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/controls=
.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/accordio=
n.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/accordio=
n_new.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/applicat=
ion.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/builder.=
js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/colorPic=
ker.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/cookieja=
r.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/filterli=
st.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/general.=
js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/slider.j=
s?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/sound.js=
?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/tabs.js?=
1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/tooltip.=
js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/trackpar=
se.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/yahoo.co=
lor.js?1313468623"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/calendar=
_date_select/calendar_date_select.js?1313468625"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://markham.tofinoauctions.com/2012auction/javascripts/calendar=
_date_select/format_american.js?1313468625"=20
type=3Dtext/javascript></SCRIPT>
<LINK media=3Dscreen=20
href=3D"http://markham.tofinoauctions.com/2012auction/stylesheets/calenda=
r_date_select/silver.css?1313468625"=20
type=3Dtext/css rel=3Dstylesheet><LINK media=3Dscreen=20
href=3D"/2012auction/stylesheets/main_site_custom.css?1313468650" =
type=3Dtext/css=20
rel=3Dstylesheet><!-- Add html here -->
<META content=3D"MSHTML 6.00.6000.17107" name=3DGENERATOR></HEAD>
<BODY>
<DIV id=3Dcontainer>
<DIV id=3Dheader>
<DIV id=3Dlogo><A title=3DTofino=20
href=3D"http://markham.tofinoauctions.com/2012auction/homepages"><IMG=20
id=3Dlogo_image alt=3DLogo=20
src=3D"http://markham.tofinoauctions.com/2012auction/images/tofino_banner=
.gif?1313468621"></A></DIV>
<H1>Tofino</H1>
<UL id=3DnavMain>
  <LI class=3Dfirst-child><A title=3DHome=20
  =
href=3D"http://markham.tofinoauctions.com/2012auction/homepages">Home</A>=
=20
  <LI><A title=3DCatalog=20
  =
href=3D"http://markham.tofinoauctions.com/2012auction/donation_items">Cat=
alog</A>=20

  <LI><A title=3DDonors=20
  =
href=3D"http://markham.tofinoauctions.com/2012auction/donors">Donors</A> =

  <LI>
  <LI>
  <LI>
  <LI>
  <LI>
  <LI>
  <LI>
  <LI><A title=3D"Buy tickets to the event"=20
  href=3D"http://markham.tofinoauctions.com/2012auction/register">Buy =
Tickets</A>=20
  <LI><A title=3DLogin=20
  =
href=3D"http://markham.tofinoauctions.com/2012auction/security/login">Log=
in</A>=20
  </LI></UL></DIV><!-- #header --><FOOTER=20
id=3Dfooter><!-- Add Site Foot Here --></FOOTER>
<DIV class=3Dclearfix id=3Dwrapper>
<TABLE cellSpacing=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD colSpan=3D3>
      <DIV id=3Dhomepage_title>
      <H1>Markham Gras 2012 PTA Auction</H1>
      <H4>Feb 25, 2012 5:30 PM </H4></DIV></TD></TR>
  <TR>
    <TD width=3D"80%" colSpan=3D2>
      <DIV id=3Dmessage>
      <P style=3D"TEXT-ALIGN: center">&nbsp;</P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
36px"><SPAN=20
      style=3D"COLOR: #800080"><EM><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif"><STRONG><IMG=20
      style=3D"WIDTH: 118px; HEIGHT: 126px" alt=3D""=20
      =
src=3D"https://d1dc57evlm7o0i.cloudfront.net/tofinoauctions.com/markham/2=
012auction/homepage_images/1/markham_auction_mask.jpg">2012=20
      Markham Gras</STRONG></SPAN></EM></SPAN></SPAN> <IMG=20
      style=3D"WIDTH: 118px; HEIGHT: 126px" alt=3D""=20
      =
src=3D"https://d1dc57evlm7o0i.cloudfront.net/tofinoauctions.com/markham/2=
012auction/homepage_images/1/markham_auction_mask.jpg"></P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
18px"><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif"><STRONG>Our Annual Auction =
Bringing=20
      Art &amp; Music to Markham Elementary =
School!</STRONG></SPAN></SPAN></P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
18px"><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif">Markham Gras is set for =
February 25th=20
      2012.&nbsp; Help us top last year's record-breaking=20
      event.&nbsp;&nbsp;Tickets are available. &nbsp;<A=20
      =
href=3D"http://markham.tofinoauctions.com/2012auction/register"><SPAN=20
      style=3D"COLOR: #ff0000">Buy Now by Clicking Here </SPAN></A>.=20
      </SPAN></SPAN></P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
18px"><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif">This is the largest =
fundraiser of the=20
      year to help to keep the Markham Art Program alive in our =
wonderful school=20
      and bring the gift of MUSIC back to our students.&nbsp; Please =
share the=20
      link with your family and friends to help us reach our goal.&nbsp; =
Cash=20
      donations are welcome.&nbsp; <A=20
      href=3D"http://markham.tofinoauctions.com/2012auction/give">Click =
&nbsp;on=20
      Donate Now</A> to make a 100% tax free donation.</SPAN></SPAN></P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
18px"><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif"><A=20
      =
href=3D"https://markham.tofinoauctions.com/2012auction/donate_items/new">=
Fill=20
      out this form</A> if you have an item or service to donate. Or if =
you=20
      would like to&nbsp;volunteer,&nbsp;please email us at <A=20
      =
href=3D"mailto:markhampta@gmail.com">markhampta@gmail.com</A>.&nbsp; =
Keep=20
      checking back to see our catalog come together.&nbsp; Board =
Parties are on=20
      sale now by <A=20
      =
href=3D"http://markham.tofinoauctions.com/2012auction/give">clicking on=20
      Donate Now Or Buy a Board Party!</A>&nbsp;&nbsp; Reserve your seat =

      today.&nbsp; </SPAN></SPAN></P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
18px"><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif">Tickets to this&nbsp;event =
make a=20
      great holiday gift.&nbsp; </SPAN></SPAN></P>
      <P style=3D"TEXT-ALIGN: center"><SPAN style=3D"FONT-SIZE: =
18px"><SPAN=20
      style=3D"FONT-FAMILY: georgia, serif">&nbsp; &nbsp;=20
      &nbsp;&nbsp;</SPAN></SPAN>=20
      =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =

      =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P></D=
IV></TD>
    <TD vAlign=3Dtop noWrap rowSpan=3D2>
      <DIV id=3Dgutter>
      <H2 style=3D"PADDING-BOTTOM: 10px"><A class=3D"btn danger"=20
      href=3D"http://markham.tofinoauctions.com/2012auction/give">Donate =
Now Or=20
      Buy a Board Party!</A> </H2></DIV></TD></TR>
  <TR>
    <TD vAlign=3Dtop colSpan=3D2>
      <DIV id=3Dadmin_links></DIV></TD></TR></TBODY></TABLE>
<P style=3D"MARGIN-TOP: 10px"><IFRAME=20
style=3D"OVERFLOW: hidden; WIDTH: 450px; BORDER-TOP-STYLE: none; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 35px; =
BORDER-BOTTOM-STYLE: none"=20
src=3D"http://blocked.pps.k12.or.us/" frameBorder=3D0 scrolling=3Dno=20
allowTransparency></IFRAME></P></DIV><!--/wrapper--></DIV><!-- =
#container --></BODY></HTML>

------=_NextPart_001_000D_01CCDF29.AA157D50
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://blocked.pps.k12.or.us/

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Portland Public School - Blocked Content</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<STYLE type=3Dtext/css>.style22 {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ff9900; FONT-FAMILY: =
Verdana, Arial, Helvetica, sans-serif
}
</STYLE>

<META content=3D"MSHTML 6.00.6000.17107" name=3DGENERATOR></HEAD>
<BODY text=3D#cccccc vLink=3D#ff9900 aLink=3D#ff9900 link=3D#ff9900 =
background=3D""=20
topMargin=3D0 marginheight=3D"0">
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D600 align=3Dcenter =
border=3D0>
  <TBODY>
  <TR>
    <TD width=3D10 background=3D""></TD>
    <TD width=3D580>
      <TABLE cellSpacing=3D0 cellPadding=3D0 width=3D580 align=3Dcenter =
border=3D0>
        <TBODY>
        <TR>
          <TD align=3Dmiddle><!-- <img src=3D"PPS2.jpg" alt=3D"PPS =
Logo"></td><BR><BR> --><!-- <td bgcolor=3D"#003366" valign=3D"bottom" =
height=3D"125"><object =
classid=3D"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" =
codebase=3D"http://download.macromedia.com/pub/shockwave/cabs/flash/swfla=
sh.cab#version=3D7,0,19,0" width=3D"580" height=3D"125">=0A=
          <param name=3D"movie" =
value=3D"images/headeranimationfinal.swf" />=0A=
          <param name=3D"quality" value=3D"high" />=0A=
          <embed src=3D"images/headeranimationfinal.swf" =
quality=3D"high" =
pluginspage=3D"http://www.macromedia.com/go/getflashplayer" =
type=3D"application/x-shockwave-flash" width=3D"580" =
height=3D"125"></embed>=0A=
        </object></td> --></TD>
        <TR>
          <TD><BR></TD></TR>
        <TR>
          <TD><BR></TD></TR>
        <TR>
          <TD><BR></TD></TR>
        <TR>
          <TD width=3D507 background=3Dabout:blank bgColor=3D#000000 =
height=3D25>
            <DIV align=3Dcenter><FONT face=3D"Verdana, Arial, Helvetica, =
sans-serif"=20
            size=3D2><A =
href=3D"javascript:history.go(-1)">Back</A></FONT> | <FONT=20
            face=3D"Verdana, Arial, Helvetica, sans-serif" size=3D2><A=20
            href=3D"http://inside.pps.k12.or.us/">PPS Inside</A></FONT> =
| <FONT=20
            face=3D"Verdana, Arial, Helvetica, sans-serif" size=3D2><A=20
            href=3D"http://ithome.pps.k12.or.us/">PPS IT Home</A></FONT> =
| <FONT=20
            face=3D"Verdana,Arial, Helvetica, sans-serif" size=3D2><A=20
            href=3D"http://www.pps.k12.or.us/">Portland Public =
Schools</A></FONT>=20
            | <FONT face=3D"Verdana,Arial, Helvetica, sans-serif" =
size=3D2><A=20
            =
href=3D"http://www.google.com/">Google</A></FONT></DIV></TD></TR>
        <TR>
          <TD vAlign=3Dbottom align=3Dleft width=3D507 =
bgColor=3D#003366></TD></TR>
        <TR>
          <TD vAlign=3Dbottom align=3Dleft bgColor=3D#003366>
            <TABLE cellSpacing=3D10 cellPadding=3D0 width=3D570 =
align=3Dcenter=20
              border=3D0><TBODY>
              <TR vAlign=3Dtop bgColor=3D#003366>
                <TD colSpan=3D2 height=3D100><FONT=20
                  face=3D"Arial, Helvetica, sans-serif" =
size=3D4><BR>PORTLAND PUBLIC=20
                  SCHOOLS - BLOCKED CONTENT </FONT><BR>
                  <HR align=3Dcenter width=3D"100%" noShade SIZE=3D1>
                  <FONT face=3D"Arial, Helvetica, sans-serif" =
size=3D3>The content=20
                  you are trying to access has been blocked by Portland =
Public=20
                  Schools in accordance with board policy 8.60.040 -P.=20
                  <BR><BR>If you feel this content has been blocked in =
error,=20
                  please email webfilter@pps.k12.or.us <BR><BR>If you =
are=20
                  looking for a teaching resource (especially for video) =
Please=20
                  visit the Instructional Tech section of the OTL =
website for=20
                  unblocked alternatives at =
http://inside.otl.pps.k12.or.us/=20
                  </FONT><BR><!--                  <hr =
noshade=3D"noshade" align=3D"center" width=3D"100%" size=3D"1" />        =
          <font size=3D"2" face=3D"Arial, Helvetica, =
sans-serif"></font><br />=0A=
                  <hr noshade=3D"noshade" align=3D"center" =
width=3D"100%" size=3D"1" />                  <font face=3D"Verdana, =
Arial, Helvetica, sans-serif" size=3D"2" color=3D"#FFFFFF"><span =
class=3D"triple"></span></font><font size=3D"2" face=3D"Arial, =
Helvetica, sans-serif">=0A=
</font><br />=0A=
                <hr noshade=3D"noshade" align=3D"center" width=3D"100%" =
size=3D"1" />                <span class=3D"style22">Copyright: If you =
decide to use this free html template you must leave our weblink at the =
bottom on all pages of the web design. </span>=0A=
--></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
    <TD width=3D10 background=3D""></TD></TR>
  <TR>
    <TD width=3D10 background=3D"" height=3D10></TD>
    <TD width=3D580 background=3D"" height=3D10></TD>
    <TD width=3D10 background=3D"" =
height=3D10></TD></TR></TBODY></TABLE></BODY></HTML>

------=_NextPart_001_000D_01CCDF29.AA157D50--

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/prototype.js?1313468623

/*  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=
/* 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 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=
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=
/*!=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=
Prototype._original_property =3D window.Sizzle;=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=
=0A=
Element.addMethods();=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_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/effects.js?1313468623

// script.aculo.us effects.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010=0A=
=0A=
// Copyright (c) 2005-2010 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, options) {=0A=
    element =3D $(element);=0A=
    effect  =3D (effect || 'appear').toLowerCase();=0A=
    =0A=
    return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] =
](element, Object.extend({=0A=
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }=0A=
    }, 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=
    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_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/dragdrop.js?1313468623

// script.aculo.us dragdrop.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010=0A=
=0A=
// Copyright (c) 2005-2010 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=
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(document, "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(document, "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 this.element.cumulativeOffset();=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).toArray();=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 this.element.cumulativeOffset();=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.identify()] =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 dropon.cumulativeOffset();=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_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/controls.js?1313468623

// script.aculo.us controls.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010=0A=
=0A=
// Copyright (c) 2005-2010 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2010 Ivan Krstic =
(http://blogs.law.harvard.edu/ivan)=0A=
//           (c) 2005-2010 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);=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_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/accordion.js?1313468623

// accordion.js v2.0
//
// Copyright (c) 2007 stickmanlabs
// Author: Kevin P Miller | http://www.stickmanlabs.com
//=20
// Accordion is freely distributable under the terms of an MIT-style =
license.
//
// I don't care what you think about the file size...
//   Be a pro:=20
//	    =
http://www.thinkvitamin.com/features/webapps/serving-javascript-fast
//      =
http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compres=
sing_javascript_and_css_files
//

/*-----------------------------------------------------------------------=
------------------------*/

if (typeof Effect =3D=3D 'undefined')=20
	throw("accordion.js requires including script.aculo.us' effects.js =
library!");

var accordion =3D Class.create();
accordion.prototype =3D {

	//
	//  Setup the Variables
	//
	showAccordion : null,
	currentAccordion : null,
	duration : null,
	effects : [],
	animating : false,
=09
	// =20
	//  Initialize the accordions
	//
	initialize: function(container, options) {
	  if (!$(container)) {
	    throw(container+" doesn't exist!");
	    return false;
	  }
	 =20
		this.options =3D Object.extend({
			resizeSpeed : 8,
			classNames : {
				toggle : 'accordion_toggle',
				toggleActive : 'accordion_toggle_active',
				content : 'accordion_content'
			},
			defaultSize : {
				height : null,
				width : null
			},
			direction : 'vertical',
			onEvent : 'click'
		}, options || {});
	=09
		this.duration =3D ((11-this.options.resizeSpeed)*0.15);

		var accordions =3D $$('#'+container+' =
.'+this.options.classNames.toggle);
		accordions.each(function(accordion) {
			Event.observe(accordion, this.options.onEvent, =
this.activate.bind(this, accordion), false);
			if (this.options.onEvent =3D=3D 'click') {
			  accordion.onclick =3D function() {return false;};
			}
		=09
			if (this.options.direction =3D=3D 'horizontal') {
				var options =3D $H({width: '0px'});
			} else {
				var options =3D $H({height: '0px'});		=09
			}
			options.merge({display: 'none'});		=09
		=09
			this.currentAccordion =3D $(accordion.next(0)).setStyle(options);		=09
		}.bind(this));
	},
=09
	//
	//  Activate an accordion
	//
	activate : function(accordion) {
		if (this.animating) {
			return false;
		}
	=09
		this.effects =3D [];
=09
		this.currentAccordion =3D $(accordion.next(0));
		this.currentAccordion.setStyle({
			display: 'block'
		});	=09
	=09
		=
this.currentAccordion.previous(0).addClassName(this.options.classNames.to=
ggleActive);

		if (this.options.direction =3D=3D 'horizontal') {
			this.scaling =3D $H({
				scaleX: true,
				scaleY: false
			});
		} else {
			this.scaling =3D $H({
				scaleX: false,
				scaleY: true
			});		=09
		}
		=09
		if (this.currentAccordion =3D=3D this.showAccordion) {
		  this.deactivate();
		} else {
		  this._handleAccordion();
		}
	},
	//=20
	// Deactivate an active accordion
	//
	deactivate : function() {
		var options =3D $H({
		  duration: this.duration,
			scaleContent: false,
			transition: Effect.Transitions.sinoidal,
			queue: {
				position: 'end',=20
				scope: 'accordionAnimation'
			},
			scaleMode: {=20
				originalHeight: this.options.defaultSize.height ? =
this.options.defaultSize.height : this.currentAccordion.scrollHeight,
				originalWidth: this.options.defaultSize.width ? =
this.options.defaultSize.width : this.currentAccordion.scrollWidth
			},
			afterFinish: function() {
				this.showAccordion.setStyle({
          height: 'auto',
					display: 'none'
				});			=09
				this.showAccordion =3D null;
				this.animating =3D false;
			}.bind(this)
		});   =20
    options.merge(this.scaling);

    =
this.showAccordion.previous(0).removeClassName(this.options.classNames.to=
ggleActive);
   =20
		new Effect.Scale(this.showAccordion, 0, options);
	},

  //
  // Handle the open/close actions of the accordion
  //
	_handleAccordion : function() {
		var options =3D $H({
			sync: true,
			scaleFrom: 0,
			scaleContent: false,
			transition: Effect.Transitions.sinoidal,
			scaleMode: {=20
				originalHeight: this.options.defaultSize.height ? =
this.options.defaultSize.height : this.currentAccordion.scrollHeight,
				originalWidth: this.options.defaultSize.width ? =
this.options.defaultSize.width : this.currentAccordion.scrollWidth
			}
		});
		options.merge(this.scaling);
	=09
		this.effects.push(
			new Effect.Scale(this.currentAccordion, 100, options)
		);

		if (this.showAccordion) {
			=
this.showAccordion.previous(0).removeClassName(this.options.classNames.to=
ggleActive);
		=09
			options =3D $H({
				sync: true,
				scaleContent: false,
				transition: Effect.Transitions.sinoidal
			});
			options.merge(this.scaling);
		=09
			this.effects.push(
				new Effect.Scale(this.showAccordion, 0, options)
			);			=09
		}
	=09
    new Effect.Parallel(this.effects, {
			duration: this.duration,=20
			queue: {
				position: 'end',=20
				scope: 'accordionAnimation'
			},
			beforeStart: function() {
				this.animating =3D true;
			}.bind(this),
			afterFinish: function() {
				if (this.showAccordion) {
					this.showAccordion.setStyle({
						display: 'none'
					});			=09
				}
				$(this.currentAccordion).setStyle({
				  height: 'auto'
				});
				this.showAccordion =3D this.currentAccordion;
				this.animating =3D false;
			}.bind(this)
		});
	}
}
	
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/accordion_new.js?1313468623

// accordion.js v2.0=0A=
//=0A=
// Copyright (c) 2007 stickmanlabs=0A=
// Author: Kevin P Miller | http://www.stickmanlabs.com=0A=
// =0A=
// Accordion is freely distributable under the terms of an MIT-style =
license.=0A=
//=0A=
// I don't care what you think about the file size...=0A=
//   Be a pro: =0A=
//	    =
http://www.thinkvitamin.com/features/webapps/serving-javascript-fast=0A=
//      =
http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compres=
sing_javascript_and_css_files=0A=
//=0A=
=0A=
/*-----------------------------------------------------------------------=
------------------------*/=0A=
=0A=
if (typeof Effect =3D=3D 'undefined') =0A=
	throw("accordion.js requires including script.aculo.us' effects.js =
library!");=0A=
=0A=
var accordion =3D Class.create();=0A=
accordion.prototype =3D {=0A=
=0A=
	//=0A=
	//  Setup the Variables=0A=
	//=0A=
	showAccordion : null,=0A=
	currentAccordion : null,=0A=
	duration : null,=0A=
	effects : [],=0A=
	animating : false,=0A=
	=0A=
	//  =0A=
	//  Initialize the accordions=0A=
	//=0A=
	initialize: function(container, options) {=0A=
	  if (!$(container)) {=0A=
	    throw(container+" doesn't exist!");=0A=
	    return false;=0A=
	  }=0A=
	  =0A=
		this.options =3D Object.extend({=0A=
			resizeSpeed : 8,=0A=
			classNames : {=0A=
				toggle : 'accordion_toggle',=0A=
				toggleActive : 'accordion_toggle_active',=0A=
				content : 'accordion_content'=0A=
			},=0A=
			defaultSize : {=0A=
				height : null,=0A=
				width : null=0A=
			},=0A=
			direction : 'vertical',=0A=
			onEvent : 'click'=0A=
		}, options || {});=0A=
		=0A=
		this.duration =3D ((11-this.options.resizeSpeed)*0.15);=0A=
=0A=
		var accordions =3D $$('#'+container+' =
.'+this.options.classNames.toggle);=0A=
		accordions.each(function(accordion) {=0A=
			Event.observe(accordion, this.options.onEvent, =
this.activate.bind(this, accordion), false);=0A=
			if (this.options.onEvent =3D=3D 'click') {=0A=
			  accordion.onclick =3D function() {return false;};=0A=
			}=0A=
			=0A=
			if (this.options.direction =3D=3D 'horizontal') {=0A=
				var options =3D {width: '0px', display:'none'};=0A=
			} else {=0A=
				var options =3D {height: '0px', display:'none'};=0A=
			}=0A=
//			options.merge({display: 'none'});			=0A=
			=0A=
			this.currentAccordion =3D $(accordion.next(0)).setStyle(options);=0A=
		}.bind(this));=0A=
	},=0A=
	=0A=
	//=0A=
	//  Activate an accordion=0A=
	//=0A=
	activate : function(accordion) {=0A=
		if (this.animating) {=0A=
			return false;=0A=
		}=0A=
		=0A=
		this.effects =3D [];=0A=
	=0A=
		this.currentAccordion =3D $(accordion.next(0));=0A=
		this.currentAccordion.setStyle({=0A=
			display: 'block'=0A=
		});		=0A=
		=0A=
		=
this.currentAccordion.previous(0).addClassName(this.options.classNames.to=
ggleActive);=0A=
=0A=
		if (this.options.direction =3D=3D 'horizontal') {=0A=
			this.scaling =3D $H({=0A=
				scaleX: true,=0A=
				scaleY: false=0A=
			});=0A=
		} else {=0A=
			this.scaling =3D $H({=0A=
				scaleX: false,=0A=
				scaleY: true=0A=
			});			=0A=
		}=0A=
			=0A=
		if (this.currentAccordion =3D=3D this.showAccordion) {=0A=
		  this.deactivate();=0A=
		} else {=0A=
		  this._handleAccordion();=0A=
		}=0A=
	},=0A=
	// =0A=
	// Deactivate an active accordion=0A=
	//=0A=
	deactivate : function() {=0A=
		var options =3D $H({=0A=
		  duration: this.duration,=0A=
			scaleContent: false,=0A=
			transition: Effect.Transitions.sinoidal,=0A=
			queue: {=0A=
				position: 'end', =0A=
				scope: 'accordionAnimation'=0A=
			},=0A=
			scaleMode: { =0A=
				originalHeight: this.options.defaultSize.height ? =
this.options.defaultSize.height : this.currentAccordion.scrollHeight,=0A=
				originalWidth: this.options.defaultSize.width ? =
this.options.defaultSize.width : this.currentAccordion.scrollWidth=0A=
			},=0A=
			afterFinish: function() {=0A=
				this.showAccordion.setStyle({=0A=
          height: 'auto',=0A=
					display: 'none'=0A=
				});				=0A=
				this.showAccordion =3D null;=0A=
				this.animating =3D false;=0A=
			}.bind(this)=0A=
		});    =0A=
//    options.merge(this.scaling);=0A=
=0A=
    =
this.showAccordion.previous(0).removeClassName(this.options.classNames.to=
ggleActive);=0A=
    =0A=
		new Effect.Scale(this.showAccordion, 0, =
options.update(this.scaling).toObject());=0A=
	},=0A=
=0A=
  //=0A=
  // Handle the open/close actions of the accordion=0A=
  //=0A=
	_handleAccordion : function() {=0A=
		var options =3D $H({=0A=
			sync: true,=0A=
			scaleFrom: 0,=0A=
			scaleContent: false,=0A=
			transition: Effect.Transitions.sinoidal,=0A=
			scaleMode: { =0A=
				originalHeight: this.options.defaultSize.height ? =
this.options.defaultSize.height : this.currentAccordion.scrollHeight,=0A=
				originalWidth: this.options.defaultSize.width ? =
this.options.defaultSize.width : this.currentAccordion.scrollWidth=0A=
			}=0A=
		});=0A=
		options.merge(this.scaling);=0A=
		=0A=
		this.effects.push(=0A=
			new Effect.Scale(this.currentAccordion, 100, =
options.update(this.scaling).toObject())=0A=
		);=0A=
=0A=
		if (this.showAccordion) {=0A=
			=
this.showAccordion.previous(0).removeClassName(this.options.classNames.to=
ggleActive);=0A=
			=0A=
			options =3D $H({=0A=
				sync: true,=0A=
				scaleContent: false,=0A=
				transition: Effect.Transitions.sinoidal=0A=
			});=0A=
			options.merge(this.scaling);=0A=
			=0A=
			this.effects.push(=0A=
				new Effect.Scale(this.showAccordion, 0, =
options.update(this.scaling).toObject())=0A=
			);				=0A=
		}=0A=
		=0A=
    new Effect.Parallel(this.effects, {=0A=
			duration: this.duration, =0A=
			queue: {=0A=
				position: 'end', =0A=
				scope: 'accordionAnimation'=0A=
			},=0A=
			beforeStart: function() {=0A=
				this.animating =3D true;=0A=
			}.bind(this),=0A=
			afterFinish: function() {=0A=
				if (this.showAccordion) {=0A=
					this.showAccordion.setStyle({=0A=
						display: 'none'=0A=
					});				=0A=
				}=0A=
				$(this.currentAccordion).setStyle({=0A=
				  height: 'auto'=0A=
				});=0A=
				this.showAccordion =3D this.currentAccordion;=0A=
				this.animating =3D false;=0A=
			}.bind(this)=0A=
		});=0A=
	}=0A=
}
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/application.js?1313468623

// Place your application-specific JavaScript functions and classes here=0A=
// This file is automatically included by javascript_include_tag =
:defaults=0A=
=0A=
function showtxt(thisfield, defaulttxt) {=0A=
	thisfield.style.backgroundColor =3D "#FFFF88";=0A=
	if (thisfield.value =3D=3D defaulttxt) {=0A=
		thisfield.style.color =3D "#000";=0A=
		thisfield.value =3D "";=0A=
	}=0A=
} =0A=
=0A=
function hidetxt(thisfield, defaulttxt) {=0A=
	thisfield.style.backgroundColor =3D "#FFFFFF";=0A=
	if (thisfield.value =3D=3D "") {=0A=
		thisfield.style.color =3D "#999";=0A=
		thisfield.value =3D defaulttxt;=0A=
	}=0A=
}=0A=

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/builder.js?1313468623

// script.aculo.us builder.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010=0A=
=0A=
// Copyright (c) 2005-2010 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_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/colorPicker.js?1313468623

=0A=
/* =0A=
   colorPicker for script.aculo.us, version 1.0=0A=
   REQUIRES prototype.js, yahoo.color.js and script.aculo.us=0A=
   written by Matthias Platzer AT knallgrau.at=0A=
   for a detailled documentation go to =
http://www.knallgrau.at/code/colorpicker =0A=
 */=0A=
=0A=
if(!Control) var Control =3D {};=0A=
Control.colorPickers =3D [];=0A=
Control.ColorPicker =3D Class.create();=0A=
Control.ColorPicker.activeColorPicker;=0A=
Control.ColorPicker.CONTROL;=0A=
/**=0A=
 * ColorPicker Control allows you to open a little inline popUp HSV =
color chooser.=0A=
 * This control is bound to an input field, that holds a hex value.=0A=
 */=0A=
Control.ColorPicker.prototype =3D {=0A=
  initialize : function(field, options) {=0A=
    var colorPicker =3D this;=0A=
    Control.colorPickers.push(colorPicker);=0A=
    this.field =3D $(field);=0A=
    this.fieldName =3D this.field.name || this.field.id;=0A=
    this.options =3D Object.extend({=0A=
       IMAGE_BASE : "img/"=0A=
    }, options || {});=0A=
    this.swatch =3D $(this.options.swatch) || this.field;=0A=
    this.rgb =3D {};=0A=
    this.hsv =3D {};=0A=
    this.isOpen =3D false;=0A=
=0A=
    // create control (popUp) if not already existing=0A=
    // all colorPickers on a page share the same control (popUp)=0A=
    if (!Control.ColorPicker.CONTROL) {=0A=
      Control.ColorPicker.CONTROL =3D {};=0A=
      if (!$("colorpicker")) {=0A=
        var control =3D Builder.node('div', {id: 'colorpicker'});=0A=
        control.innerHTML =3D =0A=
          '<div id=3D"colorpicker-div">' + (=0A=
            // apply png fix for ie 5.5 and 6.0=0A=
            (/MSIE ((6)|(5\.5))/gi.test(navigator.userAgent) && =
/windows/i.test(navigator.userAgent) && =
!/opera/i.test(navigator.userAgent)) ?=0A=
              '<img id=3D"colorpicker-bg" src=3D"' + =
this.options.IMAGE_BASE + 'blank.gif" =
style=3D"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=3D=
\'' + this.options.IMAGE_BASE + 'pickerbg.png\', =
sizingMethod=3D\'scale\')" alt=3D"">' :=0A=
              '<img id=3D"colorpicker-bg" src=3D"' + =
this.options.IMAGE_BASE + 'pickerbg.png" alt=3D"">'=0A=
             ) +=0A=
          '<div id=3D"colorpicker-bg-overlay" style=3D"z-index: =
1002;"></div>' +=0A=
          '<div id=3D"colorpicker-selector"><img src=3D"' + =
this.options.IMAGE_BASE + 'select.gif" width=3D"11" height=3D"11" =
alt=3D"" /></div></div>' +=0A=
          '<div id=3D"colorpicker-hue-container"><img src=3D"' + =
this.options.IMAGE_BASE + 'hue.png" id=3D"colorpicker-hue-bg-img"><div =
id=3D"colorpicker-hue-slider"><div id=3D"colorpicker-hue-thumb"><img =
src=3D"' + this.options.IMAGE_BASE + 'hline.png"></div></div></div>' + =0A=
          '<div id=3D"colorpicker-footer"><span =
id=3D"colorpicker-value">#<input type=3D"text" onclick=3D"this.select()" =
id=3D"colorpicker-value-input" name=3D"colorpicker-value" =
value=3D""></input></span><button =
id=3D"colorpicker-okbutton">OK</button></div>'=0A=
        document.body.appendChild(control);=0A=
      }=0A=
      Control.ColorPicker.CONTROL =3D {=0A=
        popUp : $("colorpicker"),=0A=
        pickerArea : $('colorpicker-div'),=0A=
        selector : $('colorpicker-selector'),=0A=
        okButton : $("colorpicker-okbutton"),=0A=
        value : $("colorpicker-value"),=0A=
        input : $("colorpicker-value-input"),=0A=
        picker : new Draggable($('colorpicker-selector'), {=0A=
          snap: function(x, y) {=0A=
            return [=0A=
              Math.min(Math.max(x, 0), =
Control.ColorPicker.activeColorPicker.control.pickerArea.offsetWidth), =0A=
              Math.min(Math.max(y, 0), =
Control.ColorPicker.activeColorPicker.control.pickerArea.offsetHeight)=0A=
            ];=0A=
          },=0A=
          zindex: 1009,=0A=
          change: function(draggable) {=0A=
            var pos =3D draggable.currentDelta();=0A=
            Control.ColorPicker.activeColorPicker.update(pos[0], pos[1]);=0A=
          }=0A=
        }),=0A=
        hueSlider: new Control.Slider('colorpicker-hue-thumb', =
'colorpicker-hue-slider', {=0A=
          axis: 'vertical',=0A=
          onChange: function(v) {=0A=
            Control.ColorPicker.activeColorPicker.updateHue(v);=0A=
          }=0A=
        })=0A=
      };=0A=
      Element.hide($("colorpicker"));=0A=
    }=0A=
    this.control =3D Control.ColorPicker.CONTROL;=0A=
=0A=
    // bind event listener to properties, so we can use them savely with =
Event[observe|stopObserving]=0A=
    this.toggleOnClickListener =3D this.toggle.bindAsEventListener(this);=0A=
    this.updateOnChangeListener =3D =
this.updateFromFieldValue.bindAsEventListener(this);=0A=
    this.closeOnClickOkListener =3D this.close.bindAsEventListener(this);=0A=
    this.updateOnClickPickerListener =3D =
this.updateSelector.bindAsEventListener(this);=0A=
=0A=
    Event.observe(this.swatch, "click", this.toggleOnClickListener);=0A=
    Event.observe(this.field, "change", this.updateOnChangeListener);=0A=
    Event.observe(this.control.input, "change", =
this.updateOnChangeListener);=0A=
=0A=
    this.updateSwatch();=0A=
  },=0A=
  toggle : function(event) {=0A=
    this[(this.isOpen) ? "close" : "open"](event);=0A=
    Event.stop(event);    =0A=
  },=0A=
  open : function(event) {=0A=
    Control.colorPickers.each(function(colorPicker) {=0A=
      colorPicker.close();=0A=
    });=0A=
    Control.ColorPicker.activeColorPicker =3D this;=0A=
    this.isOpen =3D true;=0A=
    Element.show(this.control.popUp);=0A=
    if (this.options.getPopUpPosition) {=0A=
       var pos =3D this.options.getPopUpPosition.bind(this)(event);=0A=
    } else {=0A=
      var pos =3D Position.cumulativeOffset(this.swatch || this.field);=0A=
      pos[0] =3D (pos[0] + (this.swatch || this.field).offsetWidth + 10);=0A=
    }=0A=
    this.control.popUp.style.left =3D (pos[0]) + "px";=0A=
    this.control.popUp.style.top =3D (pos[1]) + "px";=0A=
    this.updateFromFieldValue();=0A=
    Event.observe(this.control.okButton, "click", =
this.closeOnClickOkListener);=0A=
    Event.observe(this.control.pickerArea, "mousedown", =
this.updateOnClickPickerListener);=0A=
    if (this.options.onOpen) this.options.onOpen.bind(this)(event);=0A=
  },=0A=
  close : function(event) {=0A=
    if (Control.ColorPicker.activeColorPicker =3D=3D this) =
Control.ColorPicker.activeColorPicker =3D null;=0A=
    this.isOpen =3D false;=0A=
    Element.hide(this.control.popUp);=0A=
    Event.stopObserving(this.control.okButton, "click", =
this.closeOnClickOkListener);=0A=
    Event.stopObserving(this.control.pickerArea, "mousedown", =
this.updateOnClickPickerListener);=0A=
    if (this.options.onClose) this.options.onClose.bind(this)();=0A=
  },=0A=
  updateHue : function(v) {=0A=
    var h =3D (this.control.pickerArea.offsetHeight - v * 100) / =
this.control.pickerArea.offsetHeight;=0A=
    if (h =3D=3D 1) h =3D 0;=0A=
    var rgb =3D YAHOO.util.Color.hsv2rgb( h, 1, 1 );=0A=
    if (!YAHOO.util.Color.isValidRGB(rgb)) return;=0A=
    this.control.pickerArea.style.backgroundColor =3D "rgb(" + rgb[0] + =
", " + rgb[1] + ", " + rgb[2] + ")";=0A=
    this.update();=0A=
  },=0A=
  updateFromFieldValue : function(event) {=0A=
    if (!this.isOpen) return;=0A=
    var field =3D (event && Event.findElement(event, "input")) || =
this.field;=0A=
    var rgb =3D YAHOO.util.Color.hex2rgb( field.value );=0A=
    if (!YAHOO.util.Color.isValidRGB(rgb)) return;=0A=
    var hsv =3D YAHOO.util.Color.rgb2hsv( rgb[0], rgb[1], rgb[2] );=0A=
    this.control.selector.style.left =3D Math.round(hsv[1] * =
this.control.pickerArea.offsetWidth) + "px";=0A=
    this.control.selector.style.top =3D Math.round((1 - hsv[2]) * =
this.control.pickerArea.offsetWidth) + "px";=0A=
    this.control.hueSlider.setValue((1 - hsv[0]));=0A=
  },=0A=
  updateSelector : function(event) {=0A=
    var xPos =3D Event.pointerX(event);=0A=
    var yPos =3D Event.pointerY(event);=0A=
    var pos =3D Position.cumulativeOffset($("colorpicker-bg"));=0A=
    this.control.selector.style.left =3D (xPos - pos[0] - 6) + "px";=0A=
    this.control.selector.style.top =3D (yPos - pos[1] - 6) + "px";=0A=
    this.update((xPos - pos[0]), (yPos - pos[1]));=0A=
    this.control.picker.initDrag(event);=0A=
  },=0A=
  updateSwatch : function() {=0A=
    var rgb =3D YAHOO.util.Color.hex2rgb( this.field.value );=0A=
    if (!YAHOO.util.Color.isValidRGB(rgb)) return;=0A=
    this.swatch.style.backgroundColor =3D "rgb(" + rgb[0] + ", " + =
rgb[1] + ", " + rgb[2] + ")";=0A=
    var hsv =3D YAHOO.util.Color.rgb2hsv( rgb[0], rgb[1], rgb[2] );=0A=
    this.swatch.style.color =3D (hsv[2] > 0.65) ? "#000000" : "#FFFFFF";=0A=
  },=0A=
  update : function(x, y) {=0A=
    if (!x) x =3D this.control.picker.currentDelta()[0];=0A=
    if (!y) y =3D this.control.picker.currentDelta()[1];=0A=
=0A=
    var h =3D (this.control.pickerArea.offsetHeight - =
this.control.hueSlider.value * 100) / =
this.control.pickerArea.offsetHeight;=0A=
    if (h =3D=3D 1) { h =3D 0; };=0A=
    this.hsv =3D {=0A=
      hue: 1 - this.control.hueSlider.value,=0A=
      saturation: x / this.control.pickerArea.offsetWidth,=0A=
      brightness: (this.control.pickerArea.offsetHeight - y) / =
this.control.pickerArea.offsetHeight=0A=
    };=0A=
    var rgb =3D YAHOO.util.Color.hsv2rgb( this.hsv.hue, =
this.hsv.saturation, this.hsv.brightness );=0A=
    this.rgb =3D {=0A=
      red: rgb[0],=0A=
      green: rgb[1],=0A=
      blue: rgb[2]=0A=
    };=0A=
    this.field.value =3D YAHOO.util.Color.rgb2hex(rgb[0], rgb[1], =
rgb[2]);=0A=
    this.control.input.value =3D this.field.value;=0A=
    this.updateSwatch();=0A=
    if (this.options.onUpdate) =
this.options.onUpdate.bind(this)(this.field.value);=0A=
  }=0A=
}=0A=

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/cookiejar.js?1313468623

/**
 * Javascript code to store data as JSON strings in cookies.=20
 * It uses prototype.js 1.5.1 (http://www.prototypejs.org)
 *=20
 * Author : Lalit Patel
 * Website: http://www.lalit.org/lab/jsoncookies
 * License: Creative Commons Attribution-ShareAlike 2.5
 *          http://creativecommons.org/licenses/by-sa/2.5/
 * Version: 0.4
 * Updated: Aug 11, 2007 10:09am
 *=20
 * Chnage Log:
 *   v 0.4
 *   -  Removed a extra comma in options (was breaking in IE and Opera). =
(Thanks Jason)
 *   -  Removed the parameter name from the initialize function
 *   -  Changed the way expires date was being calculated. (Thanks =
David)
 *   v 0.3
 *   -  Removed dependancy on json.js (http://www.json.org/json.js)
 *   -  empty() function only deletes the cookies set by CookieJar
 */

var CookieJar =3D Class.create();

CookieJar.prototype =3D {

	/**
	 * Append before all cookie names to differntiate them.
	 */
	appendString: "__CJ_",

	/**
	 * Initializes the cookie jar with the options.
	 */
	initialize: function(options) {
		this.options =3D {
			expires: 3600,		// seconds (1 hr)
			path: '',			// cookie path
			domain: '',			// cookie domain
			secure: ''			// secure ?
		};
		Object.extend(this.options, options || {});

		if (this.options.expires !=3D '') {
			var date =3D new Date();
			date =3D new Date(date.getTime() + (this.options.expires * 1000));
			this.options.expires =3D '; expires=3D' + date.toGMTString();
		}
		if (this.options.path !=3D '') {
			this.options.path =3D '; path=3D' + escape(this.options.path);
		}
		if (this.options.domain !=3D '') {
			this.options.domain =3D '; domain=3D' + escape(this.options.domain);
		}
		if (this.options.secure =3D=3D 'secure') {
			this.options.secure =3D '; secure';
		} else {
			this.options.secure =3D '';
		}
	},

	/**
	 * Adds a name values pair.
	 */
	put: function(name, value) {
		name =3D this.appendString + name;
		cookie =3D this.options;
		var type =3D typeof value;
		switch(type) {
		  case 'undefined':
		  case 'function' :
		  case 'unknown'  : return false;
		  case 'boolean'  :=20
		  case 'string'   :=20
		  case 'number'   : value =3D String(value.toString());
		}
		var cookie_str =3D name + "=3D" + escape(Object.toJSON(value));
		try {
			document.cookie =3D cookie_str + cookie.expires + cookie.path + =
cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Removes a particular cookie (name value pair) form the Cookie Jar.
	 */
	remove: function(name) {
		name =3D this.appendString + name;
		cookie =3D this.options;
		try {
			var date =3D new Date();
			date.setTime(date.getTime() - (3600 * 1000));
			var expires =3D '; expires=3D' + date.toGMTString();
			document.cookie =3D name + "=3D" + expires + cookie.path + =
cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Return a particular cookie by name;
	 */
	get: function(name) {
		name =3D this.appendString + name;
		var cookies =3D document.cookie.match(name + '=3D(.*?)(;|$)');
		if (cookies) {
			return (unescape(cookies[1])).evalJSON();
		} else {
			return null;
		}
	},

	/**
	 * Empties the Cookie Jar. Deletes all the cookies.
	 */
	empty: function() {
		keys =3D this.getKeys();
		size =3D keys.size();
		for(i=3D0; i<size; i++) {
			this.remove(keys[i]);
		}
	},

	/**
	 * Returns all cookies as a single object
	 */
	getPack: function() {
		pack =3D {};
		keys =3D this.getKeys();

		size =3D keys.size();
		for(i=3D0; i<size; i++) {
			pack[keys[i]] =3D this.get(keys[i]);
		}
		return pack;
	},

	/**
	 * Returns all keys.
	 */
	getKeys: function() {
		keys =3D $A();
		keyRe=3D /[^=3D; ]+(?=3D\=3D)/g;
		str  =3D document.cookie;
		CJRe =3D new RegExp("^" + this.appendString);
		while((match =3D keyRe.exec(str)) !=3D undefined) {
			if (CJRe.test(match[0].strip())) {
				keys.push(match[0].strip().gsub("^" + this.appendString,""));
			}
		}
		return keys;
	}
};
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/filterlist.js?1313468623

/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D*
 $Id: filterlist.js,v 1.3 2003/10/08 17:13:49 pat Exp $
 Copyright 2003 Patrick Fitzgerald
 http://www.barelyfitz.com/webdesign/articles/filterlist/

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  =
USA
 =
*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D*/

function filterlist(selectobj) {

  =
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D
  // PARAMETERS
  =
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D

  // HTML SELECT object
  // For example, set this to document.myform.myselect
  this.selectobj =3D selectobj;

  // Flags for regexp matching.
  // "i" =3D ignore case; "" =3D do not ignore case
  // You can use the set_ignore_case() method to set this
  this.flags =3D 'i';

  // Which parts of the select list do you want to match?
  this.match_text =3D true;
  this.match_value =3D false;

  // You can set the hook variable to a function that
  // is called whenever the select list is filtered.
  // For example:
  // myfilterlist.hook =3D function() { }

  // Flag for debug alerts
  // Set to true if you are having problems.
  this.show_debug =3D false;

  =
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D
  // METHODS
  =
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D

  //--------------------------------------------------
  this.init =3D function() {
    // This method initilizes the object.
    // This method is called automatically when you create the object.
    // You should call this again if you alter the selectobj parameter.

    if (!this.selectobj) return this.debug('selectobj not defined');
    if (!this.selectobj.options) return this.debug('selectobj.options =
not defined');

    // Make a copy of the select list options array
    this.optionscopy =3D new Array();
    if (this.selectobj && this.selectobj.options) {
      for (var i=3D0; i < this.selectobj.options.length; i++) {

        // Create a new Option
        this.optionscopy[i] =3D new Option();

        // Set the text for the Option
        this.optionscopy[i].text =3D selectobj.options[i].text;
				this.optionscopy[i].style.cssText =3D =
selectobj.options[i].style.cssText;

        // Set the value for the Option.
        // If the value wasn't set in the original select list,
        // then use the text.
        if (selectobj.options[i].value) {
          this.optionscopy[i].value =3D selectobj.options[i].value;
        } else {
          this.optionscopy[i].value =3D selectobj.options[i].text;
        }

      }
    }
  }

  //--------------------------------------------------
  this.reset =3D function() {
    // This method resets the select list to the original state.
    // It also unselects all of the options.

    this.set('');
  }


  //--------------------------------------------------
  this.set =3D function(pattern) {
    // This method removes all of the options from the select list,
    // then adds only the options that match the pattern regexp.
    // It also unselects all of the options.

    var loop=3D0, index=3D0, regexp, e;

    if (!this.selectobj) return this.debug('selectobj not defined');
    if (!this.selectobj.options) return this.debug('selectobj.options =
not defined');

    // Clear the select list so nothing is displayed
    this.selectobj.options.length =3D 0;

    // Set up the regular expression.
    // If there is an error in the regexp,
    // then return without selecting any items.
    try {

      // Initialize the regexp
      regexp =3D new RegExp(pattern, this.flags);

    } catch(e) {

      // There was an error creating the regexp.

      // If the user specified a function hook,
      // call it now, then return
      if (typeof this.hook =3D=3D 'function') {
        this.hook();
      }

      return;
    }

    // Loop through the entire select list and
    // add the matching items to the select list
    for (loop=3D0; loop < this.optionscopy.length; loop++) {

      // This is the option that we're currently testing
      var option =3D this.optionscopy[loop];

      // Check if we have a match
      if ((this.match_text && regexp.test(option.text)) ||
          (this.match_value && regexp.test(option.value))) {

        // We have a match, so add this option to the select list
        // and increment the index

        this.selectobj.options[index] =3D
          new Option(option.text, option.value, false);
				this.selectobj.options[index].style.cssText =3D option.style.cssText
				index++
      }
    }

    // If the user specified a function hook,
    // call it now
    if (typeof this.hook =3D=3D 'function') {
      this.hook();
    }

  }


  //--------------------------------------------------
  this.set_ignore_case =3D function(value) {
    // This method sets the regexp flags.
    // If value is true, sets the flags to "i".
    // If value is false, sets the flags to "".

    if (value) {
      this.flags =3D 'i';
    } else {
      this.flags =3D '';
    }
  }


  //--------------------------------------------------
  this.debug =3D function(msg) {
    if (this.show_debug) {
      alert('FilterList: ' + msg);
    }
  }


  =
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D
  // Initialize the object
  =
//=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D
  this.init();

}

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/general.js?1313468623

function tableruler()=0A=
{=0A=
	if (document.getElementById && document.createTextNode)	{=0A=
		var tables=3Ddocument.getElementsByTagName('table');=0A=
		for (var i=3D0;i<tables.length;i++)	{=0A=
			if(tables[i].id =3D=3D 'data_list')	{=0A=
				var trs=3Dtables[i].getElementsByTagName('tr');=0A=
				for(var j=3D0;j<trs.length;j++)	{=0A=
					if(trs[j].parentNode.nodeName=3D=3D'TBODY')	{=0A=
						trs[j].onmouseover=3Dfunction(){this.className=3D'ruled';return =
false}=0A=
						trs[j].onmouseout=3Dfunction(){this.className=3D'';return false}=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
function MoveOption(fromList, toList) {=0A=
  // Find all of the selected items and move them to the toList.=0A=
  for (var i=3D0; i<fromList.length; i++) {=0A=
    if (fromList.options[i].selected) {=0A=
      toList.options[toList.length++] =3D new =
Option(fromList.options[i].text, fromList.options[i].value);=0A=
      fromList.options[i] =3D null;=0A=
      i--; // Adjust the counter since we just removed an item.=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
// This is a bit of hack to so that Rails can 'see'=0A=
// ALL of the elements that are in a multiselect list.=0A=
function SelectAll(list) {=0A=
  for (var i=3D0; i<list.length; i++)=0A=
    list.options[i].selected =3D true;=0A=
}=0A=
=0A=
function ShowHide(elementID) {=0A=
  element =3D document.getElementById(elementID);=0A=
  if( element.style.display =3D=3D 'none')=0A=
    element.style.display =3D 'block';=0A=
  else=0A=
    element.style.display =3D 'none';=0A=
}=0A=
=0A=
function Hide(elementID) {=0A=
  element =3D document.getElementById(elementID);=0A=
  element.style.display =3D 'none';=0A=
}=0A=
=0A=
function Show(elementID) {=0A=
  element =3D document.getElementById(elementID);=0A=
  element.style.display =3D 'block';=0A=
}=0A=
=0A=
// Show or hide the table row=0A=
// Each table row <tr> must have its own CSS class name, so we can loop =
through them=0A=
// Prototype framework is required=0A=
function ShowHideTableRow(className) {=0A=
    $$(className).each(function(item) {=0A=
        var display =3D (item.getStyle('display') =3D=3D 'none') ? =
'table-row' : 'none';=0A=
=0A=
        item.setStyle({=0A=
            'display': display=0A=
        });=0A=
    })=0A=
}=0A=
=0A=
function ToggleContent(elementID, startContent, endContent) {=0A=
	element =3D document.getElementById(elementID);=0A=
	if( element.innerHTML =3D=3D startContent )=0A=
		element.innerHTML =3D endContent;=0A=
	else=0A=
		element.innerHTML =3D startContent;=0A=
}=0A=
=0A=
Effect.SlideUpAndDown =3D function(element) {=0A=
  element =3D $(element);=0A=
  if(Element.visible(element)) new Effect.SlideUp(element);=0A=
  else new Effect.SlideDown(element);=0A=
}=0A=

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/slider.js?1313468623

// script.aculo.us slider.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010=0A=
=0A=
// Copyright (c) 2005-2010 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=
    document.observe("mousemove", this.eventMouseMove);=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(document, "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=
  },=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 this.track.cumulativeOffset();=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 this.activeHandle.cumulativeOffset();=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 this.activeHandle.cumulativeOffset();=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 this.track.cumulativeOffset();=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_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/sound.js?1313468623

// script.aculo.us sound.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010=0A=
=0A=
// Copyright (c) 2005-2010 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//=0A=
// Based on code created by Jules Gravinese (http://www.webveteran.com/)=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=
Sound =3D {=0A=
  tracks: {},=0A=
  _enabled: true,=0A=
  template:=0A=
    new Template('<embed style=3D"height:0" id=3D"sound_#{track}_#{id}" =
src=3D"#{url}" loop=3D"false" autostart=3D"true" hidden=3D"true"/>'),=0A=
  enable: function(){=0A=
    Sound._enabled =3D true;=0A=
  },=0A=
  disable: function(){=0A=
    Sound._enabled =3D false;=0A=
  },=0A=
  play: function(url){=0A=
    if(!Sound._enabled) return;=0A=
    var options =3D Object.extend({=0A=
      track: 'global', url: url, replace: false=0A=
    }, arguments[1] || {});=0A=
=0A=
    if(options.replace && this.tracks[options.track]) {=0A=
      $R(0, this.tracks[options.track].id).each(function(id){=0A=
        var sound =3D $('sound_'+options.track+'_'+id);=0A=
        sound.Stop && sound.Stop();=0A=
        sound.remove();=0A=
      });=0A=
      this.tracks[options.track] =3D null;=0A=
    }=0A=
=0A=
    if(!this.tracks[options.track])=0A=
      this.tracks[options.track] =3D { id: 0 };=0A=
    else=0A=
      this.tracks[options.track].id++;=0A=
=0A=
    options.id =3D this.tracks[options.track].id;=0A=
    $$('body')[0].insert(=0A=
      Prototype.Browser.IE ? new Element('bgsound',{=0A=
        id: 'sound_'+options.track+'_'+options.id,=0A=
        src: options.url, loop: 1, autostart: true=0A=
      }) : Sound.template.evaluate(options));=0A=
  }=0A=
};=0A=
=0A=
if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){=0A=
  if(navigator.plugins && $A(navigator.plugins).detect(function(p){ =
return p.name.indexOf('QuickTime') !=3D -1 }))=0A=
    Sound.template =3D new Template('<object id=3D"sound_#{track}_#{id}" =
width=3D"0" height=3D"0" type=3D"audio/mpeg" data=3D"#{url}"/>');=0A=
  else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ =
return p.name.indexOf('Windows Media') !=3D -1 }))=0A=
    Sound.template =3D new Template('<object id=3D"sound_#{track}_#{id}" =
type=3D"application/x-mplayer2" data=3D"#{url}"></object>');=0A=
  else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ =
return p.name.indexOf('RealPlayer') !=3D -1 }))=0A=
    Sound.template =3D new Template('<embed =
type=3D"audio/x-pn-realaudio-plugin" style=3D"height:0" =
id=3D"sound_#{track}_#{id}" src=3D"#{url}" loop=3D"false" =
autostart=3D"true" hidden=3D"true"/>');=0A=
  else=0A=
    Sound.play =3D function(){};=0A=
} 
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/tabs.js?1313468623

function select_and_save_tab_and_pane(tabset,name) {
	select_tab_and_pane(name);
	jar =3D new CookieJar({
		expires:3600,
		path: '/'
	});
	jar.put(tabset,name)
}

function restore_tab(tabset,dvalue) {
	jar =3D new CookieJar({
		expires:3600,
		path: '/'
	});
=09
	select_tab_and_pane(jar.get(tabset) || dvalue);
}

function select_tab_and_pane(name){
	tabselect($(name + '_tab'));
	paneselect($(name));
}

function tabselect(tab) {
  var tablist =3D $('tabcontrol1').getElementsByTagName('li');
  var nodes =3D $A(tablist);
  var lClassType =3D tab.className.substring(0, =
tab.className.indexOf('-') );

  nodes.each(function(node){
    if (node.id =3D=3D tab.id) {
      tab.className=3DlClassType+'-selected';
    } else {
      node.className=3DlClassType+'-unselected';
    };
  });
}

function paneselect(pane) {
  var panelist =3D $('panecontrol1').getElementsByTagName('li');
  var nodes =3D $A(panelist);

  nodes.each(function(node){
    if (node.id =3D=3D pane.id) {
      pane.className=3D'pane-selected';
    } else {
      node.className=3D'pane-unselected';
    };
  });
}

function loadPane(pane, src) {
  if (pane.innerHTML=3D=3D'' || pane.innerHTML=3D=3D'<img alt=3D"Wait" =
src=3D"/images/spinner.gif" style=3D"vertical-align:-3px" /> =
Loading...') {
    reloadPane(pane, src);
  }
}

function reloadPane(pane, src) {
  new Ajax.Updater(pane, src, {asynchronous:1, evalScripts:true, =
onLoading:function(request){pane.innerHTML=3D'<img alt=3D"Wait" =
src=3D"/images/spinner.gif" style=3D"vertical-align:-3px" /> =
Loading...'}})
}
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/tooltip.js?1313468623

/*
 * Copyright (c) 2009 Charles Cordingley (www.cordinc.com)
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the =
above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL =
WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE =
FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY =
DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT =
OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
=20
/*
 * cordinc_tooltip.js, v1.0.2 - 27 August 2008
 * For help see www.cordinc.com/projects/tooltips.html
 */
var Tooltip =3D Class.create({
  initialize: function(target, tooltip) {
    var options =3D Object.extend({
      start_effect: function(element) {},
      end_effect: function(element) {},
      zindex: 1000,
      offset: {x:0, y:0},
      hook: {target:'topRight', tip:'bottomLeft'},
      trigger: false,=20
      DOM_location: false,
      className: false,
      delay: {}
    }, arguments[2] || {});

    this.target =3D $(target);
    this.tooltip =3D $(tooltip);
    this.options =3D options;
    this.event_target =3D =
this.options.trigger?$(this.options.trigger):this.target;

    if (this.options.className) {
      this.tooltip.addClassName(this.options.className);
    }
    this.tooltip.hide();
    this.display=3Dfalse;

    this.mouse_over =3D this.displayTooltip.bindAsEventListener(this);
    this.mouse_out =3D this.removeTooltip.bindAsEventListener(this);
    this.event_target.observe("mouseover", this.mouse_over);
    this.event_target.observe("mouseout", this.mouse_out);
  },

  displayTooltip: function(event){
    event.stop();
   =20
    if (this.display) {return;}
    if (this.options.delay.start) {
      var self =3D this;
      this.timer_id =3D setTimeout(function(){self.timer_id =3D false; =
self.showTooltip(event);}, this.options.delay.start*1000);
    } else {
      this.showTooltip(event);
    }
  },

  showTooltip: function(event) {
    this.display=3Dtrue;
    position =3D this.positionTooltip(event);
   =20
    this.clone =3D this.tooltip.cloneNode(true);
    parentId =3D =
this.options.DOM_location?$(this.options.DOM_location.parentId):this.targ=
et.parentNode;
    successorId =3D =
this.options.DOM_location?$(this.options.DOM_location.successorId):this.t=
arget;
    parentId.insertBefore(this.clone, successorId);      =20
   =20
    this.clone.setStyle({ position:'absolute',
                      top:position.top + "px",
                      left:position.left + "px",
                      display: "inline",
                      zIndex:this.options.zindex});
                     =20
    if (this.options.start_effect) {
        this.options.start_effect(this.clone);
    }
  },

  positionTooltip: function(event) {
    target_position =3D this.target.cumulativeOffset();
   =20
    tooltip_dimensions =3D this.tooltip.getDimensions();
    target_dimensions =3D this.target.getDimensions();

    this.positionModify(target_position, target_dimensions, =
this.options.hook.target, 1);
    this.positionModify(target_position, tooltip_dimensions, =
this.options.hook.tip, -1);

    target_position.top +=3D this.options.offset.y;
    target_position.left +=3D this.options.offset.x;

    // target_position.top =3D  0;
    // target_position.left =3D 110;

    return target_position;=20
  },

  positionModify: function(position, box, corner, neg) {
    if (corner =3D=3D 'topRight') {
      position.left +=3D box.width*neg;
    } else if (corner =3D=3D 'topLeft') {
    } else if (corner =3D=3D 'bottomLeft') {
      position.top +=3D box.height*neg;
    } else if (corner =3D=3D 'bottomRight') {
      position.top +=3D box.height*neg;
      position.left +=3D box.width*neg;
    } else if (corner =3D=3D 'topMid') {
      position.left +=3D (box.width/2)*neg;
    } else if (corner =3D=3D 'leftMid') {
      position.top +=3D (box.height/2)*neg;
    } else if (corner =3D=3D 'bottomMid') {
      position.top +=3D box.height*neg;
      position.left +=3D (box.width/2)*neg;
    } else if (corner =3D=3D 'rightMid') {
      position.top +=3D (box.height/2)*neg;
      position.left +=3D box.width*neg;
    }
  },

  removeTooltip: function(event) {
    if (this.timer_id) {
      clearTimeout(this.timer_id);
      this.timer_id =3D false;
      return;
    }=20

    if (this.options.end_effect) {
        this.options.end_effect(this.clone);
    }=20
   =20
    if (this.options.delay.end) {
      var self =3D this;
      setTimeout(function(){self.clearTooltip();}, =
this.options.delay.end*1000);
    } else {
      this.clearTooltip();
    }
  },
 =20
  clearTooltip: function() {
    this.clone.remove();
    this.clone =3D null;
    this.display=3Dfalse;
  },

  destroy: function() {
    this.event_target.stopObserving("mouseover", this.mouse_over);
    this.event_target.stopObserving("mouseout", this.mouse_out);
    this.clearTooltip();
  }
})
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/trackparse.js?1313468623

// =
/////////////////////////////////////////////////////////////////////////=
////////
// JavaScript Magstripe (track 1, track2) data parser object
//
// Mar-22-2005	Modified by Wayne Walrath,
//				Acme Technologies http://www.acmetech.com
//			based on demo source code from www.skipjack.com
//
// USAGE:
// var p =3D new SwipeParserObj();
// p.dump();  -- returns parsed field values and meta info.
//	-- or --
// get individual field names (see member variables at top of object)
//
// if( p.hasTrack1 ){
//		p.surname;
//		p.firstname;
//		p.account;
//		p.exp_month + "/" + p.exp_year;
//	}
/////////////////////////////////////////////////////////////////////////=
//////////

function SwipeParserObj(strParse)
{
	///////////////////////////////////////////////////////////////
	if (strParse.substring(0,1)=3D=3D'~') {
		strParse =3D strParse.substring(1);
	}
=09
	///////////////////// member variables ////////////////////////
	this.input_trackdata_str =3D strParse;
	this.account_name =3D null;
	this.surname =3D null;
	this.firstname =3D null;
	this.acccount =3D null;
	this.exp_month =3D null;
	this.exp_year =3D null;
	this.track1 =3D null;
	this.track2 =3D null;
	this.track3 =3D null;
	this.hasTrack1 =3D false;
	this.hasTrack2 =3D false;
	this.hasTrack3 =3D false;
	/////////////////////////// end member fields /////////////////

  this.errorRead =3D function() {
	  this.hasTrack1 =3D  false;
    this.hasTrack2  =3D false;
  	this.hasTrack3 =3D false;
	}
	=09
	function valid_name(sInput){
		if (sInput =3D=3D null) return false;
		clean =3D sInput.replace(/[^a-zA-Z\'\-\/ ]/,'');
		return !(clean !=3D sInput);
	}
=09
	sTrackData =3D this.input_trackdata_str;     //--- Get the track data
=09
  //-- Example: Track 1 & 2 Data
  //-- =
%B1234123412341234^CardUser/John^030510100000019301000000877000000?;12341=
23412341234=3D0305101193010877?
  //-- Key off of the presence of "^" and "=3D"

  //-- Example: Track 1 Data Only
  //-- =
B1234123412341234^CardUser/John^030510100000019301000000877000000?
  //-- Key off of the presence of "^" but not "=3D"

  //-- Example: Track 2 Data Only
  //-- 1234123412341234=3D0305101193010877?
  //-- Key off of the presence of "=3D" but not "^"

  if ( strParse !=3D '' )
  {
    // alert(strParse);

    //--- Determine the presence of special characters
    nHasTrack1 =3D strParse.indexOf("^");
    nHasTrack2 =3D strParse.indexOf("=3D");
    nCountEndSentinal =3D strParse.split("?").length - 1;

    //--- Set boolean values based off of character presence
    this.hasTrack1 =3D bHasTrack1 =3D false;
    this.hasTrack2 =3D bHasTrack2 =3D false;
  	this.hasTrack3 =3D bHasTrack3 =3D false;
    if (nHasTrack1 > 0) { this.hasTrack1 =3D bHasTrack1 =3D true; }
    if (nHasTrack2 > 0) { this.hasTrack2 =3D bHasTrack2 =3D true; }
    if (nCountEndSentinal =3D=3D 3) {this.hasTrack3 =3D bHasTrack3 =3D =
true;}
	=09
    //--- Initialize
    bTrack1_2  	=3D false;
    bTrack1_2_3 =3D false;
    bTrack1    	=3D false;
    bTrack2    	=3D false;
	=09
    //--- Determine tracks present

		if (( bHasTrack3)) { bTrack1_2_3 =3D true; }
    if (( bHasTrack1) && ( bHasTrack2) && (!bHasTrack3)) { bTrack1_2 =3D =
true; }
    if (( bHasTrack1) && (!bHasTrack2) && (!bHasTrack3)) { bTrack1   =3D =
true; }
    if ((!bHasTrack1) && ( bHasTrack2) && (!bHasTrack3)) { bTrack2   =3D =
true; }

    //--- Initialize alert message on error
    bShowAlert =3D false;
   =20
    =
//-----------------------------------------------------------------------=
------   =20
    //--- Track 1 & 2 cards
    //--- Ex: =
B1234123412341234^CardUser/John^030510100000019301000000877000000?;123412=
3412341234=3D0305101193010877?
    =
//-----------------------------------------------------------------------=
------   =20
    if (bTrack1_2)
    {=20

      strCutUpSwipe =3D '' + strParse + ' ';
      arrayStrSwipe =3D new Array(4);
      arrayStrSwipe =3D strCutUpSwipe.split("^");
 =20
      var sAccountNumber, sName, sShipToName, sMonth, sYear;
 =20
      if ( arrayStrSwipe.length > 2 )
      {
      	this.account =3D stripAlpha( =
arrayStrSwipe[0].substring(1,arrayStrSwipe[0].length) );
        this.account_name          =3D arrayStrSwipe[1];
        this.exp_month         =3D arrayStrSwipe[2].substring(2,4);
        this.exp_year          =3D arrayStrSwipe[2].substring(0,2);=20
        			=09
       	var track2sentinel =3D sTrackData.indexOf(";");
       	if( track2sentinel !=3D -1 ){
       		this.track1 =3D sTrackData.substring(0, track2sentinel);
       		this.track2 =3D sTrackData.substring(track2sentinel);
       	} else
					{
						this.errorRead();
					}
				if (valid_name(this.account_name)) {
					//--- parse name field into first/last names
					var nameDelim =3D this.account_name.indexOf("/");
					if( nameDelim !=3D -1 ){
						this.surname =3D this.account_name.substring(0, nameDelim);
						this.firstname =3D this.account_name.substring(nameDelim+1);
					} else {
						this.firstname =3D this.account_name;
						this.surname =3D "";
					}
				}
				else
					{
						this.errorRead();
					}
    }
      else  //--- for "if ( arrayStrSwipe.length > 2 )"
      {=20
        bShowAlert =3D true;  //--- Error -- show alert message
				this.errorRead();
      }
    }
		if (bTrack1_2_3)
		{=20
			strCutUpSwipe =3D '' + strParse + ' ';
			arrayStrSwipe =3D new Array(4);
			arrayStrSwipe =3D strCutUpSwipe.split("^");

			var sAccountNumber, sName, sShipToName, sMonth, sYear;

			if ( arrayStrSwipe.length > 2 )
			{
				this.account =3D stripAlpha( =
arrayStrSwipe[0].substring(1,arrayStrSwipe[0].length) );
				this.account_name          =3D arrayStrSwipe[1];
				this.exp_month         =3D arrayStrSwipe[2].substring(2,4);
				this.exp_year          =3D arrayStrSwipe[2].substring(0,2);=20

				var track2sentinel =3D sTrackData.indexOf(";");
			=09
				if( track2sentinel !=3D -1 )
				{
					this.track1 =3D sTrackData.substring(0, track2sentinel);
					this.track2 =3D sTrackData.substring(track2sentinel);
				}=20
				else=20
				{
					this.errorRead();
				}
				var track2endsentinel =3Dthis.track2.indexOf("?");
				if (track2endsentinel !=3D -1)
				{
					this.track3 =3D this.track2.substring(track2endsentinel+1);
					this.track2 =3D this.track2.substring(0,track2endsentinel+1);=09
				}=20
				else
				{=20
					this.errorRead();
				}

				//--- parse name field into first/last names
				if (valid_name(this.account_name))=20
				{
					var nameDelim =3D this.account_name.indexOf("/");
					if( nameDelim !=3D -1 )=20
					{
						this.surname =3D this.account_name.substring(0, nameDelim);
						this.firstname =3D this.account_name.substring(nameDelim+1);
					}=20
					else=20
					{
						this.firstname =3D this.account_name;
						this.surname =3D "";
					}
				}=20
				else
				{
					this.errorRead();
				}
			}
			else  //--- for "if ( arrayStrSwipe.length > 2 )"
			{=20
				bShowAlert =3D true;  //--- Error -- show alert message
				this.errorRead();
			}
		}

    =
//-----------------------------------------------------------------------=
------
    //--- Track 1 only cards
    //--- Ex: =
B1234123412341234^CardUser/John^030510100000019301000000877000000?
    =
//-----------------------------------------------------------------------=
------   =20
    if (bTrack1)
    {
      strCutUpSwipe =3D '' + strParse + ' ';
      arrayStrSwipe =3D new Array(4);
      arrayStrSwipe =3D strCutUpSwipe.split("^");
 =20
      var sAccountNumber, sName, sShipToName, sMonth, sYear;
 =20
      if ( arrayStrSwipe.length > 2 )
      {
        this.account =3D sAccountNumber =3D stripAlpha( =
arrayStrSwipe[0].substring( 1,arrayStrSwipe[0].length) );
        this.account_name =3D sName	=3D arrayStrSwipe[1];
        this.exp_month =3D sMonth	=3D arrayStrSwipe[2].substring(2,4);
        this.exp_year =3D sYear	=3D arrayStrSwipe[2].substring(0,2);=20
      	this.track1 =3D sTrackData;
				//--- parse name field into first/last names
				if (valid_name(this.account_name))=20
				{
					var nameDelim =3D this.account_name.indexOf("/");
					if( nameDelim !=3D -1 )
					{
						this.surname =3D this.account_name.substring(0, nameDelim);
						this.firstname =3D this.account_name.substring(nameDelim+1);
					}=20
					else=20
				 	{
						this.firstname =3D this.account_name;
						this.surname =3D "";
					}=20
				}
				else
				{
					this.errorRead();
				}
      }
      else  //--- for "if ( arrayStrSwipe.length > 2 )"
      {=20
        bShowAlert =3D true;  //--- Error -- show alert message
					this.errorRead();
      }
    }
   =20
    =
//-----------------------------------------------------------------------=
------
    //--- Track 2 only cards
    //--- Ex: 1234123412341234=3D0305101193010877?
    =
//-----------------------------------------------------------------------=
------   =20
    if (bTrack2)
    {
      nSeperator  =3D strParse.indexOf("=3D");
      sCardNumber =3D strParse.substring(1,nSeperator);
      sYear       =3D strParse.substr(nSeperator+1,2);
      sMonth      =3D strParse.substr(nSeperator+3,2);
      this.account =3D sAccountNumber =3D stripAlpha(sCardNumber);
      this.exp_month =3D sMonth		=3D sMonth;
      this.exp_year =3D sYear			=3D sYear;=20
  		this.track2 =3D sTrackData;
			this.surname =3D ""
			this.firstname =3D ""
			if (this.account.length < 13) this.errorRead();
    }
	} //--- end "if ( strParse !=3D '' )"


	this.dump =3D function(){
		var s =3D "";
		var sep =3D "\n"; // line separator
		s +=3D "Name: " + this.account_name + sep;
		s +=3D "Surname: " + this.surname + sep;
		s +=3D "first name: " + this.firstname + sep;
		s +=3D "account: " + this.account + sep;
		s +=3D "exp_month: " + this.exp_month + sep;
		s +=3D "exp_year: " + this.exp_year + sep;
		s +=3D "has track1: " + this.hasTrack1 + sep;
		s +=3D "has track2: " + this.hasTrack2 + sep;
		s +=3D "has track3: " + this.hasTrack3 + sep;
		s +=3D "TRACK 1: " + this.track1 + sep;
		s +=3D "TRACK 2: " + this.track2 + sep;
		s +=3D "TRACK 3: " + this.track3 + sep;
		s +=3D "Raw Input Str: " + this.input_trackdata_str + sep;
	=09
		return s;
	}

	function stripAlpha(sInput){
		if( sInput =3D=3D null )	return '';
		return sInput.replace(/[^0-9]/g, '');
	}


}
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/yahoo.color.js?1313468623

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */=0A=
=0A=
var YAHOO =3D function() { return {util: {}} } ();=0A=
YAHOO.util.Color =3D new function() {=0A=
  =0A=
  // Adapted from http://www.easyrgb.com/math.html=0A=
  // hsv values =3D 0 - 1=0A=
  // rgb values 0 - 255=0A=
  this.hsv2rgb =3D function (h, s, v) {=0A=
    var r, g, b;=0A=
    if ( s =3D=3D 0 ) {=0A=
      r =3D v * 255;=0A=
      g =3D v * 255;=0A=
      b =3D v * 255;=0A=
    } else {=0A=
=0A=
      // h must be < 1=0A=
      var var_h =3D h * 6;=0A=
      if ( var_h =3D=3D 6 ) {=0A=
        var_h =3D 0;=0A=
      }=0A=
=0A=
      //Or ... var_i =3D floor( var_h )=0A=
      var var_i =3D Math.floor( var_h );=0A=
      var var_1 =3D v * ( 1 - s );=0A=
      var var_2 =3D v * ( 1 - s * ( var_h - var_i ) );=0A=
      var var_3 =3D v * ( 1 - s * ( 1 - ( var_h - var_i ) ) );=0A=
=0A=
      if ( var_i =3D=3D 0 ) { =0A=
        var_r =3D v; =0A=
        var_g =3D var_3; =0A=
        var_b =3D var_1;=0A=
      } else if ( var_i =3D=3D 1 ) { =0A=
        var_r =3D var_2;=0A=
        var_g =3D v;=0A=
        var_b =3D var_1;=0A=
      } else if ( var_i =3D=3D 2 ) {=0A=
        var_r =3D var_1;=0A=
        var_g =3D v;=0A=
        var_b =3D var_3=0A=
      } else if ( var_i =3D=3D 3 ) {=0A=
        var_r =3D var_1;=0A=
        var_g =3D var_2;=0A=
        var_b =3D v;=0A=
      } else if ( var_i =3D=3D 4 ) {=0A=
        var_r =3D var_3;=0A=
        var_g =3D var_1;=0A=
        var_b =3D v;=0A=
      } else { =0A=
        var_r =3D v;=0A=
        var_g =3D var_1;=0A=
        var_b =3D var_2=0A=
      }=0A=
=0A=
      r =3D var_r * 255          //rgb results =3D 0 =F7 255=0A=
      g =3D var_g * 255=0A=
      b =3D var_b * 255=0A=
=0A=
      }=0A=
    return [Math.round(r), Math.round(g), Math.round(b)];=0A=
  };=0A=
=0A=
  // added by Matthias Platzer AT knallgrau.at =0A=
  this.rgb2hsv =3D function (r, g, b) {=0A=
      var r =3D ( r / 255 );                   //RGB values =3D 0 =F7 255=0A=
      var g =3D ( g / 255 );=0A=
      var b =3D ( b / 255 );=0A=
=0A=
      var min =3D Math.min( r, g, b );    //Min. value of RGB=0A=
      var max =3D Math.max( r, g, b );    //Max. value of RGB=0A=
      deltaMax =3D max - min;             //Delta RGB value=0A=
=0A=
      var v =3D max;=0A=
      var s, h;=0A=
      var deltaRed, deltaGreen, deltaBlue;=0A=
=0A=
      if ( deltaMax =3D=3D 0 )                     //This is a gray, no =
chroma...=0A=
      {=0A=
         h =3D 0;                               //HSV results =3D 0 =F7 1=0A=
         s =3D 0;=0A=
      }=0A=
      else                                    //Chromatic data...=0A=
      {=0A=
         s =3D deltaMax / max;=0A=
=0A=
         deltaRed =3D ( ( ( max - r ) / 6 ) + ( deltaMax / 2 ) ) / =
deltaMax;=0A=
         deltaGreen =3D ( ( ( max - g ) / 6 ) + ( deltaMax / 2 ) ) / =
deltaMax;=0A=
         deltaBlue =3D ( ( ( max - b ) / 6 ) + ( deltaMax / 2 ) ) / =
deltaMax;=0A=
=0A=
         if      ( r =3D=3D max ) h =3D deltaBlue - deltaGreen;=0A=
         else if ( g =3D=3D max ) h =3D ( 1 / 3 ) + deltaRed - deltaBlue;=0A=
         else if ( b =3D=3D max ) h =3D ( 2 / 3 ) + deltaGreen - =
deltaRed;=0A=
=0A=
         if ( h < 0 ) h +=3D 1;=0A=
         if ( h > 1 ) h -=3D 1;=0A=
      }=0A=
=0A=
      return [h, s, v];=0A=
  }=0A=
=0A=
  this.rgb2hex =3D function (r,g,b) {=0A=
    return this.toHex(r) + this.toHex(g) + this.toHex(b);=0A=
  };=0A=
=0A=
  this.hexchars =3D "0123456789ABCDEF";=0A=
=0A=
  this.toHex =3D function(n) {=0A=
    n =3D n || 0;=0A=
    n =3D parseInt(n, 10);=0A=
    if (isNaN(n)) n =3D 0;=0A=
    n =3D Math.round(Math.min(Math.max(0, n), 255));=0A=
=0A=
    return this.hexchars.charAt((n - n % 16) / 16) + =
this.hexchars.charAt(n % 16);=0A=
  };=0A=
=0A=
  this.toDec =3D function(hexchar) {=0A=
    return this.hexchars.indexOf(hexchar.toUpperCase());=0A=
  };=0A=
=0A=
  this.hex2rgb =3D function(str) { =0A=
    var rgb =3D [];=0A=
    rgb[0] =3D (this.toDec(str.substr(0, 1)) * 16) + =0A=
            this.toDec(str.substr(1, 1));=0A=
    rgb[1] =3D (this.toDec(str.substr(2, 1)) * 16) + =0A=
            this.toDec(str.substr(3, 1));=0A=
    rgb[2] =3D (this.toDec(str.substr(4, 1)) * 16) + =0A=
            this.toDec(str.substr(5, 1));=0A=
    // gLogger.debug("hex2rgb: " + str + ", " + rgb.toString());=0A=
    return rgb;=0A=
  };=0A=
=0A=
  this.isValidRGB =3D function(a) { =0A=
    if ((!a[0] && a[0] !=3D0) || isNaN(a[0]) || a[0] < 0 || a[0] > 255) =
return false;=0A=
    if ((!a[1] && a[1] !=3D0) || isNaN(a[1]) || a[1] < 0 || a[1] > 255) =
return false;=0A=
    if ((!a[2] && a[2] !=3D0) || isNaN(a[2]) || a[2] < 0 || a[2] > 255) =
return false;=0A=
=0A=
    return true;=0A=
  };=0A=
}=0A=
=0A=

------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/calendar_date_select/calendar_date_select.js?1313468625

// CalendarDateSelect version 1.15 - a prototype based date picker=0A=
// Questions, comments, bugs? - see the project page: =
http://code.google.com/p/calendardateselect=0A=
if (typeof Prototype =3D=3D 'undefined') alert("CalendarDateSelect =
Error: Prototype could not be found. Please make sure that your =
application's layout includes prototype.js (.g. <%=3D =
javascript_include_tag :defaults %>) *before* it includes =
calendar_date_select.js (.g. <%=3D calendar_date_select_includes %>).");=0A=
if (Prototype.Version < "1.6") alert("Prototype 1.6.0 is required.  If =
using earlier version of prototype, please use calendar_date_select =
version 1.8.3");=0A=
=0A=
Element.addMethods({=0A=
  purgeChildren: function(element) { =
$A(element.childNodes).each(function(e){$(e).remove();}); },=0A=
  build: function(element, type, options, style) {=0A=
    var newElement =3D Element.buildAndAppend(type, options, style);=0A=
    element.appendChild(newElement);=0A=
    return newElement;=0A=
  }=0A=
});=0A=
=0A=
Element.buildAndAppend =3D function(type, options, style)=0A=
{=0A=
  var e =3D $(document.createElement(type));=0A=
  $H(options).each(function(pair) { e[pair.key] =3D pair.value });=0A=
  if (style) e.setStyle(style);=0A=
  return e;=0A=
};=0A=
nil =3D null;=0A=
=0A=
Date.one_day =3D 24*60*60*1000;=0A=
Date.weekdays =3D $w("S M T W T F S");=0A=
Date.first_day_of_week =3D 0;=0A=
Date.months =3D $w("January February March April May June July August =
September October November December" );=0A=
Date.padded2 =3D function(hour) { var padded2 =3D parseInt(hour, 10); if =
(hour < 10) padded2 =3D "0" + padded2; return padded2; }=0A=
Date.prototype.getPaddedMinutes =3D function() { return =
Date.padded2(this.getMinutes()); }=0A=
Date.prototype.getAMPMHour =3D function() { var hour =3D =
this.getHours(); return (hour =3D=3D 0) ? 12 : (hour > 12 ? hour - 12 : =
hour ) }=0A=
Date.prototype.getAMPM =3D function() { return (this.getHours() < 12) ? =
"AM" : "PM"; }=0A=
Date.prototype.stripTime =3D function() { return new =
Date(this.getFullYear(), this.getMonth(), this.getDate());};=0A=
Date.prototype.daysDistance =3D function(compare_date) { return =
Math.round((compare_date - this) / Date.one_day); };=0A=
Date.prototype.toFormattedString =3D function(include_time){=0A=
  var hour, str;=0A=
  str =3D Date.months[this.getMonth()] + " " + this.getDate() + ", " + =
this.getFullYear();=0A=
  =0A=
  if (include_time) { hour =3D this.getHours(); str +=3D " " + =
this.getAMPMHour() + ":" + this.getPaddedMinutes() + " " + =
this.getAMPM() }=0A=
  return str;=0A=
}=0A=
Date.parseFormattedString =3D function(string) { return new =
Date(string);}=0A=
Math.floor_to_interval =3D function(n, i) { return Math.floor(n/i) * i;}=0A=
window.f_height =3D function() { return( [window.innerHeight ? =
window.innerHeight : null, document.documentElement ? =
document.documentElement.clientHeight : null, document.body ? =
document.body.clientHeight : null].select(function(x){return =
x>0}).first()||0); }=0A=
window.f_scrollTop =3D function() { return ([window.pageYOffset ? =
window.pageYOffset : null, document.documentElement ? =
document.documentElement.scrollTop : null, document.body ? =
document.body.scrollTop : null].select(function(x){return =
x>0}).first()||0 ); }=0A=
=0A=
_translations =3D {=0A=
  "OK": "OK",=0A=
  "Now": "Now",=0A=
  "Today": "Today",=0A=
  "Clear": "Clear"=0A=
}=0A=
SelectBox =3D Class.create();=0A=
SelectBox.prototype =3D {=0A=
  initialize: function(parent_element, values, html_options, =
style_options) {=0A=
    this.element =3D $(parent_element).build("select", html_options, =
style_options);=0A=
    this.populate(values);=0A=
  },=0A=
  populate: function(values) {=0A=
    this.element.purgeChildren();=0A=
    var that =3D this; $A(values).each(function(pair) { if =
(typeof(pair)!=3D"object") {pair =3D [pair, pair]}; =
that.element.build("option", { value: pair[1], innerHTML: pair[0]}) });=0A=
  },=0A=
  setValue: function(value) {=0A=
    var e =3D this.element;=0A=
    var matched =3D false;=0A=
    $R(0, e.options.length - 1 ).each(function(i) { =
if(e.options[i].value=3D=3Dvalue.toString()) {e.selectedIndex =3D i; =
matched =3D true;}; } );=0A=
    return matched;=0A=
  },=0A=
  getValue: function() { return $F(this.element)}=0A=
}=0A=
CalendarDateSelect =3D Class.create();=0A=
CalendarDateSelect.prototype =3D {=0A=
  initialize: function(target_element, options) {=0A=
    this.target_element =3D $(target_element); // make sure it's an =
element, not a string=0A=
    if (!this.target_element) { alert("Target element " + target_element =
+ " not found!"); return false;}=0A=
    if (this.target_element.tagName !=3D "INPUT") this.target_element =
=3D this.target_element.down("INPUT")=0A=
    =0A=
    this.target_element.calendar_date_select =3D this;=0A=
    this.last_click_at =3D 0;=0A=
    // initialize the date control=0A=
    this.options =3D $H({=0A=
      embedded: false,=0A=
      popup: nil,=0A=
      time: false,=0A=
      buttons: true,=0A=
      clear_button: true,=0A=
      year_range: 10,=0A=
      close_on_click: nil,=0A=
      minute_interval: 5,=0A=
      popup_by: this.target_element,=0A=
      month_year: "dropdowns",=0A=
      onchange: this.target_element.onchange,=0A=
      valid_date_check: nil=0A=
    }).merge(options || {});=0A=
    this.use_time =3D this.options.get("time");=0A=
    this.parseDate();=0A=
    this.callback("before_show")=0A=
    this.initCalendarDiv();=0A=
    if(!this.options.get("embedded")) {=0A=
      this.positionCalendarDiv()=0A=
      // set the click handler to check if a user has clicked away from =
the document=0A=
      Event.observe(document, "mousedown", =
this.closeIfClickedOut_handler =3D =
this.closeIfClickedOut.bindAsEventListener(this));=0A=
      Event.observe(document, "keypress", this.keyPress_handler =3D =
this.keyPress.bindAsEventListener(this));=0A=
    }=0A=
    this.callback("after_show")=0A=
  },=0A=
  positionCalendarDiv: function() {=0A=
    var above =3D false;=0A=
    var c_pos =3D this.calendar_div.cumulativeOffset(), c_left =3D =
c_pos[0], c_top =3D c_pos[1], c_dim =3D =
this.calendar_div.getDimensions(), c_height =3D c_dim.height, c_width =
=3D c_dim.width; =0A=
    var w_top =3D window.f_scrollTop(), w_height =3D window.f_height();=0A=
    var e_dim =3D $(this.options.get("popup_by")).cumulativeOffset(), =
e_top =3D e_dim[1], e_left =3D e_dim[0], e_height =3D =
$(this.options.get("popup_by")).getDimensions().height, e_bottom =3D =
e_top + e_height;=0A=
    =0A=
    if ( (( e_bottom + c_height ) > (w_top + w_height)) && ( e_bottom - =
c_height > w_top )) above =3D true;=0A=
    var left_px =3D e_left.toString() + "px", top_px =3D (above ? (e_top =
- c_height ) : ( e_top + e_height )).toString() + "px";=0A=
    =0A=
    this.calendar_div.style.left =3D left_px;  =
this.calendar_div.style.top =3D top_px;=0A=
    =0A=
    this.calendar_div.setStyle({visibility:""});=0A=
    =0A=
    // draw an iframe behind the calendar -- ugly hack to make IE 6 happy=0A=
    if(navigator.appName=3D=3D"Microsoft Internet Explorer") this.iframe =
=3D $(document.body).build("iframe", {src: "javascript:false", =
className: "ie6_blocker"}, { left: left_px, top: top_px, height: =
c_height.toString()+"px", width: c_width.toString()+"px", border: "0px"})=0A=
  },=0A=
  initCalendarDiv: function() {=0A=
    if (this.options.get("embedded")) {=0A=
      var parent =3D this.target_element.parentNode;=0A=
      var style =3D {}=0A=
    } else {=0A=
      var parent =3D document.body=0A=
      var style =3D { position:"absolute", visibility: "hidden", left:0, =
top:0 }=0A=
    }=0A=
    this.calendar_div =3D $(parent).build('div', {className: =
"calendar_date_select"}, style);=0A=
    =0A=
    var that =3D this;=0A=
    // create the divs=0A=
    $w("top header body buttons footer bottom").each(function(name) {=0A=
      eval("var " + name + "_div =3D that." + name + "_div =3D =
that.calendar_div.build('div', { className: 'cds_"+name+"' }, { clear: =
'left'} ); ");=0A=
    });=0A=
    =0A=
    this.initHeaderDiv();=0A=
    this.initButtonsDiv();=0A=
    this.initCalendarGrid();=0A=
    this.updateFooter("&#160;");=0A=
    =0A=
    this.refresh();=0A=
    this.setUseTime(this.use_time);=0A=
  },=0A=
  initHeaderDiv: function() {=0A=
    var header_div =3D this.header_div;=0A=
    this.close_button =3D header_div.build("a", { innerHTML: "x", =
href:"#", onclick:function () { this.close(); return false; =
}.bindAsEventListener(this), className: "close" });=0A=
    this.next_month_button =3D header_div.build("a", { innerHTML: =
"&gt;", href:"#", onclick:function () { =
this.navMonth(this.date.getMonth() + 1 ); return false; =
}.bindAsEventListener(this), className: "next" });=0A=
    this.prev_month_button =3D header_div.build("a", { innerHTML: =
"&lt;", href:"#", onclick:function () { =
this.navMonth(this.date.getMonth() - 1 ); return false; =
}.bindAsEventListener(this), className: "prev" });=0A=
    =0A=
    if (this.options.get("month_year")=3D=3D"dropdowns") {=0A=
      this.month_select =3D new SelectBox(header_div, =
$R(0,11).map(function(m){return [Date.months[m], m]}), {className: =
"month", onchange: function () { =
this.navMonth(this.month_select.getValue()) =
}.bindAsEventListener(this)}); =0A=
      this.year_select =3D new SelectBox(header_div, [], {className: =
"year", onchange: function () { =
this.navYear(this.year_select.getValue()) }.bindAsEventListener(this)}); =0A=
      this.populateYearRange();=0A=
    } else {=0A=
      this.month_year_label =3D header_div.build("span")=0A=
    }=0A=
  },=0A=
  initCalendarGrid: function() {=0A=
    var body_div =3D this.body_div;=0A=
    this.calendar_day_grid =3D [];=0A=
    var days_table =3D body_div.build("table", { cellPadding: "0px", =
cellSpacing: "0px", width: "100%" })=0A=
    // make the weekdays!=0A=
    var weekdays_row =3D days_table.build("thead").build("tr");=0A=
    Date.weekdays.each( function(weekday) { =0A=
      weekdays_row.build("th", {innerHTML: weekday});=0A=
    });=0A=
    =0A=
    var days_tbody =3D days_table.build("tbody")=0A=
    // Make the days!=0A=
    var row_number =3D 0, weekday;=0A=
    for(var cell_index =3D 0; cell_index<42; cell_index++)=0A=
    {=0A=
      weekday =3D (cell_index+Date.first_day_of_week ) % 7;=0A=
      if ( cell_index % 7=3D=3D0 ) days_row =3D days_tbody.build("tr", =
{className: 'row_'+row_number++});=0A=
      (this.calendar_day_grid[cell_index] =3D days_row.build("td", {=0A=
          calendar_date_select: this,=0A=
          onmouseover: function () { =
this.calendar_date_select.dayHover(this); },=0A=
          onmouseout: function () { =
this.calendar_date_select.dayHoverOut(this) },=0A=
          onclick: function() { =
this.calendar_date_select.updateSelectedDate(this, true); },=0A=
          className: (weekday=3D=3D0) || (weekday=3D=3D6) ? " weekend" : =
"" //clear the class=0A=
        },=0A=
        { cursor: "pointer" }=0A=
      )).build("div");=0A=
      this.calendar_day_grid[cell_index];=0A=
    }=0A=
  },=0A=
  initButtonsDiv: function()=0A=
  {=0A=
    var buttons_div =3D this.buttons_div;=0A=
    if (this.options.get("time"))=0A=
    {=0A=
      var blank_time =3D $A(this.options.get("time")=3D=3D"mixed" ? [[" =
- ", ""]] : []);=0A=
      buttons_div.build("span", {innerHTML:"@", className: "at_sign"});=0A=
      =0A=
      var t =3D new Date();=0A=
      this.hour_select =3D new SelectBox(buttons_div,=0A=
        blank_time.concat($R(0,23).map(function(x) {t.setHours(x); =
return $A([t.getAMPMHour()+ " " + t.getAMPM(),x])} )),=0A=
        { =0A=
          calendar_date_select: this, =0A=
          onchange: function() { =
this.calendar_date_select.updateSelectedDate( { hour: this.value });},=0A=
          className: "hour" =0A=
        }=0A=
      );=0A=
      buttons_div.build("span", {innerHTML:":", className: "seperator"});=0A=
      var that =3D this;=0A=
      this.minute_select =3D new SelectBox(buttons_div,=0A=
        blank_time.concat($R(0,59).select(function(x){return (x % =
that.options.get('minute_interval')=3D=3D0)}).map(function(x){ return =
$A([ Date.padded2(x), x]); } ) ),=0A=
        { =0A=
          calendar_date_select: this, =0A=
          onchange: function() { =
this.calendar_date_select.updateSelectedDate( {minute: this.value }) }, =0A=
          className: "minute" =0A=
        }=0A=
      );=0A=
      =0A=
    } else if (! this.options.get("buttons")) buttons_div.remove();=0A=
    =0A=
    if (this.options.get("buttons")) {=0A=
      buttons_div.build("span", {innerHTML: "&#160;"});=0A=
      if (this.options.get("time")=3D=3D"mixed" || =
!this.options.get("time")) b =3D buttons_div.build("a", {=0A=
          innerHTML: _translations["Today"],=0A=
          href: "#",=0A=
          onclick: function() {this.today(false); return =
false;}.bindAsEventListener(this)=0A=
        });=0A=
      =0A=
      if (this.options.get("time")=3D=3D"mixed") =
buttons_div.build("span", {innerHTML: "&#160;|&#160;", =
className:"button_seperator"})=0A=
      =0A=
      if (this.options.get("time")) b =3D buttons_div.build("a", {=0A=
        innerHTML: _translations["Now"],=0A=
        href: "#",=0A=
        onclick: function() {this.today(true); return =
false}.bindAsEventListener(this)=0A=
      });=0A=
      =0A=
      if (!this.options.get("embedded") && !this.closeOnClick())=0A=
      {=0A=
        buttons_div.build("span", {innerHTML: "&#160;|&#160;", =
className:"button_seperator"})=0A=
        buttons_div.build("a", { innerHTML: _translations["OK"], href: =
"#", onclick: function() {this.close(); return =
false;}.bindAsEventListener(this) });=0A=
      }=0A=
      if (this.options.get('clear_button')) {=0A=
        buttons_div.build("span", {innerHTML: "&#160;|&#160;", =
className:"button_seperator"})=0A=
        buttons_div.build("a", { innerHTML: _translations["Clear"], =
href: "#", onclick: function() {this.clearDate(); if =
(!this.options.get("embedded")) this.close(); return =
false;}.bindAsEventListener(this) });=0A=
      }=0A=
    }=0A=
  },=0A=
  refresh: function ()=0A=
  {=0A=
    this.refreshMonthYear();=0A=
    this.refreshCalendarGrid();=0A=
    =0A=
    this.setSelectedClass();=0A=
    this.updateFooter();=0A=
  },=0A=
  refreshCalendarGrid: function () {=0A=
    this.beginning_date =3D new Date(this.date).stripTime();=0A=
    this.beginning_date.setDate(1);=0A=
    this.beginning_date.setHours(12); // Prevent daylight savings time =
boundaries from showing a duplicate day=0A=
    var pre_days =3D this.beginning_date.getDay() // draw some days =
before the fact=0A=
    if (pre_days < 3) pre_days +=3D 7;=0A=
    this.beginning_date.setDate(1 - pre_days + Date.first_day_of_week);=0A=
    =0A=
    var iterator =3D new Date(this.beginning_date);=0A=
    =0A=
    var today =3D new Date().stripTime();=0A=
    var this_month =3D this.date.getMonth();=0A=
    vdc =3D this.options.get("valid_date_check");=0A=
    for (var cell_index =3D 0;cell_index<42; cell_index++)=0A=
    {=0A=
      day =3D iterator.getDate(); month =3D iterator.getMonth();=0A=
      cell =3D this.calendar_day_grid[cell_index];=0A=
      Element.remove(cell.childNodes[0]); div =3D cell.build("div", =
{innerHTML:day});=0A=
      if (month!=3Dthis_month) div.className =3D "other";=0A=
      cell.day =3D day; cell.month =3D month; cell.year =3D =
iterator.getFullYear();=0A=
      if (vdc) { if (vdc(iterator.stripTime())) =
cell.removeClassName("disabled"); else cell.addClassName("disabled") };=0A=
      iterator.setDate( day + 1);=0A=
    }=0A=
    =0A=
    if (this.today_cell) this.today_cell.removeClassName("today");=0A=
    =0A=
    if ( $R( 0, 41 ).include(days_until =3D =
this.beginning_date.stripTime().daysDistance(today)) ) {=0A=
      this.today_cell =3D this.calendar_day_grid[days_until];=0A=
      this.today_cell.addClassName("today");=0A=
    }=0A=
  },=0A=
  refreshMonthYear: function() {=0A=
    var m =3D this.date.getMonth();=0A=
    var y =3D this.date.getFullYear();=0A=
    // set the month=0A=
    if (this.options.get("month_year") =3D=3D "dropdowns") =0A=
    {=0A=
      this.month_select.setValue(m, false);=0A=
      =0A=
      var e =3D this.year_select.element; =0A=
      if (this.flexibleYearRange() && (!(this.year_select.setValue(y, =
false)) || e.selectedIndex <=3D 1 || e.selectedIndex >=3D =
e.options.length - 2 )) this.populateYearRange();=0A=
      =0A=
      this.year_select.setValue(y);=0A=
      =0A=
    } else {=0A=
      this.month_year_label.update( Date.months[m] + " " + y.toString()  =
);=0A=
    }=0A=
  },=0A=
  populateYearRange: function() {=0A=
    this.year_select.populate(this.yearRange().toArray());=0A=
  },=0A=
  yearRange: function() {=0A=
    if (!this.flexibleYearRange())=0A=
      return $R(this.options.get("year_range")[0], =
this.options.get("year_range")[1]);=0A=
      =0A=
    var y =3D this.date.getFullYear();=0A=
    return $R(y - this.options.get("year_range"), y + =
this.options.get("year_range"));=0A=
  },=0A=
  flexibleYearRange: function() { return =
(typeof(this.options.get("year_range")) =3D=3D "number"); },=0A=
  validYear: function(year) { if (this.flexibleYearRange()) { return =
true;} else { return this.yearRange().include(year);}  },=0A=
  dayHover: function(element) {=0A=
    var hover_date =3D new Date(this.selected_date);=0A=
    hover_date.setYear(element.year); =
hover_date.setMonth(element.month); hover_date.setDate(element.day);=0A=
    this.updateFooter(hover_date.toFormattedString(this.use_time));=0A=
  },=0A=
  dayHoverOut: function(element) { this.updateFooter(); },=0A=
  clearSelectedClass: function() {if (this.selected_cell) =
this.selected_cell.removeClassName("selected");},=0A=
  setSelectedClass: function() {=0A=
    if (!this.selection_made) return;=0A=
    this.clearSelectedClass()=0A=
    if ($R(0,42).include( days_until =3D =
this.beginning_date.stripTime().daysDistance(this.selected_date.stripTime=
()) )) {=0A=
      this.selected_cell =3D this.calendar_day_grid[days_until];=0A=
      this.selected_cell.addClassName("selected");=0A=
    }=0A=
  },=0A=
  reparse: function() { this.parseDate(); this.refresh(); },=0A=
  dateString: function() {=0A=
    return (this.selection_made) ? =
this.selected_date.toFormattedString(this.use_time) : "&#160;";=0A=
  },=0A=
  parseDate: function()=0A=
  {=0A=
    var value =3D $F(this.target_element).strip()=0A=
    this.selection_made =3D (value !=3D "");=0A=
    this.date =3D value=3D=3D"" ? NaN : =
Date.parseFormattedString(this.options.get("date") || value);=0A=
    if (isNaN(this.date)) this.date =3D new Date();=0A=
    if (!this.validYear(this.date.getFullYear())) this.date.setYear( =
(this.date.getFullYear() < this.yearRange().start) ? =
this.yearRange().start : this.yearRange().end);=0A=
    this.selected_date =3D new Date(this.date);=0A=
    this.use_time =3D /[0-9]:[0-9]{2}/.exec(value) ? true : false;=0A=
    this.date.setDate(1);=0A=
  },=0A=
  updateFooter:function(text) { if (!text) text =3D this.dateString(); =
this.footer_div.purgeChildren(); this.footer_div.build("span", =
{innerHTML: text }); },=0A=
  clearDate:function() {=0A=
    if ((this.target_element.disabled || this.target_element.readOnly) =
&& this.options.get("popup") !=3D "force") return false;=0A=
    var last_value =3D this.target_element.value;=0A=
    this.target_element.value =3D "";=0A=
    this.clearSelectedClass();=0A=
    this.updateFooter('&#160;');=0A=
    if (last_value!=3Dthis.target_element.value) =
this.callback("onchange");=0A=
  },=0A=
  updateSelectedDate:function(partsOrElement, via_click) {=0A=
    var parts =3D $H(partsOrElement);=0A=
    if ((this.target_element.disabled || this.target_element.readOnly) =
&& this.options.get("popup") !=3D "force") return false;=0A=
    if (parts.get("day")) {=0A=
      var t_selected_date =3D this.selected_date, vdc =3D =
this.options.get("valid_date_check");=0A=
      for (var x =3D 0; x<=3D3; x++) =
t_selected_date.setDate(parts.get("day"));=0A=
      t_selected_date.setYear(parts.get("year"));=0A=
      t_selected_date.setMonth(parts.get("month"));=0A=
      =0A=
      if (vdc && ! vdc(t_selected_date.stripTime())) { return false; }=0A=
      this.selected_date =3D t_selected_date;=0A=
      this.selection_made =3D true;=0A=
    }=0A=
    =0A=
    if (!isNaN(parts.get("hour"))) =
this.selected_date.setHours(parts.get("hour"));=0A=
    if (!isNaN(parts.get("minute"))) this.selected_date.setMinutes( =
Math.floor_to_interval(parts.get("minute"), =
this.options.get("minute_interval")) );=0A=
    if (parts.get("hour") =3D=3D=3D "" || parts.get("minute") =3D=3D=3D =
"") =0A=
      this.setUseTime(false);=0A=
    else if (!isNaN(parts.get("hour")) || !isNaN(parts.get("minute")))=0A=
      this.setUseTime(true);=0A=
    =0A=
    this.updateFooter();=0A=
    this.setSelectedClass();=0A=
    =0A=
    if (this.selection_made) this.updateValue();=0A=
    if (this.closeOnClick()) { this.close(); }=0A=
    if (via_click && !this.options.get("embedded")) {=0A=
      if ((new Date() - this.last_click_at) < 333) this.close();=0A=
      this.last_click_at =3D new Date();=0A=
    }=0A=
  },=0A=
  closeOnClick: function() {=0A=
    if (this.options.get("embedded")) return false;=0A=
    if (this.options.get("close_on_click")=3D=3D=3Dnil )=0A=
      return (this.options.get("time")) ? false : true=0A=
    else=0A=
      return (this.options.get("close_on_click"))=0A=
  },=0A=
  navMonth: function(month) { (target_date =3D new =
Date(this.date)).setMonth(month); return (this.navTo(target_date)); },=0A=
  navYear: function(year) { (target_date =3D new =
Date(this.date)).setYear(year); return (this.navTo(target_date)); },=0A=
  navTo: function(date) {=0A=
    if (!this.validYear(date.getFullYear())) return false;=0A=
    this.date =3D date;=0A=
    this.date.setDate(1);=0A=
    this.refresh();=0A=
    this.callback("after_navigate", this.date);=0A=
    return true;=0A=
  },=0A=
  setUseTime: function(turn_on) {=0A=
    this.use_time =3D this.options.get("time") && =
(this.options.get("time")=3D=3D"mixed" ? turn_on : true) // force =
use_time to true if time=3D=3Dtrue && time!=3D"mixed"=0A=
    if (this.use_time && this.selected_date) { // only set hour/minute =
if a date is already selected=0A=
      var minute =3D =
Math.floor_to_interval(this.selected_date.getMinutes(), =
this.options.get("minute_interval"));=0A=
      var hour =3D this.selected_date.getHours();=0A=
      =0A=
      this.hour_select.setValue(hour);=0A=
      this.minute_select.setValue(minute)=0A=
    } else if (this.options.get("time")=3D=3D"mixed") {=0A=
      this.hour_select.setValue(""); this.minute_select.setValue("");=0A=
    }=0A=
  },=0A=
  updateValue: function() {=0A=
    var last_value =3D this.target_element.value;=0A=
    this.target_element.value =3D this.dateString();=0A=
    if (last_value!=3Dthis.target_element.value) =
this.callback("onchange");=0A=
  },=0A=
  today: function(now) {=0A=
    var d =3D new Date(); this.date =3D new Date();=0A=
    var o =3D $H({ day: d.getDate(), month: d.getMonth(), year: =
d.getFullYear(), hour: d.getHours(), minute: d.getMinutes()});=0A=
    if ( ! now ) o =3D o.merge({hour: "", minute:""}); =0A=
    this.updateSelectedDate(o, true);=0A=
    this.refresh();=0A=
  },=0A=
  close: function() {=0A=
    if (this.closed) return false;=0A=
    this.callback("before_close");=0A=
    this.target_element.calendar_date_select =3D nil;=0A=
    Event.stopObserving(document, "mousedown", =
this.closeIfClickedOut_handler);=0A=
    Event.stopObserving(document, "keypress", this.keyPress_handler);=0A=
    this.calendar_div.remove(); this.closed =3D true;=0A=
    if (this.iframe) this.iframe.remove();=0A=
    if (this.target_element.type !=3D "hidden" && ! =
this.target_element.disabled) this.target_element.focus();=0A=
    this.callback("after_close");=0A=
  },=0A=
  closeIfClickedOut: function(e) {=0A=
    if (! $(Event.element(e)).descendantOf(this.calendar_div) ) =
this.close();=0A=
  },=0A=
  keyPress: function(e) {=0A=
    if (e.keyCode=3D=3DEvent.KEY_ESC) this.close();=0A=
  },=0A=
  callback: function(name, param) { if (this.options.get(name)) { =
this.options.get(name).bind(this.target_element)(param); } }=0A=
}
------=_NextPart_000_0000_01CCDF29.AA133360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://markham.tofinoauctions.com/2012auction/javascripts/calendar_date_select/format_american.js?1313468625

// American Format: 12/31/2000 5:00 pm=0A=
// Thanks, Wes Hays=0A=
Date.prototype.toFormattedString =3D function(include_time){=0A=
  str =3D Date.padded2(this.getMonth() + 1) + '/' =
+Date.padded2(this.getDate()) + '/' + this.getFullYear();=0A=
=0A=
  if (include_time) { hour=3Dthis.getHours(); str +=3D " " + =
this.getAMPMHour() + ":" + this.getPaddedMinutes() + " " + =
this.getAMPM() }=0A=
  return str;=0A=
}=0A=
=0A=
Date.parseFormattedString =3D function (string) {=0A=
  // Test these with and without the time=0A=
  // 11/11/1111 12pm=0A=
  // 11/11/1111 1pm=0A=
  // 1/11/1111 10:10pm=0A=
  // 11/1/1111 01pm=0A=
  // 1/1/1111 01:11pm=0A=
  // 1/1/1111 1:11pm=0A=
  var regexp =3D "(([0-1]?[0-9])\/[0-3]?[0-9]\/[0-9]{4}) =
*([0-9]{1,2}(:[0-9]{2})? *(am|pm))?";=0A=
  var d =3D string.match(new RegExp(regexp, "i"));=0A=
  if (d=3D=3Dnull) {=0A=
    return Date.parse(string); // Give javascript a chance to parse it.=0A=
  }=0A=
=0A=
  mdy =3D d[1].split('/');=0A=
  hrs =3D 0;=0A=
  mts =3D 0;=0A=
  if(d[3] !=3D null) {=0A=
    hrs =3D parseInt(d[3].split('')[0], 10);=0A=
    if(d[5].toLowerCase() =3D=3D 'pm') { hrs +=3D 12; } // Add 12 more =
to hrs=0A=
    mts =3D d[4].split(':')[1];=0A=
  }=0A=
  =0A=
  return new Date(mdy[2], parseInt(mdy[0], 10)-1, mdy[1], hrs, mts, 0);=0A=
}=0A=

------=_NextPart_000_0000_01CCDF29.AA133360--

