From: Subject: Savannah, The Creative Coast Initiative: Directory Date: Thu, 5 Jul 2007 17:07:15 -0400 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C7BF26.EF8D5D30" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/directory/category/154 =EF=BB=BF Savannah, The = Creative Coast Initiative: Directory
=20
3DSpacer=20
Sign = In |what's new =C2=BB ...
3DTriangle_right=20= Home  3D"grey  Links =   =20 Category =20
3DSpacer=20

Go

3Dexpand=203Dcollapse=20 =
  • 3DExpand_nav=20= Why Savannah new
  • 3DExpand_nav=20= Explore = Savannah
  • Directories
  • 3DExpand_nav=20= News
  • 3DExpand_nav=20= Events
  • 3DExpand_nav=20= Jobs & = Resumes
  • 3DExpand_nav=20= Real = Estate
  • 3DExpand_nav=20= How-To's & = FAQ's
  • 3DExpand_nav=20= Data & = Info
  • 3DExpand_nav=20= About

Knowledge Biz

Advertising, Marketing, and PR
98 PRODUCTIONS, = LLC

112 East Harris Street Suite 101
Savannah , GA 31401=20
912.308.6900
info [at]=20 98productions [dot] com
Map=20 Location [+]

Abshire Public = Relations=20 & Marketing

101 Radick Drive
Savannah , GA 31406
912.695.7881
jennifer [at] abshirepr = [dot] com
Map=20 Location [+]

Advertising by = Design,=20 Inc.

4 Dunmore Court
Hilton Head Island , SC 29925 =
843.342.7212
Map=20 Location [+]

Advertising = Consulting=20 Services

PO Box 30516
Savannah , GA 31410
Map=20 Location [+]

Advertising = Specialty=20 Services

402 E Montgomery Crossroads
Savannah , GA 31406
quotes [at] = adspecialtyservices [dot] com
Map=20 Location [+]

Advice=20 Guys

163 North Drive Savannah, GA
Savannah , GA 31406 =
912.228.2612
info [at] adviceguys [dot] us
Map=20 Location [+]

Anderson = Communications=20 Group

32 Office Park Road
Suite 315
Hilton Head Island , SC 29928=20
843.785.4647
info [at]=20 acg-1 [dot] com
Map=20 Location [+]

Battin = Corporate and=20 Consumer Communications

P.O. Box 9298
Savannah , GA 31412
info = [at] battin3c [dot]=20 com
Map=20 Location [+]

BFG=20 Communications

PO Box 23199
Hilton Head Island , SC 29925
kmeany=20 [at] bfgcom [dot]=20 com
Map=20 Location [+]

Bliss Lane=20 Studios

912.655.6744
chat [at]=20 blisslane [dot] com

Bluewater=20 PR

5524 Reynolds Street
Savannah , GA 31405
info [at] bluewaterpr [dot]=20 com
Map=20 Location [+]

Bottom Line=20 Marketing

11 South Millward Road
Savannah , GA 31410 =
912.484.3023
john [at] bottline [dot] com
Map=20 Location [+]

brightwhitespace= =20

504 E. 38th Street
Savannah , GA 31401
912.228.4184
rigel [at] brightwhitespace = [dot] com
Map=20 Location [+]

CarriageTrade = PR=20 Inc.

Casa Design=20 Group

710 Maupas Avenue
Savannah , GA 31401
912.484.0034
casadesigngroup [at] gmail = [dot] com
Map=20 Location [+]

CataDisc=20

530 Stephenson Ave.
Suite 200
Savannah , GA 31405=20
912.652.4840
sales [at]=20 catadisc [dot] com
Map=20 Location [+]

CNSG Hilton=20 Head

Hilton Head Island , SC 29938
843.785.3989

Coastal=20 Digital

513 E. Oglethorpe Avenue
Suite M
Savannah , GA 31401=20
912.233.4400
savannah [at]=20 coastaldigitalreprographics [dot] = com
Map=20 Location [+]

Coastal = Marketing=20 Group

info [at] = coastalmarketinggroup=20 [dot] com

Coggins = Promotional=20 Advertising

41 Park of Commerce Way, Suite 101
Savannah , GA 31405
Map=20 Location [+]

Cox Advertising = &=20 Public Relations

463 Johnny Mercer Blvd B-7 300
Savannah , GA 31410
tcox [at] coxadvertising = [dot] biz
Map=20 Location [+]

Dailey = Marketing=20 Solutions

141 Dutch Island Dr.
Savannah , GA 31406
912.441.6397
daileymarketingsolutions [at] comcast=20 [dot] net
Map=20 Location [+]

David Flynn=20 Design

Designation = Advertising=20 & Design

450 Mall Boulevard \n
Suite A-2
Savannah , GA 31406
info [at] godesignation = [dot] com
Map=20 Location [+]

DiGIBOARDZ=20

info [at] = digiboardz [dot] com

Electric=20 Lemonade

PO Box 61261
Savannah , GA 31420
912.961.0963
info [at] electriclemonade = [dot] com
Map=20 Location [+]

First City=20 Communications

firstcitycomm [at] = bellsouth=20 [dot] net

Fresh Air = Business=20 Promotions

49 Timbercrest Circle
Hilton Head Island , SC 29926=20
843.683.2535
cindy [at]=20 freshairbp [dot] com
Map=20 Location [+]

Gazelle = Communications=20 Group

39 Sedgewick Avenue
Bluffton , SC 29910
843.597.0505
Map=20 Location [+]

givingadvice= =20

P.O. Box 16876
Savannah , GA 31416
912.691.1703
maggie [at] givingadvice = [dot] com
Map=20 Location [+]

Hammet &=20 Claire

21 Dillon Road, Suite J
Hilton Head Island , SC 29926
Map=20 Location [+]

Hauser=20 Group

325 Tattnall Street
Savannah , GA 31401
Map=20 Location [+]

Home = Improvement=20 Time

Mercy Ct.
Savannah , GA 31419
912.920.4568
jane=20 [at] synergyadpro [dot]=20 com
Map=20 Location [+]

HT Creative,=20 LLC

6501 Habersham Street #4
Savannah , GA 31405 =
912.355.0228
heather [at] htcreative = [dot] net
Map=20 Location [+]

Jester=20 Communication

2 Corpus Christie, suite 300
Hilton Head Island , SC 29928=20
843.785.3884
411 [at]=20 jestercom [dot] com
Map=20 Location [+]

Joselove Filson = Advertising, Inc.

300 Commercial Court
Unit D
Savannah , GA 31406=20
912.353.7732
frances [at]=20 joselovefilson [dot] com
Map=20 Location [+]

Joseph David=20 Advertising

Joshua Hood |=20 Illustration

Savannah , GA 31401
404.993.2075
me [at] joshuahood [dot]=20 com

Joy=20 Design

124 Quacco Road
Savannah , GA 31419
912.920.1826
joy.dunigan [at] joysavannah = [dot] com
Map=20 Location [+]

Kailo=20 Advertising

4 E Gazebo Lane
Savannah , GA 31410
912.224.2891
info [at] kailoadvertising = [dot] com
Map=20 Location [+]

Katie Campbell = ::pixels=20 & paper::

1809 Hale Street
Savannah , GA 31404
850.445.1566
katiecampbell [at] mac [dot] com
Map=20 Location [+]

Lead Dog=20 Productions

21 North Oak
Richmond Hill , GA 31324
Map=20 Location [+]

Longwater and=20 Associates

619 Tattnall Street
Savannah , GA 31401
longwater=20 [at] longwater [dot]=20 com
Map=20 Location [+]

Monroe=20 Marketing

7370 Hodgson Memorial Drive, Suite C-5
Savannah , GA 31406 =
rmonroe [at] = monroemarketinginc [dot] com
Map=20 Location [+]

My-NoBrainer.Com= =20

7310 Bellfast-Keller Rd
Richmond Hill , Ga 31324 =
912.727.4413
upload [at] my-nobrainer = [dot] com
Map=20 Location [+]

New Moon=20 Design

317 Purple Plum Dr Savannah, GA
Rincon , GA 31326=20
912.351.3150
lmalhoyt [at]=20 newmoondesign [dot] com
Map=20 Location [+]

Occtane=20 Group

4 Southwood Park Drive
Suite 3
Hilton Head Island , SC 29926=20
843.689.4400
Map=20 Location [+]

OpenVision=20

POB 5645
Hilton Head , SC 29938
843.785.9911
succeed [at] openvision = [dot] com
Map=20 Location [+]

Patty-Cake=20 Photography

Savannah
912.756.5003
pattycakephotos = [at] hotmail [dot] = com

Photographer= =20

346 Lincoln Street
Savannah , GA 31401
912.236.5266
bdavidson35 [at] comcast = [dot] net
Map=20 Location [+]

PR=20 Concepts

108 E. Montgomery Cross Roads
Savannah , GA 31419
info [at] prconcepts [dot] net
Map=20 Location [+]

Reed=20 Publications

13635 Rockingham Road
Savannah , GA 31419
Reedpub=20 [at] aol [dot]=20 com
Map=20 Location [+]

River Horse = Internet=20 Marketing

1 Diamond Causeway
Suite 21-175
Savannah , GA 31406
Map=20 Location [+]

Robertson-Markow= itz=20

108 E. Montgomery Crossroads
Savannah , GA 31406
robmark [at] robmark [dot] com
Map=20 Location [+]

Sandy Traub, = SPATIOR=20 Storyline Marketing

PO Box 1634
Savannah , GA 31402
912.398.9828
straub [at] spatior [dot] com
Map=20 Location [+]

Savannah=20 Heat

Mercy Ct.
Savannah , GA 31419
703.862.6135
jane=20 [at] synergyadpro [dot]=20 com
Map=20 Location [+]

Shortt=20 Communications

1711 Dean Forest Road, Suite H
Savannah , GA 31408
michael [at] michaelshortt = [dot] com
Map=20 Location [+]

Southeastern = Marketing=20 Services

116 NORTH COLLEGE STREET
Statesboro , GA 30458
accsems [at] frontiernet = [dot] net
Map=20 Location [+]

Spatior=20

info [at] spatior = [dot] com

Spirer=20 Communications

10 Office Park Road \n
Suite 100, Carolina Bldg.\n
Hilton Head = Island ,=20 SC 29928
Map=20 Location [+]

Synergy=20 Advertising/Production

jbaer [at] = synergyadpro [dot] com

The Ellis = Square=20 Project

10 Whitaker Street
Savannah , GA 31401
912.233.7806
s_broker [at] savannah.ga = [dot] gov
Map=20 Location [+]

The Marketing = Department=20 Inc.

100 Blue Fin Circle Suite 2
Savannah , GA 31410
mktdpt [at] i-design-inc = [dot] com
Map=20 Location [+]

The Media=20 Specialist

a_graham [at] = hargray [dot] com

The Meredith = Group,=20 Inc.

info [at] = meredithinc [dot] com

The Pringle=20 Agency

612 North Street
Beaufort , SC 29902
843.522.1577
thepringleagency [at] = earthlink [dot] net
Map=20 Location [+]

The Young = Professionals=20 of Savannah

Savannah , Ga 31405
912.659.9846

University of = South=20 Carolina Beaufort

Noth Campus - 801 Carteret Street
South Campus - 1 University=20 Boulevard
Beaufort , SC 29902
843.521.4100
lmcgee=20 [at] uscb [dot]=20 edu
M= ap=20 Location [+]

Verveffect=20

alyssa [at] = verveffect [dot] com

Video Ad = Services=20 Technology

info [at] = silverlinetv [dot] com

Virtual = Marketing=20 Concepts

14 Savannah Highway
Suite 15
Beaufort , SC 29906=20
843.522.0833
walt [at] vmc3=20 [dot] com
Map=20 Location [+]

Workhorse=20 Creative

3 Coquina Road
Hilton Head Island , SC 29928 =
843.338.9691
caroline [at] = workhorsecreative [dot] net
Map=20 Location [+]

World Design=20 Marketing

info [at] wdm1 = [dot] com

World Design=20 Marketing

93 Arrow Road
Suite 2C
Hilton Head Island , SC 29928=20
843.686.2228
info [at] wdm1=20 [dot] com
Map=20 Location=20 [+]

Do

3DDirectory=20 = photo by=20
 

search

=

Sign In


password
remember me

[forgot?] = [sign = up]

newsletter

= =

=C2=A9 Copyright 2004-2007 The Creative Coast Initiative | =20 add to del.icio.us

Home | Why Savannah new | Explore Savannah | Directories | News | Events | Jobs & Resumes | = Real Estate | = How-To's & FAQ's | Data & Info | About

powered by Ruby on Rails | Valid = XHTML

------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/header/header_2.jpg?1183395038 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 ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/spacer.gif?1183395038 R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/triangle_right.gif?1183395038 R0lGODlhDQANALMAANTU1NnZ2dzc3NbW1uvr6+Pj4+jo6OHh4enp6ebm5uDg4O3t7d7e3tPT0wAA AAAAACH5BAAAAAAALAAAAAANAA0AAAQ5MLFJK5Mt691mFgGXeY2yJANHmstyANratoQwMhk7L0aH l7tTStZChG65BeEX+ykKMBVTNJJYLIkIADs= ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/triangle_grey.gif R0lGODlhCgAMAMQAAN3d3ejo6Nzc3O3t7eLi4ufn5+Xl5dnZ2djY2NXV1eTk5Obm5uHh4dDQ0NHR 0enp6e7u7tPT09TU1Ovr69LS0urq6uzs7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAA AAAALAAAAAAKAAwAAAVGIGSJVllCj1BYU+VW00NJTMW6ViU1DmJMrZyEQnFEAIGJkBKJOBoJwkDH jBQjjOnwirTpGpSDQmmT0R63smCRdk1EJNMoBAA7 ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/delicious.png?1183395038 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAMUExURQAAAP///93d3QAA/+4iTdsAAAAa SURBVHjaYmCEAmYoYBggARhggoIBEgAIMADrEAGBe3e9DgAAAABJRU5ErkJggg== ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/expand.gif R0lGODlhEAAOALMAAMDfm/r89t3uyfT57dfrv+j026nUdsbipOLx0svlre735LTaiNHotrrdkv// /6PRbSH5BAAAAAAALAAAAAAQAA4AAARP0EmHWGtMze3UemAIBJxihOizkNOXosAkpFc6SEfKMCkh NaGLQNBwPRi/UKEwGBQIIaQjh9r1JLMqD3WTGF+P2MQEVrHGX9CIM0EkLhl2BAA7 ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/collapse.gif R0lGODlhEAAOALMAAOj029frv/T57d3uyanUdsDfm8bipOLx0tHotq/Xf8vlrbrdkv///6PRbQAA AAAAACH5BAAAAAAALAAAAAAQAA4AAARFkMk51CpBzM0OaWCocMwQnqCxCR96BpPiosmUzCggnQvi Iycd44TYBCU3UGLBXBwZMpxywpI2YBSpinNInkYkSeWS2UQAADs= ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/home_nav.gif?1183395038 R0lGODlhCQAJAMQdAFm22tHm8tHn8njA33rB3/7//3zB4NXo89Po81i12tLn837C4Nbp9JrO5qDQ 6Der1TWr1X3C4CSo09To853P5yGo04DD4Fa02iKo0zWr1D+t1v///0Ct1v///wAAAAAAACH5BAEA AB0ALAAAAAAJAAkAAAU0YLcdVmJNm+hIkAZV1MZgXF1jSJTZdUZcGh5HczHseJnBhMbDCDYUyUPz qDQKIsUCEAmkQgA7 ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/expand_nav.gif?1183395038 R0lGODlhCQAJANUxADOr1U6w11O02VWx2E2w13rA333C4HzB4Fq22lCz2HS83D2s1Uev13C63PP3 +7zb7TOq1VW12tHl8liz2Viz2F202dPm8tTn8tzr9l602UKt1rra7dXo83vB3zis1Uqv17/c7d7s 9lCx1z2t1iSo0zer1J3P537C4J/Q5yGo09Xp9IHD4Tms1SKo0zWr1NTo8////////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAAJAAkAAAZGwBhM tUKsVDAhiuQauUgoGKfFEj0Intar41pQMAOnIcEAXRyWjSZSKGUUoUaldHi1IAHJB6CFmVIsEywp JkkwLycCJy9JQQA7 ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://thecreativecoast.org/images/collapse_nav.gif?1183395038 R0lGODlhCQAJANUoAFa12kWu1mC12aLR6J3P51m12jWr1bjZ633C4Fu22oDD4Z7Q57va64DC4dXo 89Po81W12mG12Ter1XzB4IDD4IHD4aLR59Xp9CGo037C4Nbp9ILE4djq9Der1NTo8yKo083j8Ga3 2ySo0zWr1Dms1UKt1j+t1v///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAAAAAJAAkAAAY/QNRJ s0lUHCfhQDQyjUSLEwdjqlY/HsWoxOWOEIUAA0Q+lCCNTiTEFnQmnA9pPseeLCKDSSIiJE8XFAAZ D0lBADs= ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/page/image/137/directory.jpg? =0A= =0A= =0A= =0A= =0A= Savannah, The Creative Coast Initiative: =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A=
=0A=
=0A= 3D"Header_2"=0A=
=0A= =0A=
3D"Spacer"
=0A=
=0A=
Sign In =0A= =0A= |what's new »=0A= ...=0A= =0A= =0A=
=0A= 3D"Triangle_right"=0A= =0A= =0A= =0A= =0A= =0A= Home  3D"grey  Pages  3D"grey  Location=0A= 3D"Delicious" =0A=
=0A=
3D"Spacer"
=0A= =0A=
=0A= =0A=
=0A=  =0A=
=0A= =0A=
=0A=
=0A=

Go

=0A=
=0A=
=0A= 3D"expand"3D"collapse"=0A=
=0A= =0A=
=0A= =0A=
=0A= =0A=
=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A=
=0A=
=0A= =0A=
=0A= =0A= =0A=
=0A=

=0A=
=0A=
=0A= =0A= =0A= =0A=
=0A= =0A= =0A=
=0A= =0A=
=0A=
=0A=

Do

=0A=
=0A=
=0A=
=0A= =0A=
=0A= =0A=
=0A= =0A=
=0A=
 
=0A=
=0A=

search

=0A=
=0A= =0A= =0A=
=0A=
=0A= =0A=
=0A= =0A= =0A=

Sign In

=0A= =0A=
=0A= =0A=
=0A= =0A= =0A=
=0A=
=0A=
=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A=
=0A= =0A=
=0A=

newsletter

=0A=
=0A= =0A= =0A= =0A= =0A=
=0A=
=0A= =0A= =0A= =0A= =0A=
=0A= =0A=
=0A= =0A=
=0A= =0A=
=0A=
=0A=

© Copyright 2004-2007 The Creative Coast Initiative | 3D"Delicious" add to del.icio.us

=0A=
=0A=
=0A=
=0A=
=0A=

=0A= Home=0A= =0A= | Why Savannah new=0A= =0A= | Explore Savannah=0A= =0A= | Directories=0A= =0A= | News=0A= =0A= | Events=0A= =0A= | Jobs & Resumes=0A= =0A= | Real Estate=0A= =0A= | How-To's & FAQ's=0A= =0A= | Data & Info=0A= =0A= | About=0A= =0A=

=0A=

powered by Ruby on Rails | Valid XHTML

=0A=
=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A=
=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/stylesheets/default.css?1183490343 #Notice { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = auto; WIDTH: 798px; PADDING-TOP: 0px; TEXT-ALIGN: right } #Container { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: = url(/images/column_seperator.gif) #fff repeat-y 0px 0px; PADDING-BOTTOM: = 0px; MARGIN: 0px auto; WIDTH: 798px; PADDING-TOP: 0px; TEXT-ALIGN: left } #Header IMG { PADDING-RIGHT: 0px; BORDER-TOP: rgb(219,219,219) 3px solid; DISPLAY: = block; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: = 798px; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } #Breadcrumbs { BORDER-RIGHT: rgb(195,195,195) 1px solid; PADDING-RIGHT: 10px; = BORDER-TOP: rgb(195,195,195) 1px solid; MARGIN-TOP: 0px; PADDING-LEFT: = 10px; FONT-SIZE: 11px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 5px; = BORDER-LEFT: rgb(195,195,195) 1px solid; PADDING-TOP: 3px; = BORDER-BOTTOM: rgb(195,195,195) 1px solid; BACKGROUND-COLOR: = rgb(234,234,234); TEXT-ALIGN: right } .BreadcrumbsSpacer { BACKGROUND: rgb(219,219,219) } #Content { BORDER-RIGHT: rgb(195,195,195) 1px solid; PADDING-RIGHT: 0px; = BORDER-TOP: rgb(195,195,195) 1px solid; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: rgb(195,195,195) 1px = solid; PADDING-TOP: 0px; BORDER-BOTTOM: rgb(195,195,195) 1px solid } #ContentSpacer { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #fff; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; HEIGHT: 30px } #NavColumn { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px; WIDTH: 155px; PADDING-TOP: 0px } #MainColumn { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; WIDTH: 428px; PADDING-TOP: 0px } #GetInfoColumn { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent = scroll repeat 0% 0%; FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px; = WIDTH: 213px; PADDING-TOP: 0px } #Footer { CLEAR: both; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 10px; = BACKGROUND: rgb(78,162,181); MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 5px; = COLOR: #fff; PADDING-TOP: 5px; TEXT-ALIGN: center } #LowerFooter { MARGIN-TOP: 0px; MARGIN-BOTTOM: 50px } BODY { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = 10px; COLOR: #666; PADDING-TOP: 0px; BACKGROUND-COLOR: rgb(219,219,219); = TEXT-ALIGN: center } BODY { FONT-FAMILY: verdana, arial, helvetica, sans-serif } P { FONT-FAMILY: verdana, arial, helvetica, sans-serif } OL { FONT-FAMILY: verdana, arial, helvetica, sans-serif } UL { FONT-FAMILY: verdana, arial, helvetica, sans-serif } TD { FONT-FAMILY: verdana, arial, helvetica, sans-serif } IMG { BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: = 0px; BORDER-RIGHT-WIDTH: 0px } IMG.Headshot { BORDER-RIGHT: #c8c8c8 1px solid; BORDER-TOP: #c8c8c8 1px solid; = DISPLAY: inline; FLOAT: left; MARGIN: 0px 5px 0px 0px; BORDER-LEFT: = #c8c8c8 1px solid; BORDER-BOTTOM: #c8c8c8 1px solid; HEIGHT: 100px } A { COLOR: rgb(104,160,66); BORDER-BOTTOM: rgb(239,239,239) 1px solid; = TEXT-DECORATION: none } A:hover { BACKGROUND-COLOR: rgb(231,237,212) } A.current { BACKGROUND-COLOR: rgb(231,237,212) } A.current { FONT-WEIGHT: bold } A:hover { BORDER-BOTTOM: rgb(104,160,66) 1px solid } A.image_link { BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: = none; BORDER-BOTTOM-STYLE: none } A.image_link:hover { BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: = none; BORDER-BOTTOM-STYLE: none } A.image_link:active { BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: = none; BORDER-BOTTOM-STYLE: none } A.image_link:visited { BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: = none; BORDER-BOTTOM-STYLE: none } A.image_link:link { BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: = none; BORDER-BOTTOM-STYLE: none } A.feedlink { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none } A.feedlink:hover { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none } A.feedlink:active { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none } A.feedlink:visited { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none } P { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: rgb(89,89,89); = LINE-HEIGHT: 15px } TD { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: rgb(89,89,89); = LINE-HEIGHT: 15px } P { MARGIN: 3px 0px 10px } UL { MARGIN: 3px 0px 10px } UL { LIST-STYLE-POSITION: outside; FONT-SIZE: 11px; MARGIN-LEFT: 0px; = LIST-STYLE-TYPE: square } OL { LIST-STYLE-POSITION: outside; FONT-SIZE: 11px; MARGIN: 3px 0px 10px } UL.none { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px; LIST-STYLE-TYPE: none } UL.none LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; LINE-HEIGHT: 13px; PADDING-TOP: 0px } UL LI { MARGIN: 5px 0px 5px 10px; LINE-HEIGHT: 15px } UL LI STRONG { TEXT-TRANSFORM: lowercase } UL LI UL { LIST-STYLE-TYPE: circle } BLOCKQUOTE { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; MARGIN: = 5px 0px 9px; BORDER-LEFT: rgb(200,200,200) 5px solid; COLOR: = rgb(89,167,200); PADDING-TOP: 5px; BACKGROUND-COLOR: rgb(248,248,248) } BLOCKQUOTE P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: = 14px; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: rgb(89,167,200); = PADDING-TOP: 0px } BLOCKQUOTE P.tip SPAN { FONT-WEIGHT: bold; COLOR: rgb(89,167,200); MARGIN-RIGHT: 5px } BLOCKQUOTE P.tip_padded SPAN { FONT-WEIGHT: bold; COLOR: rgb(89,167,200); MARGIN-RIGHT: 5px } BLOCKQUOTE P.tip { FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: rgb(129,129,129) } BLOCKQUOTE P.tip_padded { FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: rgb(129,129,129) } BLOCKQUOTE.tip_padded { MARGIN-TOP: 25px } INPUT { VERTICAL-ALIGN: middle; COLOR: rgb(129,129,129) } INPUT.submit { FONT-WEIGHT: bold; TEXT-TRANSFORM: lowercase; COLOR: rgb(89,89,89) } SELECT { FONT-SIZE: 11px; LETTER-SPACING: 0px } LABEL { FONT-SIZE: 12px; TEXT-TRANSFORM: lowercase; COLOR: rgb(104,160,66) } LABEL.post_label { FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: rgb(89,89,89); LINE-HEIGHT: = 14px } SPAN.post_label_description { FONT-SIZE: 10px; COLOR: rgb(27,104,162) } SPAN.Subtitle { PADDING-LEFT: 3px; FONT-WEIGHT: normal; FONT-SIZE: 10px; = TEXT-TRANSFORM: none; COLOR: #666 } SPAN.Uppercase { TEXT-TRANSFORM: uppercase } SPAN.date { FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: rgb(89,167,200) } SPAN.tool_description { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 10px; PADDING-BOTTOM: = 1px; MARGIN: 0px; PADDING-TOP: 1px } SPAN.SignInOrManage { FONT-WEIGHT: bold } SPAN.LogoutOrSignUp { FONT-SIZE: 9px } SPAN.Zoom { DISPLAY: block; FONT-SIZE: 9px } SPAN.PostInfoHeader { TEXT-TRANSFORM: lowercase; COLOR: rgb(27,104,162) } SPAN.delicious IMG { MARGIN-LEFT: 5px; WIDTH: 12px; HEIGHT: 12px } SPAN.digg { FONT-SIZE: 10px; BACKGROUND: none transparent scroll repeat 0% 0%; = LEFT: 272px; BOTTOM: -17px; POSITION: relative } SPAN.digg A:hover { BACKGROUND-COLOR: rgb(231,237,212); TEXT-DECORATION: underline } SPAN.digg IMG.nobg { BACKGROUND: none transparent scroll repeat 0% 0%; WIDTH: 14px; = BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; HEIGHT: 14px; BORDER-BOTTOM-STYLE: none } SPAN.delete { FONT-SIZE: 9px; MARGIN-LEFT: 7px } SPAN.delete A { BORDER-BOTTOM-STYLE: none } SPAN.Email { COLOR: rgb(139,139,139) } SPAN.EmailSep { COLOR: rgb(170,170,170) } SPAN.LinkTitle { FONT-SIZE: 11px } SPAN#HasWifi { FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: rgb(89,167,200) } SPAN#HasWifi { FONT-STYLE: italic } .LinkListing { MARGIN-BOTTOM: 15px } .LinkCount { FONT-SIZE: 9px } .home_graphics { PADDING-RIGHT: 0px; BACKGROUND-POSITION: 66% 50%; PADDING-LEFT: 0px; = BACKGROUND-IMAGE: url(/asset/file/7/faded_logo.gif); MARGIN-BOTTOM: = 20px; PADDING-BOTTOM: 10px; PADDING-TOP: 5px; BACKGROUND-REPEAT: = no-repeat } .big_text { FONT-WEIGHT: bold; FONT-SIZE: 16px } .link { FONT-SIZE: 11px } .form_fields { MARGIN: 10px 100px 10px 0px; TEXT-ALIGN: right } .form_fields INPUT { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; = PADDING-TOP: 0px } .PostLabel { PADDING-RIGHT: 5px; FONT-WEIGHT: bold; COLOR: rgb(125,125,125); = LINE-HEIGHT: 20px } #Body P { PADDING-BOTTOM: 10px; MARGIN: 0px; PADDING-TOP: 0px } #Body P.Tight { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } .post H4 A { MARGIN-LEFT: 5px } .post H4 IMG { VERTICAL-ALIGN: bottom } .post H4 A.image_link { MARGIN-LEFT: 0px } .post .body IMG { BORDER-RIGHT: rgb(189,189,189) 1px solid; BORDER-TOP: rgb(189,189,189) = 1px solid; MARGIN-TOP: 5px; BORDER-LEFT: rgb(189,189,189) 1px solid; = BORDER-BOTTOM: rgb(189,189,189) 1px solid } .date { PADDING-LEFT: 5px } .icon { VERTICAL-ALIGN: middle } .alert { BORDER-RIGHT: rgb(217,217,217) 1px solid; PADDING-RIGHT: 5px; = BORDER-TOP: rgb(217,217,217) 1px solid; PADDING-LEFT: 5px; = PADDING-BOTTOM: 5px; MARGIN: 5px 0px 10px; BORDER-LEFT: rgb(217,217,217) = 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: rgb(217,217,217) 1px solid; = BACKGROUND-COLOR: rgb(147,203,215) } .alert A { COLOR: #fff; BORDER-BOTTOM: #fff 1px dotted } .alert A:hover { BORDER-BOTTOM-COLOR: rgb(147,203,215); COLOR: rgb(147,203,215); = BACKGROUND-COLOR: #fff } .alert P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; COLOR: #fff; PADDING-TOP: 0px } DIV#center { TEXT-ALIGN: center } H1 { TEXT-TRANSFORM: lowercase; FONT-FAMILY: arial, verdana, helvetica, = sans-serif } H2 { TEXT-TRANSFORM: lowercase; FONT-FAMILY: arial, verdana, helvetica, = sans-serif } H3 { TEXT-TRANSFORM: lowercase; FONT-FAMILY: arial, verdana, helvetica, = sans-serif } H3 { TEXT-TRANSFORM: lowercase; FONT-FAMILY: arial, verdana, helvetica, = sans-serif } H4 { TEXT-TRANSFORM: lowercase; FONT-FAMILY: arial, verdana, helvetica, = sans-serif } H5 { TEXT-TRANSFORM: lowercase; FONT-FAMILY: arial, verdana, helvetica, = sans-serif } H1 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } H2 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } H3 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } H4 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } H5 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } H6 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px } H2 { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-WEIGHT: normal; = FONT-SIZE: 16px; PADDING-BOTTOM: 3px; TEXT-TRANSFORM: uppercase; COLOR: = rgb(27,104,162); LINE-HEIGHT: 20px; PADDING-TOP: 3px; TEXT-ALIGN: left } H3 { FONT-WEIGHT: bold; FONT-SIZE: 18px; COLOR: rgb(27,104,162); = LINE-HEIGHT: 18px } H3.Sub { FONT-SIZE: 14px } H4 { FONT-WEIGHT: bold; FONT-SIZE: 12px; MARGIN-BOTTOM: 3px; COLOR: = rgb(125,125,125); LINE-HEIGHT: 14px; PADDING-TOP: 5px } H5 { FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: rgb(27,104,162); = LINE-HEIGHT: 14px } H5.category { FONT-SIZE: 14px; MARGIN-BOTTOM: 10px; BORDER-BOTTOM: rgb(217,217,217) = 1px solid } H5.subtitle { FONT-WEIGHT: normal; FONT-SIZE: 11px } H6 { FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: rgb(183,183,183); = LINE-HEIGHT: 12px } H6.meta { FONT-WEIGHT: normal; COLOR: rgb(210,210,210); FONT-STYLE: italic } H6.SubTitle { FONT-SIZE: 10px; MARGIN-BOTTOM: 7px } H6.SubTitle A { COLOR: rgb(169,169,169); BORDER-BOTTOM: rgb(169,169,169) 1px dotted } H6.SubTitle A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-BOTTOM: = rgb(169,169,169) 1px solid } #Header { MARGIN-TOP: 2px } #BreadcrumbLabel { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 0px; COLOR: = rgb(27,104,162); PADDING-TOP: 0px } #Breadcrumbs IMG { POSITION: relative; TOP: 1px } #Breadcrumbs { TEXT-TRANSFORM: lowercase } #Breadcrumbs IMG { VERTICAL-ALIGN: text-bottom } #Breadcrumbs SPAN.sep { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 9px; PADDING-BOTTOM: = 0px; COLOR: rgb(200,200,200); PADDING-TOP: 0px } #BreadcrumbText { FLOAT: left; WIDTH: 400px; TEXT-ALIGN: left } #BreadcrumbText SPAN { FONT-SIZE: 10px; VERTICAL-ALIGN: text-bottom; COLOR: rgb(127,127,127) } #BreadcrumbText SPAN A { COLOR: rgb(127,127,127); BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: = none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: transparent; = BORDER-BOTTOM-STYLE: none } #BreadcrumbText SPAN A:hover { COLOR: rgb(127,127,127); BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: = none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: transparent; = BORDER-BOTTOM-STYLE: none } #BreadcrumbText .SignInOrManage A { FONT-WEIGHT: normal; COLOR: rgb(169,169,169); BORDER-BOTTOM: = rgb(169,169,169) 1px dotted } #BreadcrumbText .SignInOrManage A:hover { BORDER-BOTTOM: rgb(169,169,169) 1px solid; TEXT-DECORATION: none } #BreadcrumbText SPAN.WhatsNew { PADDING-LEFT: 0px; VERTICAL-ALIGN: text-bottom; COLOR: rgb(27,104,162) } #BreadcrumbText SPAN.WhatsNew A { COLOR: rgb(104,160,66); BORDER-BOTTOM: rgb(104,160,66) 1px dotted } #BreadcrumbText SPAN.WhatsNew A:hover { COLOR: rgb(104,160,66); BORDER-BOTTOM: rgb(104,160,66) 1px dotted } #BreadcrumbText SPAN.WhatsNew A:hover { COLOR: rgb(127,127,127); BORDER-BOTTOM: rgb(127,127,127) 1px solid } #LatestLink { DISPLAY: inline; PADDING-LEFT: 3px; BACKGROUND-COLOR: rgb(234,234,234) } #LatestLink DIV { BACKGROUND-COLOR: rgb(234,234,234) } #NewsFlash { MARGIN-TOP: 10px; MARGIN-LEFT: 10px } #NewsFlash P { PADDING-RIGHT: 2px; BORDER-TOP: rgb(89,167,200) 2px solid; = PADDING-LEFT: 2px; FONT-SIZE: 17px; PADDING-BOTTOM: 4px; WIDTH: 120px; = LINE-HEIGHT: 16px; PADDING-TOP: 1px; BORDER-BOTTOM: rgb(89,167,200) 2px = solid; BACKGROUND-COLOR: rgb(245,251,244); TEXT-ALIGN: center } #NewsFlash P SPAN { FONT-SIZE: 11px } #NavColumnHeader { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: none transparent = scroll repeat 0% 0%; PADDING-BOTTOM: 4px; COLOR: rgb(200,200,200); = PADDING-TOP: 4px } #NavColumnHeader H3 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 30px; PADDING-BOTTOM: = 0px; MARGIN: 0px 0px 0px 17px; TEXT-TRANSFORM: uppercase; COLOR: = rgb(210,210,210); PADDING-TOP: 0px; TEXT-ALIGN: left } #NavigationExtremes { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; RIGHT: 8px; PADDING-BOTTOM: 0px; = MARGIN: 15px 0px 5px 30px; PADDING-TOP: 0px; POSITION: relative; = TEXT-ALIGN: left } #NavigationExtremes SPAN.tool_description { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #NavigationExtremes .tool_description A { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = BORDER-BOTTOM-STYLE: none } #NavigationExtremes .tool_description A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = BORDER-BOTTOM-STYLE: none } #NavigationExtremes .left IMG { PADDING-RIGHT: 1px; BORDER-TOP: rgb(240,240,240) 1px solid; = PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: = rgb(240,240,240) 1px solid } #NavigationExtremes .right IMG { PADDING-RIGHT: 2px; BORDER-TOP: rgb(240,240,240) 1px solid; = PADDING-LEFT: 1px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: = rgb(240,240,240) 1px solid } #NavigationExtremes .tool_description { MARGIN-LEFT: 5px; VERTICAL-ALIGN: text-top } #nav_toggle { MARGIN-LEFT: -13px } #Navigation { MARGIN: 0px 10px 10px -12px; TEXT-ALIGN: left } #Navigation UL LI { WORD-SPACING: -1px } #Navigation A:hover { BACKGROUND-COLOR: transparent } #Navigation A.current { BACKGROUND-COLOR: transparent } #Navigation A:hover { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } UL.navigation { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; TEXT-TRANSFORM: lowercase; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } UL.navigation LI.test { DISPLAY: none } UL.navigation LI.admin { DISPLAY: block } UL.navigation LI.admin.test { BORDER-RIGHT: red 1px dotted; BORDER-TOP: red 1px dotted; MARGIN-TOP: = 1px; MARGIN-BOTTOM: 1px; BORDER-LEFT: red 1px dotted; BORDER-BOTTOM: red = 1px dotted } UL.navigation LI { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 12px; PADDING-BOTTOM: = 2px; MARGIN: 0px 0px 0px 20px; VERTICAL-ALIGN: middle; PADDING-TOP: 2px } UL.navigation LI LI { MARGIN-LEFT: 30px } UL.navigation LI LI LI { MARGIN-LEFT: 10px } UL.navigation LI IMG { PADDING-RIGHT: 5px; VERTICAL-ALIGN: middle } UL.navigation LI A.current { FONT-WEIGHT: bold } UL.navigation LI LI A.current { COLOR: rgb(104,160,66) } UL.navigation LI LI LI A.current { COLOR: rgb(149,149,149) } UL.navigation LI A { COLOR: rgb(89,167,200); BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: = none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none } UL.navigation LI LI A { COLOR: rgb(104,160,66) } UL.navigation LI LI LI A { COLOR: rgb(149,149,149) } UL.navigation LI A:hover { FONT-WEIGHT: bold; TEXT-DECORATION: none } UL.navigation LI LI A:hover { COLOR: rgb(104,160,66) } UL.navigation LI LI LI A:hover { COLOR: rgb(149,149,149) } UL.navigation LI.expanded { =09 } UL.navigation LI LI.expanded { =09 } #GetInfoColumn P.gotomyaccount { MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px } #GetInfoColumn P.logout { MARGIN-TOP: 0px; FONT-SIZE: 10px; PADDING-TOP: 5px } #GetInfoColumn H4 { PADDING-RIGHT: 2px; MARGIN-TOP: 25px; PADDING-LEFT: 15px; FONT-SIZE: = 24px; BACKGROUND: url(/images/dots_green.gif) no-repeat 0px 75%; = MARGIN-BOTTOM: 5px; PADDING-BOTTOM: 6px; MARGIN-LEFT: -15px; COLOR: = rgb(200,200,200); PADDING-TOP: 1px; TEXT-ALIGN: left } #GetInfoColumn #ForgotPassword P { MARGIN-TOP: 10px; FONT-SIZE: 10px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: = 0px; WIDTH: 105px } #GetInfoColumn #ForgotPassword P A { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: = rgb(169,169,169); BORDER-BOTTOM: rgb(169,169,169) 1px dotted } #GetInfoColumn #ForgotPassword P A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: = rgb(169,169,169); BORDER-BOTTOM: rgb(169,169,169) 1px dotted } #GetInfoColumn #ForgotPassword P A:hover { BORDER-BOTTOM: rgb(169,169,169) 1px solid } #GetInfoColumn P.CornerImage { MARGIN-TOP: -60px; FLOAT: left; MARGIN-LEFT: 140px } #GetInfoColumnHeader { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: = url(/images/column_separator_1_dot.gif) repeat-y 101% 0px; = PADDING-BOTTOM: 5px; COLOR: rgb(210,210,210); PADDING-TOP: 5px; = TEXT-ALIGN: center } #GetInfoColumnHeader H3 { FONT-SIZE: 30px; BACKGROUND: url(/images/dots_content_corner.gif) white = no-repeat right top; FLOAT: left; PADDING-BOTTOM: 20px; MARGIN: 0px 0px = 0px 34px; TEXT-TRANSFORM: uppercase; WIDTH: 160px; COLOR: = rgb(210,210,210); PADDING-TOP: 15px; TEXT-ALIGN: left } #GetInfoColumnContent { MARGIN-BOTTOM: 30px } #GetInfoColumn LABEL { MARGIN-TOP: 0px; DISPLAY: block; COLOR: rgb(104,160,66) } #GetInfoColumn #PageImage { MARGIN-TOP: 0px; MARGIN-LEFT: 30px; PADDING-TOP: 0px } #GetInfoColumn #PageImage SPAN { DISPLAY: block; FONT-SIZE: 9px; MARGIN-BOTTOM: 3px; COLOR: = rgb(179,179,179); MARGIN-RIGHT: 38px; TEXT-ALIGN: right } #Search { MARGIN: 10px 10px 5px 35px; TEXT-ALIGN: left } #NewsletterSignup { MARGIN: 10px 10px 5px 35px; TEXT-ALIGN: left } #AccountInfo { MARGIN: 10px 10px 5px 35px; TEXT-ALIGN: left } #SidebarInfo { MARGIN: 10px 10px 5px 35px; TEXT-ALIGN: left } #Search FORM { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #NewsletterSignup FORM { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #AccountInfo FORM { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #SidebarInfo FORM { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } INPUT#q { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } INPUT#cm-62065-62065 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } INPUT#password INPUT#user_username { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } INPUT.sidebar_submit { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; COLOR: rgb(89,89,89); PADDING-TOP: 0px } #AccountInfo P A { FONT-WEIGHT: normal; COLOR: rgb(169,169,169); BORDER-BOTTOM: = rgb(169,169,169) 1px dotted } #AccountInfo P A:hover { FONT-WEIGHT: normal; COLOR: rgb(169,169,169); BORDER-BOTTOM: = rgb(169,169,169) 1px dotted } #AccountInfo P A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-BOTTOM: = rgb(169,169,169) 1px solid; TEXT-DECORATION: none } #AccountInfo P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; = BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: = rgb(89,167,200); PADDING-TOP: 0px } LABEL#password { MARGIN-TOP: 5px } #SidebarInfo UL { PADDING-LEFT: 20px } #SidebarInfo H6 { FONT-WEIGHT: normal } #MainColumnHeader { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; BACKGROUND: = url(/images/column_separator_1_dot.gif) repeat-y 101% 0px; = MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px; COLOR: rgb(210,210,210); = PADDING-TOP: 5px } #MainColumnHeader H3 { PADDING-LEFT: 20px; FONT-SIZE: 24px; TEXT-TRANSFORM: lowercase; COLOR: = rgb(210,210,210); TEXT-ALIGN: left } #MainColumnContent { PADDING-RIGHT: 30px; MARGIN-TOP: 15px; PADDING-LEFT: 30px; = PADDING-BOTTOM: 30px; PADDING-TOP: 0px } #MainColumnContent P.HomeLogo IMG { TEXT-ALIGN: center } #MainColumn P { TEXT-ALIGN: left } #MainColumnContent P.notice { PADDING-RIGHT: 2px; BORDER-TOP: rgb(200,200,200) 1px dotted; = PADDING-LEFT: 2px; FONT-SIZE: 11px; PADDING-BOTTOM: 2px; MARGIN: 0px 0px = 10px; COLOR: rgb(89,167,200); PADDING-TOP: 2px; BORDER-BOTTOM: = rgb(200,200,200) 1px dotted; BACKGROUND-COLOR: rgb(245,245,245); = TEXT-ALIGN: center } #MainColumnContent P.notice SPAN { COLOR: rgb(27,104,162) } #MainColumn UL { MARGIN-TOP: 10px; PADDING-LEFT: 40px; MARGIN-BOTTOM: 10px; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #MainColumn H4.findcategories { PADDING-LEFT: 3px; FONT-WEIGHT: normal; FONT-SIZE: 11px; = PADDING-BOTTOM: 3px } #MainColumn H4.findcategories IMG { VERTICAL-ALIGN: bottom } #MainColumn UL.ShiftLeft LI { PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none } #MainColumn UL.ShiftLeft { PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none } #MainColumn UL.ShiftLeft LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #MainColumn UL.ShiftLeft { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; MARGIN: = 0px; PADDING-TOP: 10px } #MainColumn .back { PADDING-RIGHT: 2px; BORDER-TOP: rgb(220,220,220) 1px solid; = PADDING-LEFT: 2px; FONT-SIZE: 11px; PADDING-BOTTOM: 2px; MARGIN: 0px 0px = 10px; PADDING-TOP: 2px; BORDER-BOTTOM: rgb(220,220,220) 1px solid; = BACKGROUND-COLOR: rgb(250,250,250); TEXT-ALIGN: left } #MainColumn .back H6 { FONT-WEIGHT: normal } #MainColumn .ByTheWay H3 { BORDER-TOP: rgb(217,217,217) 1px solid; MARGIN-TOP: 20px; PADDING-TOP: = 5px } #MainColumn .ByTheWay P { MARGIN-TOP: 10px } #MainColumn #list_shift UL { PADDING-LEFT: 0px } #MainColumn H5.category { PADDING-RIGHT: 2px; MARGIN-TOP: 0px; PADDING-LEFT: 20px; FONT-SIZE: = 17px; RIGHT: 20px; BACKGROUND: url(/images/dots_blue.gif) no-repeat; = MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 10px; COLOR: rgb(209,209,209); = PADDING-TOP: 1px; POSITION: relative; BORDER-BOTTOM-STYLE: none } #MainColumn H6.border { BORDER-TOP: rgb(189,189,189) 1px dotted } #MainColumn UL.PostControls { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LEFT: 235px; PADDING-BOTTOM: = 0px; MARGIN: 0px; PADDING-TOP: 0px; POSITION: relative } #MainColumn UL#Email { LEFT: 315px } #MainColumn UL.PostControls LI { PADDING-RIGHT: 2px; DISPLAY: inline; PADDING-LEFT: 2px; FONT-SIZE: = 10px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 2px } #MainColumn UL.PostControls .sep { FONT-SIZE: 9px; COLOR: rgb(180,180,180) } #MainColumn #col_1 { FLOAT: left } #MainColumn #col_2 { FLOAT: right } #MainColumn #Home { BOTTOM: 22px; POSITION: relative } #MainColumn .box H4 SPAN.PostedOn { FONT-SIZE: 10px } #MainColumn .PostedOn IMG { PADDING-RIGHT: 5px } #HomeBoxes .box { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; MARGIN-BOTTOM: 8px; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #HomeBoxes .Count { FONT-WEIGHT: normal; FONT-SIZE: 11px; VERTICAL-ALIGN: middle; COLOR: = rgb(89,167,200); TEXT-ALIGN: right } #HomeBoxes H4 .PostedOn { COLOR: rgb(199,199,199); FONT-STYLE: italic } #HomeBoxes TABLE TR TD .PostedOn { DISPLAY: none } #MainColumn #Articles H5.category { PADDING-RIGHT: 2px; MARGIN-TOP: 20px; PADDING-LEFT: 20px; FONT-SIZE: = 20px; RIGHT: 20px; BACKGROUND: url(/images/dots_blue.gif) no-repeat; = MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; COLOR: rgb(209,209,209); = PADDING-TOP: 1px; POSITION: relative; BORDER-BOTTOM-STYLE: none } #MainColumn #Events H5.category { PADDING-RIGHT: 2px; MARGIN-TOP: 20px; PADDING-LEFT: 20px; FONT-SIZE: = 20px; RIGHT: 20px; BACKGROUND: url(/images/dots_blue.gif) no-repeat; = MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; COLOR: rgb(209,209,209); = PADDING-TOP: 1px; POSITION: relative; BORDER-BOTTOM-STYLE: none } #MainColumn #Articles H6.border { BORDER-TOP: rgb(189,189,189) 1px dotted; MARGIN-TOP: 2px; = MARGIN-BOTTOM: -5px } #MainColumn #Events H6.border { BORDER-TOP: rgb(189,189,189) 1px dotted; MARGIN-TOP: 2px; = MARGIN-BOTTOM: -5px } #MainColumn #Articles .post H4 { MARGIN-TOP: 0px; PADDING-TOP: 0px } #MainColumn #Events .post H4 { MARGIN-TOP: 0px; PADDING-TOP: 0px } #MainColumn #Articles .group .post { MARGIN: 0px 0px 15px } #MainColumn #Events .group .post { MARGIN: 0px 0px 15px } #MainColumn #Articles DIV.body { MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px } #MainColumn #Events DIV.body { MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px } #MainColumn #Events DIV.group { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; MARGIN-BOTTOM: 0px; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #Filter UL LI { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FONT-SIZE: = 10px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; = LIST-STYLE-TYPE: none } #Filter UL LI.big_sep { COLOR: rgb(150,150,150) } #Filter UL LI.sep { MARGIN: 0px 2px; COLOR: rgb(200,200,200) } #Filter UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #Filter A.Previous { COLOR: rgb(145,145,145) } #Filter { PADDING-RIGHT: 2px; BORDER-TOP: rgb(189,189,189) 1px dotted; = MARGIN-TOP: 20px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; PADDING-TOP: = 2px; BORDER-BOTTOM: rgb(189,189,189) 1px dotted; BACKGROUND-COLOR: = rgb(250,250,250); TEXT-ALIGN: left } .box { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 10px; = PADDING-BOTTOM: 5px; MARGIN-RIGHT: 0px; PADDING-TOP: 5px; = BACKGROUND-COLOR: transparent } .box H4 A.SameColor { FONT-WEIGHT: bold; FONT-SIZE: 24px; BACKGROUND: none transparent scroll = repeat 0% 0%; COLOR: rgb(183,183,183); BORDER-BOTTOM-STYLE: none } .box H4 A.SameColor:hover { FONT-WEIGHT: bold; FONT-SIZE: 24px; BACKGROUND: none transparent scroll = repeat 0% 0%; COLOR: rgb(183,183,183); BORDER-BOTTOM-STYLE: none } .box H6.meta { MARGIN-LEFT: 10px } .box .body { MARGIN-LEFT: 15px } .account_box H4 { PADDING-LEFT: 18px; FONT-SIZE: 24px; RIGHT: 18px; BACKGROUND: = url(/images/dots_blue.gif) no-repeat 0px 75%; MARGIN-BOTTOM: 0px; = PADDING-BOTTOM: 0px; COLOR: rgb(183,183,183); POSITION: relative } .account_box TD { PADDING-RIGHT: 10px; MARGIN-TOP: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: = 0px } .account_box TD.Title { WIDTH: 40% } .account_box TD.Date { FONT-SIZE: 10px; COLOR: rgb(189,189,189); FONT-STYLE: italic } .account_box TD.Category { FONT-SIZE: 10px; COLOR: rgb(189,189,189); FONT-STYLE: italic } .box H5.subtitle { MARGIN-LEFT: 15px; PADDING-TOP: 0px } .box DIV.link { MARGIN-LEFT: 15px; PADDING-TOP: 0px } .account_box { MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-RIGHT: 0px } .account_box H4 A { PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN-LEFT: = 5px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; = BORDER-LEFT-STYLE: none; TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: = none } .account_box H4 A:hover { TEXT-DECORATION: underline } .account_box H6 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; = PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: rgb(209,209,209); PADDING-TOP: = 0px; FONT-STYLE: italic } .post .box { BORDER-RIGHT: rgb(245,245,245) 1px solid; BACKGROUND: = url(/images/job_gradient.gif) no-repeat 0px 0px; PADDING-BOTTOM: 10px; = BORDER-LEFT: rgb(245,245,245) 1px solid; PADDING-TOP: 0px; = BORDER-BOTTOM: rgb(245,245,245) 1px solid } #Articles .post .box { PADDING-BOTTOM: 0px; PADDING-TOP: 5px } #Articles .box DIV.link { BOTTOM: 10px; POSITION: relative } #Articles .box H5.subtitle { BOTTOM: 10px; POSITION: relative } #Articles .box DIV.link { WIDTH: 295px } #Events .post .box { PADDING-TOP: 5px } #MainColumn .post { MARGIN-BOTTOM: 15px } #AccountBoxes { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #AccountBoxes .box { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; MARGIN-BOTTOM: 20px; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #AccountBoxes TABLE ACRONYM { FONT-SIZE: 9px; VERTICAL-ALIGN: super; COLOR: rgb(89,167,200) } #AccountBoxes TABLE { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } .fieldWithErrors { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; = PADDING-TOP: 2px; BACKGROUND-COLOR: red } .fieldWithErrors INPUT { MARGIN-TOP: 0px; PADDING-TOP: 0px } #errorExplanation { BORDER-RIGHT: rgb(78,162,181) 1px solid; PADDING-RIGHT: 10px; = BORDER-TOP: rgb(78,162,181) 1px solid; PADDING-LEFT: 10px; = PADDING-BOTTOM: 10px; BORDER-LEFT: rgb(78,162,181) 1px solid; = PADDING-TOP: 10px; BORDER-BOTTOM: rgb(78,162,181) 1px solid; = BACKGROUND-COLOR: rgb(245,245,245) } #errorExplanation H2 { PADDING-LEFT: 0px; FONT-SIZE: 13px; TEXT-TRANSFORM: none } #errorExplanation UL { PADDING-RIGHT: 30px; PADDING-LEFT: 30px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; FONT-STYLE: italic } .Selects .fieldWithErrors { DISPLAY: inline; PADDING-BOTTOM: 5px; PADDING-TOP: 3px } #MoreInfo P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 10px; PADDING-BOTTOM: = 0px; MARGIN: 0px 0px 5px; COLOR: rgb(183,183,183); PADDING-TOP: 0px } #DistrictLinks { FLOAT: left; WIDTH: 140px } #DistrictMap { FLOAT: left; MARGIN-LEFT: 0px } #DistrictLinks UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 5px; TEXT-TRANSFORM: lowercase; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #DistrictLinks LI { PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FONT-SIZE: 14px; = PADDING-BOTTOM: 9px; MARGIN: 0px; PADDING-TOP: 9px } #DistrictLinks LI A { COLOR: rgb(127,127,127); BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: = none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none } #DistrictLinks LI A:hover { FONT-WEIGHT: bold; COLOR: rgb(104,160,66) } #DistrictLinks LI A.current { FONT-WEIGHT: bold; COLOR: rgb(104,160,66) } #DistrictZoom { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px 0px 5px; WIDTH: 400px; PADDING-TOP: 0px } #DistrictInfo { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; MARGIN: 10px 0px 0px; PADDING-TOP: 0px } #DistrictInfo H3 { BORDER-BOTTOM: rgb(189,189,189) 1px dotted } #DistrictPicBar UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 5px; LIST-STYLE-TYPE: none } #DistrictPicBar LI { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: = 5px; MARGIN: 0px; PADDING-TOP: 5px } #DistrictPicBar LI IMG { =09 } #DistrictPic { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #DistrictPic IMG { BORDER-RIGHT: rgb(200,200,200) 2px solid; PADDING-RIGHT: 0px; = BORDER-TOP: rgb(200,200,200) 2px solid; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 5px 10px 0px 0px; BORDER-LEFT: = rgb(200,200,200) 2px solid; WIDTH: 135px; PADDING-TOP: 0px; = BORDER-BOTTOM: rgb(200,200,200) 2px solid } #DistrictCredits P { BORDER-TOP: rgb(220,220,220) 1px solid; MARGIN-TOP: 20px; FONT-SIZE: = 10px; FONT-STYLE: italic } #RelationshipLabelTopLeft P { FONT-SIZE: 9px; COLOR: rgb(183,183,183) } #RelationshipLabelBottomLeft P { FONT-SIZE: 9px; COLOR: rgb(183,183,183) } #RelationshipLabelTopRight P { FONT-SIZE: 9px; COLOR: rgb(183,183,183) } #RelationshipLabelBottomRight P { FONT-SIZE: 9px; COLOR: rgb(183,183,183) } #RelationshipLabelTopLeft { LEFT: 7px; POSITION: relative; TOP: 30px } #RelationshipLabelBottomLeft { LEFT: 7px; POSITION: relative; TOP: 362px } #RelationshipLabelTopRight { LEFT: 242px; POSITION: relative; TOP: 30px } #RelationshipLabelBottomRight { LEFT: 242px; POSITION: relative; TOP: 362px } #RelationshipDiagram { MARGIN-TOP: -25px; PADDING-TOP: 0px } #RelationshipNavigation TABLE TR TD { PADDING-RIGHT: 12px; PADDING-LEFT: 12px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px; TEXT-ALIGN: center } #RelationshipNavigation A { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none } #RelationshipNavigation A:hover { BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none } #RelationshipNavigation A.current { FONT-WEIGHT: normal; COLOR: rgb(104,160,66); BORDER-BOTTOM: = rgb(104,160,66) 1px solid } #RelationshipNavigation A.not_current:hover { FONT-WEIGHT: normal; COLOR: rgb(104,160,66); BORDER-BOTTOM: = rgb(104,160,66) 1px solid } #RelationshipNavigation A.not_current { COLOR: rgb(186,186,186); BORDER-BOTTOM: rgb(186,186,186) 1px dotted } #Testimonial { MARGIN: 5px 0px 0px } #Testimonial H4 { MARGIN-BOTTOM: 10px } #Testimonial H3 { MARGIN-BOTTOM: 10px } #Headshot { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #Headshot IMG { BORDER-RIGHT: rgb(200,200,200) 2px solid; BORDER-TOP: rgb(200,200,200) = 2px solid; MARGIN: 5px 10px 0px 0px; BORDER-LEFT: rgb(200,200,200) 2px = solid; WIDTH: 115px; BORDER-BOTTOM: rgb(200,200,200) 2px solid } #Headshot IMG.Wide { MARGIN: 0px 0px 10px; WIDTH: 402px } #Headshot P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #Graphs { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #Graphs UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #Graphs UL LI { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: left; = PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: rgb(173,173,173); PADDING-TOP: = 0px; LIST-STYLE-TYPE: none } #Graphs UL LI A { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent = scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-TOP-STYLE: = none; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: = none; BORDER-BOTTOM-STYLE: none } #Graphs UL LI A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-TOP-STYLE: = none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = BORDER-BOTTOM-STYLE: none } #Graphs UL LI IMG { BORDER-RIGHT: rgb(200,200,200) 1px solid; PADDING-RIGHT: 0px; = BORDER-TOP: rgb(200,200,200) 1px solid; DISPLAY: inline; PADDING-LEFT: = 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 10px 0px 0px; BORDER-LEFT: = rgb(200,200,200) 1px solid; WIDTH: 172px; PADDING-TOP: 0px; = BORDER-BOTTOM: rgb(200,200,200) 1px solid } #Graphs UL LI IMG:hover { BORDER-RIGHT: rgb(104,160,66) 1px solid; BORDER-TOP: rgb(104,160,66) = 1px solid; BORDER-LEFT: rgb(104,160,66) 1px solid; BORDER-BOTTOM: = rgb(104,160,66) 1px solid } DIV.uploadStatus { MARGIN: 5px } DIV.progressBar { MARGIN: 5px } DIV.progressBar DIV.border { BORDER-RIGHT: rgb(189,189,189) 1px solid; BORDER-TOP: rgb(189,189,189) = 1px solid; BORDER-LEFT: rgb(189,189,189) 1px solid; WIDTH: 100%; = BORDER-BOTTOM: rgb(189,189,189) 1px solid; BACKGROUND-COLOR: #fff } DIV.progressBar DIV.background { WIDTH: 0%; HEIGHT: 18px; BACKGROUND-COLOR: #333 } #Footer { BACKGROUND-COLOR: #fff } #Footer P { PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: = 20px 0px 0px; COLOR: rgb(209,209,209); PADDING-TOP: 3px } #Footer A { COLOR: rgb(209,209,209) } #Footer IMG { VERTICAL-ALIGN: bottom; WIDTH: 12px; HEIGHT: 12px } #Footer A:hover { BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-BOTTOM-STYLE: = none } #Footer SPAN.sep { FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: rgb(200,200,200) } #LowerFooter A { COLOR: rgb(145,145,145); BORDER-BOTTOM: rgb(145,145,145) 1px dotted } #LowerFooter A:hover { COLOR: rgb(145,145,145); BORDER-BOTTOM: rgb(145,145,145) 1px solid; = BACKGROUND-COLOR: transparent } #LowerFooter P { COLOR: rgb(145,145,145); PADDING-TOP: 0px; TEXT-ALIGN: center } #LowerFooter { TEXT-TRANSFORM: lowercase } #Footer { TEXT-TRANSFORM: lowercase } #NavHelpLinks { MARGIN-TOP: 20px } #NavHelpLinks TABLE TR TD.icon { PADDING-RIGHT: 7px; PADDING-BOTTOM: 7px; TEXT-ALIGN: right } #NavHelpLinks TABLE TR TD.link { FONT-SIZE: 15px } #NavHelpLinks { RIGHT: 10px; POSITION: relative } .Notice { PADDING-RIGHT: 5px; BORDER-TOP: rgb(89,167,200) 2px solid; = PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; MARGIN: 15px 0px; COLOR: = rgb(89,167,200); PADDING-TOP: 5px; BORDER-BOTTOM: rgb(89,167,200) 2px = solid; BACKGROUND-COLOR: rgb(245,251,244) } .Notice STRONG { FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: rgb(125,125,125); = FONT-STYLE: italic } .Notice UL LI { COLOR: rgb(125,125,125) } .Notice UL LI A { BORDER-BOTTOM: rgb(195,195,195) 1px solid } .Notice UL LI A:hover { BORDER-BOTTOM: rgb(104,160,66) 1px solid } .Notice .Close { DISPLAY: block; FONT-SIZE: 9px; COLOR: rgb(145,145,145); POSITION: = relative; TEXT-ALIGN: right } .Notice .Close A { BORDER-RIGHT: rgb(195,195,195) 1px solid; PADDING-RIGHT: 3px; = BORDER-TOP: rgb(195,195,195) 1px solid; PADDING-LEFT: 2px; FONT-WEIGHT: = bold; FONT-SIZE: 10px; PADDING-BOTTOM: 0px; BORDER-LEFT: = rgb(195,195,195) 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: = rgb(195,195,195) 1px solid; TEXT-ALIGN: center } #Stickers TABLE TR TD { PADDING-BOTTOM: 20px; TEXT-ALIGN: center } #Stickers TABLE TR TD.checkbox { PADDING-LEFT: 20px; VERTICAL-ALIGN: middle; TEXT-ALIGN: left } #Stickers TABLE TR TD { COLOR: rgb(153,153,153) } #Stickers TABLE TR TD LABEL { COLOR: rgb(153,153,153) } #SpecialMainColumn #Home #MainColumnHeader { DISPLAY: none } #SpecialMainColumn #Home { BOTTOM: 22px; POSITION: relative } #SpecialMainColumn #Home P.Notice { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 10px; PADDING-BOTTOM: = 0px; MARGIN: 0px; COLOR: rgb(163,163,163); BOTTOM: 15px; PADDING-TOP: = 0px; POSITION: relative; TEXT-ALIGN: left } #SpecialMainColumn #Home H3.Home { MARGIN-TOP: -2px; TEXT-TRANSFORM: none } #SpecialMainColumn #Home DIV.Intro { BACKGROUND: url(/images/tcci_dude.gif) #fff no-repeat 100% 0px; = WORD-SPACING: -1px; COLOR: rgb(169,169,169) } #SpecialMainColumn #Home DIV.Intro P { MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px; WIDTH: 295px; COLOR: = rgb(179,179,179); LINE-HEIGHT: 20px; HEIGHT: 110px } #SpecialMainColumn #Home P.ReadMore { MARGIN-TOP: 0px; FONT-SIZE: 9px; MARGIN-BOTTOM: 6px; COLOR: = rgb(179,179,179); BOTTOM: 4px; POSITION: relative } #SpecialMainColumn #Home P.ReadMore A { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: = rgb(179,179,179); BORDER-BOTTOM-STYLE: none } #SpecialMainColumn #Home P.ReadMore A:hover { TEXT-DECORATION: underline } #SpecialMainColumn #Home P.ReadMore IMG { VERTICAL-ALIGN: text-bottom } #SpecialMainColumn #Home P.Numbers { RIGHT: 8px; POSITION: relative } #SpecialMainColumn #ThinMargins #MainColumnHeader H3 { PADDING-LEFT: 0px } #SpecialMainColumn #ThinMargins #MainColumnContent { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; = PADDING-TOP: 10px } #SpecialMainColumn #ThinMargins H5.category { MARGIN-LEFT: 15px } #SpecialMainColumn #PageTitle { BOTTOM: 22px; POSITION: relative } #SpecialMainColumn #PageTitle #MainColumnHeader { DISPLAY: none } #SpecialMainColumn #PageTitle H2 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: = 24px; PADDING-BOTTOM: 15px; TEXT-TRANSFORM: lowercase; COLOR: = rgb(210,210,210); LINE-HEIGHT: 18px; PADDING-TOP: 11px; TEXT-ALIGN: left } BODY { BACKGROUND-COLOR: white } ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/javascripts/prototype.js?1183395038 /* Prototype JavaScript framework, version 1.5.0_rc0=0A= * (c) 2005 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://prototype.conio.net/=0A= *=0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Prototype =3D {=0A= Version: '1.5.0_rc0',=0A= ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)',=0A= =0A= emptyFunction: function() {},=0A= K: function(x) {return x}=0A= }=0A= =0A= var Class =3D {=0A= create: function() {=0A= return function() {=0A= this.initialize.apply(this, arguments);=0A= }=0A= }=0A= }=0A= =0A= var Abstract =3D new Object();=0A= =0A= Object.extend =3D function(destination, source) {=0A= for (var property in source) {=0A= destination[property] =3D source[property];=0A= }=0A= return destination;=0A= }=0A= =0A= Object.inspect =3D function(object) {=0A= try {=0A= if (object =3D=3D undefined) return 'undefined';=0A= if (object =3D=3D null) return 'null';=0A= return object.inspect ? object.inspect() : object.toString();=0A= } catch (e) {=0A= if (e instanceof RangeError) return '...';=0A= throw e;=0A= }=0A= }=0A= =0A= Function.prototype.bind =3D function() {=0A= var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A= return function() {=0A= return __method.apply(object, args.concat($A(arguments)));=0A= }=0A= }=0A= =0A= Function.prototype.bindAsEventListener =3D function(object) {=0A= var __method =3D this;=0A= return function(event) {=0A= return __method.call(object, event || window.event);=0A= }=0A= }=0A= =0A= Object.extend(Number.prototype, {=0A= toColorPart: function() {=0A= var digits =3D this.toString(16);=0A= if (this < 16) return '0' + digits;=0A= return digits;=0A= },=0A= =0A= succ: function() {=0A= return this + 1;=0A= },=0A= =0A= times: function(iterator) {=0A= $R(0, this, true).each(iterator);=0A= return this;=0A= }=0A= });=0A= =0A= var Try =3D {=0A= these: function() {=0A= var returnValue;=0A= =0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var lambda =3D arguments[i];=0A= try {=0A= returnValue =3D lambda();=0A= break;=0A= } catch (e) {}=0A= }=0A= =0A= return returnValue;=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var PeriodicalExecuter =3D Class.create();=0A= PeriodicalExecuter.prototype =3D {=0A= initialize: function(callback, frequency) {=0A= this.callback =3D callback;=0A= this.frequency =3D frequency;=0A= this.currentlyExecuting =3D false;=0A= =0A= this.registerCallback();=0A= },=0A= =0A= registerCallback: function() {=0A= setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A= },=0A= =0A= onTimerEvent: function() {=0A= if (!this.currentlyExecuting) {=0A= try {=0A= this.currentlyExecuting =3D true;=0A= this.callback();=0A= } finally {=0A= this.currentlyExecuting =3D false;=0A= }=0A= }=0A= }=0A= }=0A= Object.extend(String.prototype, {=0A= gsub: function(pattern, replacement) {=0A= var result =3D '', source =3D this, match;=0A= replacement =3D arguments.callee.prepareReplacement(replacement);=0A= =0A= while (source.length > 0) {=0A= if (match =3D source.match(pattern)) {=0A= result +=3D source.slice(0, match.index);=0A= result +=3D (replacement(match) || '').toString();=0A= source =3D source.slice(match.index + match[0].length);=0A= } else {=0A= result +=3D source, source =3D '';=0A= }=0A= }=0A= return result;=0A= },=0A= =0A= sub: function(pattern, replacement, count) {=0A= replacement =3D this.gsub.prepareReplacement(replacement);=0A= count =3D count =3D=3D=3D undefined ? 1 : count;=0A= =0A= return this.gsub(pattern, function(match) {=0A= if (--count < 0) return match[0];=0A= return replacement(match);=0A= });=0A= },=0A= =0A= scan: function(pattern, iterator) {=0A= this.gsub(pattern, iterator);=0A= return this;=0A= },=0A= =0A= truncate: function(length, truncation) {=0A= length =3D length || 30;=0A= truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A= return this.length > length ?=0A= this.slice(0, length - truncation.length) + truncation : this;=0A= },=0A= =0A= strip: function() {=0A= return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A= },=0A= =0A= stripTags: function() {=0A= return this.replace(/<\/?[^>]+>/gi, '');=0A= },=0A= =0A= stripScripts: function() {=0A= return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A= },=0A= =0A= extractScripts: function() {=0A= var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A= var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A= return (this.match(matchAll) || []).map(function(scriptTag) {=0A= return (scriptTag.match(matchOne) || ['', ''])[1];=0A= });=0A= },=0A= =0A= evalScripts: function() {=0A= return this.extractScripts().map(function(script) { return = eval(script) });=0A= },=0A= =0A= escapeHTML: function() {=0A= var div =3D document.createElement('div');=0A= var text =3D document.createTextNode(this);=0A= div.appendChild(text);=0A= return div.innerHTML;=0A= },=0A= =0A= unescapeHTML: function() {=0A= var div =3D document.createElement('div');=0A= div.innerHTML =3D this.stripTags();=0A= return div.childNodes[0] ? div.childNodes[0].nodeValue : '';=0A= },=0A= =0A= toQueryParams: function() {=0A= var pairs =3D this.match(/^\??(.*)$/)[1].split('&');=0A= return pairs.inject({}, function(params, pairString) {=0A= var pair =3D pairString.split('=3D');=0A= params[pair[0]] =3D pair[1];=0A= return params;=0A= });=0A= },=0A= =0A= toArray: function() {=0A= return this.split('');=0A= },=0A= =0A= camelize: function() {=0A= var oStringList =3D this.split('-');=0A= if (oStringList.length =3D=3D 1) return oStringList[0];=0A= =0A= var camelizedString =3D this.indexOf('-') =3D=3D 0=0A= ? oStringList[0].charAt(0).toUpperCase() + = oStringList[0].substring(1)=0A= : oStringList[0];=0A= =0A= for (var i =3D 1, len =3D oStringList.length; i < len; i++) {=0A= var s =3D oStringList[i];=0A= camelizedString +=3D s.charAt(0).toUpperCase() + s.substring(1);=0A= }=0A= =0A= return camelizedString;=0A= },=0A= =0A= inspect: function() {=0A= return "'" + this.replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + "'";=0A= }=0A= });=0A= =0A= String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A= if (typeof replacement =3D=3D 'function') return replacement;=0A= var template =3D new Template(replacement);=0A= return function(match) { return template.evaluate(match) };=0A= }=0A= =0A= String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A= =0A= var Template =3D Class.create();=0A= Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A= Template.prototype =3D {=0A= initialize: function(template, pattern) {=0A= this.template =3D template.toString();=0A= this.pattern =3D pattern || Template.Pattern;=0A= },=0A= =0A= evaluate: function(object) {=0A= return this.template.gsub(this.pattern, function(match) {=0A= var before =3D match[1];=0A= if (before =3D=3D '\\') return match[2];=0A= return before + (object[match[3]] || '').toString();=0A= });=0A= }=0A= }=0A= =0A= var $break =3D new Object();=0A= var $continue =3D new Object();=0A= =0A= var Enumerable =3D {=0A= each: function(iterator) {=0A= var index =3D 0;=0A= try {=0A= this._each(function(value) {=0A= try {=0A= iterator(value, index++);=0A= } catch (e) {=0A= if (e !=3D $continue) throw e;=0A= }=0A= });=0A= } catch (e) {=0A= if (e !=3D $break) throw e;=0A= }=0A= },=0A= =0A= all: function(iterator) {=0A= var result =3D true;=0A= this.each(function(value, index) {=0A= result =3D result && !!(iterator || Prototype.K)(value, index);=0A= if (!result) throw $break;=0A= });=0A= return result;=0A= },=0A= =0A= any: function(iterator) {=0A= var result =3D true;=0A= this.each(function(value, index) {=0A= if (result =3D !!(iterator || Prototype.K)(value, index))=0A= throw $break;=0A= });=0A= return result;=0A= },=0A= =0A= collect: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= results.push(iterator(value, index));=0A= });=0A= return results;=0A= },=0A= =0A= detect: function (iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= if (iterator(value, index)) {=0A= result =3D value;=0A= throw $break;=0A= }=0A= });=0A= return result;=0A= },=0A= =0A= findAll: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= if (iterator(value, index))=0A= results.push(value);=0A= });=0A= return results;=0A= },=0A= =0A= grep: function(pattern, iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= var stringValue =3D value.toString();=0A= if (stringValue.match(pattern))=0A= results.push((iterator || Prototype.K)(value, index));=0A= })=0A= return results;=0A= },=0A= =0A= include: function(object) {=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= inject: function(memo, iterator) {=0A= this.each(function(value, index) {=0A= memo =3D iterator(memo, value, index);=0A= });=0A= return memo;=0A= },=0A= =0A= invoke: function(method) {=0A= var args =3D $A(arguments).slice(1);=0A= return this.collect(function(value) {=0A= return value[method].apply(value, args);=0A= });=0A= },=0A= =0A= max: function(iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= value =3D (iterator || Prototype.K)(value, index);=0A= if (result =3D=3D undefined || value >=3D result)=0A= result =3D value;=0A= });=0A= return result;=0A= },=0A= =0A= min: function(iterator) {=0A= var result;=0A= this.each(function(value, index) {=0A= value =3D (iterator || Prototype.K)(value, index);=0A= if (result =3D=3D undefined || value < result)=0A= result =3D value;=0A= });=0A= return result;=0A= },=0A= =0A= partition: function(iterator) {=0A= var trues =3D [], falses =3D [];=0A= this.each(function(value, index) {=0A= ((iterator || Prototype.K)(value, index) ?=0A= trues : falses).push(value);=0A= });=0A= return [trues, falses];=0A= },=0A= =0A= pluck: function(property) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= results.push(value[property]);=0A= });=0A= return results;=0A= },=0A= =0A= reject: function(iterator) {=0A= var results =3D [];=0A= this.each(function(value, index) {=0A= if (!iterator(value, index))=0A= results.push(value);=0A= });=0A= return results;=0A= },=0A= =0A= sortBy: function(iterator) {=0A= return this.collect(function(value, index) {=0A= return {value: value, criteria: iterator(value, index)};=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= toArray: function() {=0A= return this.collect(Prototype.K);=0A= },=0A= =0A= zip: function() {=0A= var iterator =3D Prototype.K, args =3D $A(arguments);=0A= if (typeof args.last() =3D=3D 'function')=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= inspect: function() {=0A= return '#';=0A= }=0A= }=0A= =0A= Object.extend(Enumerable, {=0A= map: Enumerable.collect,=0A= find: Enumerable.detect,=0A= select: Enumerable.findAll,=0A= member: Enumerable.include,=0A= entries: Enumerable.toArray=0A= });=0A= var $A =3D Array.from =3D function(iterable) {=0A= if (!iterable) return [];=0A= if (iterable.toArray) {=0A= return iterable.toArray();=0A= } else {=0A= var results =3D [];=0A= for (var i =3D 0; i < iterable.length; i++)=0A= results.push(iterable[i]);=0A= return results;=0A= }=0A= }=0A= =0A= Object.extend(Array.prototype, Enumerable);=0A= =0A= if (!Array.prototype._reverse)=0A= Array.prototype._reverse =3D Array.prototype.reverse;=0A= =0A= Object.extend(Array.prototype, {=0A= _each: function(iterator) {=0A= for (var i =3D 0; i < this.length; i++)=0A= iterator(this[i]);=0A= },=0A= =0A= clear: function() {=0A= this.length =3D 0;=0A= return this;=0A= },=0A= =0A= first: function() {=0A= return this[0];=0A= },=0A= =0A= last: function() {=0A= return this[this.length - 1];=0A= },=0A= =0A= compact: function() {=0A= return this.select(function(value) {=0A= return value !=3D undefined || value !=3D null;=0A= });=0A= },=0A= =0A= flatten: function() {=0A= return this.inject([], function(array, value) {=0A= return array.concat(value && value.constructor =3D=3D Array ?=0A= value.flatten() : [value]);=0A= });=0A= },=0A= =0A= without: function() {=0A= var values =3D $A(arguments);=0A= return this.select(function(value) {=0A= return !values.include(value);=0A= });=0A= },=0A= =0A= indexOf: function(object) {=0A= for (var i =3D 0; i < this.length; i++)=0A= if (this[i] =3D=3D object) return i;=0A= return -1;=0A= },=0A= =0A= reverse: function(inline) {=0A= return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A= },=0A= =0A= inspect: function() {=0A= return '[' + this.map(Object.inspect).join(', ') + ']';=0A= }=0A= });=0A= var Hash =3D {=0A= _each: function(iterator) {=0A= for (var key in this) {=0A= var value =3D this[key];=0A= if (typeof value =3D=3D 'function') continue;=0A= =0A= var pair =3D [key, value];=0A= pair.key =3D key;=0A= pair.value =3D value;=0A= iterator(pair);=0A= }=0A= },=0A= =0A= keys: function() {=0A= return this.pluck('key');=0A= },=0A= =0A= values: function() {=0A= return this.pluck('value');=0A= },=0A= =0A= merge: function(hash) {=0A= return $H(hash).inject($H(this), function(mergedHash, pair) {=0A= mergedHash[pair.key] =3D pair.value;=0A= return mergedHash;=0A= });=0A= },=0A= =0A= toQueryString: function() {=0A= return this.map(function(pair) {=0A= return pair.map(encodeURIComponent).join('=3D');=0A= }).join('&');=0A= },=0A= =0A= inspect: function() {=0A= return '#';=0A= }=0A= }=0A= =0A= function $H(object) {=0A= var hash =3D Object.extend({}, object || {});=0A= Object.extend(hash, Enumerable);=0A= Object.extend(hash, Hash);=0A= return hash;=0A= }=0A= ObjectRange =3D Class.create();=0A= Object.extend(ObjectRange.prototype, Enumerable);=0A= Object.extend(ObjectRange.prototype, {=0A= initialize: function(start, end, exclusive) {=0A= this.start =3D start;=0A= this.end =3D end;=0A= this.exclusive =3D exclusive;=0A= },=0A= =0A= _each: function(iterator) {=0A= var value =3D this.start;=0A= do {=0A= iterator(value);=0A= value =3D value.succ();=0A= } while (this.include(value));=0A= },=0A= =0A= include: function(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= =0A= var $R =3D function(start, end, exclusive) {=0A= return new ObjectRange(start, end, exclusive);=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(responderToAdd) {=0A= if (!this.include(responderToAdd))=0A= this.responders.push(responderToAdd);=0A= },=0A= =0A= unregister: function(responderToRemove) {=0A= this.responders =3D this.responders.without(responderToRemove);=0A= },=0A= =0A= dispatch: function(callback, request, transport, json) {=0A= this.each(function(responder) {=0A= if (responder[callback] && typeof responder[callback] =3D=3D = 'function') {=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() {=0A= Ajax.activeRequestCount++;=0A= },=0A= =0A= onComplete: function() {=0A= Ajax.activeRequestCount--;=0A= }=0A= });=0A= =0A= Ajax.Base =3D function() {};=0A= Ajax.Base.prototype =3D {=0A= setOptions: function(options) {=0A= this.options =3D {=0A= method: 'post',=0A= asynchronous: true,=0A= contentType: 'application/x-www-form-urlencoded',=0A= parameters: ''=0A= }=0A= Object.extend(this.options, options || {});=0A= },=0A= =0A= responseIsSuccess: function() {=0A= return this.transport.status =3D=3D undefined=0A= || this.transport.status =3D=3D 0=0A= || (this.transport.status >=3D 200 && this.transport.status < = 300);=0A= },=0A= =0A= responseIsFailure: function() {=0A= return !this.responseIsSuccess();=0A= }=0A= }=0A= =0A= Ajax.Request =3D Class.create();=0A= Ajax.Request.Events =3D=0A= ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A= =0A= Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A= initialize: function(url, options) {=0A= this.transport =3D Ajax.getTransport();=0A= this.setOptions(options);=0A= this.request(url);=0A= },=0A= =0A= request: function(url) {=0A= var parameters =3D this.options.parameters || '';=0A= if (parameters.length > 0) parameters +=3D '&_=3D';=0A= =0A= try {=0A= this.url =3D url;=0A= if (this.options.method =3D=3D 'get' && parameters.length > 0)=0A= this.url +=3D (this.url.match(/\?/) ? '&' : '?') + parameters;=0A= =0A= Ajax.Responders.dispatch('onCreate', this, this.transport);=0A= =0A= this.transport.open(this.options.method, this.url,=0A= this.options.asynchronous);=0A= =0A= if (this.options.asynchronous) {=0A= this.transport.onreadystatechange =3D = this.onStateChange.bind(this);=0A= setTimeout((function() = {this.respondToReadyState(1)}).bind(this), 10);=0A= }=0A= =0A= this.setRequestHeaders();=0A= =0A= var body =3D this.options.postBody ? this.options.postBody : = parameters;=0A= this.transport.send(this.options.method =3D=3D 'post' ? body : = null);=0A= =0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= },=0A= =0A= setRequestHeaders: function() {=0A= var requestHeaders =3D=0A= ['X-Requested-With', 'XMLHttpRequest',=0A= 'X-Prototype-Version', Prototype.Version,=0A= 'Accept', 'text/javascript, text/html, application/xml, text/xml, = */*'];=0A= =0A= if (this.options.method =3D=3D 'post') {=0A= requestHeaders.push('Content-type', this.options.contentType);=0A= =0A= /* Force "Connection: close" for Mozilla browsers to work around=0A= * a bug where XMLHttpReqeuest sends an incorrect Content-length=0A= * header. See Mozilla Bugzilla #246651.=0A= */=0A= if (this.transport.overrideMimeType)=0A= requestHeaders.push('Connection', 'close');=0A= }=0A= =0A= if (this.options.requestHeaders)=0A= requestHeaders.push.apply(requestHeaders, = this.options.requestHeaders);=0A= =0A= for (var i =3D 0; i < requestHeaders.length; i +=3D 2)=0A= this.transport.setRequestHeader(requestHeaders[i], = requestHeaders[i+1]);=0A= },=0A= =0A= onStateChange: function() {=0A= var readyState =3D this.transport.readyState;=0A= if (readyState !=3D 1)=0A= this.respondToReadyState(this.transport.readyState);=0A= },=0A= =0A= header: function(name) {=0A= try {=0A= return this.transport.getResponseHeader(name);=0A= } catch (e) {}=0A= },=0A= =0A= evalJSON: function() {=0A= try {=0A= return eval('(' + this.header('X-JSON') + ')');=0A= } catch (e) {}=0A= },=0A= =0A= evalResponse: function() {=0A= try {=0A= return eval(this.transport.responseText);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= },=0A= =0A= respondToReadyState: function(readyState) {=0A= var event =3D Ajax.Request.Events[readyState];=0A= var transport =3D this.transport, json =3D this.evalJSON();=0A= =0A= if (event =3D=3D 'Complete') {=0A= try {=0A= (this.options['on' + this.transport.status]=0A= || this.options['on' + (this.responseIsSuccess() ? 'Success' : = 'Failure')]=0A= || Prototype.emptyFunction)(transport, json);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= =0A= if ((this.header('Content-type') || = '').match(/^text\/javascript/i))=0A= this.evalResponse();=0A= }=0A= =0A= try {=0A= (this.options['on' + event] || Prototype.emptyFunction)(transport, = json);=0A= Ajax.Responders.dispatch('on' + event, this, transport, json);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= =0A= /* Avoid memory leak in MSIE: clean up the oncomplete event handler = */=0A= if (event =3D=3D 'Complete')=0A= this.transport.onreadystatechange =3D Prototype.emptyFunction;=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.Updater =3D Class.create();=0A= =0A= Object.extend(Object.extend(Ajax.Updater.prototype, = Ajax.Request.prototype), {=0A= initialize: function(container, url, options) {=0A= this.containers =3D {=0A= success: container.success ? $(container.success) : $(container),=0A= failure: container.failure ? $(container.failure) :=0A= (container.success ? null : $(container))=0A= }=0A= =0A= this.transport =3D Ajax.getTransport();=0A= this.setOptions(options);=0A= =0A= var onComplete =3D this.options.onComplete || = Prototype.emptyFunction;=0A= this.options.onComplete =3D (function(transport, object) {=0A= this.updateContent();=0A= onComplete(transport, object);=0A= }).bind(this);=0A= =0A= this.request(url);=0A= },=0A= =0A= updateContent: function() {=0A= var receiver =3D this.responseIsSuccess() ?=0A= this.containers.success : this.containers.failure;=0A= var response =3D this.transport.responseText;=0A= =0A= if (!this.options.evalScripts)=0A= response =3D response.stripScripts();=0A= =0A= if (receiver) {=0A= if (this.options.insertion) {=0A= new this.options.insertion(receiver, response);=0A= } else {=0A= Element.update(receiver, response);=0A= }=0A= }=0A= =0A= if (this.responseIsSuccess()) {=0A= if (this.onComplete)=0A= setTimeout(this.onComplete.bind(this), 10);=0A= }=0A= }=0A= });=0A= =0A= Ajax.PeriodicalUpdater =3D Class.create();=0A= Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A= initialize: function(container, url, options) {=0A= this.setOptions(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.onComplete =3D undefined;=0A= clearTimeout(this.timer);=0A= (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A= },=0A= =0A= updateComplete: function(request) {=0A= if (this.options.decay) {=0A= this.decay =3D (request.responseText =3D=3D this.lastText ?=0A= this.decay * this.options.decay : 1);=0A= =0A= this.lastText =3D request.responseText;=0A= }=0A= this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A= this.decay * this.frequency * 1000);=0A= },=0A= =0A= onTimerEvent: function() {=0A= this.updater =3D new Ajax.Updater(this.container, this.url, = this.options);=0A= }=0A= });=0A= function $() {=0A= var results =3D [], element;=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= element =3D arguments[i];=0A= if (typeof element =3D=3D 'string')=0A= element =3D document.getElementById(element);=0A= results.push(Element.extend(element));=0A= }=0A= return results.length < 2 ? results[0] : results;=0A= }=0A= =0A= document.getElementsByClassName =3D function(className, parentElement) {=0A= var children =3D ($(parentElement) || = document.body).getElementsByTagName('*');=0A= return $A(children).inject([], function(elements, child) {=0A= if (child.className.match(new RegExp("(^|\\s)" + className + = "(\\s|$)")))=0A= elements.push(Element.extend(child));=0A= return elements;=0A= });=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= if (!window.Element)=0A= var Element =3D new Object();=0A= =0A= Element.extend =3D function(element) {=0A= if (!element) return;=0A= if (_nativeExtensions) return element;=0A= =0A= if (!element._extended && element.tagName && element !=3D window) {=0A= var methods =3D Element.Methods, cache =3D Element.extend.cache;=0A= for (property in methods) {=0A= var value =3D methods[property];=0A= if (typeof value =3D=3D 'function')=0A= element[property] =3D cache.findOrStore(value);=0A= }=0A= }=0A= =0A= element._extended =3D true;=0A= return element;=0A= }=0A= =0A= Element.extend.cache =3D {=0A= findOrStore: function(value) {=0A= return this[value] =3D this[value] || function() {=0A= return value.apply(null, [this].concat($A(arguments)));=0A= }=0A= }=0A= }=0A= =0A= Element.Methods =3D {=0A= visible: function(element) {=0A= return $(element).style.display !=3D 'none';=0A= },=0A= =0A= toggle: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= Element[Element.visible(element) ? 'hide' : 'show'](element);=0A= }=0A= },=0A= =0A= hide: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= element.style.display =3D 'none';=0A= }=0A= },=0A= =0A= show: function() {=0A= for (var i =3D 0; i < arguments.length; i++) {=0A= var element =3D $(arguments[i]);=0A= element.style.display =3D '';=0A= }=0A= },=0A= =0A= remove: function(element) {=0A= element =3D $(element);=0A= element.parentNode.removeChild(element);=0A= },=0A= =0A= update: function(element, html) {=0A= $(element).innerHTML =3D html.stripScripts();=0A= setTimeout(function() {html.evalScripts()}, 10);=0A= },=0A= =0A= replace: function(element, html) {=0A= element =3D $(element);=0A= if (element.outerHTML) {=0A= element.outerHTML =3D html.stripScripts();=0A= } else {=0A= var range =3D element.ownerDocument.createRange();=0A= range.selectNodeContents(element);=0A= element.parentNode.replaceChild(=0A= range.createContextualFragment(html.stripScripts()), element);=0A= }=0A= setTimeout(function() {html.evalScripts()}, 10);=0A= },=0A= =0A= getHeight: function(element) {=0A= element =3D $(element);=0A= return element.offsetHeight;=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= return Element.classNames(element).include(className);=0A= },=0A= =0A= addClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).add(className);=0A= },=0A= =0A= removeClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= return Element.classNames(element).remove(className);=0A= },=0A= =0A= // removes whitespace-only text node children=0A= cleanWhitespace: function(element) {=0A= element =3D $(element);=0A= for (var i =3D 0; i < element.childNodes.length; i++) {=0A= var node =3D element.childNodes[i];=0A= if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A= Element.remove(node);=0A= }=0A= },=0A= =0A= empty: function(element) {=0A= return $(element).innerHTML.match(/^\s*$/);=0A= },=0A= =0A= childOf: function(element, ancestor) {=0A= element =3D $(element), ancestor =3D $(ancestor);=0A= while (element =3D element.parentNode)=0A= if (element =3D=3D ancestor) return true;=0A= return false;=0A= },=0A= =0A= scrollTo: function(element) {=0A= element =3D $(element);=0A= var x =3D element.x ? element.x : element.offsetLeft,=0A= y =3D element.y ? element.y : element.offsetTop;=0A= window.scrollTo(x, y);=0A= },=0A= =0A= getStyle: function(element, style) {=0A= element =3D $(element);=0A= var value =3D element.style[style.camelize()];=0A= if (!value) {=0A= if (document.defaultView && document.defaultView.getComputedStyle) = {=0A= var css =3D document.defaultView.getComputedStyle(element, null);=0A= value =3D css ? css.getPropertyValue(style) : null;=0A= } else if (element.currentStyle) {=0A= value =3D element.currentStyle[style.camelize()];=0A= }=0A= }=0A= =0A= if (window.opera && ['left', 'top', 'right', = 'bottom'].include(style))=0A= if (Element.getStyle(element, 'position') =3D=3D 'static') value = =3D 'auto';=0A= =0A= return value =3D=3D 'auto' ? null : value;=0A= },=0A= =0A= setStyle: function(element, style) {=0A= element =3D $(element);=0A= for (var name in style)=0A= element.style[name.camelize()] =3D style[name];=0A= },=0A= =0A= getDimensions: function(element) {=0A= element =3D $(element);=0A= if (Element.getStyle(element, 'display') !=3D 'none')=0A= return {width: element.offsetWidth, height: element.offsetHeight};=0A= =0A= // All *Width and *Height properties give 0 on elements with display = none,=0A= // so enable the element temporarily=0A= var els =3D element.style;=0A= var originalVisibility =3D els.visibility;=0A= var originalPosition =3D els.position;=0A= els.visibility =3D 'hidden';=0A= els.position =3D 'absolute';=0A= els.display =3D '';=0A= var originalWidth =3D element.clientWidth;=0A= var originalHeight =3D element.clientHeight;=0A= els.display =3D 'none';=0A= els.position =3D originalPosition;=0A= els.visibility =3D originalVisibility;=0A= return {width: originalWidth, height: originalHeight};=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= // Opera returns the offset relative to the positioning context, = when an=0A= // element is position relative but top and left have not been = defined=0A= if (window.opera) {=0A= element.style.top =3D 0;=0A= element.style.left =3D 0;=0A= }=0A= }=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= },=0A= =0A= makeClipping: function(element) {=0A= element =3D $(element);=0A= if (element._overflow) return;=0A= element._overflow =3D element.style.overflow;=0A= if ((Element.getStyle(element, 'overflow') || 'visible') !=3D = 'hidden')=0A= element.style.overflow =3D 'hidden';=0A= },=0A= =0A= undoClipping: function(element) {=0A= element =3D $(element);=0A= if (element._overflow) return;=0A= element.style.overflow =3D element._overflow;=0A= element._overflow =3D undefined;=0A= }=0A= }=0A= =0A= Object.extend(Element, Element.Methods);=0A= =0A= var _nativeExtensions =3D false;=0A= =0A= if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A= var HTMLElement =3D {}=0A= HTMLElement.prototype =3D document.createElement('div').__proto__;=0A= }=0A= =0A= Element.addMethods =3D function(methods) {=0A= Object.extend(Element.Methods, methods || {});=0A= =0A= if(typeof HTMLElement !=3D 'undefined') {=0A= var methods =3D Element.Methods, cache =3D Element.extend.cache;=0A= for (property in methods) {=0A= var value =3D methods[property];=0A= if (typeof value =3D=3D 'function')=0A= HTMLElement.prototype[property] =3D cache.findOrStore(value);=0A= }=0A= _nativeExtensions =3D true;=0A= }=0A= }=0A= =0A= Element.addMethods();=0A= =0A= var Toggle =3D new Object();=0A= Toggle.display =3D Element.toggle;=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Abstract.Insertion =3D function(adjacency) {=0A= this.adjacency =3D adjacency;=0A= }=0A= =0A= Abstract.Insertion.prototype =3D {=0A= initialize: function(element, content) {=0A= this.element =3D $(element);=0A= this.content =3D content.stripScripts();=0A= =0A= if (this.adjacency && this.element.insertAdjacentHTML) {=0A= try {=0A= this.element.insertAdjacentHTML(this.adjacency, this.content);=0A= } catch (e) {=0A= var tagName =3D this.element.tagName.toLowerCase();=0A= if (tagName =3D=3D 'tbody' || tagName =3D=3D 'tr') {=0A= this.insertContent(this.contentFromAnonymousTable());=0A= } else {=0A= throw e;=0A= }=0A= }=0A= } else {=0A= this.range =3D this.element.ownerDocument.createRange();=0A= if (this.initializeRange) this.initializeRange();=0A= = this.insertContent([this.range.createContextualFragment(this.content)]);=0A= }=0A= =0A= setTimeout(function() {content.evalScripts()}, 10);=0A= },=0A= =0A= contentFromAnonymousTable: function() {=0A= var div =3D document.createElement('div');=0A= div.innerHTML =3D '' + this.content + = '
';=0A= return $A(div.childNodes[0].childNodes[0].childNodes);=0A= }=0A= }=0A= =0A= var Insertion =3D new Object();=0A= =0A= Insertion.Before =3D Class.create();=0A= Insertion.Before.prototype =3D Object.extend(new = Abstract.Insertion('beforeBegin'), {=0A= initializeRange: function() {=0A= this.range.setStartBefore(this.element);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.each((function(fragment) {=0A= this.element.parentNode.insertBefore(fragment, this.element);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= Insertion.Top =3D Class.create();=0A= Insertion.Top.prototype =3D Object.extend(new = Abstract.Insertion('afterBegin'), {=0A= initializeRange: function() {=0A= this.range.selectNodeContents(this.element);=0A= this.range.collapse(true);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.reverse(false).each((function(fragment) {=0A= this.element.insertBefore(fragment, this.element.firstChild);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= Insertion.Bottom =3D Class.create();=0A= Insertion.Bottom.prototype =3D Object.extend(new = Abstract.Insertion('beforeEnd'), {=0A= initializeRange: function() {=0A= this.range.selectNodeContents(this.element);=0A= this.range.collapse(this.element);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.each((function(fragment) {=0A= this.element.appendChild(fragment);=0A= }).bind(this));=0A= }=0A= });=0A= =0A= Insertion.After =3D Class.create();=0A= Insertion.After.prototype =3D Object.extend(new = Abstract.Insertion('afterEnd'), {=0A= initializeRange: function() {=0A= this.range.setStartAfter(this.element);=0A= },=0A= =0A= insertContent: function(fragments) {=0A= fragments.each((function(fragment) {=0A= this.element.parentNode.insertBefore(fragment,=0A= this.element.nextSibling);=0A= }).bind(this));=0A= }=0A= });=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(this.toArray().concat(classNameToAdd).join(' '));=0A= },=0A= =0A= remove: function(classNameToRemove) {=0A= if (!this.include(classNameToRemove)) return;=0A= this.set(this.select(function(className) {=0A= return className !=3D classNameToRemove;=0A= }).join(' '));=0A= },=0A= =0A= toString: function() {=0A= return this.toArray().join(' ');=0A= }=0A= }=0A= =0A= Object.extend(Element.ClassNames.prototype, Enumerable);=0A= var Selector =3D Class.create();=0A= Selector.prototype =3D {=0A= initialize: function(expression) {=0A= this.params =3D {classNames: []};=0A= this.expression =3D expression.toString().strip();=0A= this.parseExpression();=0A= this.compileMatcher();=0A= },=0A= =0A= parseExpression: function() {=0A= function abort(message) { throw 'Parse error in selector: ' + = message; }=0A= =0A= if (this.expression =3D=3D '') abort('empty expression');=0A= =0A= var params =3D this.params, expr =3D this.expression, match, = modifier, clause, rest;=0A= while (match =3D = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=3D)(?:"([^"]*)"|([^\]\s]*))= )?\]$/i)) {=0A= params.attributes =3D params.attributes || [];=0A= params.attributes.push({name: match[2], operator: match[3], value: = match[4] || match[5] || ''});=0A= expr =3D match[1];=0A= }=0A= =0A= if (expr =3D=3D '*') return this.params.wildcard =3D true;=0A= =0A= while (match =3D expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {=0A= modifier =3D match[1], clause =3D match[2], rest =3D match[3];=0A= switch (modifier) {=0A= case '#': params.id =3D clause; break;=0A= case '.': params.classNames.push(clause); break;=0A= case '':=0A= case undefined: params.tagName =3D clause.toUpperCase(); break;=0A= default: abort(expr.inspect());=0A= }=0A= expr =3D rest;=0A= }=0A= =0A= if (expr.length > 0) abort(expr.inspect());=0A= },=0A= =0A= buildMatchExpression: function() {=0A= var params =3D this.params, conditions =3D [], clause;=0A= =0A= if (params.wildcard)=0A= conditions.push('true');=0A= if (clause =3D params.id)=0A= conditions.push('element.id =3D=3D ' + clause.inspect());=0A= if (clause =3D params.tagName)=0A= conditions.push('element.tagName.toUpperCase() =3D=3D ' + = clause.inspect());=0A= if ((clause =3D params.classNames).length > 0)=0A= for (var i =3D 0; i < clause.length; i++)=0A= conditions.push('Element.hasClassName(element, ' + = clause[i].inspect() + ')');=0A= if (clause =3D params.attributes) {=0A= clause.each(function(attribute) {=0A= var value =3D 'element.getAttribute(' + attribute.name.inspect() = + ')';=0A= var splitValueBy =3D function(delimiter) {=0A= return value + ' && ' + value + '.split(' + = delimiter.inspect() + ')';=0A= }=0A= =0A= switch (attribute.operator) {=0A= case '=3D': conditions.push(value + ' =3D=3D ' + = attribute.value.inspect()); break;=0A= case '~=3D': conditions.push(splitValueBy(' ') + = '.include(' + attribute.value.inspect() + ')'); break;=0A= case '|=3D': conditions.push(=0A= splitValueBy('-') + '.first().toUpperCase() = =3D=3D ' + attribute.value.toUpperCase().inspect()=0A= ); break;=0A= case '!=3D': conditions.push(value + ' !=3D ' + = attribute.value.inspect()); break;=0A= case '':=0A= case undefined: conditions.push(value + ' !=3D null'); break;=0A= default: throw 'Unknown operator ' + attribute.operator = + ' in selector';=0A= }=0A= });=0A= }=0A= =0A= return conditions.join(' && ');=0A= },=0A= =0A= compileMatcher: function() {=0A= this.match =3D new Function('element', 'if (!element.tagName) return = false; \=0A= return ' + this.buildMatchExpression());=0A= },=0A= =0A= findElements: function(scope) {=0A= var element;=0A= =0A= if (element =3D $(this.params.id))=0A= if (this.match(element))=0A= if (!scope || Element.childOf(element, scope))=0A= return [element];=0A= =0A= scope =3D (scope || = document).getElementsByTagName(this.params.tagName || '*');=0A= =0A= var results =3D [];=0A= for (var i =3D 0; i < scope.length; i++)=0A= if (this.match(element =3D scope[i]))=0A= results.push(Element.extend(element));=0A= =0A= return results;=0A= },=0A= =0A= toString: function() {=0A= return this.expression;=0A= }=0A= }=0A= =0A= function $$() {=0A= return $A(arguments).map(function(expression) {=0A= return expression.strip().split(/\s+/).inject([null], = function(results, expr) {=0A= var selector =3D new Selector(expr);=0A= return results.map(selector.findElements.bind(selector)).flatten();=0A= });=0A= }).flatten();=0A= }=0A= var Field =3D {=0A= clear: function() {=0A= for (var i =3D 0; i < arguments.length; i++)=0A= $(arguments[i]).value =3D '';=0A= },=0A= =0A= focus: function(element) {=0A= $(element).focus();=0A= },=0A= =0A= present: function() {=0A= for (var i =3D 0; i < arguments.length; i++)=0A= if ($(arguments[i]).value =3D=3D '') return false;=0A= return true;=0A= },=0A= =0A= select: function(element) {=0A= $(element).select();=0A= },=0A= =0A= activate: function(element) {=0A= element =3D $(element);=0A= element.focus();=0A= if (element.select)=0A= element.select();=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Form =3D {=0A= serialize: function(form) {=0A= var elements =3D Form.getElements($(form));=0A= var queryComponents =3D new Array();=0A= =0A= for (var i =3D 0; i < elements.length; i++) {=0A= var queryComponent =3D Form.Element.serialize(elements[i]);=0A= if (queryComponent)=0A= queryComponents.push(queryComponent);=0A= }=0A= =0A= return queryComponents.join('&');=0A= },=0A= =0A= getElements: function(form) {=0A= form =3D $(form);=0A= var elements =3D new Array();=0A= =0A= for (var tagName in Form.Element.Serializers) {=0A= var tagElements =3D form.getElementsByTagName(tagName);=0A= for (var j =3D 0; j < tagElements.length; j++)=0A= elements.push(tagElements[j]);=0A= }=0A= return elements;=0A= },=0A= =0A= getInputs: function(form, typeName, name) {=0A= form =3D $(form);=0A= var inputs =3D form.getElementsByTagName('input');=0A= =0A= if (!typeName && !name)=0A= return inputs;=0A= =0A= var matchingInputs =3D new Array();=0A= for (var i =3D 0; i < inputs.length; i++) {=0A= var input =3D inputs[i];=0A= if ((typeName && input.type !=3D typeName) ||=0A= (name && input.name !=3D name))=0A= continue;=0A= matchingInputs.push(input);=0A= }=0A= =0A= return matchingInputs;=0A= },=0A= =0A= disable: function(form) {=0A= var elements =3D Form.getElements(form);=0A= for (var i =3D 0; i < elements.length; i++) {=0A= var element =3D elements[i];=0A= element.blur();=0A= element.disabled =3D 'true';=0A= }=0A= },=0A= =0A= enable: function(form) {=0A= var elements =3D Form.getElements(form);=0A= for (var i =3D 0; i < elements.length; i++) {=0A= var element =3D elements[i];=0A= element.disabled =3D '';=0A= }=0A= },=0A= =0A= findFirstElement: function(form) {=0A= return Form.getElements(form).find(function(element) {=0A= return element.type !=3D 'hidden' && !element.disabled &&=0A= ['input', 'select', = 'textarea'].include(element.tagName.toLowerCase());=0A= });=0A= },=0A= =0A= focusFirstElement: function(form) {=0A= Field.activate(Form.findFirstElement(form));=0A= },=0A= =0A= reset: function(form) {=0A= $(form).reset();=0A= }=0A= }=0A= =0A= Form.Element =3D {=0A= serialize: function(element) {=0A= element =3D $(element);=0A= var method =3D element.tagName.toLowerCase();=0A= var parameter =3D Form.Element.Serializers[method](element);=0A= =0A= if (parameter) {=0A= var key =3D encodeURIComponent(parameter[0]);=0A= if (key.length =3D=3D 0) return;=0A= =0A= if (parameter[1].constructor !=3D Array)=0A= parameter[1] =3D [parameter[1]];=0A= =0A= return parameter[1].map(function(value) {=0A= return key + '=3D' + encodeURIComponent(value);=0A= }).join('&');=0A= }=0A= },=0A= =0A= getValue: function(element) {=0A= element =3D $(element);=0A= var method =3D element.tagName.toLowerCase();=0A= var parameter =3D Form.Element.Serializers[method](element);=0A= =0A= if (parameter)=0A= return parameter[1];=0A= }=0A= }=0A= =0A= Form.Element.Serializers =3D {=0A= input: function(element) {=0A= switch (element.type.toLowerCase()) {=0A= case 'submit':=0A= case 'hidden':=0A= case 'password':=0A= case 'text':=0A= return Form.Element.Serializers.textarea(element);=0A= case 'checkbox':=0A= case 'radio':=0A= return Form.Element.Serializers.inputSelector(element);=0A= }=0A= return false;=0A= },=0A= =0A= inputSelector: function(element) {=0A= if (element.checked)=0A= return [element.name, element.value];=0A= },=0A= =0A= textarea: function(element) {=0A= return [element.name, element.value];=0A= },=0A= =0A= select: function(element) {=0A= return Form.Element.Serializers[element.type =3D=3D 'select-one' ?=0A= 'selectOne' : 'selectMany'](element);=0A= },=0A= =0A= selectOne: function(element) {=0A= var value =3D '', opt, index =3D element.selectedIndex;=0A= if (index >=3D 0) {=0A= opt =3D element.options[index];=0A= value =3D opt.value || opt.text;=0A= }=0A= return [element.name, value];=0A= },=0A= =0A= selectMany: function(element) {=0A= var value =3D [];=0A= for (var i =3D 0; i < element.length; i++) {=0A= var opt =3D element.options[i];=0A= if (opt.selected)=0A= value.push(opt.value || opt.text);=0A= }=0A= return [element.name, value];=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var $F =3D Form.Element.getValue;=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Abstract.TimedObserver =3D function() {}=0A= Abstract.TimedObserver.prototype =3D {=0A= initialize: function(element, frequency, callback) {=0A= this.frequency =3D frequency;=0A= this.element =3D $(element);=0A= this.callback =3D callback;=0A= =0A= this.lastValue =3D this.getValue();=0A= this.registerCallback();=0A= },=0A= =0A= registerCallback: function() {=0A= setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A= },=0A= =0A= onTimerEvent: 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= =0A= Form.Element.Observer =3D Class.create();=0A= Form.Element.Observer.prototype =3D Object.extend(new = Abstract.TimedObserver(), {=0A= getValue: function() {=0A= return Form.Element.getValue(this.element);=0A= }=0A= });=0A= =0A= Form.Observer =3D Class.create();=0A= Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A= getValue: function() {=0A= return Form.serialize(this.element);=0A= }=0A= });=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Abstract.EventObserver =3D function() {}=0A= Abstract.EventObserver.prototype =3D {=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= var elements =3D Form.getElements(this.element);=0A= for (var i =3D 0; i < elements.length; i++)=0A= this.registerCallback(elements[i]);=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= case 'password':=0A= case 'text':=0A= case 'textarea':=0A= case 'select-one':=0A= case 'select-multiple':=0A= Event.observe(element, 'change', = this.onElementEvent.bind(this));=0A= break;=0A= }=0A= }=0A= }=0A= }=0A= =0A= Form.Element.EventObserver =3D Class.create();=0A= Form.Element.EventObserver.prototype =3D Object.extend(new = Abstract.EventObserver(), {=0A= getValue: function() {=0A= return Form.Element.getValue(this.element);=0A= }=0A= });=0A= =0A= Form.EventObserver =3D Class.create();=0A= Form.EventObserver.prototype =3D Object.extend(new = Abstract.EventObserver(), {=0A= getValue: function() {=0A= return Form.serialize(this.element);=0A= }=0A= });=0A= if (!window.Event) {=0A= var Event =3D new Object();=0A= }=0A= =0A= Object.extend(Event, {=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= =0A= element: function(event) {=0A= return event.target || event.srcElement;=0A= },=0A= =0A= isLeftClick: function(event) {=0A= return (((event.which) && (event.which =3D=3D 1)) ||=0A= ((event.button) && (event.button =3D=3D 1)));=0A= },=0A= =0A= pointerX: function(event) {=0A= return event.pageX || (event.clientX +=0A= (document.documentElement.scrollLeft || document.body.scrollLeft));=0A= },=0A= =0A= pointerY: function(event) {=0A= return event.pageY || (event.clientY +=0A= (document.documentElement.scrollTop || document.body.scrollTop));=0A= },=0A= =0A= stop: function(event) {=0A= if (event.preventDefault) {=0A= event.preventDefault();=0A= event.stopPropagation();=0A= } else {=0A= event.returnValue =3D false;=0A= event.cancelBubble =3D true;=0A= }=0A= },=0A= =0A= // find the first node with the given tagName, starting from the=0A= // node the event was triggered on; traverses the DOM upwards=0A= findElement: function(event, tagName) {=0A= var element =3D Event.element(event);=0A= while (element.parentNode && (!element.tagName ||=0A= (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A= element =3D element.parentNode;=0A= return element;=0A= },=0A= =0A= observers: false,=0A= =0A= _observeAndCache: function(element, name, observer, useCapture) {=0A= if (!this.observers) this.observers =3D [];=0A= if (element.addEventListener) {=0A= this.observers.push([element, name, observer, useCapture]);=0A= element.addEventListener(name, observer, useCapture);=0A= } else if (element.attachEvent) {=0A= this.observers.push([element, name, observer, useCapture]);=0A= element.attachEvent('on' + name, observer);=0A= }=0A= },=0A= =0A= unloadCache: function() {=0A= if (!Event.observers) return;=0A= for (var i =3D 0; i < Event.observers.length; i++) {=0A= Event.stopObserving.apply(this, Event.observers[i]);=0A= Event.observers[i][0] =3D null;=0A= }=0A= Event.observers =3D false;=0A= },=0A= =0A= observe: function(element, name, observer, useCapture) {=0A= var element =3D $(element);=0A= useCapture =3D useCapture || false;=0A= =0A= if (name =3D=3D 'keypress' &&=0A= (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A= || element.attachEvent))=0A= name =3D 'keydown';=0A= =0A= this._observeAndCache(element, name, observer, useCapture);=0A= },=0A= =0A= stopObserving: function(element, name, observer, useCapture) {=0A= var element =3D $(element);=0A= useCapture =3D useCapture || false;=0A= =0A= if (name =3D=3D 'keypress' &&=0A= (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A= || element.detachEvent))=0A= name =3D 'keydown';=0A= =0A= if (element.removeEventListener) {=0A= element.removeEventListener(name, observer, useCapture);=0A= } else if (element.detachEvent) {=0A= element.detachEvent('on' + name, observer);=0A= }=0A= }=0A= });=0A= =0A= /* prevent memory leaks in IE */=0A= if (navigator.appVersion.match(/\bMSIE\b/))=0A= Event.observe(window, 'unload', Event.unloadCache, false);=0A= var Position =3D {=0A= // set to true if needed, warning: firefox performance problems=0A= // NOT neeeded for page scrolling, only if draggable contained in=0A= // scrollable elements=0A= includeScrollOffsets: false,=0A= =0A= // must be called before calling withinIncludingScrolloffset, every = time the=0A= // page is scrolled=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= realOffset: function(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 [valueL, valueT];=0A= },=0A= =0A= cumulativeOffset: function(element) {=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= } while (element);=0A= return [valueL, valueT];=0A= },=0A= =0A= positionedOffset: function(element) {=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= p =3D Element.getStyle(element, 'position');=0A= if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A= }=0A= } while (element);=0A= return [valueL, valueT];=0A= },=0A= =0A= offsetParent: function(element) {=0A= if (element.offsetParent) return element.offsetParent;=0A= if (element =3D=3D document.body) return element;=0A= =0A= while ((element =3D element.parentNode) && element !=3D = document.body)=0A= if (Element.getStyle(element, 'position') !=3D 'static')=0A= return element;=0A= =0A= return document.body;=0A= },=0A= =0A= // caches x/y coordinate pair to use with overlap=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 this.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 this.realOffset(element);=0A= =0A= this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A= this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A= this.offset =3D this.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= // within must be called directly before=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= clone: function(source, target) {=0A= source =3D $(source);=0A= target =3D $(target);=0A= target.style.position =3D 'absolute';=0A= var offsets =3D this.cumulativeOffset(source);=0A= target.style.top =3D offsets[1] + 'px';=0A= target.style.left =3D offsets[0] + 'px';=0A= target.style.width =3D source.offsetWidth + 'px';=0A= target.style.height =3D source.offsetHeight + 'px';=0A= },=0A= =0A= page: function(forElement) {=0A= var valueT =3D 0, valueL =3D 0;=0A= =0A= var element =3D forElement;=0A= do {=0A= valueT +=3D element.offsetTop || 0;=0A= valueL +=3D element.offsetLeft || 0;=0A= =0A= // Safari fix=0A= if (element.offsetParent=3D=3Ddocument.body)=0A= if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A= =0A= } while (element =3D element.offsetParent);=0A= =0A= element =3D forElement;=0A= do {=0A= valueT -=3D element.scrollTop || 0;=0A= valueL -=3D element.scrollLeft || 0;=0A= } while (element =3D element.parentNode);=0A= =0A= return [valueL, valueT];=0A= },=0A= =0A= clone: function(source, target) {=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= // find page position of source=0A= source =3D $(source);=0A= var p =3D Position.page(source);=0A= =0A= // find coordinate system to use=0A= target =3D $(target);=0A= var delta =3D [0, 0];=0A= var parent =3D null;=0A= // delta [0,0] will do fine with position: fixed elements,=0A= // position:absolute needs offsetParent deltas=0A= if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A= parent =3D Position.offsetParent(target);=0A= delta =3D Position.page(parent);=0A= }=0A= =0A= // correct by body offsets (fixes Safari)=0A= if (parent =3D=3D document.body) {=0A= delta[0] -=3D document.body.offsetLeft;=0A= delta[1] -=3D document.body.offsetTop;=0A= }=0A= =0A= // set position=0A= if(options.setLeft) target.style.left =3D (p[0] - delta[0] + = options.offsetLeft) + 'px';=0A= if(options.setTop) target.style.top =3D (p[1] - delta[1] + = options.offsetTop) + 'px';=0A= if(options.setWidth) target.style.width =3D source.offsetWidth + = 'px';=0A= if(options.setHeight) target.style.height =3D source.offsetHeight + = 'px';=0A= },=0A= =0A= absolutize: function(element) {=0A= element =3D $(element);=0A= if (element.style.position =3D=3D 'absolute') return;=0A= Position.prepare();=0A= =0A= var offsets =3D Position.positionedOffset(element);=0A= var top =3D offsets[1];=0A= var left =3D offsets[0];=0A= var width =3D element.clientWidth;=0A= var height =3D element.clientHeight;=0A= =0A= element._originalLeft =3D left - parseFloat(element.style.left || = 0);=0A= element._originalTop =3D top - parseFloat(element.style.top || = 0);=0A= element._originalWidth =3D element.style.width;=0A= element._originalHeight =3D element.style.height;=0A= =0A= element.style.position =3D 'absolute';=0A= element.style.top =3D top + 'px';;=0A= element.style.left =3D left + 'px';;=0A= element.style.width =3D width + 'px';;=0A= element.style.height =3D height + 'px';;=0A= },=0A= =0A= relativize: function(element) {=0A= element =3D $(element);=0A= if (element.style.position =3D=3D 'relative') return;=0A= Position.prepare();=0A= =0A= element.style.position =3D 'relative';=0A= var top =3D parseFloat(element.style.top || 0) - = (element._originalTop || 0);=0A= var left =3D parseFloat(element.style.left || 0) - = (element._originalLeft || 0);=0A= =0A= element.style.top =3D top + 'px';=0A= element.style.left =3D left + 'px';=0A= element.style.height =3D element._originalHeight;=0A= element.style.width =3D element._originalWidth;=0A= }=0A= }=0A= =0A= // Safari returns margins on body which is incorrect if the child is = absolutely=0A= // positioned. For performance reasons, redefine = Position.cumulativeOffset for=0A= // KHTML/WebKit only.=0A= if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A= Position.cumulativeOffset =3D function(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 [valueL, valueT];=0A= }=0A= } ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/javascripts/effects.js?1183395038 // Copyright (c) 2005 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= // See scriptaculous.js for full license. =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(element, {fontSize: (percent/100) + 'em'}); =0A= if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);=0A= }=0A= =0A= Element.getOpacity =3D function(element){ =0A= var opacity;=0A= if (opacity =3D Element.getStyle(element, 'opacity')) =0A= return parseFloat(opacity); =0A= if (opacity =3D (Element.getStyle(element, 'filter') || = '').match(/alpha\(opacity=3D(.*)\)/)) =0A= if(opacity[1]) return parseFloat(opacity[1]) / 100; =0A= return 1.0; =0A= }=0A= =0A= Element.setOpacity =3D function(element, value){ =0A= element=3D $(element); =0A= if (value =3D=3D 1){=0A= Element.setStyle(element, { opacity: =0A= (/Gecko/.test(navigator.userAgent) && = !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? =0A= 0.999999 : null });=0A= if(/MSIE/.test(navigator.userAgent)) =0A= Element.setStyle(element, {filter: = Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')}); =0A= } else { =0A= if(value < 0.00001) value =3D 0; =0A= Element.setStyle(element, {opacity: value});=0A= if(/MSIE/.test(navigator.userAgent)) =0A= Element.setStyle(element, =0A= { filter: = Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +=0A= 'alpha(opacity=3D'+value*100+')' }); =0A= }=0A= } =0A= =0A= Element.getInlineOpacity =3D function(element){ =0A= return $(element).style.opacity || '';=0A= } =0A= =0A= Element.childrenWithClassName =3D function(element, className, = findFirst) {=0A= var classNameRegExp =3D new RegExp("(^|\\s)" + className + "(\\s|$)");=0A= var results =3D $A($(element).getElementsByTagName('*'))[findFirst ? = 'detect' : 'select']( function(c) { =0A= return (c.className && c.className.match(classNameRegExp));=0A= });=0A= if(!results) results =3D [];=0A= return results;=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= Array.prototype.call =3D function() {=0A= var args =3D arguments;=0A= this.each(function(f){ f.apply(this, args) });=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Effect =3D {=0A= tagifyText: function(element) {=0A= var tagifyStyle =3D 'position:relative';=0A= if(/MSIE/.test(navigator.userAgent)) tagifyStyle +=3D ';zoom:1';=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= Builder.node('span',{style: tagifyStyle},=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= (typeof element =3D=3D 'function')) && =0A= (element.length))=0A= elements =3D element;=0A= else=0A= elements =3D $(element).childNodes;=0A= =0A= var options =3D Object.extend({=0A= speed: 0.1,=0A= delay: 0.0=0A= }, arguments[2] || {});=0A= var masterDelay =3D options.delay;=0A= =0A= $A(elements).each( function(element, index) {=0A= new effect(element, Object.extend(options, { delay: index * = options.speed + masterDelay }));=0A= });=0A= },=0A= PAIRS: {=0A= 'slide': ['SlideDown','SlideUp'],=0A= 'blind': ['BlindDown','BlindUp'],=0A= 'appear': ['Appear','Fade']=0A= },=0A= toggle: function(element, effect) {=0A= element =3D $(element);=0A= effect =3D (effect || 'appear').toLowerCase();=0A= var options =3D Object.extend({=0A= queue: { position:'end', scope:(element.id || 'global'), limit: 1 }=0A= }, arguments[2] || {});=0A= Effect[element.visible() ? =0A= Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, = options);=0A= }=0A= };=0A= =0A= var Effect2 =3D Effect; // deprecated=0A= =0A= /* ------------- transitions ------------- */=0A= =0A= Effect.Transitions =3D {}=0A= =0A= Effect.Transitions.linear =3D function(pos) {=0A= return pos;=0A= }=0A= Effect.Transitions.sinoidal =3D function(pos) {=0A= return (-Math.cos(pos*Math.PI)/2) + 0.5;=0A= }=0A= Effect.Transitions.reverse =3D function(pos) {=0A= return 1-pos;=0A= }=0A= Effect.Transitions.flicker =3D function(pos) {=0A= return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=0A= }=0A= Effect.Transitions.wobble =3D function(pos) {=0A= return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;=0A= }=0A= Effect.Transitions.pulse =3D function(pos) {=0A= return (Math.floor(pos*10) % 2 =3D=3D 0 ? =0A= (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));=0A= }=0A= Effect.Transitions.none =3D function(pos) {=0A= return 0;=0A= }=0A= Effect.Transitions.full =3D function(pos) {=0A= return 1;=0A= }=0A= =0A= /* ------------- core effects ------------- */=0A= =0A= Effect.ScopedQueue =3D Class.create();=0A= Object.extend(Object.extend(Effect.ScopedQueue.prototype, 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 (typeof effect.options.queue =3D=3D 'string') ? =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 '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), 40);=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= this.effects.invoke('loop', timePos);=0A= }=0A= });=0A= =0A= Effect.Queues =3D {=0A= instances: $H(),=0A= get: function(queueName) {=0A= if(typeof queueName !=3D 'string') return queueName;=0A= =0A= if(!this.instances[queueName])=0A= this.instances[queueName] =3D new Effect.ScopedQueue();=0A= =0A= return this.instances[queueName];=0A= }=0A= }=0A= Effect.Queue =3D Effect.Queues.get('global');=0A= =0A= Effect.DefaultOptions =3D {=0A= transition: Effect.Transitions.sinoidal,=0A= duration: 1.0, // seconds=0A= fps: 25.0, // max. 25fps due to Effect.Queue implementation=0A= sync: false, // true for combining=0A= from: 0.0,=0A= to: 1.0,=0A= delay: 0.0,=0A= queue: 'parallel'=0A= }=0A= =0A= Effect.Base =3D function() {};=0A= Effect.Base.prototype =3D {=0A= position: null,=0A= start: function(options) {=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.event('beforeStart');=0A= if(!this.options.sync)=0A= Effect.Queues.get(typeof this.options.queue =3D=3D 'string' ? =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.finishOn - = this.startOn);=0A= var frame =3D Math.round(pos * this.options.fps * = this.options.duration);=0A= if(frame > this.currentFrame) {=0A= this.render(pos);=0A= this.currentFrame =3D frame;=0A= }=0A= }=0A= },=0A= render: function(pos) {=0A= if(this.state =3D=3D 'idle') {=0A= this.state =3D 'running';=0A= this.event('beforeSetup');=0A= if(this.setup) this.setup();=0A= this.event('afterSetup');=0A= }=0A= if(this.state =3D=3D 'running') {=0A= if(this.options.transition) pos =3D this.options.transition(pos);=0A= pos *=3D (this.options.to-this.options.from);=0A= pos +=3D this.options.from;=0A= this.position =3D pos;=0A= this.event('beforeUpdate');=0A= if(this.update) this.update(pos);=0A= this.event('afterUpdate');=0A= }=0A= },=0A= cancel: function() {=0A= if(!this.options.sync)=0A= Effect.Queues.get(typeof this.options.queue =3D=3D 'string' ? =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= return '#';=0A= }=0A= }=0A= =0A= Effect.Parallel =3D Class.create();=0A= Object.extend(Object.extend(Effect.Parallel.prototype, = Effect.Base.prototype), {=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.Opacity =3D Class.create();=0A= Object.extend(Object.extend(Effect.Opacity.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= // make this work on IE on elements without 'layout'=0A= if(/MSIE/.test(navigator.userAgent) && (!this.element.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();=0A= Object.extend(Object.extend(Effect.Move.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=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= // Bug in Opera: Opera returns the "real" position of a static = element or=0A= // relative element that does not have top/left explicitly set.=0A= // =3D=3D> Always set top and left for position relative elements in = your stylesheets =0A= // (to 0 if you do not need them) =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= // absolute movement, so we need to calc deltaX and deltaY=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 + 'px',=0A= top: this.options.y * position + this.originalTop + '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();=0A= Object.extend(Object.extend(Effect.Scale.prototype, = Effect.Base.prototype), {=0A= initialize: function(element, percent) {=0A= this.element =3D $(element)=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','%'].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 + 'px';=0A= if(this.options.scaleY) d.height =3D height + '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();=0A= Object.extend(Object.extend(Effect.Highlight.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=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= backgroundImage: this.element.getStyle('background-image') };=0A= this.element.setStyle({backgroundImage: 'none'});=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+(Math.round(this._base[i]+(this._delta[i]*position)).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 Class.create();=0A= Object.extend(Object.extend(Effect.ScrollTo.prototype, = Effect.Base.prototype), {=0A= initialize: function(element) {=0A= this.element =3D $(element);=0A= this.start(arguments[1] || {});=0A= },=0A= setup: function() {=0A= Position.prepare();=0A= var offsets =3D Position.cumulativeOffset(this.element);=0A= if(this.options.offset) offsets[1] +=3D this.options.offset;=0A= var max =3D window.innerHeight ? =0A= window.height - window.innerHeight :=0A= document.body.scrollHeight - =0A= (document.documentElement.clientHeight ? =0A= document.documentElement.clientHeight : = document.body.clientHeight);=0A= this.scrollStart =3D Position.deltaY;=0A= this.delta =3D (offsets[1] > max ? max : offsets[1]) - = this.scrollStart;=0A= },=0A= update: function(position) {=0A= Position.prepare();=0A= window.scrollTo(Position.deltaX, =0A= this.scrollStart + (position*this.delta));=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();=0A= effect.element.setStyle({opacity: oldOpacity}); =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);=0A= effect.element.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 { opacity: element.getInlineOpacity(), position: = element.getStyle('position') };=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= effect.effects[0].element.setStyle({position: 'absolute'}); },=0A= afterFinishInternal: function(effect) {=0A= effect.effects[0].element.hide();=0A= effect.effects[0].element.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();=0A= effect.element.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, =0A= Object.extend({ 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();=0A= effect.element.setStyle({height: '0px'});=0A= effect.element.show(); =0A= }, =0A= afterFinishInternal: function(effect) {=0A= effect.element.undoClipping();=0A= }=0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.SwitchOff =3D function(element) {=0A= element =3D $(element);=0A= var oldOpacity =3D element.getInlineOpacity();=0A= return new Effect.Appear(element, { =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();=0A= effect.element.makeClipping();=0A= },=0A= afterFinishInternal: function(effect) {=0A= effect.element.hide();=0A= effect.element.undoClipping();=0A= effect.element.undoPositioned();=0A= effect.element.setStyle({opacity: oldOpacity});=0A= }=0A= })=0A= }=0A= });=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();=0A= effect.effects[0].element.undoPositioned();=0A= effect.effects[0].element.setStyle(oldStyle);=0A= } =0A= }, arguments[1] || {}));=0A= }=0A= =0A= Effect.Shake =3D function(element) {=0A= element =3D $(element);=0A= var oldStyle =3D {=0A= top: element.getStyle('top'),=0A= left: element.getStyle('left') };=0A= return new Effect.Move(element, =0A= { x: 20, y: 0, duration: 0.05, afterFinishInternal: = function(effect) {=0A= new Effect.Move(effect.element,=0A= { x: -40, y: 0, duration: 0.1, afterFinishInternal: = function(effect) {=0A= new Effect.Move(effect.element,=0A= { x: 40, y: 0, duration: 0.1, afterFinishInternal: = function(effect) {=0A= new Effect.Move(effect.element,=0A= { x: -40, y: 0, duration: 0.1, afterFinishInternal: = function(effect) {=0A= new Effect.Move(effect.element,=0A= { x: 40, y: 0, duration: 0.1, afterFinishInternal: = function(effect) {=0A= new Effect.Move(effect.element,=0A= { x: -20, y: 0, duration: 0.05, afterFinishInternal: = function(effect) {=0A= effect.element.undoPositioned();=0A= effect.element.setStyle(oldStyle);=0A= }}) }}) }}) }}) }}) }});=0A= }=0A= =0A= Effect.SlideDown =3D function(element) {=0A= element =3D $(element);=0A= 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.firstChild).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: 0,=0A= scaleMode: {originalHeight: elementDimensions.height, originalWidth: = elementDimensions.width},=0A= restoreAfterFinish: true,=0A= afterSetup: function(effect) {=0A= effect.element.makePositioned();=0A= effect.element.firstChild.makePositioned();=0A= if(window.opera) effect.element.setStyle({top: ''});=0A= effect.element.makeClipping();=0A= effect.element.setStyle({height: '0px'});=0A= effect.element.show(); },=0A= afterUpdateInternal: function(effect) {=0A= effect.element.firstChild.setStyle({bottom:=0A= (effect.dims[0] - effect.element.clientHeight) + 'px' }); =0A= },=0A= afterFinishInternal: function(effect) {=0A= effect.element.undoClipping(); =0A= // IE will crash if child is undoPositioned first=0A= if(/MSIE/.test(navigator.userAgent)){=0A= effect.element.undoPositioned();=0A= effect.element.firstChild.undoPositioned();=0A= }else{=0A= effect.element.firstChild.undoPositioned();=0A= effect.element.undoPositioned();=0A= }=0A= effect.element.firstChild.setStyle({bottom: oldInnerBottom}); }=0A= }, arguments[1] || {})=0A= );=0A= }=0A= =0A= Effect.SlideUp =3D function(element) {=0A= element =3D $(element);=0A= element.cleanWhitespace();=0A= var oldInnerBottom =3D $(element.firstChild).getStyle('bottom');=0A= return new Effect.Scale(element, 0, =0A= Object.extend({ scaleContent: false, =0A= scaleX: false, =0A= scaleMode: 'box',=0A= scaleFrom: 100,=0A= restoreAfterFinish: true,=0A= beforeStartInternal: function(effect) {=0A= effect.element.makePositioned();=0A= effect.element.firstChild.makePositioned();=0A= if(window.opera) effect.element.setStyle({top: ''});=0A= effect.element.makeClipping();=0A= effect.element.show(); }, =0A= afterUpdateInternal: function(effect) {=0A= effect.element.firstChild.setStyle({bottom:=0A= (effect.dims[0] - effect.element.clientHeight) + 'px' }); },=0A= afterFinishInternal: function(effect) {=0A= effect.element.hide();=0A= effect.element.undoClipping();=0A= effect.element.firstChild.undoPositioned();=0A= effect.element.undoPositioned();=0A= effect.element.setStyle({bottom: oldInnerBottom}); }=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(effect.element); }, =0A= afterFinishInternal: function(effect) {=0A= effect.element.hide(effect.element); =0A= effect.element.undoClipping(effect.element); }=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();=0A= effect.element.makeClipping();=0A= effect.element.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'});=0A= effect.effects[0].element.show(); =0A= },=0A= afterFinishInternal: function(effect) {=0A= effect.effects[0].element.undoClipping();=0A= effect.effects[0].element.undoPositioned();=0A= effect.effects[0].element.setStyle(oldStyle); =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();=0A= effect.effects[0].element.makeClipping(); },=0A= afterFinishInternal: function(effect) {=0A= effect.effects[0].element.hide();=0A= effect.effects[0].element.undoClipping();=0A= effect.effects[0].element.undoPositioned();=0A= effect.effects[0].element.setStyle(oldStyle); }=0A= }, options)=0A= );=0A= }=0A= =0A= Effect.Pulsate =3D function(element) {=0A= element =3D $(element);=0A= var options =3D arguments[1] || {};=0A= var oldOpacity =3D element.getInlineOpacity();=0A= var transition =3D options.transition || Effect.Transitions.sinoidal;=0A= var reverser =3D function(pos){ return = transition(1-Effect.Transitions.pulse(pos)) };=0A= reverser.bind(transition);=0A= return new Effect.Opacity(element, =0A= Object.extend(Object.extend({ duration: 3.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(element);=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();=0A= effect.element.undoClipping(); =0A= effect.element.setStyle(oldStyle);=0A= } });=0A= }}, arguments[1] || {}));=0A= };=0A= =0A= ['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setCont= entZoom',=0A= = 'collectTextNodes','collectTextNodesIgnoreClass','childrenWithClassName']= .each( =0A= function(f) { Element.Methods[f] =3D Element[f]; }=0A= );=0A= =0A= Element.Methods.visualEffect =3D function(element, effect, options) {=0A= s =3D effect.gsub(/_/, '-').camelize();=0A= effect_class =3D s.charAt(0).toUpperCase() + s.substring(1);=0A= new Effect[effect_class](element, options);=0A= return $(element);=0A= };=0A= =0A= Element.addMethods(); ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/javascripts/dragdrop.js?1183395038 // Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, = http://mir.aculo.us)=0A= // (c) 2005 Sammi Williams (http://www.oriontransfer.co.nz, = sammi@oriontransfer.co.nz)=0A= // =0A= // See scriptaculous.js for full license.=0A= =0A= /*-----------------------------------------------------------------------= ---*/=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((typeof containment =3D=3D 'object') && =0A= (containment.constructor =3D=3D Array)) {=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 affected =3D [];=0A= =0A= if(this.last_active) this.deactivate(this.last_active);=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= 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= 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= },=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= window.focus(); // allows keypress events if window isn't currently = focused, fails for Safari=0A= this.activeDraggable =3D draggable;=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= this.activeDraggable.updateDrag(event, pointer);=0A= },=0A= =0A= endDrag: function(event) {=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= },=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= Draggable.prototype =3D {=0A= initialize: function(element) {=0A= var options =3D Object.extend({=0A= handle: false,=0A= starteffect: function(element) { =0A= new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7}); =0A= },=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= element._revert =3D new Effect.Move(element, { x: -left_offset, = y: -top_offset, duration: dur});=0A= },=0A= endeffect: function(element) { =0A= new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0}); =0A= },=0A= zindex: 1000,=0A= revert: 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= }, arguments[1] || {});=0A= =0A= this.element =3D $(element);=0A= =0A= if(options.handle && (typeof options.handle =3D=3D 'string')) {=0A= var h =3D Element.childrenWithClassName(this.element, = options.handle, true);=0A= if(h.length>0) this.handle =3D h[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= =0A= Element.makePositioned(this.element); // fix IE =0A= =0A= this.delta =3D this.currentDelta();=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(Event.isLeftClick(event)) { =0A= // abort on form elements, fixes a Firefox issue=0A= var src =3D Event.element(event);=0A= if(src.tagName && (=0A= src.tagName=3D=3D'INPUT' ||=0A= src.tagName=3D=3D'SELECT' ||=0A= src.tagName=3D=3D'OPTION' ||=0A= src.tagName=3D=3D'BUTTON' ||=0A= src.tagName=3D=3D'TEXTAREA')) return;=0A= =0A= if(this.element._revert) {=0A= this.element._revert.cancel();=0A= this.element._revert =3D null;=0A= }=0A= =0A= var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A= var pos =3D Position.cumulativeOffset(this.element);=0A= this.offset =3D [0,1].map( function(i) { return (pointer[i] - = pos[i]) });=0A= =0A= Draggables.activate(this);=0A= Event.stop(event);=0A= }=0A= },=0A= =0A= startDrag: function(event) {=0A= this.dragging =3D true;=0A= =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= 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= if(this.options.starteffect) this.options.starteffect(this.element);=0A= },=0A= =0A= updateDrag: function(event, pointer) {=0A= if(!this.dragging) this.startDrag(event);=0A= Position.prepare();=0A= Droppables.show(pointer, this.element);=0A= Draggables.notify('onDrag', this, event);=0A= this.draw(pointer);=0A= if(this.options.change) this.options.change(this);=0A= =0A= if(this.options.scroll) {=0A= this.stopScrolling();=0A= =0A= var p;=0A= if (this.options.scroll =3D=3D window) {=0A= with(this._getWindowScroll(this.options.scroll)) { p =3D [ left, = top, left+width, top+height ]; }=0A= } else {=0A= p =3D Position.page(this.options.scroll);=0A= p[0] +=3D this.options.scroll.scrollLeft;=0A= p[1] +=3D this.options.scroll.scrollTop;=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(navigator.appVersion.indexOf('AppleWebKit')>0) = 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.ghosting) {=0A= Position.relativize(this.element);=0A= Element.remove(this._clone);=0A= this._clone =3D null;=0A= }=0A= =0A= if(success) Droppables.fire(event, this.element);=0A= Draggables.notify('onEnd', this, event);=0A= =0A= var revert =3D this.options.revert;=0A= if(revert && typeof revert =3D=3D 'function') revert =3D = revert(this.element);=0A= =0A= var d =3D this.currentDelta();=0A= if(revert && this.options.reverteffect) {=0A= this.options.reverteffect(this.element, =0A= d[1]-this.delta[1], d[0]-this.delta[0]);=0A= } else {=0A= this.delta =3D d;=0A= }=0A= =0A= if(this.options.zindex)=0A= this.element.style.zIndex =3D this.originalZ;=0A= =0A= if(this.options.endeffect) =0A= this.options.endeffect(this.element);=0A= =0A= Draggables.deactivate(this);=0A= Droppables.reset();=0A= },=0A= =0A= keyPress: function(event) {=0A= if(event.keyCode!=3DEvent.KEY_ESC) return;=0A= this.finishDrag(event, false);=0A= Event.stop(event);=0A= },=0A= =0A= endDrag: function(event) {=0A= if(!this.dragging) return;=0A= this.stopScrolling();=0A= this.finishDrag(event, true);=0A= Event.stop(event);=0A= },=0A= =0A= draw: function(point) {=0A= var pos =3D Position.cumulativeOffset(this.element);=0A= 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)) {=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(typeof this.options.snap =3D=3D 'function') {=0A= p =3D this.options.snap(p[0],p[1]);=0A= } else {=0A= if(this.options.snap instanceof Array) {=0A= p =3D p.map( function(v, i) {=0A= return Math.round(v/this.options.snap[i])*this.options.snap[i] = }.bind(this))=0A= } else {=0A= p =3D p.map( function(v) {=0A= return Math.round(v/this.options.snap)*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= 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= 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= 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= 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= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var SortableObserver =3D Class.create();=0A= SortableObserver.prototype =3D {=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= sortables: {},=0A= =0A= _findRootElement: function(element) {=0A= while (element.tagName !=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= var s =3D Sortable.options(element);=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= hoverclass: null,=0A= ghosting: false,=0A= scroll: false,=0A= scrollSensitivity: 20,=0A= scrollSpeed: 15,=0A= format: /^[^_]*_(.*)$/,=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= scroll: options.scroll,=0A= scrollSpeed: options.scrollSpeed,=0A= scrollSensitivity: options.scrollSensitivity,=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= //greedy: !options.dropOnEmpty=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= (this.findElements(element, options) || []).each( function(e) {=0A= // handles are per-draggable=0A= var handle =3D options.handle ? =0A= Element.childrenWithClassName(e, options.handle)[0] : e; =0A= options.draggables.push(=0A= new Draggable(e, Object.extend(options_for_draggable, { handle: = handle })));=0A= Droppables.add(e, options_for_droppable);=0A= if(options.tree) e.treeNode =3D element;=0A= options.droppables.push(e); =0A= });=0A= =0A= if(options.tree) {=0A= (Sortable.findTreeElements(element, options) || []).each( = function(e) {=0A= Droppables.add(e, options_for_tree);=0A= e.treeNode =3D element;=0A= options.droppables.push(e);=0A= });=0A= }=0A= =0A= // keep reference=0A= this.sortables[element.id] =3D options;=0A= =0A= // for onupdate=0A= Draggables.addObserver(new SortableObserver(element, = options.onUpdate));=0A= =0A= },=0A= =0A= // return all suitable-for-sortable elements in a guaranteed order=0A= findElements: function(element, options) {=0A= return Element.findChildren(=0A= element, options.only, options.tree ? true : false, options.tag);=0A= },=0A= =0A= findTreeElements: function(element, options) {=0A= return Element.findChildren(=0A= element, options.only, options.tree ? true : false, = options.treeTag);=0A= },=0A= =0A= onHover: function(element, dropon, overlap) {=0A= if(Element.isParent(dropon, element)) return;=0A= =0A= if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {=0A= return;=0A= } else if(overlap>0.5) {=0A= Sortable.mark(dropon, 'before');=0A= if(dropon.previousSibling !=3D element) {=0A= var oldParentNode =3D element.parentNode;=0A= element.style.visibility =3D "hidden"; // fix gecko rendering=0A= dropon.parentNode.insertBefore(element, dropon);=0A= if(dropon.parentNode!=3DoldParentNode) =0A= Sortable.options(oldParentNode).onChange(element);=0A= Sortable.options(dropon.parentNode).onChange(element);=0A= }=0A= } else {=0A= Sortable.mark(dropon, 'after');=0A= var nextElement =3D dropon.nextSibling || null;=0A= if(nextElement !=3D element) {=0A= var oldParentNode =3D element.parentNode;=0A= element.style.visibility =3D "hidden"; // fix gecko rendering=0A= dropon.parentNode.insertBefore(element, nextElement);=0A= if(dropon.parentNode!=3DoldParentNode) =0A= Sortable.options(oldParentNode).onChange(element);=0A= Sortable.options(dropon.parentNode).onChange(element);=0A= }=0A= }=0A= },=0A= =0A= onEmptyHover: function(element, dropon, overlap) {=0A= var oldParentNode =3D element.parentNode;=0A= var droponOptions =3D Sortable.options(dropon);=0A= =0A= if(!Element.isParent(dropon, element)) {=0A= var index;=0A= =0A= var children =3D Sortable.findElements(dropon, {tag: = droponOptions.tag});=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) Element.hide(Sortable._marker);=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 $('dropmarker') || = document.createElement('DIV');=0A= Element.hide(Sortable._marker);=0A= Element.addClassName(Sortable._marker, 'dropmarker');=0A= Sortable._marker.style.position =3D 'absolute';=0A= = document.getElementsByTagName("body").item(0).appendChild(Sortable._marke= r);=0A= } =0A= var offsets =3D Position.cumulativeOffset(dropon);=0A= Sortable._marker.style.left =3D offsets[0] + 'px';=0A= Sortable._marker.style.top =3D offsets[1] + 'px';=0A= =0A= if(position=3D=3D'after')=0A= if(sortable.overlap =3D=3D 'horizontal') =0A= Sortable._marker.style.left =3D (offsets[0]+dropon.clientWidth) = + 'px';=0A= else=0A= Sortable._marker.style.top =3D (offsets[1]+dropon.clientHeight) = + 'px';=0A= =0A= Element.show(Sortable._marker);=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: new Array,=0A= position: parent.children.length,=0A= container: Sortable._findChildrenElement(children[i], = options.treeTag.toUpperCase())=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= /* Finds the first element of the given tag type within a parent = element.=0A= Used for finding the first LI[ST] within a L[IST]I[TEM].*/=0A= _findChildrenElement: function (element, containerTag) {=0A= if (element && element.hasChildNodes)=0A= for (var i =3D 0; i < element.childNodes.length; ++i)=0A= if (element.childNodes[i].tagName =3D=3D containerTag)=0A= return element.childNodes[i];=0A= =0A= return null;=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: new Array,=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) + "=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= =0A= if (child.parentNode =3D=3D element) return true;=0A= =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= if (type =3D=3D 'vertical' || type =3D=3D 'height')=0A= return element.offsetHeight;=0A= else=0A= return element.offsetWidth;=0A= } ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/javascripts/controls.js?1183395038 // Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, = http://mir.aculo.us)=0A= // (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)=0A= // (c) 2005 Jon Tirsen (http://www.tirsen.com)=0A= // Contributors:=0A= // Richard Livsey=0A= // Rahul Bhargava=0A= // Rob Wills=0A= // =0A= // See scriptaculous.js for full license.=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= var Autocompleter =3D {}=0A= Autocompleter.Base =3D function() {};=0A= Autocompleter.Base.prototype =3D {=0A= baseInitialize: function(element, update, options) {=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= =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, {setHeight: false, offsetTop: = element.offsetHeight});=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= =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, "keypress", = 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= (navigator.appVersion.indexOf('MSIE')>0) &&=0A= (navigator.userAgent.indexOf('Opera')<0) &&=0A= (Element.getStyle(this.update, 'position')=3D=3D'absolute')) {=0A= new Insertion.After(this.update, =0A= '');=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);=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= if(navigator.appVersion.indexOf('AppleWebKit')>0) = Event.stop(event);=0A= return;=0A= case Event.KEY_DOWN:=0A= this.markNext();=0A= this.render();=0A= if(navigator.appVersion.indexOf('AppleWebKit')>0) = Event.stop(event);=0A= return;=0A= }=0A= else =0A= if(event.keyCode=3D=3DEvent.KEY_TAB || = event.keyCode=3D=3DEvent.KEY_RETURN || =0A= (navigator.appVersion.indexOf('AppleWebKit') > 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= =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= },=0A= =0A= markNext: function() {=0A= if(this.index < this.entryCount-1) this.index++=0A= else this.index =3D 0;=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 document.getElementsByClassName(this.options.select, = selectedElement) || [];=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 lastTokenPos =3D this.findLastToken();=0A= if (lastTokenPos !=3D -1) {=0A= var newValue =3D this.element.value.substr(0, lastTokenPos + 1);=0A= var whitespace =3D this.element.value.substr(lastTokenPos + = 1).match(/^\s+/);=0A= if (whitespace)=0A= newValue +=3D whitespace[0];=0A= this.element.value =3D newValue + value;=0A= } else {=0A= this.element.value =3D value;=0A= }=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.firstChild);=0A= =0A= if(this.update.firstChild && this.update.firstChild.childNodes) {=0A= this.entryCount =3D =0A= this.update.firstChild.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= =0A= this.index =3D 0;=0A= this.render();=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= if(this.getToken().length>=3Dthis.options.minChars) {=0A= this.startIndicator();=0A= this.getUpdatedChoices();=0A= } else {=0A= this.active =3D false;=0A= this.hide();=0A= }=0A= },=0A= =0A= getToken: function() {=0A= var tokenPos =3D this.findLastToken();=0A= if (tokenPos !=3D -1)=0A= var ret =3D this.element.value.substr(tokenPos + = 1).replace(/^\s+/,'').replace(/\s+$/,'');=0A= else=0A= var ret =3D this.element.value;=0A= =0A= return /\n/.test(ret) ? '' : ret;=0A= },=0A= =0A= findLastToken: function() {=0A= var lastTokenPos =3D -1;=0A= =0A= for (var i=3D0; i lastTokenPos)=0A= lastTokenPos =3D thisTokenPos;=0A= }=0A= return lastTokenPos;=0A= }=0A= }=0A= =0A= Ajax.Autocompleter =3D Class.create();=0A= Object.extend(Object.extend(Ajax.Autocompleter.prototype, = Autocompleter.Base.prototype), {=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= 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= =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();=0A= Autocompleter.Local.prototype =3D Object.extend(new = 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("
  • " + elem.substr(0, entry.length) + = "" + =0A= elem.substr(entry.length) + "
  • ");=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("
  • " + elem.substr(0, foundPos) + = "" +=0A= elem.substr(foundPos, entry.length) + "" + = elem.substr(=0A= foundPos + entry.length) + "
  • ");=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 "
      " + ret.join('') + "
    ";=0A= }=0A= }, options || {});=0A= }=0A= });=0A= =0A= // AJAX in-place editor=0A= //=0A= // see documentation on = http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor=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= Ajax.InPlaceEditor.defaultHighlightColor =3D "#FFFF99";=0A= Ajax.InPlaceEditor.prototype =3D {=0A= initialize: function(element, url, options) {=0A= this.url =3D url;=0A= this.element =3D $(element);=0A= =0A= this.options =3D Object.extend({=0A= okButton: true,=0A= okText: "ok",=0A= cancelLink: true,=0A= cancelText: "cancel",=0A= savingText: "Saving...",=0A= clickToEditText: "Click to edit",=0A= okText: "ok",=0A= rows: 1,=0A= onComplete: function(transport, element) {=0A= new Effect.Highlight(element, {startcolor: = this.options.highlightcolor});=0A= },=0A= onFailure: function(transport) {=0A= alert("Error communicating with the server: " + = transport.responseText.stripTags());=0A= },=0A= callback: function(form) {=0A= return Form.serialize(form);=0A= },=0A= handleLineBreaks: true,=0A= loadingText: 'Loading...',=0A= savingClassName: 'inplaceeditor-saving',=0A= loadingClassName: 'inplaceeditor-loading',=0A= formClassName: 'inplaceeditor-form',=0A= highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,=0A= highlightendcolor: "#FFFFFF",=0A= externalControl: null,=0A= submitOnBlur: false,=0A= ajaxOptions: {},=0A= evalScripts: false=0A= }, options || {});=0A= =0A= if(!this.options.formId && this.element.id) {=0A= this.options.formId =3D this.element.id + "-inplaceeditor";=0A= if ($(this.options.formId)) {=0A= // there's already a form with that name, don't specify an id=0A= this.options.formId =3D null;=0A= }=0A= }=0A= =0A= if (this.options.externalControl) {=0A= this.options.externalControl =3D $(this.options.externalControl);=0A= }=0A= =0A= this.originalBackground =3D Element.getStyle(this.element, = 'background-color');=0A= if (!this.originalBackground) {=0A= this.originalBackground =3D "transparent";=0A= }=0A= =0A= this.element.title =3D this.options.clickToEditText;=0A= =0A= this.onclickListener =3D = this.enterEditMode.bindAsEventListener(this);=0A= this.mouseoverListener =3D this.enterHover.bindAsEventListener(this);=0A= this.mouseoutListener =3D this.leaveHover.bindAsEventListener(this);=0A= Event.observe(this.element, 'click', this.onclickListener);=0A= Event.observe(this.element, 'mouseover', this.mouseoverListener);=0A= Event.observe(this.element, 'mouseout', this.mouseoutListener);=0A= if (this.options.externalControl) {=0A= Event.observe(this.options.externalControl, 'click', = this.onclickListener);=0A= Event.observe(this.options.externalControl, 'mouseover', = this.mouseoverListener);=0A= Event.observe(this.options.externalControl, 'mouseout', = this.mouseoutListener);=0A= }=0A= },=0A= enterEditMode: function(evt) {=0A= if (this.saving) return;=0A= if (this.editing) return;=0A= this.editing =3D true;=0A= this.onEnterEditMode();=0A= if (this.options.externalControl) {=0A= Element.hide(this.options.externalControl);=0A= }=0A= Element.hide(this.element);=0A= this.createForm();=0A= this.element.parentNode.insertBefore(this.form, this.element);=0A= Field.scrollFreeActivate(this.editField);=0A= // stop the event to avoid a page refresh in Safari=0A= if (evt) {=0A= Event.stop(evt);=0A= }=0A= return false;=0A= },=0A= createForm: function() {=0A= this.form =3D document.createElement("form");=0A= this.form.id =3D this.options.formId;=0A= Element.addClassName(this.form, this.options.formClassName)=0A= this.form.onsubmit =3D this.onSubmit.bind(this);=0A= =0A= this.createEditField();=0A= =0A= if (this.options.textarea) {=0A= var br =3D document.createElement("br");=0A= this.form.appendChild(br);=0A= }=0A= =0A= if (this.options.okButton) {=0A= okButton =3D document.createElement("input");=0A= okButton.type =3D "submit";=0A= okButton.value =3D this.options.okText;=0A= okButton.className =3D 'editor_ok_button';=0A= this.form.appendChild(okButton);=0A= }=0A= =0A= if (this.options.cancelLink) {=0A= cancelLink =3D document.createElement("a");=0A= cancelLink.href =3D "#";=0A= = cancelLink.appendChild(document.createTextNode(this.options.cancelText));=0A= cancelLink.onclick =3D this.onclickCancel.bind(this);=0A= cancelLink.className =3D 'editor_cancel'; =0A= this.form.appendChild(cancelLink);=0A= }=0A= },=0A= hasHTMLLineBreaks: function(string) {=0A= if (!this.options.handleLineBreaks) return false;=0A= return string.match(/
    /i);=0A= },=0A= convertHTMLLineBreaks: function(string) {=0A= return string.replace(/
    /gi, "\n").replace(//gi, = "\n").replace(/<\/p>/gi, "\n").replace(/

    /gi, "");=0A= },=0A= createEditField: function() {=0A= var text;=0A= if(this.options.loadTextURL) {=0A= text =3D this.options.loadingText;=0A= } else {=0A= text =3D this.getText();=0A= }=0A= =0A= var obj =3D this;=0A= =0A= if (this.options.rows =3D=3D 1 && !this.hasHTMLLineBreaks(text)) {=0A= this.options.textarea =3D false;=0A= var textField =3D document.createElement("input");=0A= textField.obj =3D this;=0A= textField.type =3D "text";=0A= textField.name =3D "value";=0A= textField.value =3D text;=0A= textField.style.backgroundColor =3D this.options.highlightcolor;=0A= textField.className =3D 'editor_field';=0A= var size =3D this.options.size || this.options.cols || 0;=0A= if (size !=3D 0) textField.size =3D size;=0A= if (this.options.submitOnBlur)=0A= textField.onblur =3D this.onSubmit.bind(this);=0A= this.editField =3D textField;=0A= } else {=0A= this.options.textarea =3D true;=0A= var textArea =3D document.createElement("textarea");=0A= textArea.obj =3D this;=0A= textArea.name =3D "value";=0A= textArea.value =3D this.convertHTMLLineBreaks(text);=0A= textArea.rows =3D this.options.rows;=0A= textArea.cols =3D this.options.cols || 40;=0A= textArea.className =3D 'editor_field'; =0A= if (this.options.submitOnBlur)=0A= textArea.onblur =3D this.onSubmit.bind(this);=0A= this.editField =3D textArea;=0A= }=0A= =0A= if(this.options.loadTextURL) {=0A= this.loadExternalText();=0A= }=0A= this.form.appendChild(this.editField);=0A= },=0A= getText: function() {=0A= return this.element.innerHTML;=0A= },=0A= loadExternalText: function() {=0A= Element.addClassName(this.form, this.options.loadingClassName);=0A= this.editField.disabled =3D true;=0A= new Ajax.Request(=0A= this.options.loadTextURL,=0A= Object.extend({=0A= asynchronous: true,=0A= onComplete: this.onLoadedExternalText.bind(this)=0A= }, this.options.ajaxOptions)=0A= );=0A= },=0A= onLoadedExternalText: function(transport) {=0A= Element.removeClassName(this.form, this.options.loadingClassName);=0A= this.editField.disabled =3D false;=0A= this.editField.value =3D transport.responseText.stripTags();=0A= },=0A= onclickCancel: function() {=0A= this.onComplete();=0A= this.leaveEditMode();=0A= return false;=0A= },=0A= onFailure: function(transport) {=0A= this.options.onFailure(transport);=0A= if (this.oldInnerHTML) {=0A= this.element.innerHTML =3D this.oldInnerHTML;=0A= this.oldInnerHTML =3D null;=0A= }=0A= return false;=0A= },=0A= onSubmit: function() {=0A= // onLoading resets these so we need to save them away for the Ajax = call=0A= var form =3D this.form;=0A= var value =3D this.editField.value;=0A= =0A= // do this first, sometimes the ajax call returns before we get a = chance to switch on Saving...=0A= // which means this will actually switch on Saving... *after* we've = left edit mode causing Saving...=0A= // to be displayed indefinitely=0A= this.onLoading();=0A= =0A= if (this.options.evalScripts) {=0A= new Ajax.Request(=0A= this.url, Object.extend({=0A= parameters: this.options.callback(form, value),=0A= onComplete: this.onComplete.bind(this),=0A= onFailure: this.onFailure.bind(this),=0A= asynchronous:true, =0A= evalScripts:true=0A= }, this.options.ajaxOptions));=0A= } else {=0A= new Ajax.Updater(=0A= { success: this.element,=0A= // don't update on failure (this could be an option)=0A= failure: null }, =0A= this.url, Object.extend({=0A= parameters: this.options.callback(form, value),=0A= onComplete: this.onComplete.bind(this),=0A= onFailure: this.onFailure.bind(this)=0A= }, this.options.ajaxOptions));=0A= }=0A= // stop the event to avoid a page refresh in Safari=0A= if (arguments.length > 1) {=0A= Event.stop(arguments[0]);=0A= }=0A= return false;=0A= },=0A= onLoading: function() {=0A= this.saving =3D true;=0A= this.removeForm();=0A= this.leaveHover();=0A= this.showSaving();=0A= },=0A= showSaving: function() {=0A= this.oldInnerHTML =3D this.element.innerHTML;=0A= this.element.innerHTML =3D this.options.savingText;=0A= Element.addClassName(this.element, this.options.savingClassName);=0A= this.element.style.backgroundColor =3D this.originalBackground;=0A= Element.show(this.element);=0A= },=0A= removeForm: function() {=0A= if(this.form) {=0A= if (this.form.parentNode) Element.remove(this.form);=0A= this.form =3D null;=0A= }=0A= },=0A= enterHover: function() {=0A= if (this.saving) return;=0A= this.element.style.backgroundColor =3D this.options.highlightcolor;=0A= if (this.effect) {=0A= this.effect.cancel();=0A= }=0A= Element.addClassName(this.element, this.options.hoverClassName)=0A= },=0A= leaveHover: function() {=0A= if (this.options.backgroundColor) {=0A= this.element.style.backgroundColor =3D this.oldBackground;=0A= }=0A= Element.removeClassName(this.element, this.options.hoverClassName)=0A= if (this.saving) return;=0A= this.effect =3D new Effect.Highlight(this.element, {=0A= startcolor: this.options.highlightcolor,=0A= endcolor: this.options.highlightendcolor,=0A= restorecolor: this.originalBackground=0A= });=0A= },=0A= leaveEditMode: function() {=0A= Element.removeClassName(this.element, this.options.savingClassName);=0A= this.removeForm();=0A= this.leaveHover();=0A= this.element.style.backgroundColor =3D this.originalBackground;=0A= Element.show(this.element);=0A= if (this.options.externalControl) {=0A= Element.show(this.options.externalControl);=0A= }=0A= this.editing =3D false;=0A= this.saving =3D false;=0A= this.oldInnerHTML =3D null;=0A= this.onLeaveEditMode();=0A= },=0A= onComplete: function(transport) {=0A= this.leaveEditMode();=0A= this.options.onComplete.bind(this)(transport, this.element);=0A= },=0A= onEnterEditMode: function() {},=0A= onLeaveEditMode: function() {},=0A= dispose: function() {=0A= if (this.oldInnerHTML) {=0A= this.element.innerHTML =3D this.oldInnerHTML;=0A= }=0A= this.leaveEditMode();=0A= Event.stopObserving(this.element, 'click', this.onclickListener);=0A= Event.stopObserving(this.element, 'mouseover', = this.mouseoverListener);=0A= Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);=0A= if (this.options.externalControl) {=0A= Event.stopObserving(this.options.externalControl, 'click', = this.onclickListener);=0A= Event.stopObserving(this.options.externalControl, 'mouseover', = this.mouseoverListener);=0A= Event.stopObserving(this.options.externalControl, 'mouseout', = this.mouseoutListener);=0A= }=0A= }=0A= };=0A= =0A= Ajax.InPlaceCollectionEditor =3D Class.create();=0A= Object.extend(Ajax.InPlaceCollectionEditor.prototype, = Ajax.InPlaceEditor.prototype);=0A= Object.extend(Ajax.InPlaceCollectionEditor.prototype, {=0A= createEditField: function() {=0A= if (!this.cached_selectTag) {=0A= var selectTag =3D document.createElement("select");=0A= var collection =3D this.options.collection || [];=0A= var optionTag;=0A= collection.each(function(e,i) {=0A= optionTag =3D document.createElement("option");=0A= optionTag.value =3D (e instanceof Array) ? e[0] : e;=0A= if(this.options.value=3D=3DoptionTag.value) optionTag.selected = =3D true;=0A= optionTag.appendChild(document.createTextNode((e instanceof = Array) ? e[1] : e));=0A= selectTag.appendChild(optionTag);=0A= }.bind(this));=0A= this.cached_selectTag =3D selectTag;=0A= }=0A= =0A= this.editField =3D this.cached_selectTag;=0A= if(this.options.loadTextURL) this.loadExternalText();=0A= this.form.appendChild(this.editField);=0A= this.options.callback =3D function(form, value) {=0A= return "value=3D" + encodeURIComponent(value);=0A= }=0A= }=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= Form.Element.DelayedObserver.prototype =3D {=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= };=0A= ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://thecreativecoast.org/javascripts/application.js?1183395038 // Place your application-specific JavaScript functions and classes here=0A= // This file is automatically included by javascript_include_tag = :defaults=0A= function MM_preloadImages() { //v3.0=0A= var d=3Ddocument; if(d.images){ if(!d.MM_p) d.MM_p=3Dnew Array();=0A= var i,j=3Dd.MM_p.length,a=3DMM_preloadImages.arguments; for(i=3D0; = i0&&parent.frames.length) {=0A= d=3Dparent.frames[n.substring(p+1)].document; n=3Dn.substring(0,p);}=0A= if(!(x=3Dd[n])&&d.all) x=3Dd.all[n]; for = (i=3D0;!x&&iInitializing ticker...') this.getXMLfile() } // ------------------------------------------------------------------- // getXMLfile()- Use Ajax to fetch xml file (txt) // ------------------------------------------------------------------- ajax_ticker.prototype.getXMLfile=3Dfunction(){ if (this.ajaxobj){ var instanceOfTicker=3Dthis var url=3Dthis.xmlfile+"?bustcache=3D"+new Date().getTime() this.ajaxobj.onreadystatechange=3Dfunction(){instanceOfTicker.initialize(= )} this.ajaxobj.open('GET', url, true) this.ajaxobj.send(null) } } // ------------------------------------------------------------------- // initialize()- Initialize ticker method. // -Gets contents of xml file and parse it using JavaScript DOM methods=20 // ------------------------------------------------------------------- ajax_ticker.prototype.initialize=3Dfunction(){=20 if (this.ajaxobj.readyState =3D=3D 4){ //if request of file completed if (this.ajaxobj.status=3D=3D200 || = window.location.href.indexOf("http")=3D=3D-1){ //if request was = successful this.contentdiv=3Ddocument.getElementById(this.tickerid).firstChild = //div of inner content that holds the messages var xmldata=3Dthis.ajaxobj.responseText this.contentdiv.style.display=3D"none" this.contentdiv.innerHTML=3Dxmldata if (this.contentdiv.getElementsByTagName("div").length=3D=3D0){ //if no = messages were found this.contentdiv.innerHTML=3D"Error fetching remote ticker file!" return } var instanceOfTicker=3Dthis document.getElementById(this.tickerid).onmouseover=3Dfunction(){instanceO= fTicker.mouseoverBol=3D1} document.getElementById(this.tickerid).onmouseout=3Dfunction(){instanceOf= Ticker.mouseoverBol=3D0} if (window.attachEvent) //Clean up loose references in IE window.attachEvent("onunload", = function(){instanceOfTicker.contentdiv=3DinstanceOfTicker.ajaxobj=3Dnull}= ) //Cycle through XML object and store each message inside array for (var i=3D0; i=3D1) clearInterval(this[timerid]) } ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://crazyegg.com/pages/scripts/0002/9025.js RegExp.escape=3Dfunction(_1){=0A= if(!arguments.callee.sRE){=0A= var _2=3D["/",".","*","+","?","|","(",")","[","]","{","}","\\"];=0A= arguments.callee.sRE=3Dnew RegExp("(\\"+_2.join("|\\")+")","g");=0A= }=0A= return _1.replace(arguments.callee.sRE,"\\$1");=0A= };=0A= var _CE=3D{$:function(){=0A= var _3=3D[],_4;=0A= for(var i=3D0;ipos.y+_33.height){=0A= _35=3Dpos.y+_33.height;=0A= }=0A= if(_34pos.x+_33.width){=0A= _34=3Dpos.x+_33.width;=0A= }=0A= _34-=3Dpos.x;=0A= _35-=3Dpos.y;=0A= _34/=3D_33.width;=0A= _35/=3D_33.height;=0A= return {x:_34,y:_35};=0A= }};=0A= _CE.db=3Ddocument["body"]||document["documentElement"];=0A= _CE.isi8=3D(/Konqueror|Safari|KHTML/.test(navigator.userAgent))?true:fals= e;=0A= _CE.isE4=3D(/MSIE/.test(navigator.userAgent))?true:false;=0A= _CE.isz5=3D(/Gecko/.test(navigator.userAgent)&&!_CE.isi8)?true:false;=0A= _CE.is26=3D(/Firefox\/2/.test(navigator.userAgent)&&!this.isSafari)?true:= false;=0A= _CE.isa7=3D(/Opera/.test(navigator.userAgent))?true:false;=0A= _CE.flash=3D0;=0A= if(navigator.plugins&&navigator.plugins.length){=0A= var x=3Dnavigator.plugins["Shockwave Flash"];=0A= if(x&&x.description){=0A= var y=3Dx.description;=0A= _CE.flash=3Dy.charAt(y.indexOf(".")-1);=0A= }=0A= }else{=0A= for(var i=3D10;i>0;i--){=0A= _CE.flash=3D0;=0A= try{=0A= var flash=3Dnew ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);=0A= _CE.flash=3Di;=0A= break;=0A= }=0A= catch(e){=0A= }=0A= }=0A= }=0A= _CE.Cls5=3D{cre6:function(){=0A= return function(){=0A= this.initialize.apply(this,arguments);=0A= };=0A= }};=0A= Function.prototype.ce_bind=3Dfunction(){=0A= var _36=3Dthis;=0A= var _37=3D[];=0A= for(var i=3D0;ir){=0A= r=3Dc;=0A= }=0A= }=0A= for(var i=3D1;i<_4e.length;i+=3D2){=0A= var c=3DparseInt(_4e[i]);=0A= if(t=3D=3Dundefined||cb){=0A= b=3Dc;=0A= }=0A= }=0A= _4f=3D{left:l,top:t,right:r,bottom:b};=0A= }=0A= _4d.rectDefined=3Dtrue;=0A= _4d.rLeft=3D_4f.left;=0A= _4d.rRight=3D_4f.right;=0A= _4d.rTop=3D_4f.top;=0A= _4d.rBottom=3D_4f.bottom;=0A= return _4f;=0A= };=0A= _CE.sul16=3Dfunction(_56,_57,_58){=0A= var _59=3D"";=0A= var _5a=3D(_57=3D=3D"after")?"nextSibling":"previousSibling";=0A= var _5b=3D_56[_5a];=0A= var _5c=3Dnew RegExp("(br|center)","im");=0A= var _5d=3Dnew RegExp("(body|html|script)","im");=0A= var _5e=3Dfalse;=0A= var _5f=3Dfalse;=0A= while(_5b){=0A= if(_5b.nodeType=3D=3D3||_5b.nodeType=3D=3D8){=0A= if(_5b.nodeType!=3D8){=0A= _5f=3Dtrue;=0A= if(_57=3D=3D"after"){=0A= _59+=3D_5b.data;=0A= }else{=0A= _59=3D_5b.data+_59;=0A= }=0A= }=0A= }else{=0A= if(_5b.nodeName.match(_5c)){=0A= if(!_5b.nodeName.match(_5d)){=0A= if(_57=3D=3D"after"){=0A= _59+=3D_5b.outerHTML;=0A= }else{=0A= _59=3D_5b.outerHTML+_59;=0A= }=0A= }=0A= }else{=0A= _5e=3Dtrue;=0A= break;=0A= }=0A= }=0A= if(!_5e){=0A= _5b=3D_5b[_5a];=0A= }=0A= }=0A= if(_5b&&!_5b.nodeName.match(_5d)){=0A= if(_57=3D=3D"after"){=0A= _59+=3D_5b.outerHTML;=0A= }else{=0A= _59=3D_5b.outerHTML+_59;=0A= }=0A= }=0A= if(((!_5e&&!_5f)||!_59.match(/[^\s]/m))&&_56.parentNode&&_56.parentNode.o= uterHTML&&!_56.parentNode.nodeName.toLowerCase().match(_5d)){=0A= if(_57=3D=3D"before"){=0A= _59=3D_56.parentNode.outerHTML.replace(/[\n\r]/gm,"").replace(/(^.*?>).*/= m,"$1")+_59;=0A= }else{=0A= _59+=3D"";=0A= }=0A= if(!_58||_56.parentNode.nodeName.toLowerCase().match(_5c)){=0A= if(_57=3D=3D"before"){=0A= _59=3Dthis.sul16(_56.parentNode,_57,true)+_59;=0A= }else{=0A= _59=3D_59+this.sul16(_56.parentNode,_57);=0A= }=0A= }=0A= }else{=0A= if(_5b){=0A= if(_56.nodeName.toLowerCase().match(_5c)||(!_58&&_5b.nodeName.toLowerCase= ().match(_5c))){=0A= if(_57=3D=3D"before"){=0A= _59=3Dthis.sul16(_5b,_57,true)+_59;=0A= }else{=0A= _59=3D_59+this.sul16(_5b,_57,true);=0A= }=0A= }=0A= }=0A= }=0A= return _59;=0A= };=0A= _CE.html_after=3Dfunction(_60){=0A= return this.sul16(_60,"after");=0A= };=0A= _CE.html_before=3Dfunction(_61){=0A= return this.sul16(_61,"before");=0A= };=0A= _CE.gee30=3Dfunction(_62,_63){=0A= if(_63=3D=3D"OBJECT"||_63=3D=3D"EMBED"){=0A= if(_CE.isz5){=0A= return _62.getElementsByTagName("embed");=0A= }else{=0A= var _64=3Dnew Array();=0A= var = _65=3D_CE.toy7(_62.getElementsByTagName("object")).concat(_CE.toy7(_62.ge= tElementsByTagName("embed")));=0A= for(var i=3D0;i<_65.length;i++){=0A= if(_65[i].offsetParent){=0A= _64.push(_65[i]);=0A= }=0A= }=0A= return _64;=0A= }=0A= }else{=0A= return _62.getElementsByTagName(_63);=0A= }=0A= };=0A= _CEEL=3D{"focus":".ons7.","mouseover":".onmouseover.","unload":".ond8.","= mousemove":".one11.","contextmenu":".onu13.","click":".onk7.","mousedown"= :".onn11.","mouseup":".onmouseup."};=0A= function ce_set_mouse_pos(_67){=0A= if(_CE.mtkr){=0A= if(_CE.mtkr.current_iframe){=0A= var _68=3D_67.split(",");=0A= _CE.mtkr.iframe_mouse_pos=3D{x:parseInt(_68[0]),y:parseInt(_68[1])};=0A= }=0A= }=0A= }=0A= _CE.Trr7=3D_CE.Cls5.cre6();=0A= _CE.Trr7.prototype=3D{initialize:function(_69){=0A= this.target=3D_69;=0A= this.res15();=0A= this.ifr21();=0A= var _6a=3Dnew Date();=0A= this.start_time=3D_6a.getTime();=0A= },res15:function(){=0A= this.ret14("mousedown");=0A= this.ret14("contextmenu");=0A= this.ret14("mousemove");=0A= this.ret14("unload");=0A= var _6b=3Dnew Array();=0A= _CE.ads12(_6b,this.target.getElementsByTagName("input"));=0A= _CE.ads12(_6b,this.target.getElementsByTagName("textarea"));=0A= _CE.ads12(_6b,this.target.getElementsByTagName("select"));=0A= for(var i=3D0;i<_6b.length;i++){=0A= _CE.ret13("focus",this.crk21(_6b[i]).ce_bind(this),_6b[i]);=0A= }=0A= },crk21:function(_6d){=0A= function on_focus_callbk(){=0A= this.ons7(_6d);=0A= }=0A= return on_focus_callbk;=0A= },blr10:function(){=0A= this.style.display=3D"none";=0A= if(!this.ce_active){=0A= if(this.tracker.flash_container){=0A= }=0A= }=0A= this.ce_active=3Dtrue;=0A= this.tracker.pos18(this);=0A= },pos18:function(_6e){=0A= var _6f=3Dthis.target.body.scrollHeight;=0A= var _70=3Dthis.target.body.scrollWidth;=0A= this.current_iframe=3D_6e.iframe;=0A= var _71=3Dthis.exit_divs;=0A= var pos=3D_CE.pos(_6e.iframe);=0A= var _73=3D_CE.size(_6e.iframe);=0A= for(var j=3D0;j<4;j++){=0A= _71[j].style.display=3D"block";=0A= }=0A= _71[0].style.top=3D"0px";=0A= _71[0].style.left=3D"0px";=0A= _71[0].style.width=3Dpos.x+"px";=0A= _71[0].style.height=3D_6f+"px";=0A= _71[1].style.top=3D"0px";=0A= _71[1].style.left=3D(pos.x+_73.width)+"px";=0A= _71[1].style.width=3DMath.max(_70-(pos.x+_73.width),0)+"px";=0A= _71[1].style.height=3D_6f+"px";=0A= _71[2].style.top=3D"0px";=0A= _71[2].style.left=3Dpos.x+"px";=0A= _71[2].style.width=3D_73.width+"px";=0A= _71[2].style.height=3Dpos.y+"px";=0A= _71[3].style.left=3Dpos.x+"px";=0A= _71[3].style.width=3D_73.width+"px";=0A= _71[3].style.top=3D(pos.y+_73.height)+"px";=0A= _71[3].style.height=3DMath.max(_6f-(pos.y+_73.height),0)+"px";=0A= if(this.flash_container){=0A= if(_CE.is26){=0A= if(!this.current_iframe.oldPosition){=0A= this.current_iframe.oldPosition=3Dthis.current_iframe.style.position;=0A= }=0A= this.current_iframe.style.position=3D"relative";=0A= this.flash_container.style.display=3D"block";=0A= this.flash_container.style.top=3Dpos.y+"px";=0A= this.flash_container.style.left=3Dpos.x+"px";=0A= this.flash_element.width=3D_73.width;=0A= this.flash_element.height=3D_73.height;=0A= }=0A= }=0A= },exr14:function(){=0A= this.tracker.current_iframe.blkr.ce_active=3Dfalse;=0A= this.tracker.current_iframe.blkr.style.display=3D"block";=0A= for(var i=3D0;i=3D8){=0A= this.inh17();=0A= }=0A= setInterval(this.chs13.ce_bind(this),2000);=0A= this.chs13();=0A= }=0A= },upe32:function(){=0A= var _7f=3Dthis.flash_element.outerHTML;=0A= var _80=3Dthis.flash_element.cloneNode(true);=0A= this.flash_element.parentNode.removeChild(this.flash_element);=0A= this.flash_container.appendChild(this.flash_element);=0A= this.flash_element.outerHTML=3D_7f;=0A= this.flash_element=3Dthis.target.getElementById("ce_trkr_mov");=0A= },inh17:function(){=0A= if(_CE.is26){=0A= this.flash_container=3Dthis.target.createElement("DIV");=0A= this.flash_container.style.position=3D"absolute";=0A= this.flash_container.style.top=3D"-200px";=0A= this.flash_container.style.left=3D"-200px";=0A= var _81=3D_CE.u+"/images/ift.swf";=0A= if(_CE.is26){=0A= this.flash_container.innerHTML=3D"";=0A= }=0A= this.target.body.insertBefore(this.flash_container,this.target.body.child= Nodes[0]);=0A= this.flash_element=3Dthis.target.getElementById("ce_trkr_mov");=0A= }=0A= },ift20:function(){=0A= if(_CE.isi8){=0A= if(this.lastMousePosition){=0A= var _82=3Dthis.ges11();=0A= var pos;=0A= var _84;=0A= var _85;=0A= for(var i=3D0;i<_82.length;i++){=0A= _85=3D_82[i];=0A= pos=3D_CE.pos(_85);=0A= if(this.lastMousePosition.x>=3Dpos.x&&this.lastMousePosition.y>=3Dpos.y){=0A= _84=3D_CE.size(_85);=0A= if(this.lastMousePosition.x<=3Dpos.x+_84.width&&this.lastMousePosition.y<= =3Dpos.y+_84.height){=0A= break;=0A= }=0A= }=0A= }=0A= if(i<_82.length&&_85){=0A= var = rel=3D_CE.ren17(pos,_84,this.lastMousePosition.x,this.lastMousePosition.y= );=0A= this.rek14(_85,rel,true,"mousedown");=0A= }=0A= }=0A= }else{=0A= if(this.current_iframe){=0A= var _88;=0A= var rel;=0A= var pos=3D_CE.pos(this.current_iframe);=0A= var _84=3D_CE.size(this.current_iframe);=0A= if(this.iframe_mouse_pos){=0A= _88=3Dthis.iframe_mouse_pos;=0A= if(_CE.is26){=0A= rel=3D{x:_88.x/_84.width,y:_88.y/_84.height};=0A= }else{=0A= _88=3Dthis.iframe_mouse_pos;=0A= var _89=3D0;=0A= var _8a=3D0;=0A= if(this.target.documentElement&&this.target.documentElement.scrollLeft){=0A= _89=3Dthis.target.documentElement.scrollLeft;=0A= }else{=0A= if(this.target.body.scrollLeft){=0A= _89=3Dthis.target.body.scrollLeft;=0A= }=0A= }=0A= if(this.target.documentElement&&this.target.documentElement.scrollTop){=0A= _8a=3Dthis.target.documentElement.scrollTop;=0A= }else{=0A= if(this.target.body.scrollTop){=0A= _8a=3Dthis.target.body.scrollTop;=0A= }=0A= }=0A= _88.y+=3D_8a;=0A= _88.x+=3D_89;=0A= rel=3D_CE.ren17(pos,_84,_88.x,_88.y);=0A= }=0A= }else{=0A= rel=3D{x:0.5,y:0.5};=0A= }=0A= this.rek14(this.current_iframe,rel,true,"mousedown");=0A= }=0A= }=0A= },ret14:function(_8b,_8c){=0A= var = _8d=3Dthis[_CEEL[_8b].replace(/\./g,"")].ce_bindAsEventListener(this);=0A= _CE.ret13(_8b,_8d,_8c);=0A= },ond8:function(_8e){=0A= this.ift20();=0A= },one11:function(_8f){=0A= this.lastMousePosition=3D{x:_CE.poX8(_8f),y:_CE.poY8(_8f)};=0A= },onu13:function(_90){=0A= var _91;=0A= if(_91=3D_CE.evt13(_90)){=0A= this.rek14(_91,_CE.cln14(_91,_90),false,"contextmenu");=0A= }=0A= },onk7:function(_92){=0A= var _93=3Dnull;=0A= if(_93=3D_CE.evt13(_92)){=0A= if(_93!=3Dthis.last_mouse_down_element){=0A= this.onn11(_92,true);=0A= }=0A= }=0A= },ons7:function(_94){=0A= if(_94&&_94!=3Dthis.last_mouse_down_element&&_94!=3Dthis.last_focus_eleme= nt){=0A= this.last_mouse_down_element=3Dnull;=0A= this.last_focus_element=3D_94;=0A= setTimeout(this.onn28.ce_bind(this),500);=0A= }=0A= },onn28:function(){=0A= if(this.last_focus_element){=0A= this.rek14(this.last_focus_element,{x:0.5,y:0.5},false,"focus");=0A= }=0A= },onn11:function(_95,_96){=0A= var _97=3Dnull;=0A= if(_97=3D_CE.evt13(_95)){=0A= this.last_mouse_down_element=3D_97;=0A= this.last_focus_element=3Dnull;=0A= this.rek14(_97,_CE.cln14(_97,_95),(_96||_97.nodeName=3D=3D"A"||_97.onclic= k),"mousedown");=0A= setTimeout(function(){=0A= this.last_mouse_down_element=3Dnull;=0A= }.ce_bind(this),650);=0A= }=0A= },rek14:function(_98,_99,_9a,_9b){=0A= if(this.ise12(_98)){=0A= var _9c=3Dthis.ise7(_98);=0A= if(!_CEU.tdc&&!_9c){=0A= return false;=0A= }=0A= var _9d=3D_CE.html_before(_98);=0A= var _9e=3D_CE.html_after(_98);=0A= if(_9d.length>500){=0A= _9d=3D_9d.substring(0,500);=0A= }=0A= if(_9e.length>500){=0A= _9e=3D_9e.substring(0,500);=0A= }=0A= var = _9f=3Dthis.see13({html:_98.outerHTML,html_before:_9d,html_after:_9e,time_= to_click:this.tik13(),click_x:_99.x,click_y:_99.y,event_type:_9b,live:(_9= c?"true":"false")});=0A= var _a0=3D350;=0A= if(_9f.parts.length>1){=0A= _a0+=3D150*(_9f.parts.length-1);=0A= }=0A= if(_9f.parts.length>2){=0A= _a0+=3D100*(_9f.parts.length-2);=0A= }=0A= if(_9f.parts.length>3){=0A= _a0+=3D100*(_9f.parts.length-3);=0A= }=0A= if(_9f.parts.length>4){=0A= _a0+=3D50*(_9f.parts.length-4);=0A= }=0A= if(_9f.parts.length>5){=0A= _a0+=3D50*(_9f.parts.length-5);=0A= }=0A= if(_9c&&_9b!=3D"contextmenu"&&!this.sky10(_98)){=0A= _CE.delay(_a0);=0A= }=0A= }=0A= },sky10:function(_a1){=0A= if(_a1){=0A= if(_a1.nodeName=3D=3D"SELECT"){=0A= return true;=0A= }=0A= }=0A= },tik13:function(){=0A= var _a2=3Dnew Date();=0A= return _a2.getTime()-this.start_time;=0A= },ise12:function(_a3){=0A= if(!_a3){=0A= return false;=0A= }=0A= if(!_a3.outerHTML){=0A= return false;=0A= }=0A= if(_a3.outerHTML.length>3000){=0A= return false;=0A= }=0A= var _a4=3D["BODY","OPTION","HTML"];=0A= for(var i=3D0;i<_a4.length;i++){=0A= if(_a3.tagName=3D=3D_a4[i]){=0A= return false;=0A= }=0A= }=0A= return true;=0A= },ise7:function(_a6){=0A= var = _a7=3D["A","IMG","INPUT","SELECT","TEXTAREA","OBJECT","EMBED","IFRAME","B= UTTON","AREA"];=0A= var _a8=3D_a6.nodeName;=0A= for(var i=3D0;i<_a7.length;i++){=0A= if(_a8=3D=3D_a7[i]){=0A= return true;=0A= }=0A= }=0A= if(_a6.parentNode&&_a6.parentNode.nodeName!=3D"BODY"){=0A= if(this.ise7(_a6.parentNode)){=0A= return true;=0A= }=0A= }=0A= return (_a6.onclick||_a6.onmouseup||_a6.onmousedown);=0A= },see13:function(_aa){=0A= return new _CE.Ret7(_CEU.tu,_aa);=0A= }};=0A= _CE.Ret7=3D_CE.Cls5.cre6();=0A= _CE.Ret7.MAX_LENGTH=3D1024;=0A= _CE.Ret7.count=3D0;=0A= _CE.Ret7.prototype=3D{initialize:function(url,_ac){=0A= this.head=3Ddocument.getElementsByTagName("HEAD")[0];=0A= this.url=3Durl;=0A= this.parameters=3D_ac;=0A= this.set12();=0A= },apd6:function(src){=0A= var _ae=3Dsrc;=0A= for(var i=3D1;i_CE.Ret7.MAX_LENGTH){=0A= this.parts.push(_b1);=0A= _b1=3D"";=0A= }=0A= _b1+=3D"&"+key+"=3D";=0A= var _b3=3D""+this.parameters[key];=0A= var _b4=3D0;=0A= while(_b4<_b3.length-1){=0A= var _b5=3D0;=0A= if(_b1.length<_CE.Ret7.MAX_LENGTH){=0A= _b5=3D_CE.Ret7.MAX_LENGTH-_b1.length;=0A= if(_b4+_b5>_b3.length){=0A= _b5=3D_b3.length-_b4;=0A= }=0A= _b1+=3DencodeURIComponent(_b3.substr(_b4,_b5));=0A= }=0A= _b4+=3D_b5;=0A= if(_b4<_b3.length-1){=0A= this.parts.push(_b1);=0A= _b1=3D"&"+key+"=3D";=0A= }=0A= }=0A= }=0A= this.parts.push(_b1);=0A= _CE.Ret7.count+=3D1;=0A= var rid=3D_CEU.vi+"-"+_CE.Ret7.count;=0A= var _b7=3Dnew Date();=0A= if(this.parts.length=3D=3D1){=0A= this.crt16(this.apd6(this.url,this.parts[0],"_rt=3Ds","_rid=3D"+rid,"_ts=3D= "+_b7.getTime()));=0A= }else{=0A= if(this.parts.length<10){=0A= for(var i=3D0;i");=0A= }=0A= =0A= =0A= =0A= =0A= _CE.gsu =3D function(d)=0A= {=0A= var s =3D document.getElementsByTagName("script");var p =3D = ["crazyegg.com","cetrk.com"];=0A= for(var i=3D0;i=3D0) {=0A= if (!(_uIN(a=3D_uGC(s,"__utma=3D","&")))) a=3D"-";=0A= if (!(_uIN(b=3D_uGC(s,"__utmb=3D","&")))) b=3D"-";=0A= if (!(_uIN(c=3D_uGC(s,"__utmc=3D","&")))) c=3D"-";=0A= v=3D_uGC(s,"__utmv=3D","&");=0A= z=3D_uGC(s,"__utmz=3D","&");=0A= k=3D_uGC(s,"__utmk=3D","&");=0A= xx=3D_uGC(s,"__utmx=3D","&");=0A= if ((k*1) !=3D ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) = {_ubl=3D1;a=3D"-";b=3D"-";c=3D"-";xx=3D"-";z=3D"-";v=3D"-";}=0A= if (a!=3D"-" && b!=3D"-" && c!=3D"-") f=3D1;=0A= else if(a!=3D"-") f=3D2;=0A= }=0A= }=0A= if(f=3D=3D1) {=0A= _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A= _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A= _ubd.cookie=3D"__utmc=3D"+c+"; path=3D"+_utcp+";"+_udo;=0A= } else if (f=3D=3D2) {=0A= a=3D_uFixA(s,"&",_ust);=0A= _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A= _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A= _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A= _ufns=3D1;=0A= } else if (a>=3D0 && b>=3D0 && c>=3D0) {=0A= _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A= } else {=0A= if (a>=3D0) a=3D_uFixA(_ubd.cookie,";",_ust);=0A= else a=3D_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";=0A= _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A= _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A= _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A= _ufns=3D1;=0A= }=0A= if (_ulink && xx && xx!=3D"" && xx!=3D"-") {=0A= xx=3D_uUES(xx);=0A= if (xx.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmx=3D"+xx+"; = path=3D"+_utcp+";"+nx+_udo;=0A= }=0A= if (_ulink && v && v!=3D"" && v!=3D"-") {=0A= v=3D_uUES(v);=0A= if (v.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmv=3D"+v+"; = path=3D"+_utcp+";"+nx+_udo;=0A= }=0A= _uInfo(page);=0A= _ufns=3D0;=0A= _ufno=3D0;=0A= if (!page || page=3D=3D"") _uff=3D1;=0A= }=0A= function _uInfo(page) {=0A= var p,s=3D"",dm=3D"",pg=3D_udl.pathname+_udl.search;=0A= if (page && page!=3D"") pg=3D_uES(page,1);=0A= _ur=3D_ubd.referrer;=0A= if (!_ur || _ur=3D=3D"") { _ur=3D"-"; }=0A= else {=0A= dm=3D_ubd.domain;=0A= if(_utcp && _utcp!=3D"/") dm+=3D_utcp;=0A= p=3D_ur.indexOf(dm);=0A= if ((p>=3D0) && (p<=3D8)) { _ur=3D"0"; }=0A= if (_ur.indexOf("[")=3D=3D0 && = _ur.lastIndexOf("]")=3D=3D(_ur.length-1)) { _ur=3D"-"; }=0A= }=0A= s+=3D"&utmn=3D"+_uu;=0A= if (_ufsc) s+=3D_uBInfo();=0A= if (_uctm) s+=3D_uCInfo();=0A= if (_utitle && _ubd.title && _ubd.title!=3D"") = s+=3D"&utmdt=3D"+_uES(_ubd.title);=0A= if (_udl.hostname && _udl.hostname!=3D"") = s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A= s+=3D"&utmr=3D"+_ur;=0A= s+=3D"&utmp=3D"+pg;=0A= if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A= var i=3Dnew Image(1,1);=0A= i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A= i.onload=3Dfunction() {_uVoid();}=0A= }=0A= if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A= var i2=3Dnew Image(1,1);=0A= = i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+= _uGCS();=0A= i2.onload=3Dfunction() { _uVoid(); }=0A= }=0A= return;=0A= }=0A= function _uVoid() { return; }=0A= function _uCInfo() {=0A= if (!_ucto || _ucto=3D=3D"") { _ucto=3D"15768000"; }=0A= if (!_uVG()) return;=0A= var = c=3D"",t=3D"-",t2=3D"-",t3=3D"-",o=3D0,cs=3D0,cn=3D0,i=3D0,z=3D"-",s=3D""= ;=0A= if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A= s+=3D_udl.search;=0A= var x=3Dnew Date(_udt.getTime()+(_ucto*1000));=0A= var dc=3D_ubd.cookie;=0A= x=3D" expires=3D"+x.toGMTString()+";";=0A= if (_ulink && !_ubl) {=0A= z=3D_uUES(_uGC(s,"__utmz=3D","&"));=0A= if (z!=3D"-" && z.indexOf(";")=3D=3D-1) { = _ubd.cookie=3D"__utmz=3D"+z+"; path=3D"+_utcp+";"+x+_udo; return ""; }=0A= }=0A= z=3Ddc.indexOf("__utmz=3D"+_udh);=0A= if (z>-1) { z=3D_uGC(dc,"__utmz=3D"+_udh,";"); }=0A= else { z=3D"-"; }=0A= t=3D_uGC(s,_ucid+"=3D","&");=0A= t2=3D_uGC(s,_ucsr+"=3D","&");=0A= t3=3D_uGC(s,"gclid=3D","&");=0A= if ((t!=3D"-" && t!=3D"") || (t2!=3D"-" && t2!=3D"") || (t3!=3D"-" && = t3!=3D"")) {=0A= if (t!=3D"-" && t!=3D"") c+=3D"utmcid=3D"+_uEC(t);=0A= if (t2!=3D"-" && t2!=3D"") { if (c !=3D "") c+=3D"|"; = c+=3D"utmcsr=3D"+_uEC(t2); }=0A= if (t3!=3D"-" && t3!=3D"") { if (c !=3D "") c+=3D"|"; = c+=3D"utmgclid=3D"+_uEC(t3); }=0A= t=3D_uGC(s,_uccn+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmccn=3D"+_uEC(t);=0A= else c+=3D"|utmccn=3D(not+set)";=0A= t=3D_uGC(s,_ucmd+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmcmd=3D"+_uEC(t);=0A= else c+=3D"|utmcmd=3D(not+set)";=0A= t=3D_uGC(s,_uctr+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmctr=3D"+_uEC(t);=0A= else { t=3D_uOrg(1); if (t!=3D"-" && t!=3D"") = c+=3D"|utmctr=3D"+_uEC(t); }=0A= t=3D_uGC(s,_ucct+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmcct=3D"+_uEC(t);=0A= t=3D_uGC(s,_ucno+"=3D","&");=0A= if (t=3D=3D"1") o=3D1;=0A= if (z!=3D"-" && o=3D=3D1) return "";=0A= }=0A= if (c=3D=3D"-" || c=3D=3D"") { c=3D_uOrg(); if (z!=3D"-" && = _ufno=3D=3D1) return ""; }=0A= if (c=3D=3D"-" || c=3D=3D"") { if (_ufns=3D=3D1) c=3D_uRef(); if = (z!=3D"-" && _ufno=3D=3D1) return ""; }=0A= if (c=3D=3D"-" || c=3D=3D"") {=0A= if (z=3D=3D"-" && _ufns=3D=3D1) { = c=3D"utmccn=3D(direct)|utmcsr=3D(direct)|utmcmd=3D(none)"; }=0A= if (c=3D=3D"-" || c=3D=3D"") return "";=0A= }=0A= if (z!=3D"-") {=0A= i=3Dz.indexOf(".");=0A= if (i>-1) i=3Dz.indexOf(".",i+1);=0A= if (i>-1) i=3Dz.indexOf(".",i+1);=0A= if (i>-1) i=3Dz.indexOf(".",i+1);=0A= t=3Dz.substring(i+1,z.length);=0A= if (t.toLowerCase()=3D=3Dc.toLowerCase()) cs=3D1;=0A= t=3Dz.substring(0,i);=0A= if ((i=3Dt.lastIndexOf(".")) > -1) {=0A= t=3Dt.substring(i+1,t.length);=0A= cn=3D(t*1);=0A= }=0A= }=0A= if (cs=3D=3D0 || _ufns=3D=3D1) {=0A= t=3D_uGC(dc,"__utma=3D"+_udh,";");=0A= if ((i=3Dt.lastIndexOf(".")) > 9) {=0A= _uns=3Dt.substring(i+1,t.length);=0A= _uns=3D(_uns*1);=0A= }=0A= cn++;=0A= if (_uns=3D=3D0) _uns=3D1;=0A= _ubd.cookie=3D"__utmz=3D"+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; = path=3D"+_utcp+"; "+x+_udo;=0A= }=0A= if (cs=3D=3D0 || _ufns=3D=3D1) return "&utmcn=3D1";=0A= else return "&utmcr=3D1";=0A= }=0A= function _uRef() {=0A= if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A= var i=3D0,h,k,n;=0A= if ((i=3D_ur.indexOf("://"))<0) return "";=0A= h=3D_ur.substring(i+3,_ur.length);=0A= if (h.indexOf("/") > -1) {=0A= k=3Dh.substring(h.indexOf("/"),h.length);=0A= if (k.indexOf("?") > -1) k=3Dk.substring(0,k.indexOf("?"));=0A= h=3Dh.substring(0,h.indexOf("/"));=0A= }=0A= h=3Dh.toLowerCase();=0A= n=3Dh;=0A= if ((i=3Dn.indexOf(":")) > -1) n=3Dn.substring(0,i);=0A= for (var ii=3D0;ii<_uRno.length;ii++) {=0A= if ((i=3Dn.indexOf(_uRno[ii].toLowerCase())) > -1 && = n.length=3D=3D(i+_uRno[ii].length)) { _ufno=3D1; break; }=0A= }=0A= if (h.indexOf("www.")=3D=3D0) h=3Dh.substring(4,h.length);=0A= return = "utmccn=3D(referral)|utmcsr=3D"+_uEC(h)+"|"+"utmcct=3D"+_uEC(k)+"|utmcmd=3D= referral";=0A= }=0A= function _uOrg(t) {=0A= if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A= var i=3D0,h,k;=0A= if ((i=3D_ur.indexOf("://")) < 0) return "";=0A= h=3D_ur.substring(i+3,_ur.length);=0A= if (h.indexOf("/") > -1) {=0A= h=3Dh.substring(0,h.indexOf("/"));=0A= }=0A= for (var ii=3D0;ii<_uOsr.length;ii++) {=0A= if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {=0A= if ((i=3D_ur.indexOf("?"+_uOkw[ii]+"=3D")) > -1 || = (i=3D_ur.indexOf("&"+_uOkw[ii]+"=3D")) > -1) {=0A= k=3D_ur.substring(i+_uOkw[ii].length+2,_ur.length);=0A= if ((i=3Dk.indexOf("&")) > -1) k=3Dk.substring(0,i);=0A= for (var yy=3D0;yy<_uOno.length;yy++) {=0A= if (_uOno[yy].toLowerCase()=3D=3Dk.toLowerCase()) { _ufno=3D1; = break; }=0A= }=0A= if (t) return _uEC(k);=0A= else return = "utmccn=3D(organic)|utmcsr=3D"+_uEC(_uOsr[ii])+"|"+"utmctr=3D"+_uEC(k)+"|= utmcmd=3Dorganic";=0A= }=0A= }=0A= }=0A= return "";=0A= }=0A= function _uBInfo() {=0A= var sr=3D"-",sc=3D"-",ul=3D"-",fl=3D"-",cs=3D"-",je=3D1;=0A= var n=3Dnavigator;=0A= if (self.screen) {=0A= sr=3Dscreen.width+"x"+screen.height;=0A= sc=3Dscreen.colorDepth+"-bit";=0A= } else if (self.java) {=0A= var j=3Djava.awt.Toolkit.getDefaultToolkit();=0A= var s=3Dj.getScreenSize();=0A= sr=3Ds.width+"x"+s.height;=0A= }=0A= if (n.language) { ul=3Dn.language.toLowerCase(); }=0A= else if (n.browserLanguage) { ul=3Dn.browserLanguage.toLowerCase(); }=0A= je=3Dn.javaEnabled()?1:0;=0A= if (_uflash) fl=3D_uFlash();=0A= if (_ubd.characterSet) cs=3D_uES(_ubd.characterSet);=0A= else if (_ubd.charset) cs=3D_uES(_ubd.charset);=0A= return = "&utmcs=3D"+cs+"&utmsr=3D"+sr+"&utmsc=3D"+sc+"&utmul=3D"+ul+"&utmje=3D"+j= e+"&utmfl=3D"+fl;=0A= }=0A= function __utmSetTrans() {=0A= var e;=0A= if (_ubd.getElementById) e=3D_ubd.getElementById("utmtrans");=0A= else if (_ubd.utmform && _ubd.utmform.utmtrans) = e=3D_ubd.utmform.utmtrans;=0A= if (!e) return;=0A= var l=3De.value.split("UTM:");=0A= var i,i2,c;=0A= if (_userv=3D=3D0 || _userv=3D=3D2) i=3Dnew Array();=0A= if (_userv=3D=3D1 || _userv=3D=3D2) { i2=3Dnew Array(); c=3D_uGCS(); }=0A= =0A= for (var ii=3D0;ii=3D2;ii--) {=0A= try {=0A= var fl=3Deval("new = ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");=0A= if (fl) { f=3Dii + '.0'; break; }=0A= }=0A= catch(e) {}=0A= }=0A= }=0A= return f;=0A= }=0A= function __utmLinker(l,h) {=0A= if (!_ulink) return;=0A= var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A= var dc=3D_ubd.cookie;=0A= if (!l || l=3D=3D"") return;=0A= var iq =3D l.indexOf("?"); =0A= var ih =3D l.indexOf("#"); =0A= if (dc) {=0A= a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A= b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A= c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A= x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A= z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A= v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A= k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A= = p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D= "+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A= }=0A= if (p) {=0A= if (h && ih>-1) return;=0A= if (h) { _udl.href=3Dl+"#"+p; }=0A= else {=0A= if (iq=3D=3D-1 && ih=3D=3D-1) _udl.href=3Dl+"?"+p;=0A= else if (ih=3D=3D-1) _udl.href=3Dl+"&"+p;=0A= else if (iq=3D=3D-1) = _udl.href=3Dl.substring(0,ih-1)+"?"+p+l.substring(ih);=0A= else _udl.href=3Dl.substring(0,ih-1)+"&"+p+l.substring(ih);=0A= }=0A= } else { _udl.href=3Dl; }=0A= }=0A= function __utmLinkPost(f,h) {=0A= if (!_ulink) return;=0A= var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A= var dc=3D_ubd.cookie;=0A= if (!f || !f.action) return;=0A= var iq =3D f.action.indexOf("?"); =0A= var ih =3D f.action.indexOf("#"); =0A= if (dc) {=0A= a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A= b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A= c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A= x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A= z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A= v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A= k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A= = p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D= "+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A= }=0A= if (p) {=0A= if (h && ih>-1) return;=0A= if (h) { f.action+=3D"#"+p; }=0A= else {=0A= if (iq=3D=3D-1 && ih=3D=3D-1) f.action+=3D"?"+p;=0A= else if (ih=3D=3D-1) f.action+=3D"&"+p;=0A= else if (iq=3D=3D-1) = f.action=3Df.action.substring(0,ih-1)+"?"+p+f.action.substring(ih);=0A= else = f.action=3Df.action.substring(0,ih-1)+"&"+p+f.action.substring(ih);=0A= }=0A= }=0A= return;=0A= }=0A= function __utmSetVar(v) {=0A= if (!v || v=3D=3D"") return;=0A= if (!_udo || _udo =3D=3D "") {=0A= _udh=3D_uDomain();=0A= if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A= }=0A= if (!_uVG()) return;=0A= var r=3DMath.round(Math.random() * 2147483647);=0A= _ubd.cookie=3D"__utmv=3D"+_udh+"."+_uES(v)+"; path=3D"+_utcp+"; = expires=3DSun, 18 Jan 2038 00:00:00 GMT;"+_udo;=0A= var s=3D"&utmt=3Dvar&utmn=3D"+r;=0A= if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A= var i=3Dnew Image(1,1);=0A= i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A= i.onload=3Dfunction() { _uVoid(); }=0A= }=0A= if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A= var i2=3Dnew Image(1,1);=0A= = i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+= _uGCS();=0A= i2.onload=3Dfunction() { _uVoid(); }=0A= }=0A= }=0A= function _uGCS() {=0A= var t,c=3D"",dc=3D_ubd.cookie;=0A= if ((t=3D_uGC(dc,"__utma=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utma=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmb=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utmb=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmc=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utmc=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmx=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utmx=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmz=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utmz=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmv=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utmv=3D"+t+";");=0A= if (c.charAt(c.length-1)=3D=3D"+") c=3Dc.substring(0,c.length-1);=0A= return c;=0A= }=0A= function _uGC(l,n,s) {=0A= if (!l || l=3D=3D"" || !n || n=3D=3D"" || !s || s=3D=3D"") return "-";=0A= var i,i2,i3,c=3D"-";=0A= i=3Dl.indexOf(n);=0A= i3=3Dn.indexOf("=3D")+1;=0A= if (i > -1) {=0A= i2=3Dl.indexOf(s,i); if (i2 < 0) { i2=3Dl.length; }=0A= c=3Dl.substring((i+i3),i2);=0A= }=0A= return c;=0A= }=0A= function _uDomain() {=0A= if (!_udn || _udn=3D=3D"" || _udn=3D=3D"none") { _udn=3D""; return 1; }=0A= if (_udn=3D=3D"auto") {=0A= var d=3D_ubd.domain;=0A= if (d.substring(0,4)=3D=3D"www.") {=0A= d=3Dd.substring(4,d.length);=0A= }=0A= _udn=3Dd;=0A= }=0A= if (_uhash=3D=3D"off") return 1;=0A= return _uHash(_udn);=0A= }=0A= function _uHash(d) {=0A= if (!d || d=3D=3D"") return 1;=0A= var h=3D0,g=3D0;=0A= for (var i=3Dd.length-1;i>=3D0;i--) {=0A= var c=3DparseInt(d.charCodeAt(i));=0A= h=3D((h << 6) & 0xfffffff) + c + (c << 14);=0A= if ((g=3Dh & 0xfe00000)!=3D0) h=3D(h ^ (g >> 21));=0A= }=0A= return h;=0A= }=0A= function _uFixA(c,s,t) {=0A= if (!c || c=3D=3D"" || !s || s=3D=3D"" || !t || t=3D=3D"") return "-";=0A= var a=3D_uGC(c,"__utma=3D"+_udh,s);=0A= var lt=3D0,i=3D0;=0A= if ((i=3Da.lastIndexOf(".")) > 9) {=0A= _uns=3Da.substring(i+1,a.length);=0A= _uns=3D(_uns*1)+1;=0A= a=3Da.substring(0,i);=0A= if ((i=3Da.lastIndexOf(".")) > 7) {=0A= lt=3Da.substring(i+1,a.length);=0A= a=3Da.substring(0,i);=0A= }=0A= if ((i=3Da.lastIndexOf(".")) > 5) {=0A= a=3Da.substring(0,i);=0A= }=0A= a+=3D"."+lt+"."+t+"."+_uns;=0A= }=0A= return a;=0A= }=0A= function _uTrim(s) {=0A= if (!s || s=3D=3D"") return "";=0A= while ((s.charAt(0)=3D=3D' ') || (s.charAt(0)=3D=3D'\n') || = (s.charAt(0,1)=3D=3D'\r')) s=3Ds.substring(1,s.length);=0A= while ((s.charAt(s.length-1)=3D=3D' ') || = (s.charAt(s.length-1)=3D=3D'\n') || (s.charAt(s.length-1)=3D=3D'\r')) = s=3Ds.substring(0,s.length-1);=0A= return s;=0A= }=0A= function _uEC(s) {=0A= var n=3D"";=0A= if (!s || s=3D=3D"") return "";=0A= for (var i=3D0;i0) r=3Da.substring(i+1,i2); else return = ""; =0A= if ((i=3Da.indexOf(".",i2+1))>0) t=3Da.substring(i2+1,i); else return = ""; =0A= if (f) {=0A= return r;=0A= } else {=0A= var c=3Dnew = Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T'= ,'U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');=0A= return = c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r= &7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5= &m]+c[t&m];=0A= }=0A= }=0A= function _uIN(n) {=0A= if (!n) return false;=0A= for (var i=3D0;i"9") && (c!=3D".")) return false;=0A= }=0A= return true;=0A= }=0A= function _uES(s,u) {=0A= if (typeof(encodeURIComponent) =3D=3D 'function') {=0A= if (u) return encodeURI(s);=0A= else return encodeURIComponent(s);=0A= } else {=0A= return escape(s);=0A= }=0A= }=0A= function _uUES(s) {=0A= if (typeof(decodeURIComponent) =3D=3D 'function') {=0A= return decodeURIComponent(s);=0A= } else {=0A= return unescape(s);=0A= }=0A= }=0A= function _uVG() {=0A= if((_udn.indexOf("www.google.") =3D=3D 0 || _udn.indexOf(".google.") = =3D=3D 0 || _udn.indexOf("google.") =3D=3D 0) && _utcp=3D=3D'/') {=0A= return false;=0A= }=0A= return true;=0A= }=0A= function _uSP() {=0A= var s=3D100;=0A= if (_usample) s=3D_usample;=0A= if(s>=3D100 || s<=3D0) return true;=0A= return ((__utmVisitorCode(1)%10000)<(s*100));=0A= }=0A= function urchinPathCopy(p){=0A= var d=3Ddocument,nx,tx,sx,i,c,cs,t,h,o;=0A= cs=3Dnew Array("a","b","c","v","x","z");=0A= h=3D_uDomain(); if (_udn && _udn!=3D"") o=3D" domain=3D"+_udn+";";=0A= nx=3D"Sun, 18 Jan 2038 00:00:00 GMT;";=0A= tx=3Dnew Date(); tx.setTime(tx.getTime()+(_utimeout*1000));=0A= tx=3Dtx.toGMTString()+";";=0A= sx=3Dnew Date(); sx.setTime(sx.getTime()+(_ucto*1000));=0A= sx=3Dsx.toGMTString()+";";=0A= for (i=3D0;i<6;i++){=0A= t=3D" expires=3D";=0A= if (i=3D=3D1) t+=3Dtx; else if (i=3D=3D2) t=3D""; else if (i=3D=3D5) = t+=3Dsx; else t+=3Dnx;=0A= c=3D_uGC(d.cookie,"__utm"+cs[i]+"=3D"+h,";");=0A= if (c!=3D"-") d.cookie=3D"__utm"+cs[i]+"=3D"+c+"; path=3D"+p+";"+t+o;=0A= }=0A= }=0A= function _uCO() {=0A= if (!_utk || _utk=3D=3D"" || _utk.length<10) return;=0A= var d=3D'www.google.com';=0A= if (_utk.charAt(0)=3D=3D'!') d=3D'analytics.corp.google.com';=0A= _ubd.cookie=3D"GASO=3D"+_utk+"; path=3D"+_utcp+";"+_udo;=0A= var sc=3Ddocument.createElement('script');=0A= sc.type=3D'text/javascript';=0A= sc.id=3D"_gasojs";=0A= = sc.src=3D'https://'+d+'/analytics/reporting/overlay_js?gaso=3D'+_utk+'&'+= Math.random();=0A= document.getElementsByTagName('head')[0].appendChild(sc); =0A= }=0A= function _uGT() {=0A= var h=3Dlocation.hash, a;=0A= if (h && h!=3D"" && h.indexOf("#gaso=3D")=3D=3D0) {=0A= a=3D_uGC(h,"gaso=3D","&");=0A= } else {=0A= a=3D_uGC(_ubd.cookie,"GASO=3D",";");=0A= }=0A= return a;=0A= }=0A= var _utk=3D_uGT();=0A= if (_utk && _utk!=3D"" && _utk.length>10) {=0A= if (window.addEventListener) {=0A= window.addEventListener('load', _uCO, false); =0A= } else if (window.attachEvent) { =0A= window.attachEvent('onload', _uCO);=0A= }=0A= }=0A= ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: 7bit Content-Location: http://s.clicktale.net/WRDefer.js if(typeof WRondomload=="function") WRondomload(); ------=_NextPart_000_0000_01C7BF26.EF8D5D30 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://s.clicktale.net/WR9.js var WRWarn=3D"Copyright 2006 ClickTale Ltd., US Patent = Pending",WRA,WRD=3Ddocument,WRAU=3Dlocation,WRv,WRL,WRE=3D"http://www.cli= cktale.net/",WRAQ=3D"http://s.clicktale.net/",WRn,WRB=3Dnew = Array(),WRw,ClickTaleCookieDomain,ClickTaleUnloadPause=3D500,ClickTaleEve= ntsMask=3D255,ClickTaleFetchFrom,WRAh,WRAV,WRAW,WRAX,WRAY;if(WRD.domain.i= ndexOf(".")=3D=3D-1)WRE=3DWRAQ=3D"http://nexuson/CTN/";if(typeof = WRInitTime=3D=3D"undefined")var WRInitTime=3D(new = Date()).getTime();if(WRD.addEventListener)WRD.addEventListener("DOMConten= tLoaded",WRondomload,false);WRw=3D(WRD.compatMode=3D=3D'BackCompat');WRv=3D= (WRw?WRD.body:WRD.documentElement);var = t=3DWRD.domain;if(t.search(/www\.\w+\.\w+/i)=3D=3D0)ClickTaleCookieDomain= =3Dt.substring(4,t.length);WRo(window,"load",WRf);function = ClickTale(Project,Prob){if(WRAh)throw"CT: Monitoring has already = started";WRn=3DWRp();if(!WRn)return;if(WRAU.protocol=3D=3D"https:"||WRAU.= protocol=3D=3D"file:")return;if(ClickTaleIsPlayback())return;if(Prob=3D=3D= undefined)Prob=3D1;WRL=3DWRl("WRUID");if(WRL=3D=3Dnull){if(Math.random()<= Prob)WRL=3DWRAi();else = WRL=3D0;};WRk("WRUID",WRL,365);if(WRL=3D=3D0||(WRl("WRUID")=3D=3Dnull&&Pr= ob!=3D1))return;WRAh=3Dtrue;WRC({a:"start",t:WRI()});WRA=3DProject;var = i=3Dnew = Image();i.src=3DWRE+"i/"+WRA+".gif?"+WRH();i.onload=3Dfunction(){WRG(i);}= ;};function ClickTaleIsPlayback(){return = parent&&parent.WebPlayer;};function WRG(i){var = s=3DWRD.createElement("script");s.src=3DWRAQ+"WR"+"9"+(i.width>1?"S"+i.wi= dth:"")+"b.js";var = dd=3DWRD.getElementById("ClickTale")||WRD.body;dd.appendChild(s);};functi= on WRH(){return Math.floor(Math.random()*2147483647);};function = WRAi(){return WRH()+"."+(WRInitTime&2147483647);};function = WRI(){return(new Date()).getTime()-WRInitTime;};function = WRC(m){if(typeof WRc=3D=3D'function')WRc(m);else = if(WRB.push)WRB.push(m);};function = WRf(){WRC({a:"load",w:WRs(),h:WRt(),sw:WRv.scrollWidth,sh:WRv.scrollHeigh= t,cw:WRv.clientWidth,ch:WRv.clientHeight,t:WRI()});};function = WRs(){return self.innerWidth||WRv.offsetWidth;};function WRt(){return = self.innerHeight||WRv.offsetHeight;};function = WRk(name,value,days){if(days){var date=3Dnew = Date();date.setTime(date.getTime()+(days*86400000));var expires=3D"; = expires=3D"+date.toGMTString();}else var = expires=3D"";WRD.cookie=3Dname+"=3D"+value+expires+"; = path=3D/;"+(ClickTaleCookieDomain?" = domain=3D"+ClickTaleCookieDomain+";":"");};function WRl(name){var = nameEQ=3Dname+"=3D";var ca=3DWRD.cookie.split(';');for(var = i=3D0;i]+>)\\s*]+>\\s*(

    )","i");W= RAW=3DWRD.documentElement.innerHTML.replace(reg,"$1$2");WRC({a:"domload",= t:WRI()});if(typeof WRAZ=3D=3D'function')WRAZ();if(WRAV&&typeof = WRAj=3D=3D'function')WRAj();};function WRp(){var = ua=3Dnavigator.userAgent;if(ua.indexOf("Opera = ")!=3D-1)return;if(ua.indexOf("MSIE = 6.0")!=3D-1)return"IE6";if(ua.indexOf("MSIE = 7.0")!=3D-1)return"IE7";if(ua.indexOf("Firefox/1.5")!=3D-1)return"FF15";i= f(ua.indexOf("Firefox/2.0")!=3D-1)return"FF20";};function = WRo(e,t,fn){if(e.addEventListener)e.addEventListener(t,fn,false);else = if(e.attachEvent)e.attachEvent('on'+t,fn);}; ------=_NextPart_000_0000_01C7BF26.EF8D5D30--