From: Subject: Proposed New City Of Istanbul Could Be Refuge In Case Of Severe Earthquake Date: Sun, 27 Jan 2008 20:19:18 -0500 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_008F_01C86121.E4F510A0" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 This is a multi-part message in MIME format. ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.sciencedaily.com/releases/2008/01/080123104527.htm Proposed New = City Of Istanbul Could Be Refuge In Case Of Severe Earthquake

Proposed New City Of Istanbul Could Be Refuge In Case = Of Severe=20 Earthquake

ScienceDaily (Jan. 26, 2008) =97 = Istanbul is=20 at such high risk for a devastating earthquake that engineers at Purdue=20 University and the Republic of Turkey have come up with a bold new = proposal:=20 build a second city.

A second, satellite city would provide immediate refuge to = inhabitants of the=20 old city in the event of a catastrophic earthquake and soften such an = event's=20 effects on the nation's economy.

Purdue researchers have created a 3-D fly-through animation showing = what the=20 proposed new city would look like. The five-minute animation was = produced using=20 new technology developed by the Office of Information Technology at = Purdue.

Mete Sozen, Purdue's Kettelhut Distinguished Professor of Civil = Engineering,=20 says building a satellite city from scratch has several advantages.

"It is exciting to think about building a new city using completely = new=20 technologies," he says. It would use modern information technologies and = be=20 environmentally friendly. It would be safe, secure and modern. But more=20 important is that this city would provide a refuge and emergency = services in the=20 event of an earthquake."

With some cities around the world at risk from rising ocean waters = caused by=20 global climate change or from natural disasters, Sozen says building = cities in=20 new locations may become common in coming decades.

The animation of the future Turkish city was created in two months by = using=20 the TeraGrid, a National Science Foundation-funded research computing = grid.=20 Purdue is one of 11 research institutions that comprise TeraGrid, which = is the=20 world's largest open science computing grid. The animation was rendered = using=20 the TeraGrid Distributed Rendering Environment, or TeraDRE, developed by = research scientists in Information Technology at Purdue.

Istanbul, which lies just north of the North Anatolian fault, is at = high risk=20 for a major earthquake within the next 30 years.

"All of the seismic and historical evidence says a major earthquake = is=20 overdue," says Sozen, who led an international effort in 2005 to = evaluate the=20 risk of such a catastrophe.

That group concluded that it is likely an earthquake with a magnitude = of 6.8=20 to 7.5 on the Richter scale would occur within the next three = decades.

Such an earthquake would be especially devastating to Istanbul. Many = of the=20 city's buildings were not constructed to withstand earthquakes and, in = fact,=20 Sozen says many buildings were constructed with little regard for modern = building standards.

The city itself is not well designed for earthquakes. Many streets = are narrow=20 and winding and would quickly fill with debris after an earthquake, = preventing=20 aid from reaching those who are trapped or injured.

"We determined that to bring the city up to modern standards to = reduce the=20 effects of an earthquake would cost $50 billion," Sozen says. "At that = point we=20 began to think there might be another option. We could run away from the = earthquake."

Istanbul, a city of more than 12 million people on Turkey's northwest = coast,=20 is one of the world's ancient and historically important cities, having = been the=20 capital of the Byzantine and Ottoman empires. The city is Turkey's = cultural and=20 economic hub and is responsible for 80 percent of the nation's = economy.

"When New Orleans was destroyed by flooding, it had a noticeable but = small=20 effect on the economy of the United States," Sozen says. "But if = Istanbul were=20 to be destroyed, Turkey's economy would be devastated."

The satellite city of Istanbul is designed to be an economic hub by=20 clustering districts that serve specific purposes. There would a hotel = district=20 near the ocean, as well as business, residential and entertainment=20 districts.

If realized, the satellite city of Istanbul would be the first major = city to=20 be constructed since Brasilia, the capital of Brazil, was built from = 1956-1960.=20 No site for the proposed satellite city has been chosen.

The new city would be earthquake resistant, with strong buildings and = wide=20 streets. The city would be designed to take advantage of building = techniques=20 used to minimize earthquake damage and incorporate modern technologies = such as=20 electronic locks and security, video communication and environmentally = friendly=20 technologies.

 "We were able to look at the best ideas in the world and = incorporate=20 these in our proposal," Sozen says. "For example, the storm sewers will = recycle=20 rainwater like the ones in Sweden."

One of the most striking architectural features presented in the = Purdue=20 visualization is a cluster of earthquake-resistant buildings arranged in = the=20 shape of a star.

"It is a Selcuk star, and this shows a star within a star," Sozen = says. "It=20 is a classical Turkish symbol."

Nicoletta Adamo-Villani, assistant professor of computer graphics = technology=20 and a research scientist in Purdue's Envision Center for Data = Perceptualization,=20 led a team of graduate and undergraduate animators who created the city = based on=20 engineering specifications provided by Sozen.

"This was something of a challenge because of the size of the city = being=20 visualized and the lighting effects needed," Adamo-Villani says.

Adamo-Villani used nine virtual cameras to give a variety of = perspectives for=20 the fly-through animation.

"It was very challenging for the students; a very intensive project," = she=20 says. "But it was really a good learning experience for them. We could = have not=20 done this without the TeraDRE. The animation is made up of 9,000 images, = each of=20 which takes about 30 minutes to render out normally. This would have = taken=20 several weeks to complete. Using the TeraDRE, we were able to render the = five-minute visualization in just hours."

The TeraDRE makes use of a distributed computing system at Purdue = known for=20 the software it runs, Condor. This system allows jobs, such as an = animation=20 frame being rendered, to be sent to one of 6,000 computers on campus = when it is=20 not being used. Purdue's Condor pool is the largest distributed = computing system=20 at any university.

Next the Purdue researchers will begin developing a scientifically = accurate=20 visualization of the effects of a major earthquake on the city of = Istanbul. A=20 video featuring the animation can be viewed at http://www.youtube.com/p= urdueuniversity.

Adapted from materials provided by Purdue=20 University.

=20
APA

MLA =
3D""=20
A=20 computerized visualization of a new satellite city of Istanbul features = a=20 cluster of buildings arranged to form a Selcuk star, a traditional = Turkish=20 symbol. Purdue researchers have worked with Turkish officials to plan a = future=20 city that would be earthquake resistant and offer refuge if a major = earthquake=20 hits Istanbul, which experts say is likely. (Credit: Purdue = image/Nicoletta=20 Adamo-Villani)

Related Stories


MI= T=20 Researchers Monitoring Earthquakes In Turkey Say Istanbul Could Be Next=20 Target (Aug. 19, 1999) = =97 This=20 week's earthquake, which killed hundreds in northwestern Turkey, = increased the=20 likelihood of a future earthquake near the metropolis of Istanbul by = increasing=20 the forces on the fault just ...  > read=20 more
Ex= perts=20 Urge Action To Protect Istanbul From Earthquake (Jan. 9, 2006) =97 A major earthquake is = likely to=20 strike Istanbul over the next 30 years, killing thousands of people and=20 collapsing as many as 50,000 buildings because of vulnerable = construction,=20 according to a team ...  > read=20 more
20= 06=20 Tectonic Plate Motion Reversal Near Acapulco Puzzles Earthquake=20 Scientists (Aug. 6, = 2007) =97 A=20 reversal of tectonic plate motion between Acapulco and Mexico City in = the last=20 half of 2006 probably didn't ease seismic strain in the region or the = specter of=20 a major earthquake anticipated there ...  > read=20 more
En= gineer=20 Proposes New Building Code For Quake-Stricken Turkey (Oct. 1, 1999) =97 A structural engineer = from Purdue=20 University is proposing an unorthodox approach for simplifying the = design of=20 earthquake-resistant buildings in Turkey, which presently has a code = that may be=20 too ...  > read=20 more
It= 's Not My=20 Fault: New Study Shakes Up Interest In Earthquakes (Nov. 3, 1998) =97 A new look at the = information on a=20 1971 California earthquake shows that several nearby faults were = activated=20 during the temblor, supporting evidence from more recent earthquakes = that nearby=20 faults ...  > read=20 more
Un= iversity=20 Of Ulster Scientists Issue Indonesia Earthquake Warning = (Mar. 28, 2005) =97 The stresses in the = earth's crust=20 which have resulted from the Sumatra-Andaman earthquake have = significantly=20 increased the risk of another large earthquake in the already-devastated = Indonesian ...  > read=20 more
Gr= ound=20 Movement Risks Identified By Terrafirma (Sep. 13, 2006) =97 Ground movements are = responsible=20 for hundreds of deaths and billions of Euros annually, and the threat = they pose=20 is increasing due to urbanization and land use. ESA's GMES Service = Element=20 Program is ...  > read=20 more
A = New Index=20 Of Earthquake Risk Ranks Boston Equal To San Francisco = (Aug. 21, 1997) =97 Boston 39; San = Francisco 37; St.=20 Louis 36; Jakarta 39; Mexico City 38; Tokyo 54. No, they're not winter=20 temperatures. These numbers represent the overall earthquake risk faced = by=20 residents of ...  > read=20 more

Search = ScienceDaily

Number of stories in archives: 44,032

Find=20 with keyword(s):
=  
Enter=20 a keyword or phrase to search ScienceDaily's archives for related news = topics,=20
the latest news stories, reference articles, science videos, images, = and=20 books.

Just In:=20
Bi= rth=20 Control Pill Protects Against Ovarian Cancer
Gi= ant=20 Particle Accelerator Discovered In The Sky
Me= rcury In=20 Dental Work Not A Problem
Gr= eat Apes=20 Endangered By Human Viruses

Science=20 Video News


=20

Forecasting=20 Aftershocks

With a new online map, scientists can better forecast when and = where=20 aftershocks may happen. The maps calculate information based on = historical. ...=20  > full=20 story

Breaking=20 News

... from NewsDaily.com

In Other News ...

Free = Subscriptions

... from ScienceDaily

Get the latest science news with our free email newsletters, = updated daily=20 and weekly. Or view hourly updated newsfeeds in your RSS reader:

Feedback

... we want to hear from you!

Tell us what you think of the new ScienceDaily -- we welcome both = positive=20 and negative comments. Have any problems using the site? = Questions?
  • =20
  • =20
  • =20
  • =20
About=20 This Site  |  Editorial Staff =  | =20 Awards & = Reviews=20  |  Contribute=20 News  |  Advertise With Us =  |  Privacy=20 Policy  |  Terms=20 of Use
Copyright=20 =A9 1995-2007 ScienceDaily LLC  =97  All rights reserved =  =97 =20 Contact: editor@sciencedaily.com
<= /DIV>
  • Health &=20 Medicine=20
    • Allerg= y=20
    • Alternative=20 Medicine
    • Bird = Flu
    • = Birth=20 Control
    • = Breast=20 Cancer
    • Cancer<= /A>=20
    • Diabe= tes=20
    • Diet=20 and Weight Loss
    • Diseases=20 and Conditions
    • Fitnes= s=20
    • G= ene=20 Therapy
    • = Heart=20 Disease
    • H= IV=20 and AIDS
    • Lu= ng=20 Cancer
    • M= en's=20 Health
    • Nutr= ition=20
    • Obesit= y=20
    • P= harmacology=20
    • Pregnancy=20 and Childbirth
    • = Sexual=20 Health
    • Skin= =20 Care
    • Ste= m=20 Cells
    • Women's=20 Health
    • ... more=20 topics
  • Mind = &=20 Brain=20
    • ADD=20 and ADHD
    • Addiction= =20
    • Alzheim= er's=20
    • Anxiety= =20
    • Autism=20
    • Depressi= on=20
    • G= ender=20 Difference
    • Headaches= =20
    • Insomnia=20
    • Intell= igence=20
    • Language=20 Acquisition
    • Parkins= on's=20
    • Percepti= on=20
    • Psycholo= gy=20
    • Relat= ionships=20
    • Schiz= ophrenia=20
    • S= ocial=20 Psychology
    • ... = more=20 topics
  • Plants &=20 Animals=20
    • Agriculture=20 and Food
    • Animals= =20
    • Behavi= or=20
    • Biology= =20
    • B= iotechnology=20
    • Ce= ll=20 Biology
    • Cloning= =20
    • Developmental=20 Biology
    • Dogs=20
    • Dolphins=20 and Whales
    • Endangered=20 Animals
    • Exti= nction=20
    • Frogs=20 and Reptiles
    • Genetically=20 Modified
    • = Marine=20 Biology
    • Microbes=20 and More
    • Nature=20
    • New= =20 Species
    • Pests=20 and Parasites
    • Spiders= =20
    • Zoology= =20
    • ... = more=20 topics
  • Earth = &=20 Climate=20
    • Air = Quality
    • Climate<= /A>=20
    • Cora= l=20 Reefs
    • Eart= hquakes=20
    • Ecology<= /A>=20
    • Environmental=20 Science
    • Geogra= phy=20
    • Geology<= /A>=20
    • G= lobal=20 Warming
    • Hurricanes=20 and Cyclones
    • Ice=20 Ages
    • Oce= anography=20
    • Ozon= e=20 Holes
    • Pollut= ion=20
    • Renewable=20 Energy
    • Tsunami= s=20
    • Weather<= /A>=20
    • Wildfi= res=20
    • ... = more=20 topics
  • Space = &=20 Time=20
  • Matter = &=20 Energy=20
    • Alternative=20 Fuels
    • Aviatio= n=20
    • Bio= chemistry=20
    • Biomet= ric=20
    • Chemis= try=20
    • Detect= ors=20
    • Elec= tronics=20
    • Energy=20 Technology
    • Forens= ics=20
    • Fos= sil=20 Fuels
    • Inorganic=20 Chemistry
    • N= anotechnology=20
    • Organic=20 Chemistry
    • Physics<= /A>=20
    • = Quantum=20 Physics
    • Sol= ar=20 Energy
    • Techn= ology=20
    • Wind= =20 Energy
    • ... = more=20 topics
  • Computers = &=20 Math=20
    • Artificial=20 Intelligence
    • = Communications=20
    • Computer=20 Graphics
    • Computer=20 Modeling
    • Computer=20 Science
    • Encr= yption=20
    • Hacking= =20
    • Mat= hematics=20
    • Quantum=20 Computers
    • Roboti= cs=20
    • Softwa= re=20
    • Stat= istics=20
    • Vid= eo=20 Games
    • Virtual=20 Reality
    • ... = more=20 topics
  • Fossils &=20 Ruins=20
    • Ancient=20 Civilizations
    • Ant= hropology=20
    • Arch= aeology=20
    • Dinosa= urs=20
    • Ea= rly=20 Climate
    • Ear= ly=20 Humans
    • Ea= rly=20 Mammals
    • Evolut= ion=20
    • = Human=20 Evolution
    • L= ost=20 Treasures
    • O= rigin=20 of Life
    • Pal= eontology=20
    • Tyrannosaurus=20 Rex
    • ... = more=20 topics
Include this item in your blog or web site:
c= lose
  • =20
  • =20
  • =20
  • =20
Cite this article in your essay, paper, or = report:
c= lose
  • =20
  • =20
  • =20
Email this page's link to a friend or = colleague:
c= lose
  • =20
  • =20
  • =20
  • cc to self =20
------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/logo.gif 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 BnIKsPOjtGA1TnL+KSAAOw== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://iv.doubleclick.net/ad/nbcu.science/environment_earth;!category=sciencedaily;f=environment;sect=earth;sub=;dcopt=ist;sz=728x90;tile=1;pos=1;ord=123456789012? R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/share.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKDSURBVDjLjdFNTNJxHAZw69CWHjp16O2A ZB3S1ovOObaI8NBYuuZAhqjIQkzJoSIZBmSCpVuK/sE/WimU6N9SDM0R66IHbabie1hrg0MK3Zo5 a8vwidgym8w8PKffvp89e35RAKJ2ipp7WDxvjltZ6jwCr5W2bpHHtqUnx+77877jsZxzlO3roAWX uw5ha1pl9MZdAW2ig8RyXyL8rnx8G6uH387AMnUMC2b6l10BJPdAfWDGhZVREuszT7D6hsTStBND urO+XQEZnEypx1a28XW2F8HFPqwtOBAYJlCde9EeEZCy4sTN4ksrRA4LZB57vZCfMElUyH4E7Ap8 6r+LwIAGIy03cDr/lDNJGR/zDyBiHGc3i1ODjUIWtqbdIIexVY86kwZ3HijR/86GmqFqJGhPWs8o TkRvAgb+uZGHhVfRV3UNni41OhU8EDlstBSkwjKjhnmqAg3uUtS6y9Dzvg0ljmKkFCaRm4CJT+/5 OERtG4yqZMEwdQt1biV0EyW4PVEE1dsiiMk8eMn0/w9Wp+PCNK1CQ6iBYeommkIpH5Qhy5AF/6Mr f4G955tUJlXxtsHieeWQ2LJxvVuAAkoASUcmLugZPqW0qsprEQjDx3sY3ZIMhXt1+DNw77kdmnYK SsKKx+PfoTQtYX9KtzWG2Rod6aujaJwWHk8+uDawGITeA+SPA7nDQOYgwKcAYhQQajyIY9eQEYE5 feLPyV4jFC8CELkAkWMDQmoDPGsQaWYgzRjEU8vL8GARAV8T099bUwqBdgzS14D4VaiBA8gZALJ/ t6j1Qqu4Hx4sIvChoyDFWZ1RmcyzORJLJsDSzoUyD5Z6FsxKN+iXn/mM5ZLwYJGAX0F/sgCQt3xB AAAAAElFTkSuQmCC ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/blog.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH8SURBVDjLjZPfS1NhGMdXf0VEQhDUhdCN 4X0IYT8ghIJQM0KoC4vushZddLELKyRhQQkSFIKEGEkUCI2oxVhepG5zi1xbc0u3cDs7Z+ec/ezT +x62scmmHvhwDrzP93Pe57znsQE2cR0SdAm6d+GwYL/M1LBVBV35fF4plUqVcrlMK8Q6TqdzYruk JuiW4Vwuh67rdbLZLJlMhmQyaUnigVlC05f4+dbB0tQplp92DsnwPimQBaZpUigUrLtE0zQURSGV SqHF37DhGkVZeQdagszKLJ7HvZtNAhmuIQWGYaCqKps/ZkivPqCwPs/Gp0cYvjnKUTe+F9fMJoFo o96zfJZ9K+sLpP33qRhujPANtr7dJPhqmO/PBxX3+PljTYLtqImPpH13qZge9LUrmLEB1FU7sZd9 jJw5MljNthYk/KLnxdFqeAjzdz9Z/z3Ck2fRE36qx9pakAjME1y4Lbb9GTMyTD52GUXsZO3ZadTk L6umrSD4ZZrAezvLH54Q915EjwywtXSH8FQf+t+I9V12FLwe6wE1SmjyAi77Qb6Kt3rGe9H+hKzw rgLH9eMUPE4K3gm8jpPMjRwlHfNTLBbr7Cjo7znA2NVOXA/PsThzi2wyah1pI+0E/9rNQQsqMtM4 CyfE36fLhb2ERa0mB7BR0CElexjnGnL0O2T2PyFunSz8jchwAAAAAElFTkSuQmCC ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/cite.png iVBORw0KGgoAAAANSUhEUgAAAA0AAAALCAYAAACksgdhAAAABGdBTUEAAK/INwWK6QAAAZJpQ0NQ SUNDIFByb2ZpbGUAAHiclZFNSxtRFIafO1IESbNxqkUo3FXMIkpQCgmUgpmFLbqIQTDJbjIzJoFx crlztfoD3AvdlS6qha5KcVW6zA/ITrCbUij4AwpCN0XGxW3JxiC+cOA5LwfOFzgjX6nYAfYSoxvr NdlsteX0d2bIAYAfpGqtXt9kov5cIgAulnyl4sl1dyqnm602CBdwu5aLgNux/AJw3xhlQNQBN+j5 IYgQKOnthgfiBMh3LX8A8h3L50D+IOgaEEOgnIT9BMRvoBJGaQBOETCB0gac98BSs9WWdjSzAS+f wdRo7LVT+PwJ5gtjr/gUnuzAt9Wxd72FAMTcKN1dXQFA5Grw6GeWXRdg+i3cnGTZ37Msu/kIUz9g mAT7+uDfXYRThftyu5vN7Q/A9r2b7f4AlOH0FezMwMYxvPsFi19g9ivUH8N2Fady9T/srQBY8Py4 39G+iULZWK9JbxAPdKr8IHrQ2++XiQ4NgDdQR7rf7Rm5plQcSW+wp/ZNpEvydRIsl+RKufwc4BaD 4nFpIB2XkQAAAVdJREFUKJF1kU0oRHEUxX//915ImgVDCSVkQfnYWJCFhd5iSo2UZ2tpaTWb2Xo2 srBlp2YjZTH1phELSc0GRZI3pRALycfIyLz/tRgfMzS3zurcc8+99yjH9eqBFWAKqKJypYG5RMz2 leN6W9HhjonJkU4s06ioSGYuWd8594FeC4hMjXbxkof3ghAIaA2BQKAh0IICIkPtHJzddWVvnwas cKjGNJQi/yFoKWkW0Foo6OIQgFBtFUCj9W3/3axLHH7dylc17p/zgRbBMopkQcsX+AEIALn8B8CD ASQ39nzCddDeoOgMG3Q3GdRVK4IAmkOKvhaTZOaSi5tHHzhSJS+fBkyA8cE2Zu0eAB5z72zuZ0kf Xp0A0UTM9hGRf3Bcz799eJU171Qc13tzXC9eyisRKTtyZjG1NNbfOr97fP0KxBMxe/lvZmWimcVU B7ANLCRi9mqloD8BXH65Lfxt+RoAAAAASUVORK5CYII= ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/print.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJtSURBVDjLjZPfS1NhGMfPXfh3OG/E/yBI mNkqrYGCzAthh+WNgXihwQYb2CoYukGwsdRLoYUWQbRAhqzc2Q91IrrVhlhLqznL5Tyb23m3s317 z1szBzM68Lk47/N9Pud5XjgcAK7OVfM7/a2piE87HalRoLVHStrp1VKvLVi7fE9wns/WaXi58Ugo H4kl/CxIyOZ/cyRKSKRFmF/tw/B4p3jl7utLFwp6baHiySnBxheZUkHkM8HKrgSpUsVGWsaDN/tQ G/1PLxT02EIlRbBJBZtfZaztlSF8JEgdFqBMdnh8im7LSqWpYHJysqXHFiS5AkGMfi12UP0zRRm+ D6fwxvPI0dWu3Q8QvV7f0iCgzQZKnl4WjqkgcVDDeyrYpqLoXoWtsbxTpLUyrlsFDA4O5vv7+w1M QBu7Z2dnEY1GcXsqjCwVJDM1JCixb1Vs0VXCdIoAXSVLBTcfhhEIBDA+Pg6NRtOtCLbpg0wmA7PZ /F8oWUEQMDAwsKsIiCzLUFhfX4coiv8kFAqhnh8bG6txFosFhBDG4uIiUqkUEzVDqc3Pz5/leZ4H ZzKZkEgkGG63G8lkEn6/vylKxuFwnOU7OzvBTUxMwOfzMex2O+LxOJaWlpoSi8VgtVrP8u3t7eDo HvB6vQyXywV6Jwyj0YjR0VE2Zl9fH7q6uqBWq9lZPd/W1gZuZGSk6vF42IHSuPD8JZbfBpvybOEF Ojo6WHZubg6tra3gDAbDzNDQ0LZOpwPvCqNYIjg6IfhBOcxJSGdL2PtewKeMiKJUBu8MQ6VSKc1b FFPDv8C7ItXhJ2sYdv/lDmOVodR4Z6R6vucXuxIEyKz+W40AAAAASUVORK5CYII= ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/email.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVBgZpcHLThNhGIDh9/vn7/RApwc5 VCmFWBPi1mvwAlx7BW69Afeu3bozcSE7E02ILjCRhRrds8AEbKVS2gIdSjvTmf+TYqLu+zyiqszD MCf75PnnnVwhuNcLpwsXk8Q4BYeSOsWpkqrinJI6JXVK6lSRdDq9PO+19vb37XK13Hj0YLMUTVVy WY//Cf8IVwQEGEeJN47S1YdPo4npDpNmnDh5udOh1YsZRcph39EaONpnjs65oxsqvZEyTaHdj3n2 psPpKDLBcuOOGUWpZDOG+q0S7751ObuYUisJGQ98T/Ct4Fuo5IX+MGZr95jKjRKLlSxXxFxOEmaa N4us1Upsf+1yGk5ZKhp8C74H5ZwwCGO2drssLZZo1ouIcs2MJikz1oPmapHlaoFXH1oMwphyTghy Qj+MefG+RblcoLlaJG/5y4zGCTMikEwTctaxXq/w9kuXdm9Cuzfh9acujXqFwE8xmuBb/hCwl1GK AnGccDwIadQCfD9DZ5Dj494QA2w2qtQW84wmMZ1eyFI1QBVQwV5GiaZOpdsPaSwH5HMZULi9UmB9 pYAAouBQbMHHrgQcnQwZV/KgTu1o8PMgipONu2t5KeaNiEkxgAiICDMCCFeEK5aNauAOfoXx8KR9 ZOOLk8P7j7er2WBhwWY9sdbDeIJnwBjBWBBAhGsCmiZxPD4/7Z98b/0QVWUehjkZ5vQb/Un5e/DI sVsAAAAASUVORK5CYII= ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/bookmark.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIASURBVDjLpVPPaxNREJ6Vt01caH4oWk1T 0ZKlGIo9RG+BUsEK4kEP/Q8qPXnpqRdPBf8A8Wahhx7FQ0GF9FJ6UksqwfTSBDGyB5HkkphC9tfb 7jfbtyQQTx142byZ75v5ZnZWC4KALmICPy+2DkvKIX2f/POz83LxCL7nrz+WPNcll49DrhM9v7xd O9JW330DuXrrqkFSgig5iR2Cfv3t3gNxOnv5BwU+eZ5HuON5/PMPJZKJ+yKQfpW0S7TxdC6WJaWk yvff1LDaFRAeLZj05MHsiPTS6hua0PUqtwC5sHq9zv9RYWl+nu5cETcnJ1M0M5WlWq3GsX6/T+Vy mRzHDluZiGYAAsw0TQahV8uyyGq1qFgskm0bHIO/1+sx1rFtchJhArwEyIQ1Gg2WD2A6nWawHQJV DIWgIJfLhQowTIeE9D0mKAU8qPC0220afsWFQoH93W6X7yCDJ+DEBeBmsxnPIJVKxWQVUwry+XyU wBlKMKwA8jqdDhOVCqVAzQDVvXAXhOdGBFgymYwrGoZBmUyGjxCCdF0fSahaFdgoTHRxfTveMCXv WfkuE3Y+f40qhgT/nMitupzApdvT18bu+YeDQwY9Xl4aG9/d/URiMBhQq/dvZMeVghtT17lSZW9/ rAKsvPa/r9Fc2dw+Pe0/xI6kM9mT5vtXy+Nw2kU/5zOGRpvuMIu0YAAAAABJRU5ErkJggg== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/2008/01/080123104527.jpg /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0a Hx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAqAEs AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A 7SiiivfPAEopaSgAooooAKKKKAClpKKAFopKKAFzRmkooAWkoooAKKKKACiiloASilpKAFpabS0A OFLmm0tAxaWm0tIY7NLTKcKQx1FJS0ALS0lLSGFOptKKQxc0uaSigZSWWNjhXU/Q06vFLRvOuNjy 3xDA/wCsAAH61ftrmaOMxi41j5GYYgxsHPbJFcf1yXY6Pqi7nrlJiuR8ITyyXtwsjaiQYwR9qIwM HtgnnmuvxXZSqc8eY5asOSXKJiilorQzEpCQOpAp1cb8RARptm4JB84rxnup9PpUVJ8kXIunHnko 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 ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/2006/01/060108223950-thumb.jpg /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMP FB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEc ITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgA MgBIAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 +v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR AD8A574VWu7xRZak9pObW1djK0MTSBTt4PAJAzivf28Z6CFJ+3jIJG3y3Bz+Irxr4a6/NougwJGr vHNKzSR8YK5wTyetWZ/MvtQnnWL5ZJDIPMXsWzXU4KT1M72PV4/GWgyvGhv1RpGCrvUgZPTnpWvB PHd20VxC26KVA6HGMgjIr5+1/T7mXSZEWOPe0oK/MBhfck+tdT8OvE13pEM1jrMqfYAqmCRTvKNg AjjtxmplC2wLVHS6n4/jstQns0tFLxSmPc0uM4ODxiodT+IUENgj2ULSXWRvV0JUcc9DXPX9zFda hdToy7HmdlJ7gk4NczfmN4tu+IncAApCE/QiiyGldnrHhPxJca/b3b3UKQmBlA2qVGCD6k+laN1r OnW8qxS3tujt2Mg/yK8p8P6hdadp2o2UCKBdKodmfeVGGBx+dVDqS2IWOV1KRgICVIJ5A60Ckj19 riOcYjmR+M/KwNFecafqMi2+qLEjeeLNnREOGYBlz1x60VXPYhRucf4e2JounqTJxESfLYDGWJ55 ratkbYheWNsr0Mh4rktG1SGa3toIiC0Mao+HK4+vPNaFk8au5G0dFIJ4z/k0Ka0SL5Xub8y+WjFp I2DEd8gCqzSzrE+2SNQWXbtU/dzz+NU0kLSExsgkwQpJyuMjsKdcXFzBEGlkjEQPzHYRn6YWqTb2 FZGulzbL8rMd2RnAPfNVJXjeQeY8sihxhWjwG/EjjBxUA1yNW2/ZJWC7lOF4bB61DjbIHUvuL4O4 jH4is3sXFK5pW8lvNPPHDG+E4If2/wD11na/4f1DVtFabT4GmcTMpy4UD7vrirFpdul1clk2AA4I ICnp06f5zT9R1aWy8NC5TyDtuY4n3qSqqRzjB9+tZtXjYp7mf4W07WNOmlOqqkSmAxhvOVicnkHB PWiqGheILnVNbeAlBaiIsq7ec5Hf8TRVU43jczno7HKWawaX5k09sZZP4WW6A2k9Pl2k1oRahdWt sHSOEq53fM53HnqBz6V7NafDnw7EEc2rPIAOXIPP4ir9tpWmadp9vbS26iYpjyyQM+tHMlsWk+p4 pJe6jb26TtB9mdot6AYdmBYfw5yO/XFWH1WaaYRhfOBIGxpR8xyOx/HivTX8LeH45RImk2ysOn3m x+Zx+lXG2gfcj/75H+FDcmtCrRWx49MZ5b2Y21ibopINvlO25vmwOB657VJe2niKG9bT57YfaN5w m1SSDwMn/H0r1eRkKFMlAf4o2Kn8xzWbFpemwTyTCMvJJw7SyNJu5B53E+godyVocJ/Z+tWlxcWc ZtPMQAMZHRlxj5hnvgDqeK19Rt2uvh45wfOMyM+FwCw44GB6CuwitNIkg8qeC2Xn7pgBB/SpzaWJ tLiA3AmSd9+2chlQ8Y2r2HGahzaWpXLdnjng+b/iqFBXbujcYC4HAz/SivSI/Clha3E10j2yyEko 8cZBUFQCP5/nRWkasYr3mZum3sQTXdylwqrcSqCeQHIzXUacirZK6qA7gF2A5b6+tFFZmg+TrUDE 4oorREsrSVSk60UUxMrOTk81DIzbDyfzoooYkZszvk/MfzooooA//9k= ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/2007/08/070802130847-thumb.jpg /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMP FB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEc ITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgA MgAjAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 +v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR AD8A9l166eKLytu5GXJw7KeCOhU5rIW7kCjb56PjIPnTEDBx3bBqPWF8rxFe28eRELG3dY+SoYyz ZOPU4H5D0qvGoUFygztPPlEE/N0yePwrJylzWuUisINVCBF1q4wMEZL9vfdmrOm3N9ArtdNczuWL LmZlA9uHxg9cVHK3lBnkcj1xyeeMYFJbxTJJLJIx+Y4Rc52qP6nk/l6U+aXcNDtrO6e4tIpmwC4z xRXN+G5ZToy75ZGK3FwoLMTwJnAH4AAUVoiQ1WKRtfnu5o2iimtIoVDBSSUeUnI54w4qqSy5xIjA jaAItpzn1B/TFa3iZgJ7cZwdpI/OufuLlbaJppDhF6EcnJx0FZSinK4blLzBd68I0YkWqgyJngE9 CQD19M+p9K1QMAccj36VQsE2wNMoUSXDebIw+br0H5YFXFLgfO4OR6VUrX0LfY19B0+eDSlVwuWm mkGD2aVmH6EUVrad/wAg6D/doq0Qc5rd0YfEj2c0rNBHZxSrvGfmZ5Q3P0RfyrltSuzcaiLe0RmQ IVGBgNISPy+XcOo6muq1e3uL3xHc3FtDI8TWUEavsO3esk2R+GR+YrGHhq6jYyBJgVTIYIRluufp TSj1CMkm7lW1mknuEDuwWQnAXgYRjgAe+Cc9wMVq7xwDwT1zwax7W7s7JiySBzsVAdhyABj0rdsL hNRjb7Oks4UYfEZGCfw9qmUEthytf3TS8PX1xNo6s8mSs00Y4H3VldQPyAopNAsri30ry5IJEb7R cMAy4ODM5B/EEGimI2VRDrrOUXeEwGxz0FTaqA2mTAgEHGQfqKKKAJLEAWFuAMDy16fSoIUX+2rh 9o37AN2OcYFFFAGhRRRQB//Z ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/2005/03/050325144901-thumb.jpg /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMP FB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEc ITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgA MgA0AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 +v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR AD8A9D1zXbyz1a8is5jGFljR/lHUhf6GsxdY1SO9hc6hI+A2PM2nn24p3iUW8Ot30VxcIWm2s4Yh f4AvT8KzI3aRYZMqzbihb1HOSPrgGvSp04OCdjwa9aqqkkpPdmpdatqk4kJv5sMMGNdu08dMYqHU Na8T2cNtFdahbws0SMDBCy5yO+Sent6VGauJLcXkDWywvMTJ5iiMf6snrwP4Tz9D9RUVoqEouyt1 HQq1JxlHmd90Ztp4n1q2Zt1/bSK3LsYmDN+P41sNrN6LOK+ivrZ7kqTFFcB3PoSMEVnsrI5V1KsD ggjBBoZ2fbuYnaMDJ6D0qamChOSknb5sdLMKlJO+r89T0DQdRbU9LW4cYfeysPQg4oqn4XtpIdET ZMNryO+CvTJorkmkpNI9ik3KnFvsjkdeQXXiG/dpJCodQhVyBt2KePxJrAle5inmijDGMPuGF9cH 09Sa3/FOqwxeJLuEqxKFVJ3KADtB7ketYqXMskouo4ZAjrt+Zk2EZ46EnOfavTpWcEjwq6arSv3O ni0Rb+xka2uts3l5RccE46Zzwc9v51R8PC6s9T++HldWRFdjjdg4BP1xUGnXD296pUzohjPnANll yQeD7Hp6YrqriwXWbSK6tCEu1xubG3f/ALX+fcdq4Kk5Qbp1XeL2fb1OqnGNS1SkrSWrXf0K+sx2 19pq6lGpiuFYJNGeobure4/lXO101w1teW13FcD7LqDIpcOcLIV6EZ4yenr+VcwRkg5PHatsA5ez cZdPyMceo+0U47P8ztPCN0v9hhZpQCs0gAY9Bu4oqx4XlSbQotmTsZ1PHcMaK5qnxv1PYofwo+iO P8RQyQa3euXZ2kZWIjUA52qOMn2zWOtyCeIJXcDIG5Tn9eK2talMuv6gxbciyKEPbb5an+prGllg WNmt9jPjkx4JA7nj/OcV6VP4F6Hg1/40tOoRmS0uZNpKryybR1DA7l9+5robCZ5YFtTK9vKi74pV z0PzcjuAcNj0yO9c0yFbWOOW7X7Yh3hmYfePbAxxzirlreG1eKSf5MEFFkPGO6nn/INZYikqkXH+ rjoVXSmpHXalatq2jNNNZOL2M7GRM4JB+8P7y45H1rlApUbWOSOpPeu203VbY2UYt18yDaShV1+U DqpJI5H8qwdWNpGhjhRv3rGRcPG209+VJOCD39K4MDWdOXspI9DHUfaR9rFm/wCFraWDQ02SpteR 3wU6ZPTrRTPC17Cmiqs1wikSuFEjBTjP8s5opz1kzuoq1OK8kadqoa8vgwBHmKMH/dFMltoIdSs/ KhjTdvB2qBniiipNB2p2tubC6lMERkETEPsGc49anSCGa2iEsUbgKD8yg9qKKAKunwxi4voxGgjE mAu0YAx6U25t4YdV08RQxx7jIG2KBn5e9FFAGoFXH3R+VFFFAH//2Q== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/images/2006/09/060908171606-thumb.jpg /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg SlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMP FB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEc ITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgA MgBJAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 +v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR AD8A6ZtUnuLq5l8q4XzomiZTOCiAjGdu3t161itNLBpsmDi7T5TlDnv83pggZ9OvpUugX8mraZBc xTxOXiDGUD755BGO3QjmrN1Yrc3Nq21BkBd6MU9SUbHVfY8c0C0RzwudTuJ/PnTCyHYeNoIA6gHF V5LtcSw3cijbjZtGSDjpn0rotX0+SaxuJoZkmmfaQW+XaM8gc/Sqllo0V/YNBfQItyEx5i5yR2IH HPAqJTUVqTKajqzmob7ybhcrtKEc9gabNai98ZLFrSR/Z/KEljG2W831JyBllA5HYevWuv03w5bR ySO0hcqNpZRwdp9/pWdNEkl3qOp20TTvaYtLd85YED59o6DkgHuSDXHPF3qctM0pyjJ2ZfBWWAMh ypbBCydcf1/xqMQolyrw5L/xfMD1zxWHc3aXdtbXSkC5ULlFJJ6AgYA/LFaGs3JslQxuPm4Vu2Bm u5CNe2u4Lcb287bINi7QSQ3b8OaP7Uh/5+R/3ya5C58TRW9vaQlyxaVQqr8uGPRiRyACa2Pt83/P 9D/3yf8AGmBm/Da6sLmXVoNN84oty0vzoFRVbO0KAeny+3Wuu1hcaTeK1sXZIvM2QHYzLg52nsea 4/w/8NPGXhaeV7LU9FzOFDrIlw657HKxdsnvirOseGviJDp93qp8Q6bDFp9rJcPHAs0ZZVUscB4h lsA4GfyqZ8zXu7hHTcv+DdQfUvBlpdyGZxABDtJBLBeCeDnqT154zWtDrMEjSsSiCPcN5YDjHfPT p/8AqrwvQ/HGt6HeyXEdyblZc+ZFcEsrZ6nrkH6EVmanrN7q11NPczNiWRpPLUnauewHoK5KuGlU le9i6bpunKNWN30PU/EPjzSCILDSNYnNvJdol1sjKOIud2yTsDk8YPXggcV6JbWcemWJhht9luqZ WJOu7vyepz618sV2vhr4j694bWCGbF5ppAAgmXGEHHyN26e4z2rCvgWoJUtWu/Ux5XFpxPXz4f02 LS5I1jMPmqdzMcvj2P5VBqmnWv8AYrmLEUMabSZOQO2SAeuTUVxp6axDa69pF28/n/OhZj8oIPB5 wCDxjHX6Uadb6sL2/tNUiW7sCAiIAqjB5X3Ix9f0rWhVTjfm18zRO+hx0FvCrpLNPvjaLfD5K4I+ bGW79dv61P8A2Sn/AEFf/HmrdbRntpZLMo+zfld6bcA8gD1AyMVB/Yp/54w/9+lruTuI9ltrFpdS mUyW6QvbQ+XG0CH5vmLnpk5+Xv2qp4z0xbfwF4mlYQOf7KutpWBVIPlN3FSR6+trcsWNvsEMSiOW ZUdWCtnPXGcr+tUfFeuPqHgPxMgt4yg0q43NDOJNpMTdRgYHXn26UKbl8St/wNPx3EoOOjd/+Drb 5bHx3RRRTGHGKtQTWxiEdzHK+3OwrJjGRwMYPGeaq0UAdNa+ItS8Iag8ei6jKYNoV0lAKsf4vkyQ Oc4PXFeh+FviqNVuFstTsfJkKqqS2ylxuzjJXsOR3OK8WNXtL1OTSpmngiha4/geWMPs9cA8Z+oN YToRette4nFPU+gLe/ll1WeFxcgwAtI0iE+Z0AwQeR1HvntWv9v0z/nxi/WvOPhz4n1TXNSuo7+9 aWRAJB+7AAXoQcdRz07V6L9nP/PVfzq4Xu00VbRHV280v2WP96/3B/EfT/65rI8ZSyHwTrxLsT/Z twOT6xtmiitBHyRRRRQAUUUUAIaBRRQBJFNJC26KR0b1ViDU39oXv/P5cf8Af0/40UUgP//Z ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.sciencedaily.com/videos/images/2005/15053-1.jpg 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 1NR1Po//2Q== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://iv.doubleclick.net/ad/nbcu.science/environment_earth;!category=sciencedaily;f=environment;sect=earth;sub=;sz=300x250,2x2;tile=7;pos=7;ord=123456789012? R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://iv.doubleclick.net/ad/nbcu.science/environment_earth;!category=sciencedaily;f=environment;sect=earth;sub=;sz=160x600,3x3;tile=12;pos=12;ord=123456789012? R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw== ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.sciencedaily.com/styles/main6.css HTML { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; BACKGROUND: = url(/images/top.gif) #fff repeat-x 50% top; PADDING-BOTTOM: 0px; MARGIN: = 0px; COLOR: #000; LINE-HEIGHT: 1.2; PADDING-TOP: 0px; FONT-FAMILY: = Arial, Helvetica, sans-serif } BODY { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; BACKGROUND: = url(/images/top.gif) #fff repeat-x 50% top; PADDING-BOTTOM: 0px; MARGIN: = 0px; COLOR: #000; LINE-HEIGHT: 1.2; PADDING-TOP: 0px; FONT-FAMILY: = Arial, Helvetica, sans-serif } #wrapper { MARGIN: 0px auto; WIDTH: 1000px; TEXT-ALIGN: left } #content { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: left; = PADDING-BOTTOM: 10px; MARGIN: 92px 0px 0px 6px; WIDTH: 678px; = PADDING-TOP: 0px } #date { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; = PADDING-TOP: 0px; TEXT-ALIGN: right } #textsize { HEIGHT: 20px; TEXT-ALIGN: right } #title { MARGIN: 0px auto; WIDTH: 1000px; POSITION: absolute; TOP: 160px } #titleleft { DISPLAY: inline; FLOAT: left; MARGIN: 0px 0px 0px 6px; WIDTH: 678px } #titleleftcontent { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } #titleleftcontent H1 { FONT-SIZE: 20px } #titleright { DISPLAY: inline; FLOAT: left; WIDTH: 310px; TEXT-ALIGN: right } #titlerightcontent { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 6px = 0px 0px; PADDING-TOP: 0px } #titleside { DISPLAY: inline; FLOAT: left; MARGIN: 6px 6px 0px 0px; WIDTH: 310px; = TEXT-ALIGN: right } #titlesidecontent { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } #top { BORDER-TOP: #000 1px solid } #topleft { DISPLAY: inline; FLOAT: left; WIDTH: 344px } #topleftcontent { MARGIN: 10px 0px 0px } #topright { DISPLAY: inline; FLOAT: left; WIDTH: 334px } #toprightcontent { MARGIN: 10px 0px 0px 10px } #mainleft { DISPLAY: inline; FLOAT: left; WIDTH: 276px } #mainleftcontent { MARGIN: 0px } #mainright { DISPLAY: inline; FLOAT: left; WIDTH: 240px } #mainrightcontent { MARGIN: 0px 0px 0px 10px } #main { BORDER-TOP: #000 1px solid } #mainmenu { DISPLAY: inline; FLOAT: left; WIDTH: 130px } #mainmenucontent { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; = PADDING-TOP: 8px } #mainmenucontent UL { =09 } #mainmenucontent LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } #mainlist { DISPLAY: inline; FLOAT: left; WIDTH: 548px } #mainlistcontent { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; PADDING-BOTTOM: 20px; = PADDING-TOP: 8px } .botleft { DISPLAY: inline; FLOAT: left; WIDTH: 222px } .botleftcontent { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 5px } .botcenter { DISPLAY: inline; FLOAT: left; WIDTH: 228px } .botcentercontent { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; = PADDING-TOP: 5px } .botright { FLOAT: left; WIDTH: 224px } .botrightcontent { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; = PADDING-TOP: 5px } #side { DISPLAY: inline; FLOAT: right; MARGIN: 92px 6px 0px 0px; WIDTH: 310px } #sidecontent { PADDING-RIGHT: 0px; BORDER-TOP: #000 1px solid; PADDING-LEFT: 0px; = PADDING-BOTTOM: 10px; MARGIN: 0px 0px 10px 10px; PADDING-TOP: 5px } DIV.leaderboard { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: right; = PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 728px; BORDER-TOP-STYLE: none; = PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = HEIGHT: 90px; BORDER-BOTTOM-STYLE: none } DIV.rectangle { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 10px 0px; WIDTH: 300px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; = BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 250px; = BORDER-BOTTOM-STYLE: none } DIV.skyscraper { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 7px 0px 10px 5px; WIDTH: 160px; BORDER-TOP-STYLE: none; = PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = HEIGHT: 600px; BORDER-BOTTOM-STYLE: none } DIV.custom { HEIGHT: 5px } #header { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; MARGIN: 0px = 0px -3px; PADDING-TOP: 5px; HEIGHT: 93px; TEXT-ALIGN: center } #headercontent { MARGIN: 0px auto; WIDTH: 990px } #footer { CLEAR: both; PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 13px; = BACKGROUND: #ccc; PADDING-BOTTOM: 10px; MARGIN: 0px; WIDTH: 100%; = PADDING-TOP: 10px; TEXT-ALIGN: center } #footercontents { DISPLAY: inline; MARGIN: 0px auto; WIDTH: 1000px; COLOR: #000 } #footercontents A { COLOR: #000; TEXT-DECORATION: none } #footercontents A:hover { COLOR: #000; TEXT-DECORATION: underline } #searchcontents { PADDING-RIGHT: 10px; DISPLAY: inline; PADDING-LEFT: 0px; FONT-SIZE: = 13px; BACKGROUND: none transparent scroll repeat 0% 0%; FLOAT: right; = PADDING-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: #fff; LINE-HEIGHT: = 15px; PADDING-TOP: 5px } #searchcontents A { COLOR: #fff; TEXT-DECORATION: none } #searchcontents A:hover { TEXT-DECORATION: underline } #searchcontents INPUT.searchinput { PADDING-RIGHT: 0px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; MARGIN: = 0px; VERTICAL-ALIGN: top; WIDTH: 230px; BORDER-TOP-STYLE: none; = PADDING-TOP: 2px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; = HEIGHT: 17px; BORDER-BOTTOM-STYLE: none } #navbar { LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 97px } #navbarwrapper { MARGIN: 0px auto; WIDTH: 1000px } #navbarcontents { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; BACKGROUND: none transparent = scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 660px; = PADDING-TOP: 0px } UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px = 0px 5px 15px; PADDING-TOP: 0px } LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; = PADDING-TOP: 0px } UL.black { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } UL.black LI { PADDING-LEFT: 12px; BACKGROUND: url(/images/bullet_black.gif) white = no-repeat 0px 3px } UL.white { LIST-STYLE-IMAGE: url(/images/bullet_white.gif) } #nav { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: = 13px; BACKGROUND: url(/images/blank.gif) repeat-x 50% bottom; FLOAT: = left; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 4px; LINE-HEIGHT: 15px; = PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #nav UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: = 13px; BACKGROUND: url(/images/blank.gif) repeat-x 50% bottom; FLOAT: = left; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 4px; LINE-HEIGHT: 15px; = PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #nav A { PADDING-RIGHT: 3px; DISPLAY: block; PADDING-LEFT: 3px; BACKGROUND: = url(/images/gray.gif) repeat-x 50% bottom; PADDING-BOTTOM: 3px; WIDTH: = 116px; COLOR: #fff; PADDING-TOP: 3px; TEXT-DECORATION: none } #nav A:hover { BACKGROUND: url(/images/red.gif) repeat-x 50% bottom; COLOR: #fff } #nav LI { PADDING-RIGHT: 0px; MARGIN-TOP: 5px; PADDING-LEFT: 0px; FLOAT: left; = PADDING-BOTTOM: 0px; WIDTH: 122px; MARGIN-RIGHT: 10px; PADDING-TOP: 0px } #nav LI A { VERTICAL-ALIGN: middle; TEXT-ALIGN: center } #nav LI UL { FONT-WEIGHT: normal; LEFT: -999em; MARGIN: 0px; WIDTH: 155px; POSITION: = absolute } #nav LI UL LI { BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BACKGROUND: none = transparent scroll repeat 0% 0%; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px; = BORDER-RIGHT-WIDTH: 0px } #nav LI UL LI A { FONT-WEIGHT: normal; BACKGROUND: #ddd; COLOR: #009; TEXT-ALIGN: left; = TEXT-DECORATION: none } #nav LI UL LI A STRONG { COLOR: #900 } #nav LI UL LI A:hover { BACKGROUND: #fff; COLOR: #900 } #nav LI:hover UL { LEFT: auto } #nav LI.sfhover UL { LEFT: auto } *:first-child + HTML #nav LI:hover UL { POSITION: static } #nav LI.sfhover UL { POSITION: static } #sections { LEFT: 0px; WIDTH: 100%; BORDER-BOTTOM: #fff 1px solid; POSITION: = absolute; TOP: 125px } #sectioncontents { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = auto; WIDTH: 77em; PADDING-TOP: 0px } #sectiontabs { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; FLOAT: left; = PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 15px; PADDING-TOP: 0px; = LIST-STYLE-TYPE: none } #sectiontabs UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; FLOAT: left; = PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 15px; PADDING-TOP: 0px; = LIST-STYLE-TYPE: none } #sectiontabs A { PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: = 2px; WIDTH: 9em; PADDING-TOP: 2px; HEIGHT: 15px; TEXT-DECORATION: none } #sectiontabs LI { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: left; = PADDING-BOTTOM: 0px; MARGIN: 5px 4px 0px; WIDTH: 9em; PADDING-TOP: 0px } #sectiontabs LI A { MARGIN: 0px; COLOR: #009; BACKGROUND-COLOR: #eee; TEXT-ALIGN: center } #sectiontabs LI A.thissection { COLOR: #900; BACKGROUND-COLOR: #fff } #sectiontabs LI A:hover { COLOR: #900; BACKGROUND-COLOR: #fff } #sectiontabs LI UL { LEFT: -999em; MARGIN: 0px; WIDTH: 155px; POSITION: absolute } #sectiontabs LI UL LI { BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: = 0px; MARGIN: 0px; WIDTH: 155px; BORDER-RIGHT-WIDTH: 0px } #sectiontabs LI UL LI A { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; WIDTH: = 145px; COLOR: #009; PADDING-TOP: 2px; BACKGROUND-COLOR: #ddd; = TEXT-ALIGN: left; TEXT-DECORATION: none } #sectiontabs LI UL LI A:hover { COLOR: #900; BACKGROUND-COLOR: #fff } #sectiontabs LI:hover UL { LEFT: auto } #sectiontabs LI.sfhover UL { LEFT: auto } *:first-child + HTML #sectiontabs LI:hover UL { POSITION: static } #sectiontabs LI.sfhover UL { POSITION: static } #tablist { PADDING-BOTTOM: 22px; MARGIN: 6px 0px 0px; BORDER-BOTTOM: #999 1px = solid } #tablist UL { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #tablist LI { PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #tablist A { BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #999 1px = solid; PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 13px; = BACKGROUND: #eee; FLOAT: left; PADDING-BOTTOM: 2px; BORDER-LEFT: #999 = 1px solid; COLOR: #009; LINE-HEIGHT: 17px; MARGIN-RIGHT: 8px; = PADDING-TOP: 2px; BORDER-BOTTOM: #999 1px solid; TEXT-DECORATION: none } #tablist A:hover { BACKGROUND: #fff; COLOR: #900 } #tablist LI A.activetab { BACKGROUND: #fff; COLOR: #900; BORDER-BOTTOM: #fff 1px solid } #tablist UL A:hover { BACKGROUND: #fff; COLOR: #900! important } #tabcontainer { CLEAR: both; BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 10px; = BORDER-TOP: #999 1px; PADDING-LEFT: 10px; BACKGROUND: #fff; = PADDING-BOTTOM: 10px; MARGIN: 0px; BORDER-LEFT: #999 1px solid; = PADDING-TOP: 10px; BORDER-BOTTOM: #999 1px solid } H1 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 18px; PADDING-BOTTOM: = 0px; MARGIN: 0px; COLOR: #900; PADDING-TOP: 0px } H1.moreleft { FLOAT: left; MARGIN-BOTTOM: -3px; COLOR: #000 } H1.story { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 20px; PADDING-BOTTOM: = 10px; PADDING-TOP: 10px } H2 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 16px; PADDING-BOTTOM: = 0px; MARGIN: 0px; COLOR: #900; PADDING-TOP: 0px } H2.block { COLOR: #000 } H2.videos { PADDING-TOP: 6px } H2.headleft { FLOAT: left; COLOR: #000; PADDING-TOP: 5px } DIV.headright { PADDING-TOP: 7px; TEXT-ALIGN: right } DIV.moreright { MARGIN-BOTTOM: -3px; PADDING-TOP: 5px; TEXT-ALIGN: right } DIV.nextedition { MARGIN-TOP: -3px; TEXT-ALIGN: right } DIV.otherleft { PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 15px; MARGIN: -15px 0px 0px; WIDTH: 339px; PADDING-TOP: 0px } DIV.otherright { FLOAT: left; MARGIN: 5px 0px 0px; WIDTH: 329px } H3 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: = 0px; MARGIN: 0px; COLOR: #000; PADDING-TOP: 0px } HR { BORDER-TOP: #000 1px solid; BORDER-LEFT-WIDTH: 0px; BACKGROUND: #000; = BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 0px; BORDER-RIGHT-WIDTH: 0px } A { COLOR: #009; TEXT-DECORATION: none } A:hover { TEXT-DECORATION: underline } A.red { COLOR: #900; TEXT-DECORATION: none } A.red:hover { TEXT-DECORATION: underline } A.blue { COLOR: #009; TEXT-DECORATION: none } A.blue:visited { COLOR: #006 } A.blue:hover { TEXT-DECORATION: underline } A.black { COLOR: #000; TEXT-DECORATION: none } A.black:hover { TEXT-DECORATION: underline } A.gray { COLOR: #666; TEXT-DECORATION: none } A.gray:hover { TEXT-DECORATION: underline } IMG.floatLeft { FLOAT: left; MARGIN: 2px 5px 5px 0px } .left { FLOAT: left } .right { FLOAT: right } .alignRight { TEXT-ALIGN: right } .clear { CLEAR: both } #topstories { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = 0px 10px; OVERFLOW: visible; PADDING-TOP: 0px; POSITION: relative; = HEIGHT: 215px } DIV.panel { DISPLAY: none } #topstories DIV.storyphoto { FLOAT: left; MARGIN: 2px 10px 2px 0px; OVERFLOW: hidden; WIDTH: 100px; = MAX-HEIGHT: 150px } #topstories DIV.storyblurb { FLOAT: left; WIDTH: 230px } DIV.moreon { FLOAT: left; MARGIN: 10px 5px 0px 0px; WIDTH: 70px } DIV.moreon UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LIST-STYLE-IMAGE: = url(/images/bullet_black.gif); PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px = 15px; PADDING-TOP: 0px } DIV.moretopics { FLOAT: left; MARGIN: 10px 10px 0px 0px; WIDTH: 249px } #mainstories { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px = 0px; OVERFLOW: visible; PADDING-TOP: 0px; POSITION: relative; HEIGHT: = 160px } #mainstories DIV.storyphoto { FLOAT: left; MARGIN: 2px 10px 2px 0px; OVERFLOW: hidden; WIDTH: 75px; = MAX-HEIGHT: 125px } #mainstories DIV.storyblurb { FLOAT: left; WIDTH: 190px } #story1 { DISPLAY: block } DIV.firststory { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; = PADDING-TOP: 5px } DIV.secondstory { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 10px; PADDING-TOP: 5px } #videos { PADDING-TOP: 3px } #video { PADDING-BOTTOM: 5px } #googlesearch TABLE { MARGIN: 0px auto; PADDING-TOP: 10px } #googlesearch TABLE TABLE { MARGIN: 0px } BLOCKQUOTE { PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: = 0px; PADDING-TOP: 10px } #misc { DISPLAY: none } .amazon { CLEAR: both; MARGIN: 10px 0px } FORM { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #story { FLOAT: left; WIDTH: 365px } #first { MARGIN-TOP: 0px; FONT-SIZE: medium; MARGIN-BOTTOM: -2px; PADDING-TOP: = 0px } SPAN.date { COLOR: #666; FONT-STYLE: italic } #seealso { PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 10px; WIDTH: 140px; PADDING-TOP: 2px } #seealso DIV { PADDING-TOP: 10px } #seealso UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = 0px 0px 20px; PADDING-TOP: 0px } #seealso UL LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 0px } #photo { MARGIN: 5px 0px } P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: = 5px; MARGIN: 0px; PADDING-TOP: 5px } #related { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; FLOAT: right; PADDING-BOTTOM: = 10px; WIDTH: 300px; PADDING-TOP: 0px } #relatedstories DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; = PADDING-TOP: 5px } #related_articles DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; = PADDING-TOP: 5px } #morenewsleft { FLOAT: left; WIDTH: 260px } #morenewsright { FLOAT: right; WIDTH: 230px } #rssbox { BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #999 1px = solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 8px 0px 10px = 10px; BORDER-LEFT: #999 1px solid; WIDTH: 200px; PADDING-TOP: 10px; = BORDER-BOTTOM: #999 1px solid } #article_note { BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #999 1px = solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 10px 0px; = BORDER-LEFT: #999 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #999 1px = solid } #book_details { MARGIN: 0px 0px 10px } #moreheadlines { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; PADDING-TOP: 2px } DIV.edition { DISPLAY: none } DIV.morepanel { DISPLAY: none } #panel1 { DISPLAY: block } #scroll { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; = PADDING-TOP: 2px } DIV.scroll_topics { FLOAT: left; WIDTH: 150px } DIV.scroll_headlines { FLOAT: left; MARGIN: 0px 0px 12px 10px; WIDTH: 295px } DIV.section_topics { FLOAT: left; WIDTH: 150px } DIV.section_headlines { FLOAT: left; MARGIN: 0px 10px 12px; WIDTH: 324px } DIV.search_topics { FLOAT: left; WIDTH: 150px } DIV.search_headlines { FLOAT: left; MARGIN: 0px 0px 12px 10px; WIDTH: 295px } #citationbox { BORDER-RIGHT: #999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #999 1px = solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 10px 0px; = BORDER-LEFT: #999 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #999 1px = solid } #citationformat { FLOAT: left; WIDTH: 55px } #citationtext { MARGIN: 0px 0px 0px 65px } #bottomsearch { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px = 0px 0px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: = none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none } #googleside { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: = 10px; WIDTH: 175px; PADDING-TOP: 10px } #googleside DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; OVERFLOW: = hidden; PADDING-TOP: 5px } #googleside DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googleside DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googleside DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googlerelated { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: = 10px; WIDTH: 300px; PADDING-TOP: 0px } #googlerelated DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; OVERFLOW: = hidden; PADDING-TOP: 5px } #googlerelated DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googlerelated DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googlerelated DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googlestory { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: = 10px; WIDTH: 358px; PADDING-TOP: 10px } #googlestory DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; OVERFLOW: = hidden; PADDING-TOP: 5px } #googlestory DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googlestory DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googlestory DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googlesearch { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; FONT-SIZE: 13px; FLOAT: right; = PADDING-BOTTOM: 10px; OVERFLOW: hidden; WIDTH: 175px; PADDING-TOP: 10px } #googlesearch DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; OVERFLOW: = hidden; PADDING-TOP: 5px } #googlesearch DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googlesearch DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googlesearch DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googlehome { PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FONT-SIZE: 13px; = PADDING-BOTTOM: 10px; OVERFLOW: hidden; WIDTH: 180px; PADDING-TOP: 5px } #googlehome DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; OVERFLOW: = hidden; PADDING-TOP: 5px } #googlehome DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googlehome DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googlehome DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googletop { FONT-SIZE: 13px; MARGIN: 0px 0px 10px } #googletop DIV { OVERFLOW: hidden } #googletop DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googletop DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googletop DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googletop DIV.col1 { PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 5px; WIDTH: 164px; PADDING-TOP: 5px } #googletop DIV.col2 { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: = 5px; WIDTH: 164px; PADDING-TOP: 5px } #googletop DIV.col3 { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FLOAT: right; PADDING-BOTTOM: = 5px; WIDTH: 164px; PADDING-TOP: 5px } #googleend { FONT-SIZE: 13px; MARGIN: 0px 0px 10px } #googleend DIV { OVERFLOW: hidden } #googleend DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googleend DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googleend DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googleend DIV.col1 { PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 5px; WIDTH: 164px; PADDING-TOP: 5px } #googleend DIV.col2 { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: = 5px; WIDTH: 164px; PADDING-TOP: 5px } #googleend DIV.col3 { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FLOAT: right; PADDING-BOTTOM: = 5px; WIDTH: 164px; PADDING-TOP: 5px } #googlebottom { FONT-SIZE: 13px; MARGIN: 20px 0px 10px; WIDTH: 678px } #googlebottom DIV { OVERFLOW: hidden } #googlebottom DIV.left { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; FLOAT: left; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } #googlebottom DIV.right { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px; TEXT-ALIGN: right } #googlebottom DIV.clear { CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: = 0px; PADDING-TOP: 0px } #googlebottom DIV.col1 { PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 5px; WIDTH: 210px; PADDING-TOP: 5px } #googlebottom DIV.col2 { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: = 5px; WIDTH: 220px; PADDING-TOP: 5px } #googlebottom DIV.col3 { PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FLOAT: right; PADDING-BOTTOM: = 5px; WIDTH: 210px; PADDING-TOP: 5px } #share_form { BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; DISPLAY: = none; Z-INDEX: 999; BACKGROUND: #eee; BORDER-LEFT: #999 1px solid; = WIDTH: 300px; BORDER-BOTTOM: #999 1px solid; POSITION: absolute } #share_title { FLOAT: left; MARGIN: 5px; WIDTH: 60% } #share_close { FLOAT: right; MARGIN: 5px; FONT-STYLE: italic } #share_close A { COLOR: #009; TEXT-DECORATION: none } #share_close A:hover { COLOR: #900; TEXT-DECORATION: none } #share_form DIV.clear { CLEAR: both; FLOAT: none } #share_social { PADDING-RIGHT: 10px; PADDING-LEFT: 7px; BACKGROUND: #fff; = PADDING-BOTTOM: 5px; PADDING-TOP: 5px } #share_social UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #share_social UL LI { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px; WIDTH: 50%; PADDING-TOP: 0px } #share_social UL LI A { PADDING-RIGHT: 0px; BACKGROUND-POSITION: 0px 2px; DISPLAY: block; = PADDING-LEFT: 22px; FLOAT: left; PADDING-BOTTOM: 0px; VERTICAL-ALIGN: = middle; COLOR: #009; PADDING-TOP: 4px; BACKGROUND-REPEAT: no-repeat; = HEIGHT: 20px; TEXT-DECORATION: none } #share_social UL LI A:hover { COLOR: #900; TEXT-DECORATION: underline } #share_delicious { BACKGROUND-IMAGE: url(/images/delicious.gif)! important } #share_digg { BACKGROUND-IMAGE: url(/images/digg.gif)! important } #share_furl { BACKGROUND-IMAGE: url(/images/furl.gif)! important } #share_netscape { BACKGROUND-IMAGE: url(/images/netscape.gif)! important } #share_yahoo_myweb { BACKGROUND-IMAGE: url(/images/yahoo_myweb.gif)! important } #share_stumbleupon { BACKGROUND-IMAGE: url(/images/stumbleupon.gif)! important } #share_google_bmarks { BACKGROUND-IMAGE: url(/images/google_bmarks.gif)! important } #share_technorati { BACKGROUND-IMAGE: url(/images/technorati.gif)! important } #share_blinklist { BACKGROUND-IMAGE: url(/images/blinklist.gif)! important } #share_newsvine { BACKGROUND-IMAGE: url(/images/newsvine.gif)! important } #share_magnolia { BACKGROUND-IMAGE: url(/images/magnolia.gif)! important } #share_reddit { BACKGROUND-IMAGE: url(/images/reddit.gif)! important } #share_facebook { BACKGROUND-IMAGE: url(/images/facebook.gif)! important } #share_tailrank { BACKGROUND-IMAGE: url(/images/tailrank.gif)! important } #share_slashdot { BACKGROUND-IMAGE: url(/images/slashdot.gif)! important } #share_fark { BACKGROUND-IMAGE: url(/images/fark.gif)! important } #blog_form { BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; DISPLAY: = none; Z-INDEX: 999; BACKGROUND: #eee; BORDER-LEFT: #999 1px solid; = WIDTH: 475px; BORDER-BOTTOM: #999 1px solid; POSITION: absolute } #blog_title { FLOAT: left; MARGIN: 5px; WIDTH: 60% } #blog_close { FLOAT: right; MARGIN: 5px; FONT-STYLE: italic } #blog_close A { COLOR: #009; TEXT-DECORATION: none } #blog_close A:hover { COLOR: #900; TEXT-DECORATION: none } #blog_form DIV.clear { CLEAR: both; FLOAT: none } #blog_fields { PADDING-RIGHT: 10px; PADDING-LEFT: 7px; BACKGROUND: #fff; = PADDING-BOTTOM: 5px; PADDING-TOP: 1px; TEXT-ALIGN: left } #blog_fields FORM { BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; = BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; = MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px } #blog_fields UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #blog_fields UL LI { CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 0px 0px 7px; PADDING-TOP: 0px } #blog_fields UL LI LABEL { FLOAT: left; MARGIN: 3px 0px; WIDTH: 70px } #blog_fields UL LI INPUT { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 3px; WIDTH: 375px; PADDING-TOP: 0px } #blog_fields UL LI TEXTAREA { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 3px; WIDTH: 375px; PADDING-TOP: 0px } #blog_fields UL LI LABEL.blog_submit_label { FLOAT: left; WIDTH: 370px } #blog_fields UL LI INPUT.blog_submit { FLOAT: right; WIDTH: 75px } #blog_fields UL LI INPUT.blog_text { WIDTH: 375px } #blog_fields UL LI TEXTAREA.blog_summary { WIDTH: 375px; HEIGHT: 150px } #cite_form { BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; DISPLAY: = none; Z-INDEX: 999; BACKGROUND: #eee; BORDER-LEFT: #999 1px solid; = WIDTH: 500px; BORDER-BOTTOM: #999 1px solid; POSITION: absolute } #cite_title { FLOAT: left; MARGIN: 5px; WIDTH: 60% } #cite_close { FLOAT: right; MARGIN: 5px; FONT-STYLE: italic } #cite_close A { COLOR: #009; TEXT-DECORATION: none } #cite_close A:hover { COLOR: #900; TEXT-DECORATION: none } #cite_form DIV.clear { CLEAR: both; FLOAT: none } #cite_fields { PADDING-RIGHT: 10px; PADDING-LEFT: 7px; BACKGROUND: #fff; = PADDING-BOTTOM: 5px; PADDING-TOP: 1px; TEXT-ALIGN: left } #cite_fields FORM { BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; = BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; = MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px } #cite_fields UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #cite_fields UL LI { CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 0px 0px 7px; PADDING-TOP: 0px } #cite_fields UL LI LABEL { FLOAT: left; MARGIN: 3px 0px; WIDTH: 75px } #cite_fields UL LI INPUT { FLOAT: left; MARGIN: 3px 0px } #cite_fields UL LI DIV { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 3px 3px 10px; WIDTH: 385px; PADDING-TOP: 0px } #cite_fields UL LI DIV P { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px } #cite_fields UL LI LABEL.cite_submit_label { FLOAT: left; WIDTH: 395px } #cite_fields UL LI INPUT.cite_style { FLOAT: left; WIDTH: 15px } #cite_fields UL LI INPUT.cite_submit { FLOAT: right; WIDTH: 75px } #cite_fields UL LI DIV.citation { WIDTH: 385px } #email_form { BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; DISPLAY: = none; Z-INDEX: 999; BACKGROUND: #eee; BORDER-LEFT: #999 1px solid; = WIDTH: 300px; BORDER-BOTTOM: #999 1px solid; POSITION: absolute } #email_title { FLOAT: left; MARGIN: 5px; WIDTH: 60% } #email_close { FLOAT: right; MARGIN: 5px; FONT-STYLE: italic } #email_close A { COLOR: #009; TEXT-DECORATION: none } #email_close A:hover { COLOR: #900; TEXT-DECORATION: none } #email_form DIV.clear { CLEAR: both; FLOAT: none } #email_fields { PADDING-RIGHT: 10px; PADDING-LEFT: 7px; BACKGROUND: #fff; = PADDING-BOTTOM: 5px; PADDING-TOP: 1px; TEXT-ALIGN: left } #email_fields FORM { BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; = BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; = MARGIN: 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px } #email_fields UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #email_fields UL LI { CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 0px 0px 7px; PADDING-TOP: 0px } #email_fields UL LI LABEL { FLOAT: left; MARGIN: 3px 0px; WIDTH: 95px } #email_fields UL LI INPUT { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 3px; WIDTH: 175px; PADDING-TOP: 0px } #email_fields UL LI INPUT.email_self { FLOAT: left; WIDTH: 15px } #email_fields UL LI INPUT.email_submit { FLOAT: right; WIDTH: 75px } #email_fields UL LI INPUT.email_text { WIDTH: 175px } #feedback { WIDTH: 300px } #feedback_form { BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; = BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; = MARGIN: 2px 0px 0px; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px } #feedback_form UL { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none } #feedback_form UL LI { CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; MARGIN: 0px 0px 7px; PADDING-TOP: 0px } #feedback_form UL LI LABEL { FLOAT: left; MARGIN: 3px 0px; WIDTH: 75px } #feedback_form UL LI INPUT { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 3px; WIDTH: 205px; PADDING-TOP: 0px } #feedback_form UL LI INPUT.feedback_submit { FLOAT: right; WIDTH: 75px } #feedback_form UL LI INPUT.feedback_text { WIDTH: 205px } #feedback_form UL LI LABEL.feedback_submit_label { FLOAT: left; WIDTH: 190px } #feedback_form UL LI TEXTAREA { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: = 0px; MARGIN: 3px; WIDTH: 205px; PADDING-TOP: 0px } #feedback_form UL LI TEXTAREA.feedback_comments { WIDTH: 205px; HEIGHT: 100px } #justin { MARGIN: 5px 0px } #justin DIV { DISPLAY: none } ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.sciencedaily.com/scripts/functions6.js function addLoadEvent(func) { if (!window.__load_events) { var init =3D function () { // quit if this function has already been called if (arguments.callee.done) return; =20 // flag this function so we don't do the same thing twice arguments.callee.done =3D true; =20 // kill the timer if (window.__load_timer) { clearInterval(window.__load_timer); window.__load_timer =3D null; } =20 // execute each function in the stack in the order they were = added for (var i=3D0;i < window.__load_events.length;i++) { window.__load_events[i](); } window.__load_events =3D null; }; =20 // for Mozilla/Opera9 if (document.addEventListener) { document.addEventListener("DOMContentLoaded", init, false); } =20 // for Internet Explorer /*@cc_on @*/ /*@if (@_win32) document.write("<\/scr"+"ipt>"); var script =3D document.getElementById("__ie_onload"); script.onreadystatechange =3D function() { if (this.readyState =3D=3D "complete") { init(); // call the onload handler } }; /*@end @*/ =20 // for Safari if (/WebKit/i.test(navigator.userAgent)) { // sniff window.__load_timer =3D setInterval(function() { if (/loaded|complete/.test(document.readyState)) { init(); // call the onload handler } }, 10); } =20 // for other browsers window.onload =3D init; =20 // create event function stack window.__load_events =3D []; } =20 // add function to event stack window.__load_events.push(func); } function addUnloadEvent(func) { var oldonunload =3D window.onunload; if (typeof window.onunload !=3D 'function') { window.onunload =3D func; } else { window.onunload =3D function() { oldonunload(); func(); } } } function suckerfish(type, tag, parentId) { if (window.attachEvent) { window.attachEvent("onload", function() { var sfEls =3D = (parentId=3D=3Dnull)?document.getElementsByTagName(tag):document.getEleme= ntById(parentId).getElementsByTagName(tag); type(sfEls); }); } } sfHover =3D function(sfEls) { for (var i=3D0; i 50) { urlarray =3D url.split('/'); url =3D ''; for (var i=3D0; i 50) { url +=3D '/
     ' + urlarray[i]; } else { url +=3D '/' + urlarray[i]; } } url =3D url.substring(1); url =3D url.replace('
','
'); } top +=3D '' + "\n"; top +=3D '' + "\n"; top +=3D '' + "\n"; top +=3D '' + "\n"; top +=3D '
Web = address:
     ' + url + = '
' + "\n"; text +=3D '
' + "\n"; if (document.getElementById('story')) { text +=3D '

' + document.getElementsByTagName('h1')[1].innerHTML + = '

' + "\n"; if (document.getElementById('photo')) { text +=3D '
' + "\n"; text +=3D document.getElementById('photo').innerHTML; text +=3D '
' + "\n"; } text +=3D '
'; text +=3D document.getElementById('story').innerHTML; } else { if (document.getElementById('title')) { text +=3D '
' + = document.getElementById('title').innerHTML + '
' + "\n"; text =3D = text.replace(document.getElementById('titleside').innerHTML,''); text +=3D '
' + "\n"; } text +=3D '
'; text +=3D document.getElementById('content').innerHTML; } if (document.getElementById('seealso')) { seealso +=3D document.getElementById('seealso').innerHTML; } if (document.getElementById('googletop')) { googletop +=3D document.getElementById('googletop').innerHTML; } if (document.getElementById('googleend')) { googleend +=3D document.getElementById('googleend').innerHTML; } if (document.getElementById('googlebottom')) { googlebottom +=3D document.getElementById('googlebottom').innerHTML; } if (document.getElementById('googleside')) { googleside +=3D document.getElementById('googleside').innerHTML; } if (document.getElementById('googlesearch')) { googlesearch +=3D document.getElementById('googlesearch').innerHTML; } text +=3D '
' + "\n"; text +=3D '
' + "\n"; text +=3D '
' + "\n"; text =3D text.replace(seealso,''); text =3D text.replace(googletop,''); text =3D text.replace(googlebottom,''); text =3D text.replace(googleend,''); text =3D text.replace(googleside,''); text =3D text.replace(googlesearch,''); text =3D text.replace(/]*?>[.\s\S]*?<\/scr\ipt>/gi,''); var winprint =3D window.open("","",options); winprint.document.open(); winprint.document.write('' + "\n"); winprint.document.write('' + "\n"); winprint.document.write('' + "\n"); if (document.getElementById('story')) { winprint.document.write('' + "\n"); } else { winprint.document.write('' + "\n"); winprint.document.write('' + "\n"); } winprint.document.write('' + "\n"); winprint.document.write('' + "\n"); winprint.document.write(top + "\n" + text + "\n" + bottom + "\n"); winprint.document.write('' + "\n");=20 winprint.document.close(); } /* function emailpage() { var recipient =3D prompt("Recipient's email address:",""); if (recipient =3D=3D null) { alert("You must enter an email address.") } else { var subject =3D document.title; var url =3D document.location.href; var body =3D "Please see the following page ...\n\n" + "Title: " + = subject + "\n" + "Link: " + url + "\n"; var message =3D "mailto:" + recipient + "?subject=3D" + = escape(subject) + "&body=3D" + escape(body); window.location =3D message; window.focus(); } } */ function bookmarkpage() { var url =3D document.location.href; var title =3D document.title; if ((navigator.appName =3D=3D "Microsoft Internet Explorer") && = (parseInt(navigator.appVersion) >=3D 4)) { window.external.AddFavorite(url,title); } else if (navigator.appName =3D=3D "Netscape") { window.sidebar.addPanel(title,url,""); } else { alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark"); } } function sharepage() { var form =3D document.getElementById('share_form'); =09 if (form.style.display =3D=3D 'block') { form.style.display =3D 'none'; return; } =09 var url =3D escape(document.location.href); var title =3D escape(document.title); var link =3D document.getElementById('share_link'); document.getElementById("share_delicious").href =3D = share_url("http://del.icio.us/post?url=3D{url}&title=3D{title}", url, = title); document.getElementById("share_digg").href =3D = share_url("http://digg.com/submit?phase=3D2&url=3D{url}&title=3D{title}",= url, title); document.getElementById("share_furl").href =3D = share_url("http://furl.net/storeIt.jsp?u=3D{url}&t=3D{title}", url, = title); document.getElementById("share_netscape").href =3D = share_url("http://www.netscape.com/submit/?U=3D{url}&T=3D{title}", url, = title); document.getElementById("share_yahoo_myweb").href =3D = share_url("http://myweb2.search.yahoo.com/myresults/bookmarklet?u=3D{url}= &t=3D{title}", url, title); document.getElementById("share_stumbleupon").href =3D = share_url("http://www.stumbleupon.com/submit?url=3D{url}&title=3D{title}"= , url, title); document.getElementById("share_google_bmarks").href =3D = share_url("http://www.google.com/bookmarks/mark?op=3Dedit&bkmk=3D{url}&ti= tle=3D{title}", url, title); document.getElementById("share_technorati").href =3D = share_url("http://www.technorati.com/faves?add=3D{url}", url, title); document.getElementById("share_blinklist").href =3D = share_url("http://blinklist.com/index.php?Action=3DBlink/addblink.php&Url= =3D{url}&Title=3D{title}", url, title); document.getElementById("share_newsvine").href =3D = share_url("http://www.newsvine.com/_tools/seed&save?popoff=3D0&u=3D{url}&= h=3D{title}", url, title); document.getElementById("share_magnolia").href =3D = share_url("http://ma.gnolia.com/bookmarklet/add?url=3D{url}&title=3D{titl= e}", url, title); document.getElementById("share_reddit").href =3D = share_url("http://reddit.com/submit?url=3D{url}&title=3D{title}", url, = title); document.getElementById("share_facebook").href =3D = share_url("http://www.facebook.com/share.php?u=3D{url}", url, title); document.getElementById("share_tailrank").href =3D = share_url("http://tailrank.com/share/?link_href=3D{url}&title=3D{title}",= url, title); document.getElementById("share_slashdot").href =3D = share_url("http://slashdot.org/bookmark.pl?url=3D{url}&title=3D{title}", = url, title); document.getElementById("share_fark").href =3D = share_url("http://cgi.fark.com/cgi/fark/edit.pl?new_url=3D{url}&new_comme= nt=3D{title}", url, title); var offset =3D Position.cumulativeOffset(link); form.style.left =3D (offset[0] - 20) + 'px'; form.style.top =3D (offset[1] + link.offsetHeight + 3) + 'px'; form.style.display =3D 'block'; } function share_url(base, url, title) { base =3D base.replace('{url}', url); return base.replace('{title}', title); } function blogpage() { var form =3D document.getElementById('blog_form'); =09 if (form.style.display =3D=3D 'block') { form.style.display =3D 'none'; return; } var title =3D document.getElementById('blog_headline'); var link =3D document.getElementById('blog_url'); if (document.getElementById('metadate')) { var metadate =3D document.getElementById('metadate').content; } else { var metadate =3D ''; } var summary =3D document.getElementById('blog_summary'); title.value =3D document.title; link.value =3D document.location.href; if (typeof summary.innerText !=3D 'undefined') { summary.innerText =3D 'ScienceDaily (' + metadate + ') -- ' + = document.getElementById('metasummary').content; } else if (typeof summary.textContent !=3D 'undefined') { summary.textContent =3D 'ScienceDaily (' + metadate + ') -- ' + = document.getElementById('metasummary').content; } var link =3D document.getElementById('blog_link'); var offset =3D Position.cumulativeOffset(link); form.style.left =3D (offset[0] - 170) + 'px'; form.style.top =3D (offset[1] + link.offsetHeight + 3) + 'px'; form.style.display =3D 'block'; } function copyit() { var title =3D document.getElementById('blog_headline').value; var link =3D document.getElementById('blog_url').value; var metadate =3D document.getElementById('metadate').content; var summary =3D document.getElementById('blog_summary'); if (typeof summary.innerText !=3D 'undefined') { summary =3D summary.innerText; } else if (typeof summary.textContent !=3D 'undefined') { summary =3D summary.textContent; } else { summary =3D ''; } var text =3D '

' + title + = '
' + "\n" + summary + ' ... > read full article

'; copy_clip(text,text); } function citepage() { var form =3D document.getElementById('cite_form'); =09 if (form.style.display =3D=3D 'block') { form.style.display =3D 'none'; return; } var metadate =3D document.getElementById('metadate').content; var source =3D document.getElementById('source').innerHTML; var title =3D document.title; var link =3D document.location.href; var cite_apa =3D document.getElementById('cite_apa'); var cite_mla =3D document.getElementById('cite_mla'); var meta =3D new Date(getDateFromFormat(metadate,'y-MM-dd')); var today =3D new Date(); var apa =3D '

' + source + ' (' + formatDate(meta,'y, MMM d') + '). ' = + title + '. ScienceDaily. Retrieved ' + formatDate(today,'MMM = d, y') + ', from ' + link + '

'; var mla =3D '

' + source + '. "' + title + '." ScienceDaily ' = + formatDate(meta,'d MMM y') + '. ' + formatDate(today,'d MMM y') + ' = <' + link + '>.' + '

'; cite_apa.innerHTML =3D apa; cite_mla.innerHTML =3D mla; var link =3D document.getElementById('cite_link'); var offset =3D Position.cumulativeOffset(link); form.style.left =3D (offset[0] - 170) + 'px'; form.style.top =3D (offset[1] + link.offsetHeight + 3) + 'px'; form.style.display =3D 'block'; } function citeit() { if (document.getElementById('cite_style_apa').checked) { html =3D document.getElementById('cite_apa').innerHTML; } else { html =3D document.getElementById('cite_mla').innerHTML; } plain =3D html.replace(/<[^>]+>/ig,""); plain =3D plain.replace("<","<"); plain =3D plain.replace(">",">"); copy_clip(html,plain); } function citation() { var metadate =3D document.getElementById('metadate').content; var source =3D document.getElementById('source').innerHTML; var title =3D document.title; var link =3D document.location.href; var citationapa =3D document.getElementById('citationapa'); var citationmla =3D document.getElementById('citationmla'); var citationtext =3D document.getElementById('citationtext'); link =3D link.replace('/releases/','­ /releases/'); var meta =3D new Date(getDateFromFormat(metadate,'y-MM-dd')); var today =3D new Date(); var apa =3D source + ' (' + formatDate(meta,'y, MMM d') + '). ' + title = + '. ScienceDaily. Retrieved ' + formatDate(today,'MMM d, y') + = ', from ' + link; var mla =3D source + '. "' + title + '." ScienceDaily ' + = formatDate(meta,'d MMM y') + '. ' + formatDate(today,'d MMM y') + ' = <' + link + '>.'; if (citationapa.checked) { citationtext.innerHTML =3D apa; } else { citationtext.innerHTML =3D mla; } } function copy_clip(html,plain) { var textHTML =3D html; var textPlain =3D plain; if (window.clipboardData && window.clipboardData.setData) { window.clipboardData.setData("Text", textPlain); } else if (window.netscape) { = netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');= var trans =3D = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(C= omponents.interfaces.nsITransferable); if (!trans) return false; trans.addDataFlavor("text/html"); var htmlstring =3D = Components.classes["@mozilla.org/supports-string;1"].createInstance(Compo= nents.interfaces.nsISupportsString); if (!htmlstring) return false; htmlstring.data =3D textHTML; trans.setTransferData("text/html", htmlstring, textHTML.length * 2); trans.addDataFlavor("text/unicode"); var unicodestring =3D = Components.classes["@mozilla.org/supports-string;1"].createInstance(Compo= nents.interfaces.nsISupportsString); unicodestring.data =3D textPlain; trans.setTransferData("text/unicode", unicodestring, textPlain.length = * 2); var clipboard =3D = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Componen= ts.interfaces.nsIClipboard); if (!clipboard) return false; clipboard.setData(trans, null, = Components.interfaces.nsIClipboard.kGlobalClipboard); } else { alert("Your browser does not support automatic copying to the = clipboard. Please select the text and copy it manually (e.g., = Ctrl-C)."); return false; } alert("The following was copied to your clipboard:\n\n" + textPlain); return false; } function emailpage() { var form =3D document.getElementById('email_form'); =09 if (form.style.display =3D=3D 'block') { form.style.display =3D 'none'; return; } var link =3D document.getElementById('email_link'); var offset =3D Position.cumulativeOffset(link); form.style.left =3D (offset[0] - 170) + 'px'; form.style.top =3D (offset[1] + link.offsetHeight + 3) + 'px'; form.style.display =3D 'block'; } function getxmlhttp() { var xmlhttp =3D false; try { xmlhttp =3D new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlhttp =3D new ActiveXObject("Microsoft.XMLHTTP"); } catch(E) { xmlhttp =3D false; } } if (!xmlhttp && typeof XMLHttpRequest!=3D"undefined") { xmlhttp =3D new XMLHttpRequest(); } return xmlhttp; } function email_process() { email_obj =3D document.getElementById('email_fields'); emailHTML =3D email_obj.innerHTML; var emailer =3D '/emailer.php'; var url =3D document.location.href; var title =3D document.title; var summary =3D document.getElementById('metasummary').content; var to_address =3D document.getElementById('email_to').value; var from_address =3D document.getElementById('email_from').value; var from_name =3D document.getElementById('email_name').value; var email_self =3D (document.getElementById('email_self').checked = =3D=3D true)?1:0; var variables =3D 'url=3D' + escape(url) + '&title=3D' + escape(title) = + '&summary=3D' + escape(summary) + '&to=3D' + escape(to_address) + = '&from=3D' + escape(from_address) + '&name=3D' + escape(from_name) + = '&self=3D' + email_self; xmlhttp =3D getxmlhttp(); xmlhttp.open("POST", emailer, true); = xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencode= d; charset=3DUTF-8'); xmlhttp.onreadystatechange =3D email_change; xmlhttp.send(variables); } function email_change() { if (xmlhttp.readyState=3D=3D4) { if (xmlhttp.status=3D=3D200) { email_obj.innerHTML =3D xmlhttp.responseText; setTimeout('email_obj.innerHTML =3D emailHTML',2999); } else { email_obj.innerHTML =3D 'A problem was encountered -- email not = sent.'; setTimeout('email_obj.innerHTML =3D emailHTML',2999); } } else { email_obj.innerHTML =3D 'Sending ...'; } } function feedback() { var form =3D document.getElementById('feedback_form'); feedback_obj =3D document.getElementById('feedback_response'); var feedbacker =3D '/feedback.php'; var url =3D document.location.href; var title =3D document.title; var email =3D document.getElementById('feedback_email').value; var name =3D document.getElementById('feedback_name').value; var comments =3D document.getElementById('feedback_comments').value; var useragent =3D navigator.userAgent; var variables =3D 'url=3D' + escape(url) + '&title=3D' + escape(title) = + '&from=3D' + escape(email) + '&name=3D' + escape(name) + = '&comments=3D' + escape(comments) + '&useragent=3D' + escape(useragent); xmlhttp =3D getxmlhttp(); xmlhttp.open("POST", feedbacker, true); = xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencode= d; charset=3DUTF-8'); xmlhttp.onreadystatechange =3D feedback_change; xmlhttp.send(variables); } function feedback_change() { if (xmlhttp.readyState=3D=3D4) { if (xmlhttp.status=3D=3D200) { feedback_obj.innerHTML =3D xmlhttp.responseText; } else { feedback_obj.innerHTML =3D 'Problem encountered -- feedback not = sent.'; } } else { feedback_obj.innerHTML =3D 'Sending ...'; } } function redirect(arg) { url =3D arg.replace(/^http[^?]*?\?url=3D/,''); // alert(url); location =3D url; } function gotostory(num) { for (var i=3D1; i<=3Dstories.length; i++) { if (i =3D=3D num) { document.getElementById('story'+i).style.display =3D 'block' } else { document.getElementById('story'+i).style.display =3D 'none'; } } } var currentPanel =3D 1; function changepanel(change) { currentPanel +=3D change; if (currentPanel < 1) { currentPanel =3D 1; } else if (currentPanel > panels.length) { currentPanel =3D panels.length; } for (var i=3D1; i<=3Dpanels.length; i++) { if (i =3D=3D currentPanel) { document.getElementById('panel'+i).style.display =3D 'block' document.getElementById('edition').innerHTML =3D = document.getElementById('edition' + i).innerHTML; } else { document.getElementById('panel'+i).style.display =3D 'none'; } } } function setActiveStyleSheet(title) { var i, a, main; for (i=3D0; (a=3Ddocument.getElementsByTagName("link")[i]); i++) { if (a.getAttribute("rel").indexOf("style") !=3D -1=20 && a.getAttribute("title")) { a.disabled =3D true; if (a.getAttribute("title") =3D=3D title) a.disabled =3D false; } } } function getActiveStyleSheet() { var i, a; for (i=3D0; (a=3Ddocument.getElementsByTagName("link")[i]); i++) { if (a.getAttribute("rel").indexOf("style") !=3D -1=20 && a.getAttribute("title")=20 && !a.disabled)=20 return a.getAttribute("title"); } return null; } function getPreferredStyleSheet() { var i, a; for (i=3D0; (a=3Ddocument.getElementsByTagName("link")[i]); i++) { if (a.getAttribute("rel").indexOf("style") !=3D -1=20 && a.getAttribute("rel").indexOf("alt") =3D=3D -1=20 && a.getAttribute("title"))=20 return a.getAttribute("title"); } return null; } function createCookie(name,value,days) { if (days) { var date =3D new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); var expires =3D "; expires=3D" + date.toGMTString(); } else expires =3D ""; document.cookie =3D name + "=3D" + value + expires + "; path=3D/"; } function readCookie(name) { var nameEQ =3D name + "=3D"; var ca =3D document.cookie.split(';'); for (var i=3D0; i9?"":"0")+x} function isDate(val,format) { var date=3DgetDateFromFormat(val,format); if (date=3D=3D0) { return false; } return true; } function compareDates(date1,dateformat1,date2,dateformat2) { var d1=3DgetDateFromFormat(date1,dateformat1); var d2=3DgetDateFromFormat(date2,dateformat2); if (d1=3D=3D0 || d2=3D=3D0) { return -1; } else if (d1 > d2) { return 1; } return 0; } function formatDate(date,format) { format=3Dformat+""; var result=3D""; var i_format=3D0; var c=3D""; var token=3D""; var y=3Ddate.getYear()+""; var M=3Ddate.getMonth()+1; var d=3Ddate.getDate(); var E=3Ddate.getDay(); var H=3Ddate.getHours(); var m=3Ddate.getMinutes(); var s=3Ddate.getSeconds(); var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k; // Convert real date parts into formatted versions var value=3Dnew Object(); if (y.length < 4) {y=3D""+(y-0+1900);} value["y"]=3D""+y; value["yyyy"]=3Dy; value["yy"]=3Dy.substring(2,4); value["M"]=3DM; value["MM"]=3DLZ(M); value["MMM"]=3DMONTH_NAMES[M-1]; value["NNN"]=3DMONTH_NAMES[M+11]; value["d"]=3Dd; value["dd"]=3DLZ(d); value["E"]=3DDAY_NAMES[E+7]; value["EE"]=3DDAY_NAMES[E]; value["H"]=3DH; value["HH"]=3DLZ(H); if (H=3D=3D0){value["h"]=3D12;} else if (H>12){value["h"]=3DH-12;} else {value["h"]=3DH;} value["hh"]=3DLZ(value["h"]); if (H>11){value["K"]=3DH-12;} else {value["K"]=3DH;} value["k"]=3DH+1; value["KK"]=3DLZ(value["K"]); value["kk"]=3DLZ(value["k"]); if (H > 11) { value["a"]=3D"PM"; } else { value["a"]=3D"AM"; } value["m"]=3Dm; value["mm"]=3DLZ(m); value["s"]=3Ds; value["ss"]=3DLZ(s); while (i_format < format.length) { c=3Dformat.charAt(i_format); token=3D""; while ((format.charAt(i_format)=3D=3Dc) && (i_format < format.length)) = { token +=3D format.charAt(i_format++); } if (value[token] !=3D null) { result=3Dresult + value[token]; } else { result=3Dresult + token; } } return result; } =09 function _isInteger(val) { var digits=3D"1234567890"; for (var i=3D0; i < val.length; i++) { if (digits.indexOf(val.charAt(i))=3D=3D-1) { return false; } } return true; } function _getInt(str,i,minlength,maxlength) { for (var x=3Dmaxlength; x>=3Dminlength; x--) { var token=3Dstr.substring(i,i+x); if (token.length < minlength) { return null; } if (_isInteger(token)) { return token; } } return null; } =09 function getDateFromFormat(val,format) { val=3Dval+""; format=3Dformat+""; var i_val=3D0; var i_format=3D0; var c=3D""; var token=3D""; var token2=3D""; var x,y; var now=3Dnew Date(); var year=3Dnow.getYear(); var month=3Dnow.getMonth()+1; var date=3D1; var hh=3Dnow.getHours(); var mm=3Dnow.getMinutes(); var ss=3Dnow.getSeconds(); var ampm=3D""; =09 while (i_format < format.length) { // Get next token from format string c=3Dformat.charAt(i_format); token=3D""; while ((format.charAt(i_format)=3D=3Dc) && (i_format < format.length)) = { token +=3D format.charAt(i_format++); } // Extract contents of value based on format token if (token=3D=3D"yyyy" || token=3D=3D"yy" || token=3D=3D"y") { if (token=3D=3D"yyyy") { x=3D4;y=3D4; } if (token=3D=3D"yy") { x=3D2;y=3D2; } if (token=3D=3D"y") { x=3D2;y=3D4; } year=3D_getInt(val,i_val,x,y); if (year=3D=3Dnull) { return 0; } i_val +=3D year.length; if (year.length=3D=3D2) { if (year > 70) { year=3D1900+(year-0); } else { year=3D2000+(year-0); } } } else if (token=3D=3D"MMM"||token=3D=3D"NNN"){ month=3D0; for (var i=3D0; i11)) { month=3Di+1; if (month>12) { month -=3D 12; } i_val +=3D month_name.length; break; } } } if ((month < 1)||(month>12)){return 0;} } else if (token=3D=3D"EE"||token=3D=3D"E"){ for (var i=3D0; i12)){return 0;} i_val+=3Dmonth.length;} else if (token=3D=3D"dd"||token=3D=3D"d") { date=3D_getInt(val,i_val,token.length,2); if(date=3D=3Dnull||(date<1)||(date>31)){return 0;} i_val+=3Ddate.length;} else if (token=3D=3D"hh"||token=3D=3D"h") { hh=3D_getInt(val,i_val,token.length,2); if(hh=3D=3Dnull||(hh<1)||(hh>12)){return 0;} i_val+=3Dhh.length;} else if (token=3D=3D"HH"||token=3D=3D"H") { hh=3D_getInt(val,i_val,token.length,2); if(hh=3D=3Dnull||(hh<0)||(hh>23)){return 0;} i_val+=3Dhh.length;} else if (token=3D=3D"KK"||token=3D=3D"K") { hh=3D_getInt(val,i_val,token.length,2); if(hh=3D=3Dnull||(hh<0)||(hh>11)){return 0;} i_val+=3Dhh.length;} else if (token=3D=3D"kk"||token=3D=3D"k") { hh=3D_getInt(val,i_val,token.length,2); if(hh=3D=3Dnull||(hh<1)||(hh>24)){return 0;} i_val+=3Dhh.length;hh--;} else if (token=3D=3D"mm"||token=3D=3D"m") { mm=3D_getInt(val,i_val,token.length,2); if(mm=3D=3Dnull||(mm<0)||(mm>59)){return 0;} i_val+=3Dmm.length;} else if (token=3D=3D"ss"||token=3D=3D"s") { ss=3D_getInt(val,i_val,token.length,2); if(ss=3D=3Dnull||(ss<0)||(ss>59)){return 0;} i_val+=3Dss.length;} else if (token=3D=3D"a") { if (val.substring(i_val,i_val+2).toLowerCase()=3D=3D"am") = {ampm=3D"AM";} else if (val.substring(i_val,i_val+2).toLowerCase()=3D=3D"pm") = {ampm=3D"PM";} else {return 0;} i_val+=3D2;} else { if (val.substring(i_val,i_val+token.length)!=3Dtoken) {return 0;} else {i_val+=3Dtoken.length;} } } // If there are any trailing characters left in the value, it doesn't = match if (i_val !=3D val.length) { return 0; } // Is date valid for month? if (month=3D=3D2) { // Check for leap year if ( ( (year%4=3D=3D0)&&(year%100 !=3D 0) ) || (year%400=3D=3D0) ) { = // leap year if (date > 29){ return 0; } } else { if (date > 28) { return 0; } } } if ((month=3D=3D4)||(month=3D=3D6)||(month=3D=3D9)||(month=3D=3D11)) { if (date > 30) { return 0; } } // Correct hours value if (hh<12 && ampm=3D=3D"PM") { hh=3Dhh-0+12; } else if (hh>11 && ampm=3D=3D"AM") { hh-=3D12; } var newdate=3Dnew Date(year,month-1,date,hh,mm,ss); return newdate.getTime(); } function parseDate(val) { var preferEuro=3D(arguments.length=3D=3D2)?arguments[1]:false; generalFormats=3Dnew Array('y-M-d','MMM d, y','MMM = d,y','y-MMM-d','d-MMM-y','MMM d'); monthFirst=3Dnew Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d'); dateFirst =3Dnew Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M'); var checkList=3Dnew = Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'mo= nthFirst':'dateFirst'); var d=3Dnull; for (var i=3D0; i 12) return; } typeInt++; if (typeInt > 4) { typeInt =3D 1; } displayText =3D document.getElementById("justin" + typeInt).innerHTML; strippedText =3D displayText.replace(/<[^>]*>/g,''); if (strippedText.length > 49) { truncatedText =3D strippedText.substring(0,44); lastspace =3D truncatedText.lastIndexOf(' '); truncatedText =3D truncatedText.substring(0,lastspace); displayText =3D displayText.substring(0,displayText.indexOf('>')+1) + = truncatedText + ' ...'; } document.getElementById("justindisplay").innerHTML =3D displayText; setTimeout('typeScroller()',5000); } addLoadEvent(function() { suckerfish(sfHover, "LI", "nav"); }); addLoadEvent(function() { suckerfish(sfHover, "LI", "sectiontabs"); }); /* addLoadEvent(function() { var cookie =3D readCookie("style"); var title =3D cookie ? cookie : getPreferredStyleSheet(); setActiveStyleSheet(title); }); addUnloadEvent(function() { var title =3D getActiveStyleSheet(); createCookie("style",title,365); }); var cookie =3D readCookie("style"); var title =3D cookie ? cookie : getPreferredStyleSheet(); setActiveStyleSheet(title); */ addLoadEvent(function() { var excludedomains=3D["localhost", "127.0.0.1", "sciencedaily", = "local.sciencedaily", "www.sciencedaily.com", "www.sciencedaily.net", = "new.sciencedaily.com", "www.sciencedaily.org", "sciencedaily.com", = "sciencedaily.net", "sciencedaily.org", "healthology.sciencedaily.com", = "sciencedaily.healthology.com", "mediwire.sciencedaily.com", = "sciencedaily.mediwire.com", "healthcare.careerbuilder.com", = "sciencebiotech.careerbuilder.com", "engineering.careerbuilder.com", = "informationtechnology.careerbuilder.com", "www.careerbuilder.com"]; var excludedomains =3D excludedomains.join("|"); rexcludedomains =3D new RegExp(excludedomains, "i"); for (i=3D0; i<=3D(document.links.length-1); i++) { if (document.links[i].hostname.search(rexcludedomains)=3D=3D-1 && = document.links[i].href.indexOf("http:")!=3D-1) { document.links[i].target=3D"_blank"; } if (document.links[i].href.indexOf("/goto.php")!=3D-1) { document.links[i].onclick=3Dnew Function("redirect(this.href); return = false;"); } } }); ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.sciencedaily.com/scripts/prototype.js /* Prototype JavaScript framework, version 1.5.1.1=0A= * (c) 2005-2007 Sam Stephenson=0A= *=0A= * Prototype is freely distributable under the terms of an MIT-style = license.=0A= * For details, see the Prototype web site: http://www.prototypejs.org/=0A= *=0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Prototype =3D {=0A= Version: '1.5.1.1',=0A= =0A= Browser: {=0A= IE: !!(window.attachEvent && !window.opera),=0A= Opera: !!window.opera,=0A= WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,=0A= Gecko: navigator.userAgent.indexOf('Gecko') > -1 && = navigator.userAgent.indexOf('KHTML') =3D=3D -1=0A= },=0A= =0A= BrowserFeatures: {=0A= XPath: !!document.evaluate,=0A= ElementExtensions: !!window.HTMLElement,=0A= SpecificElementExtensions:=0A= (document.createElement('div').__proto__ !=3D=3D=0A= document.createElement('form').__proto__)=0A= },=0A= =0A= ScriptFragment: ']*>([\\S\\s]*?)<\/script>',=0A= JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,=0A= =0A= emptyFunction: function() { },=0A= K: function(x) { return x }=0A= }=0A= =0A= var Class =3D {=0A= create: function() {=0A= return function() {=0A= this.initialize.apply(this, arguments);=0A= }=0A= }=0A= }=0A= =0A= var Abstract =3D new Object();=0A= =0A= Object.extend =3D function(destination, source) {=0A= for (var property in source) {=0A= destination[property] =3D source[property];=0A= }=0A= return destination;=0A= }=0A= =0A= Object.extend(Object, {=0A= inspect: function(object) {=0A= try {=0A= if (object =3D=3D=3D undefined) return 'undefined';=0A= if (object =3D=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= toJSON: function(object) {=0A= var type =3D typeof object;=0A= switch(type) {=0A= case 'undefined':=0A= case 'function':=0A= case 'unknown': return;=0A= case 'boolean': return object.toString();=0A= }=0A= if (object =3D=3D=3D null) return 'null';=0A= if (object.toJSON) return object.toJSON();=0A= if (object.ownerDocument =3D=3D=3D document) return;=0A= var results =3D [];=0A= for (var property in object) {=0A= var value =3D Object.toJSON(object[property]);=0A= if (value !=3D=3D undefined)=0A= results.push(property.toJSON() + ': ' + value);=0A= }=0A= return '{' + results.join(', ') + '}';=0A= },=0A= =0A= keys: function(object) {=0A= var keys =3D [];=0A= for (var property in object)=0A= keys.push(property);=0A= return keys;=0A= },=0A= =0A= values: function(object) {=0A= var values =3D [];=0A= for (var property in object)=0A= values.push(object[property]);=0A= return values;=0A= },=0A= =0A= clone: function(object) {=0A= return Object.extend({}, object);=0A= }=0A= });=0A= =0A= Function.prototype.bind =3D function() {=0A= var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A= return function() {=0A= return __method.apply(object, args.concat($A(arguments)));=0A= }=0A= }=0A= =0A= Function.prototype.bindAsEventListener =3D function(object) {=0A= var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A= return function(event) {=0A= return __method.apply(object, [event || window.event].concat(args));=0A= }=0A= }=0A= =0A= Object.extend(Number.prototype, {=0A= toColorPart: function() {=0A= return this.toPaddedString(2, 16);=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= toPaddedString: function(length, radix) {=0A= var string =3D this.toString(radix || 10);=0A= return '0'.times(length - string.length) + string;=0A= },=0A= =0A= toJSON: function() {=0A= return isFinite(this) ? this.toString() : 'null';=0A= }=0A= });=0A= =0A= Date.prototype.toJSON =3D function() {=0A= return '"' + this.getFullYear() + '-' +=0A= (this.getMonth() + 1).toPaddedString(2) + '-' +=0A= this.getDate().toPaddedString(2) + 'T' +=0A= this.getHours().toPaddedString(2) + ':' +=0A= this.getMinutes().toPaddedString(2) + ':' +=0A= this.getSeconds().toPaddedString(2) + '"';=0A= };=0A= =0A= var Try =3D {=0A= these: function() {=0A= var returnValue;=0A= =0A= for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A= var lambda =3D arguments[i];=0A= try {=0A= returnValue =3D lambda();=0A= break;=0A= } catch (e) {}=0A= }=0A= =0A= return returnValue;=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var PeriodicalExecuter =3D Class.create();=0A= PeriodicalExecuter.prototype =3D {=0A= initialize: function(callback, frequency) {=0A= this.callback =3D callback;=0A= this.frequency =3D frequency;=0A= this.currentlyExecuting =3D false;=0A= =0A= this.registerCallback();=0A= },=0A= =0A= registerCallback: function() {=0A= this.timer =3D setInterval(this.onTimerEvent.bind(this), = this.frequency * 1000);=0A= },=0A= =0A= stop: function() {=0A= if (!this.timer) return;=0A= clearInterval(this.timer);=0A= this.timer =3D null;=0A= },=0A= =0A= onTimerEvent: function() {=0A= if (!this.currentlyExecuting) {=0A= try {=0A= this.currentlyExecuting =3D true;=0A= this.callback(this);=0A= } finally {=0A= this.currentlyExecuting =3D false;=0A= }=0A= }=0A= }=0A= }=0A= Object.extend(String, {=0A= interpret: function(value) {=0A= return value =3D=3D null ? '' : String(value);=0A= },=0A= specialChar: {=0A= '\b': '\\b',=0A= '\t': '\\t',=0A= '\n': '\\n',=0A= '\f': '\\f',=0A= '\r': '\\r',=0A= '\\': '\\\\'=0A= }=0A= });=0A= =0A= Object.extend(String.prototype, {=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 String.interpret(replacement(match));=0A= source =3D source.slice(match.index + match[0].length);=0A= } else {=0A= result +=3D source, source =3D '';=0A= }=0A= }=0A= return result;=0A= },=0A= =0A= 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 self =3D arguments.callee;=0A= self.text.data =3D this;=0A= return self.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.length > 1 ?=0A= $A(div.childNodes).inject('', function(memo, node) { return = memo+node.nodeValue }) :=0A= div.childNodes[0].nodeValue) : '';=0A= },=0A= =0A= toQueryParams: function(separator) {=0A= var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A= if (!match) return {};=0A= =0A= return match[1].split(separator || '&').inject({}, function(hash, = pair) {=0A= if ((pair =3D pair.split('=3D'))[0]) {=0A= var key =3D decodeURIComponent(pair.shift());=0A= var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];=0A= if (value !=3D undefined) value =3D decodeURIComponent(value);=0A= =0A= if (key in hash) {=0A= if (hash[key].constructor !=3D Array) hash[key] =3D = [hash[key]];=0A= hash[key].push(value);=0A= }=0A= else hash[key] =3D value;=0A= }=0A= return hash;=0A= });=0A= },=0A= =0A= toArray: function() {=0A= return this.split('');=0A= },=0A= =0A= succ: function() {=0A= return this.slice(0, this.length - 1) +=0A= String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A= },=0A= =0A= times: function(count) {=0A= var result =3D '';=0A= for (var i =3D 0; i < count; i++) result +=3D this;=0A= return result;=0A= },=0A= =0A= camelize: function() {=0A= var parts =3D this.split('-'), len =3D parts.length;=0A= if (len =3D=3D 1) return parts[0];=0A= =0A= var camelized =3D this.charAt(0) =3D=3D '-'=0A= ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A= : parts[0];=0A= =0A= for (var i =3D 1; i < len; i++)=0A= camelized +=3D parts[i].charAt(0).toUpperCase() + = parts[i].substring(1);=0A= =0A= return camelized;=0A= },=0A= =0A= capitalize: function() {=0A= return this.charAt(0).toUpperCase() + = this.substring(1).toLowerCase();=0A= },=0A= =0A= underscore: function() {=0A= return this.gsub(/::/, = '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{= 1}_#{2}').gsub(/-/,'_').toLowerCase();=0A= },=0A= =0A= dasherize: function() {=0A= return this.gsub(/_/,'-');=0A= },=0A= =0A= inspect: function(useDoubleQuotes) {=0A= var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {=0A= var character =3D String.specialChar[match[0]];=0A= return character ? character : '\\u00' + = match[0].charCodeAt().toPaddedString(2, 16);=0A= });=0A= if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') = + '"';=0A= return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A= },=0A= =0A= toJSON: function() {=0A= return this.inspect(true);=0A= },=0A= =0A= unfilterJSON: function(filter) {=0A= return this.sub(filter || Prototype.JSONFilter, '#{1}');=0A= },=0A= =0A= isJSON: function() {=0A= var str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');=0A= return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);=0A= },=0A= =0A= evalJSON: function(sanitize) {=0A= var json =3D this.unfilterJSON();=0A= try {=0A= if (!sanitize || json.isJSON()) return eval('(' + json + ')');=0A= } catch (e) { }=0A= throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A= },=0A= =0A= include: function(pattern) {=0A= return this.indexOf(pattern) > -1;=0A= },=0A= =0A= startsWith: function(pattern) {=0A= return this.indexOf(pattern) =3D=3D=3D 0;=0A= },=0A= =0A= endsWith: function(pattern) {=0A= var d =3D this.length - pattern.length;=0A= return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;=0A= },=0A= =0A= empty: function() {=0A= return this =3D=3D '';=0A= },=0A= =0A= blank: function() {=0A= return /^\s*$/.test(this);=0A= }=0A= });=0A= =0A= if (Prototype.Browser.WebKit || Prototype.Browser.IE) = Object.extend(String.prototype, {=0A= escapeHTML: function() {=0A= return = this.replace(/&/g,'&').replace(//g,'>');=0A= },=0A= unescapeHTML: function() {=0A= return = this.replace(/&/g,'&').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= Object.extend(String.prototype.escapeHTML, {=0A= div: document.createElement('div'),=0A= text: document.createTextNode('')=0A= });=0A= =0A= with (String.prototype.escapeHTML) div.appendChild(text);=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 + String.interpret(object[match[3]]);=0A= });=0A= }=0A= }=0A= =0A= var $break =3D {}, $continue =3D new Error('"throw $continue" is = deprecated, use "return" instead');=0A= =0A= var Enumerable =3D {=0A= each: function(iterator) {=0A= var index =3D 0;=0A= try {=0A= this._each(function(value) {=0A= iterator(value, index++);=0A= });=0A= } catch (e) {=0A= if (e !=3D $break) throw e;=0A= }=0A= return this;=0A= },=0A= =0A= eachSlice: function(number, iterator) {=0A= var index =3D -number, slices =3D [], array =3D this.toArray();=0A= while ((index +=3D number) < array.length)=0A= slices.push(array.slice(index, index+number));=0A= return slices.map(iterator);=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 false;=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 || Prototype.K)(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= inGroupsOf: function(number, fillWith) {=0A= fillWith =3D fillWith =3D=3D=3D undefined ? null : fillWith;=0A= return this.eachSlice(number, function(slice) {=0A= while(slice.length < number) slice.push(fillWith);=0A= return slice;=0A= });=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.map(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.map(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.map();=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= size: function() {=0A= return this.toArray().length;=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, length =3D iterable.length; i < length; i++)=0A= results.push(iterable[i]);=0A= return results;=0A= }=0A= }=0A= =0A= if (Prototype.Browser.WebKit) {=0A= $A =3D Array.from =3D function(iterable) {=0A= if (!iterable) return [];=0A= if (!(typeof iterable =3D=3D 'function' && iterable =3D=3D '[object = NodeList]') &&=0A= iterable.toArray) {=0A= return iterable.toArray();=0A= } else {=0A= var results =3D [];=0A= for (var i =3D 0, length =3D iterable.length; i < length; i++)=0A= results.push(iterable[i]);=0A= return results;=0A= }=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, length =3D this.length; i < 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 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, length =3D this.length; i < 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= reduce: function() {=0A= return this.length > 1 ? this : this[0];=0A= },=0A= =0A= uniq: function(sorted) {=0A= return this.inject([], function(array, value, index) {=0A= if (0 =3D=3D index || (sorted ? array.last() !=3D value : = !array.include(value)))=0A= array.push(value);=0A= return array;=0A= });=0A= },=0A= =0A= clone: function() {=0A= return [].concat(this);=0A= },=0A= =0A= size: function() {=0A= return this.length;=0A= },=0A= =0A= inspect: function() {=0A= return '[' + this.map(Object.inspect).join(', ') + ']';=0A= },=0A= =0A= toJSON: function() {=0A= var results =3D [];=0A= this.each(function(object) {=0A= var value =3D Object.toJSON(object);=0A= if (value !=3D=3D undefined) results.push(value);=0A= });=0A= return '[' + results.join(', ') + ']';=0A= }=0A= });=0A= =0A= Array.prototype.toArray =3D Array.prototype.clone;=0A= =0A= function $w(string) {=0A= string =3D string.strip();=0A= return string ? string.split(/\s+/) : [];=0A= }=0A= =0A= if (Prototype.Browser.Opera){=0A= Array.prototype.concat =3D function() {=0A= var array =3D [];=0A= for (var i =3D 0, length =3D this.length; i < length; i++) = array.push(this[i]);=0A= for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A= if (arguments[i].constructor =3D=3D Array) {=0A= for (var j =3D 0, arrayLength =3D arguments[i].length; j < = arrayLength; j++)=0A= array.push(arguments[i][j]);=0A= } else {=0A= array.push(arguments[i]);=0A= }=0A= }=0A= return array;=0A= }=0A= }=0A= var Hash =3D function(object) {=0A= if (object instanceof Hash) this.merge(object);=0A= else Object.extend(this, object || {});=0A= };=0A= =0A= Object.extend(Hash, {=0A= toQueryString: function(obj) {=0A= var parts =3D [];=0A= parts.add =3D arguments.callee.addPair;=0A= =0A= this.prototype._each.call(obj, function(pair) {=0A= if (!pair.key) return;=0A= var value =3D pair.value;=0A= =0A= if (value && typeof value =3D=3D 'object') {=0A= if (value.constructor =3D=3D Array) value.each(function(value) {=0A= parts.add(pair.key, value);=0A= });=0A= return;=0A= }=0A= parts.add(pair.key, value);=0A= });=0A= =0A= return parts.join('&');=0A= },=0A= =0A= toJSON: function(object) {=0A= var results =3D [];=0A= this.prototype._each.call(object, function(pair) {=0A= var value =3D Object.toJSON(pair.value);=0A= if (value !=3D=3D undefined) results.push(pair.key.toJSON() + ': ' = + value);=0A= });=0A= return '{' + results.join(', ') + '}';=0A= }=0A= });=0A= =0A= Hash.toQueryString.addPair =3D function(key, value, prefix) {=0A= key =3D encodeURIComponent(key);=0A= if (value =3D=3D=3D undefined) this.push(key);=0A= else this.push(key + '=3D' + (value =3D=3D null ? '' : = encodeURIComponent(value)));=0A= }=0A= =0A= Object.extend(Hash.prototype, Enumerable);=0A= Object.extend(Hash.prototype, {=0A= _each: function(iterator) {=0A= for (var key in this) {=0A= var value =3D this[key];=0A= if (value && value =3D=3D Hash.prototype[key]) 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(this, function(mergedHash, pair) {=0A= mergedHash[pair.key] =3D pair.value;=0A= return mergedHash;=0A= });=0A= },=0A= =0A= remove: function() {=0A= var result;=0A= for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A= var value =3D this[arguments[i]];=0A= if (value !=3D=3D undefined){=0A= if (result =3D=3D=3D undefined) result =3D value;=0A= else {=0A= if (result.constructor !=3D Array) result =3D [result];=0A= result.push(value)=0A= }=0A= }=0A= delete this[arguments[i]];=0A= }=0A= return result;=0A= },=0A= =0A= toQueryString: function() {=0A= return Hash.toQueryString(this);=0A= },=0A= =0A= inspect: function() {=0A= return '#';=0A= },=0A= =0A= toJSON: function() {=0A= return Hash.toJSON(this);=0A= }=0A= });=0A= =0A= function $H(object) {=0A= if (object instanceof Hash) return object;=0A= return new Hash(object);=0A= };=0A= =0A= // Safari iterates over shadowed properties=0A= if (function() {=0A= var i =3D 0, Test =3D function(value) { this.key =3D value };=0A= Test.prototype.key =3D 'foo';=0A= for (var property in new Test('bar')) i++;=0A= return i > 1;=0A= }()) Hash.prototype._each =3D function(iterator) {=0A= var cache =3D [];=0A= for (var key in this) {=0A= var value =3D this[key];=0A= if ((value && value =3D=3D Hash.prototype[key]) || = cache.include(key)) continue;=0A= cache.push(key);=0A= var pair =3D [key, value];=0A= pair.key =3D key;=0A= pair.value =3D value;=0A= iterator(pair);=0A= }=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= while (this.include(value)) {=0A= iterator(value);=0A= value =3D value.succ();=0A= }=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(responder) {=0A= if (!this.include(responder))=0A= this.responders.push(responder);=0A= },=0A= =0A= unregister: function(responder) {=0A= this.responders =3D this.responders.without(responder);=0A= },=0A= =0A= dispatch: function(callback, request, transport, json) {=0A= this.each(function(responder) {=0A= if (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= 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= encoding: 'UTF-8',=0A= parameters: ''=0A= }=0A= Object.extend(this.options, options || {});=0A= =0A= this.options.method =3D this.options.method.toLowerCase();=0A= if (typeof this.options.parameters =3D=3D 'string')=0A= this.options.parameters =3D = this.options.parameters.toQueryParams();=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= _complete: false,=0A= =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= this.url =3D url;=0A= this.method =3D this.options.method;=0A= var params =3D Object.clone(this.options.parameters);=0A= =0A= if (!['get', 'post'].include(this.method)) {=0A= // simulate other verbs over post=0A= params['_method'] =3D this.method;=0A= this.method =3D 'post';=0A= }=0A= =0A= this.parameters =3D params;=0A= =0A= if (params =3D Hash.toQueryString(params)) {=0A= // when GET, append parameters to URL=0A= if (this.method =3D=3D 'get')=0A= this.url +=3D (this.url.include('?') ? '&' : '?') + params;=0A= else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A= params +=3D '&_=3D';=0A= }=0A= =0A= try {=0A= if (this.options.onCreate) this.options.onCreate(this.transport);=0A= Ajax.Responders.dispatch('onCreate', this, this.transport);=0A= =0A= this.transport.open(this.method.toUpperCase(), this.url,=0A= this.options.asynchronous);=0A= =0A= if (this.options.asynchronous)=0A= setTimeout(function() { this.respondToReadyState(1) = }.bind(this), 10);=0A= =0A= this.transport.onreadystatechange =3D = this.onStateChange.bind(this);=0A= this.setRequestHeaders();=0A= =0A= this.body =3D this.method =3D=3D 'post' ? (this.options.postBody = || params) : null;=0A= this.transport.send(this.body);=0A= =0A= /* Force Firefox to handle ready state 4 for synchronous requests = */=0A= if (!this.options.asynchronous && this.transport.overrideMimeType)=0A= this.onStateChange();=0A= =0A= }=0A= catch (e) {=0A= this.dispatchException(e);=0A= }=0A= },=0A= =0A= onStateChange: function() {=0A= var readyState =3D this.transport.readyState;=0A= if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A= this.respondToReadyState(this.transport.readyState);=0A= },=0A= =0A= setRequestHeaders: function() {=0A= var headers =3D {=0A= 'X-Requested-With': 'XMLHttpRequest',=0A= 'X-Prototype-Version': Prototype.Version,=0A= 'Accept': 'text/javascript, text/html, application/xml, text/xml, = */*'=0A= };=0A= =0A= if (this.method =3D=3D 'post') {=0A= headers['Content-type'] =3D this.options.contentType +=0A= (this.options.encoding ? '; charset=3D' + this.options.encoding = : '');=0A= =0A= /* Force "Connection: close" for older Mozilla browsers to work=0A= * around a bug where XMLHttpRequest sends an incorrect=0A= * Content-length header. See Mozilla Bugzilla #246651.=0A= */=0A= if (this.transport.overrideMimeType &&=0A= (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < = 2005)=0A= headers['Connection'] =3D 'close';=0A= }=0A= =0A= // user-defined headers=0A= if (typeof this.options.requestHeaders =3D=3D 'object') {=0A= var extras =3D this.options.requestHeaders;=0A= =0A= if (typeof extras.push =3D=3D 'function')=0A= for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A= headers[extras[i]] =3D extras[i+1];=0A= else=0A= $H(extras).each(function(pair) { headers[pair.key] =3D = pair.value });=0A= }=0A= =0A= for (var name in headers)=0A= this.transport.setRequestHeader(name, headers[name]);=0A= },=0A= =0A= success: function() {=0A= return !this.transport.status=0A= || (this.transport.status >=3D 200 && this.transport.status < = 300);=0A= },=0A= =0A= respondToReadyState: function(readyState) {=0A= var state =3D Ajax.Request.Events[readyState];=0A= var transport =3D this.transport, json =3D this.evalJSON();=0A= =0A= if (state =3D=3D 'Complete') {=0A= try {=0A= this._complete =3D true;=0A= (this.options['on' + this.transport.status]=0A= || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A= || Prototype.emptyFunction)(transport, json);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= =0A= var contentType =3D this.getHeader('Content-type');=0A= if (contentType && contentType.strip().=0A= match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))=0A= this.evalResponse();=0A= }=0A= =0A= try {=0A= (this.options['on' + state] || Prototype.emptyFunction)(transport, = json);=0A= Ajax.Responders.dispatch('on' + state, this, transport, json);=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= =0A= if (state =3D=3D 'Complete') {=0A= // avoid memory leak in MSIE: clean up=0A= this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A= }=0A= },=0A= =0A= getHeader: function(name) {=0A= try {=0A= return this.transport.getResponseHeader(name);=0A= } catch (e) { return null }=0A= },=0A= =0A= evalJSON: function() {=0A= try {=0A= var json =3D this.getHeader('X-JSON');=0A= return json ? json.evalJSON() : null;=0A= } catch (e) { return null }=0A= },=0A= =0A= evalResponse: function() {=0A= try {=0A= return eval((this.transport.responseText || '').unfilterJSON());=0A= } catch (e) {=0A= this.dispatchException(e);=0A= }=0A= },=0A= =0A= dispatchException: function(exception) {=0A= (this.options.onException || Prototype.emptyFunction)(this, = exception);=0A= Ajax.Responders.dispatch('onException', this, exception);=0A= }=0A= });=0A= =0A= Ajax.Updater =3D Class.create();=0A= =0A= Object.extend(Object.extend(Ajax.Updater.prototype, = Ajax.Request.prototype), {=0A= initialize: function(container, url, options) {=0A= this.container =3D {=0A= success: (container.success || container),=0A= failure: (container.failure || (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, param) {=0A= this.updateContent();=0A= onComplete(transport, param);=0A= }).bind(this);=0A= =0A= this.request(url);=0A= },=0A= =0A= updateContent: function() {=0A= var receiver =3D this.container[this.success() ? 'success' : = 'failure'];=0A= var response =3D this.transport.responseText;=0A= =0A= if (!this.options.evalScripts) response =3D response.stripScripts();=0A= =0A= if (receiver =3D $(receiver)) {=0A= if (this.options.insertion)=0A= new this.options.insertion(receiver, response);=0A= else=0A= receiver.update(response);=0A= }=0A= =0A= if (this.success()) {=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.options.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 $(element) {=0A= if (arguments.length > 1) {=0A= for (var i =3D 0, elements =3D [], length =3D arguments.length; i < = length; i++)=0A= elements.push($(arguments[i]));=0A= return elements;=0A= }=0A= if (typeof element =3D=3D 'string')=0A= element =3D document.getElementById(element);=0A= return Element.extend(element);=0A= }=0A= =0A= if (Prototype.BrowserFeatures.XPath) {=0A= document._getElementsByXPath =3D function(expression, parentElement) {=0A= var results =3D [];=0A= var query =3D document.evaluate(expression, $(parentElement) || = document,=0A= null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A= for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A= results.push(query.snapshotItem(i));=0A= return results;=0A= };=0A= =0A= document.getElementsByClassName =3D function(className, parentElement) = {=0A= var q =3D ".//*[contains(concat(' ', @class, ' '), ' " + className + = " ')]";=0A= return document._getElementsByXPath(q, parentElement);=0A= }=0A= =0A= } else document.getElementsByClassName =3D function(className, = parentElement) {=0A= var children =3D ($(parentElement) || = document.body).getElementsByTagName('*');=0A= var elements =3D [], child, pattern =3D new RegExp("(^|\\s)" + = className + "(\\s|$)");=0A= for (var i =3D 0, length =3D children.length; i < length; i++) {=0A= child =3D children[i];=0A= var elementClassName =3D child.className;=0A= if (elementClassName.length =3D=3D 0) continue;=0A= if (elementClassName =3D=3D className || = elementClassName.match(pattern))=0A= elements.push(Element.extend(child));=0A= }=0A= return elements;=0A= };=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= if (!window.Element) var Element =3D {};=0A= =0A= Element.extend =3D function(element) {=0A= var F =3D Prototype.BrowserFeatures;=0A= if (!element || !element.tagName || element.nodeType =3D=3D 3 ||=0A= element._extended || F.SpecificElementExtensions || element =3D=3D = window)=0A= return element;=0A= =0A= var methods =3D {}, tagName =3D element.tagName, cache =3D = Element.extend.cache,=0A= T =3D Element.Methods.ByTag;=0A= =0A= // extend methods for all tags (Safari doesn't need this)=0A= if (!F.ElementExtensions) {=0A= Object.extend(methods, Element.Methods),=0A= Object.extend(methods, Element.Methods.Simulated);=0A= }=0A= =0A= // extend methods for specific tags=0A= if (T[tagName]) Object.extend(methods, T[tagName]);=0A= =0A= for (var property in methods) {=0A= var value =3D methods[property];=0A= if (typeof value =3D=3D 'function' && !(property in element))=0A= element[property] =3D cache.findOrStore(value);=0A= }=0A= =0A= element._extended =3D Prototype.emptyFunction;=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(element) {=0A= element =3D $(element);=0A= Element[Element.visible(element) ? 'hide' : 'show'](element);=0A= return element;=0A= },=0A= =0A= hide: function(element) {=0A= $(element).style.display =3D 'none';=0A= return element;=0A= },=0A= =0A= show: function(element) {=0A= $(element).style.display =3D '';=0A= return element;=0A= },=0A= =0A= remove: function(element) {=0A= element =3D $(element);=0A= element.parentNode.removeChild(element);=0A= return element;=0A= },=0A= =0A= update: function(element, html) {=0A= html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A= $(element).innerHTML =3D html.stripScripts();=0A= setTimeout(function() {html.evalScripts()}, 10);=0A= return element;=0A= },=0A= =0A= replace: function(element, html) {=0A= element =3D $(element);=0A= html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=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= return element;=0A= },=0A= =0A= inspect: function(element) {=0A= element =3D $(element);=0A= var result =3D '<' + element.tagName.toLowerCase();=0A= $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A= var property =3D pair.first(), attribute =3D pair.last();=0A= var value =3D (element[property] || '').toString();=0A= if (value) result +=3D ' ' + attribute + '=3D' + = value.inspect(true);=0A= });=0A= return result + '>';=0A= },=0A= =0A= recursivelyCollect: function(element, property) {=0A= element =3D $(element);=0A= var elements =3D [];=0A= while (element =3D element[property])=0A= if (element.nodeType =3D=3D 1)=0A= elements.push(Element.extend(element));=0A= return elements;=0A= },=0A= =0A= ancestors: function(element) {=0A= return $(element).recursivelyCollect('parentNode');=0A= },=0A= =0A= descendants: function(element) {=0A= return $A($(element).getElementsByTagName('*')).each(Element.extend);=0A= },=0A= =0A= firstDescendant: function(element) {=0A= element =3D $(element).firstChild;=0A= while (element && element.nodeType !=3D 1) element =3D = element.nextSibling;=0A= return $(element);=0A= },=0A= =0A= immediateDescendants: function(element) {=0A= if (!(element =3D $(element).firstChild)) return [];=0A= while (element && element.nodeType !=3D 1) element =3D = element.nextSibling;=0A= if (element) return [element].concat($(element).nextSiblings());=0A= return [];=0A= },=0A= =0A= previousSiblings: function(element) {=0A= return $(element).recursivelyCollect('previousSibling');=0A= },=0A= =0A= nextSiblings: function(element) {=0A= return $(element).recursivelyCollect('nextSibling');=0A= },=0A= =0A= siblings: function(element) {=0A= element =3D $(element);=0A= return = element.previousSiblings().reverse().concat(element.nextSiblings());=0A= },=0A= =0A= match: function(element, selector) {=0A= if (typeof selector =3D=3D 'string')=0A= selector =3D new Selector(selector);=0A= return selector.match($(element));=0A= },=0A= =0A= up: function(element, expression, index) {=0A= element =3D $(element);=0A= if (arguments.length =3D=3D 1) return $(element.parentNode);=0A= var ancestors =3D element.ancestors();=0A= return expression ? Selector.findElement(ancestors, expression, = index) :=0A= ancestors[index || 0];=0A= },=0A= =0A= down: function(element, expression, index) {=0A= element =3D $(element);=0A= if (arguments.length =3D=3D 1) return element.firstDescendant();=0A= var descendants =3D element.descendants();=0A= return expression ? Selector.findElement(descendants, expression, = index) :=0A= descendants[index || 0];=0A= },=0A= =0A= previous: function(element, expression, index) {=0A= element =3D $(element);=0A= if (arguments.length =3D=3D 1) return = $(Selector.handlers.previousElementSibling(element));=0A= var previousSiblings =3D element.previousSiblings();=0A= return expression ? Selector.findElement(previousSiblings, = expression, index) :=0A= previousSiblings[index || 0];=0A= },=0A= =0A= next: function(element, expression, index) {=0A= element =3D $(element);=0A= if (arguments.length =3D=3D 1) return = $(Selector.handlers.nextElementSibling(element));=0A= var nextSiblings =3D element.nextSiblings();=0A= return expression ? Selector.findElement(nextSiblings, expression, = index) :=0A= nextSiblings[index || 0];=0A= },=0A= =0A= getElementsBySelector: function() {=0A= var args =3D $A(arguments), element =3D $(args.shift());=0A= return Selector.findChildElements(element, args);=0A= },=0A= =0A= getElementsByClassName: function(element, className) {=0A= return document.getElementsByClassName(className, element);=0A= },=0A= =0A= readAttribute: function(element, name) {=0A= element =3D $(element);=0A= if (Prototype.Browser.IE) {=0A= if (!element.attributes) return null;=0A= var t =3D Element._attributeTranslations;=0A= if (t.values[name]) return t.values[name](element, name);=0A= if (t.names[name]) name =3D t.names[name];=0A= var attribute =3D element.attributes[name];=0A= return attribute ? attribute.nodeValue : null;=0A= }=0A= return element.getAttribute(name);=0A= },=0A= =0A= getHeight: function(element) {=0A= return $(element).getDimensions().height;=0A= },=0A= =0A= getWidth: function(element) {=0A= return $(element).getDimensions().width;=0A= },=0A= =0A= classNames: function(element) {=0A= return new Element.ClassNames(element);=0A= },=0A= =0A= hasClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= var elementClassName =3D element.className;=0A= if (elementClassName.length =3D=3D 0) return false;=0A= if (elementClassName =3D=3D className ||=0A= elementClassName.match(new RegExp("(^|\\s)" + className + = "(\\s|$)")))=0A= return true;=0A= return false;=0A= },=0A= =0A= addClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= Element.classNames(element).add(className);=0A= return element;=0A= },=0A= =0A= removeClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= Element.classNames(element).remove(className);=0A= return element;=0A= },=0A= =0A= toggleClassName: function(element, className) {=0A= if (!(element =3D $(element))) return;=0A= Element.classNames(element)[element.hasClassName(className) ? = 'remove' : 'add'](className);=0A= return element;=0A= },=0A= =0A= observe: function() {=0A= Event.observe.apply(Event, arguments);=0A= return $A(arguments).first();=0A= },=0A= =0A= stopObserving: function() {=0A= Event.stopObserving.apply(Event, arguments);=0A= return $A(arguments).first();=0A= },=0A= =0A= // removes whitespace-only text node children=0A= cleanWhitespace: function(element) {=0A= element =3D $(element);=0A= var node =3D element.firstChild;=0A= while (node) {=0A= var nextNode =3D node.nextSibling;=0A= if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A= element.removeChild(node);=0A= node =3D nextNode;=0A= }=0A= return element;=0A= },=0A= =0A= empty: function(element) {=0A= return $(element).innerHTML.blank();=0A= },=0A= =0A= descendantOf: function(element, ancestor) {=0A= element =3D $(element), ancestor =3D $(ancestor);=0A= 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 pos =3D Position.cumulativeOffset(element);=0A= window.scrollTo(pos[0], pos[1]);=0A= return element;=0A= },=0A= =0A= getStyle: function(element, style) {=0A= element =3D $(element);=0A= style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();=0A= var value =3D element.style[style];=0A= if (!value) {=0A= var css =3D document.defaultView.getComputedStyle(element, null);=0A= value =3D css ? css[style] : null;=0A= }=0A= if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;=0A= return value =3D=3D 'auto' ? null : value;=0A= },=0A= =0A= getOpacity: function(element) {=0A= return $(element).getStyle('opacity');=0A= },=0A= =0A= setStyle: function(element, styles, camelized) {=0A= element =3D $(element);=0A= var elementStyle =3D element.style;=0A= =0A= for (var property in styles)=0A= if (property =3D=3D 'opacity') element.setOpacity(styles[property])=0A= else=0A= elementStyle[(property =3D=3D 'float' || property =3D=3D = 'cssFloat') ?=0A= (elementStyle.styleFloat =3D=3D=3D undefined ? 'cssFloat' : = 'styleFloat') :=0A= (camelized ? property : property.camelize())] =3D = styles[property];=0A= =0A= return element;=0A= },=0A= =0A= setOpacity: function(element, value) {=0A= element =3D $(element);=0A= element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? = '' :=0A= (value < 0.00001) ? 0 : value;=0A= return element;=0A= },=0A= =0A= getDimensions: function(element) {=0A= element =3D $(element);=0A= var display =3D $(element).getStyle('display');=0A= if (display !=3D 'none' && display !=3D null) // Safari bug=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= var originalDisplay =3D els.display;=0A= els.visibility =3D 'hidden';=0A= els.position =3D 'absolute';=0A= els.display =3D 'block';=0A= var originalWidth =3D element.clientWidth;=0A= var originalHeight =3D element.clientHeight;=0A= els.display =3D originalDisplay;=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= return element;=0A= },=0A= =0A= undoPositioned: function(element) {=0A= element =3D $(element);=0A= if (element._madePositioned) {=0A= element._madePositioned =3D undefined;=0A= element.style.position =3D=0A= element.style.top =3D=0A= element.style.left =3D=0A= element.style.bottom =3D=0A= element.style.right =3D '';=0A= }=0A= return element;=0A= },=0A= =0A= makeClipping: function(element) {=0A= element =3D $(element);=0A= if (element._overflow) return element;=0A= element._overflow =3D element.style.overflow || 'auto';=0A= if ((Element.getStyle(element, 'overflow') || 'visible') !=3D = 'hidden')=0A= element.style.overflow =3D 'hidden';=0A= return element;=0A= },=0A= =0A= undoClipping: function(element) {=0A= element =3D $(element);=0A= if (!element._overflow) return element;=0A= element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : = element._overflow;=0A= element._overflow =3D null;=0A= return element;=0A= }=0A= };=0A= =0A= Object.extend(Element.Methods, {=0A= childOf: Element.Methods.descendantOf,=0A= childElements: Element.Methods.immediateDescendants=0A= });=0A= =0A= if (Prototype.Browser.Opera) {=0A= Element.Methods._getStyle =3D Element.Methods.getStyle;=0A= Element.Methods.getStyle =3D function(element, style) {=0A= switch(style) {=0A= case 'left':=0A= case 'top':=0A= case 'right':=0A= case 'bottom':=0A= if (Element._getStyle(element, 'position') =3D=3D 'static') = return null;=0A= default: return Element._getStyle(element, style);=0A= }=0A= };=0A= }=0A= else if (Prototype.Browser.IE) {=0A= Element.Methods.getStyle =3D function(element, style) {=0A= element =3D $(element);=0A= style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? = 'styleFloat' : style.camelize();=0A= var value =3D element.style[style];=0A= if (!value && element.currentStyle) value =3D = element.currentStyle[style];=0A= =0A= if (style =3D=3D 'opacity') {=0A= if (value =3D (element.getStyle('filter') || = '').match(/alpha\(opacity=3D(.*)\)/))=0A= if (value[1]) return parseFloat(value[1]) / 100;=0A= return 1.0;=0A= }=0A= =0A= if (value =3D=3D 'auto') {=0A= if ((style =3D=3D 'width' || style =3D=3D 'height') && = (element.getStyle('display') !=3D 'none'))=0A= return element['offset'+style.capitalize()] + 'px';=0A= return null;=0A= }=0A= return value;=0A= };=0A= =0A= Element.Methods.setOpacity =3D function(element, value) {=0A= element =3D $(element);=0A= var filter =3D element.getStyle('filter'), style =3D element.style;=0A= if (value =3D=3D 1 || value =3D=3D=3D '') {=0A= style.filter =3D filter.replace(/alpha\([^\)]*\)/gi,'');=0A= return element;=0A= } else if (value < 0.00001) value =3D 0;=0A= style.filter =3D filter.replace(/alpha\([^\)]*\)/gi, '') +=0A= 'alpha(opacity=3D' + (value * 100) + ')';=0A= return element;=0A= };=0A= =0A= // IE is missing .innerHTML support for TABLE-related elements=0A= Element.Methods.update =3D function(element, html) {=0A= element =3D $(element);=0A= html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A= var tagName =3D element.tagName.toUpperCase();=0A= if (['THEAD','TBODY','TR','TD'].include(tagName)) {=0A= var div =3D document.createElement('div');=0A= switch (tagName) {=0A= case 'THEAD':=0A= case 'TBODY':=0A= div.innerHTML =3D '' + html.stripScripts() + = '
';=0A= depth =3D 2;=0A= break;=0A= case 'TR':=0A= div.innerHTML =3D '' + html.stripScripts() = + '
';=0A= depth =3D 3;=0A= break;=0A= case 'TD':=0A= div.innerHTML =3D '
' + = html.stripScripts() + '
';=0A= depth =3D 4;=0A= }=0A= $A(element.childNodes).each(function(node) { = element.removeChild(node) });=0A= depth.times(function() { div =3D div.firstChild });=0A= $A(div.childNodes).each(function(node) { element.appendChild(node) = });=0A= } else {=0A= element.innerHTML =3D html.stripScripts();=0A= }=0A= setTimeout(function() { html.evalScripts() }, 10);=0A= return element;=0A= }=0A= }=0A= else if (Prototype.Browser.Gecko) {=0A= Element.Methods.setOpacity =3D function(element, value) {=0A= element =3D $(element);=0A= element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :=0A= (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;=0A= return element;=0A= };=0A= }=0A= =0A= Element._attributeTranslations =3D {=0A= names: {=0A= colspan: "colSpan",=0A= rowspan: "rowSpan",=0A= valign: "vAlign",=0A= datetime: "dateTime",=0A= accesskey: "accessKey",=0A= tabindex: "tabIndex",=0A= enctype: "encType",=0A= maxlength: "maxLength",=0A= readonly: "readOnly",=0A= longdesc: "longDesc"=0A= },=0A= values: {=0A= _getAttr: function(element, attribute) {=0A= return element.getAttribute(attribute, 2);=0A= },=0A= _flag: function(element, attribute) {=0A= return $(element).hasAttribute(attribute) ? attribute : null;=0A= },=0A= style: function(element) {=0A= return element.style.cssText.toLowerCase();=0A= },=0A= title: function(element) {=0A= var node =3D element.getAttributeNode('title');=0A= return node.specified ? node.nodeValue : null;=0A= }=0A= }=0A= };=0A= =0A= (function() {=0A= Object.extend(this, {=0A= href: this._getAttr,=0A= src: this._getAttr,=0A= type: this._getAttr,=0A= disabled: this._flag,=0A= checked: this._flag,=0A= readonly: this._flag,=0A= multiple: this._flag=0A= });=0A= }).call(Element._attributeTranslations.values);=0A= =0A= Element.Methods.Simulated =3D {=0A= hasAttribute: function(element, attribute) {=0A= var t =3D Element._attributeTranslations, node;=0A= attribute =3D t.names[attribute] || attribute;=0A= node =3D $(element).getAttributeNode(attribute);=0A= return node && node.specified;=0A= }=0A= };=0A= =0A= Element.Methods.ByTag =3D {};=0A= =0A= Object.extend(Element, Element.Methods);=0A= =0A= if (!Prototype.BrowserFeatures.ElementExtensions &&=0A= document.createElement('div').__proto__) {=0A= window.HTMLElement =3D {};=0A= window.HTMLElement.prototype =3D = document.createElement('div').__proto__;=0A= Prototype.BrowserFeatures.ElementExtensions =3D true;=0A= }=0A= =0A= Element.hasAttribute =3D function(element, attribute) {=0A= if (element.hasAttribute) return element.hasAttribute(attribute);=0A= return Element.Methods.Simulated.hasAttribute(element, attribute);=0A= };=0A= =0A= Element.addMethods =3D function(methods) {=0A= var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=0A= =0A= if (!methods) {=0A= Object.extend(Form, Form.Methods);=0A= Object.extend(Form.Element, Form.Element.Methods);=0A= Object.extend(Element.Methods.ByTag, {=0A= "FORM": Object.clone(Form.Methods),=0A= "INPUT": Object.clone(Form.Element.Methods),=0A= "SELECT": Object.clone(Form.Element.Methods),=0A= "TEXTAREA": Object.clone(Form.Element.Methods)=0A= });=0A= }=0A= =0A= if (arguments.length =3D=3D 2) {=0A= var tagName =3D methods;=0A= methods =3D arguments[1];=0A= }=0A= =0A= if (!tagName) Object.extend(Element.Methods, methods || {});=0A= else {=0A= if (tagName.constructor =3D=3D Array) tagName.each(extend);=0A= else extend(tagName);=0A= }=0A= =0A= function extend(tagName) {=0A= tagName =3D tagName.toUpperCase();=0A= if (!Element.Methods.ByTag[tagName])=0A= Element.Methods.ByTag[tagName] =3D {};=0A= Object.extend(Element.Methods.ByTag[tagName], methods);=0A= }=0A= =0A= function copy(methods, destination, onlyIfAbsent) {=0A= onlyIfAbsent =3D onlyIfAbsent || false;=0A= var cache =3D Element.extend.cache;=0A= for (var property in methods) {=0A= var value =3D methods[property];=0A= if (!onlyIfAbsent || !(property in destination))=0A= destination[property] =3D cache.findOrStore(value);=0A= }=0A= }=0A= =0A= function findDOMClass(tagName) {=0A= var klass;=0A= var trans =3D {=0A= "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",=0A= "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": = "DList",=0A= "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": = "Heading",=0A= "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",=0A= "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", = "CAPTION":=0A= "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":=0A= "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", = "TR":=0A= "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":=0A= "FrameSet", "IFRAME": "IFrame"=0A= };=0A= if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';=0A= if (window[klass]) return window[klass];=0A= klass =3D 'HTML' + tagName + 'Element';=0A= if (window[klass]) return window[klass];=0A= klass =3D 'HTML' + tagName.capitalize() + 'Element';=0A= if (window[klass]) return window[klass];=0A= =0A= window[klass] =3D {};=0A= window[klass].prototype =3D = document.createElement(tagName).__proto__;=0A= return window[klass];=0A= }=0A= =0A= if (F.ElementExtensions) {=0A= copy(Element.Methods, HTMLElement.prototype);=0A= copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A= }=0A= =0A= if (F.SpecificElementExtensions) {=0A= for (var tag in Element.Methods.ByTag) {=0A= var klass =3D findDOMClass(tag);=0A= if (typeof klass =3D=3D "undefined") continue;=0A= copy(T[tag], klass.prototype);=0A= }=0A= }=0A= =0A= Object.extend(Element, Element.Methods);=0A= delete Element.ByTag;=0A= };=0A= =0A= var Toggle =3D { display: 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.toUpperCase();=0A= if (['TBODY', 'TR'].include(tagName)) {=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($A(this).concat(classNameToAdd).join(' '));=0A= },=0A= =0A= remove: function(classNameToRemove) {=0A= if (!this.include(classNameToRemove)) return;=0A= this.set($A(this).without(classNameToRemove).join(' '));=0A= },=0A= =0A= toString: function() {=0A= return $A(this).join(' ');=0A= }=0A= };=0A= =0A= Object.extend(Element.ClassNames.prototype, Enumerable);=0A= /* Portions of the Selector class are derived from Jack Slocum=E2=80=99s = DomQuery,=0A= * part of YUI-Ext version 0.40, distributed under the terms of an = MIT-style=0A= * license. Please see http://www.yui-ext.com/ for more information. */=0A= =0A= var Selector =3D Class.create();=0A= =0A= Selector.prototype =3D {=0A= initialize: function(expression) {=0A= this.expression =3D expression.strip();=0A= this.compileMatcher();=0A= },=0A= =0A= compileMatcher: function() {=0A= // Selectors with namespaced attributes can't use the XPath version=0A= if (Prototype.BrowserFeatures.XPath && = !(/\[[\w-]*?:/).test(this.expression))=0A= return this.compileXPathMatcher();=0A= =0A= var e =3D this.expression, ps =3D Selector.patterns, h =3D = Selector.handlers,=0A= c =3D Selector.criteria, le, p, m;=0A= =0A= if (Selector._cache[e]) {=0A= this.matcher =3D Selector._cache[e]; return;=0A= }=0A= this.matcher =3D ["this.matcher =3D function(root) {",=0A= "var r =3D root, h =3D Selector.handlers, c =3D = false, n;"];=0A= =0A= while (e && le !=3D e && (/\S/).test(e)) {=0A= le =3D e;=0A= for (var i in ps) {=0A= p =3D ps[i];=0A= if (m =3D e.match(p)) {=0A= this.matcher.push(typeof c[i] =3D=3D 'function' ? c[i](m) :=0A= new Template(c[i]).evaluate(m));=0A= e =3D e.replace(m[0], '');=0A= break;=0A= }=0A= }=0A= }=0A= =0A= this.matcher.push("return h.unique(n);\n}");=0A= eval(this.matcher.join('\n'));=0A= Selector._cache[this.expression] =3D this.matcher;=0A= },=0A= =0A= compileXPathMatcher: function() {=0A= var e =3D this.expression, ps =3D Selector.patterns,=0A= x =3D Selector.xpath, le, m;=0A= =0A= if (Selector._cache[e]) {=0A= this.xpath =3D Selector._cache[e]; return;=0A= }=0A= =0A= this.matcher =3D ['.//*'];=0A= while (e && le !=3D e && (/\S/).test(e)) {=0A= le =3D e;=0A= for (var i in ps) {=0A= if (m =3D e.match(ps[i])) {=0A= this.matcher.push(typeof x[i] =3D=3D 'function' ? x[i](m) :=0A= new Template(x[i]).evaluate(m));=0A= e =3D e.replace(m[0], '');=0A= break;=0A= }=0A= }=0A= }=0A= =0A= this.xpath =3D this.matcher.join('');=0A= Selector._cache[this.expression] =3D this.xpath;=0A= },=0A= =0A= findElements: function(root) {=0A= root =3D root || document;=0A= if (this.xpath) return document._getElementsByXPath(this.xpath, = root);=0A= return this.matcher(root);=0A= },=0A= =0A= match: function(element) {=0A= return this.findElements(document).include(element);=0A= },=0A= =0A= toString: function() {=0A= return this.expression;=0A= },=0A= =0A= inspect: function() {=0A= return "#";=0A= }=0A= };=0A= =0A= Object.extend(Selector, {=0A= _cache: {},=0A= =0A= xpath: {=0A= descendant: "//*",=0A= child: "/*",=0A= adjacent: "/following-sibling::*[1]",=0A= laterSibling: '/following-sibling::*',=0A= tagName: function(m) {=0A= if (m[1] =3D=3D '*') return '';=0A= return "[local-name()=3D'" + m[1].toLowerCase() +=0A= "' or local-name()=3D'" + m[1].toUpperCase() + "']";=0A= },=0A= className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",=0A= id: "[@id=3D'#{1}']",=0A= attrPresence: "[@#{1}]",=0A= attr: function(m) {=0A= m[3] =3D m[5] || m[6];=0A= return new Template(Selector.xpath.operators[m[2]]).evaluate(m);=0A= },=0A= pseudo: function(m) {=0A= var h =3D Selector.xpath.pseudos[m[1]];=0A= if (!h) return '';=0A= if (typeof h =3D=3D=3D 'function') return h(m);=0A= return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);=0A= },=0A= operators: {=0A= '=3D': "[@#{1}=3D'#{3}']",=0A= '!=3D': "[@#{1}!=3D'#{3}']",=0A= '^=3D': "[starts-with(@#{1}, '#{3}')]",=0A= '$=3D': "[substring(@#{1}, (string-length(@#{1}) - = string-length('#{3}') + 1))=3D'#{3}']",=0A= '*=3D': "[contains(@#{1}, '#{3}')]",=0A= '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",=0A= '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"=0A= },=0A= pseudos: {=0A= 'first-child': '[not(preceding-sibling::*)]',=0A= 'last-child': '[not(following-sibling::*)]',=0A= 'only-child': '[not(preceding-sibling::* or = following-sibling::*)]',=0A= 'empty': "[count(*) =3D 0 and (count(text()) =3D 0 or = translate(text(), ' \t\r\n', '') =3D '')]",=0A= 'checked': "[@checked]",=0A= 'disabled': "[@disabled]",=0A= 'enabled': "[not(@disabled)]",=0A= 'not': function(m) {=0A= var e =3D m[6], p =3D Selector.patterns,=0A= x =3D Selector.xpath, le, m, v;=0A= =0A= var exclusion =3D [];=0A= while (e && le !=3D e && (/\S/).test(e)) {=0A= le =3D e;=0A= for (var i in p) {=0A= if (m =3D e.match(p[i])) {=0A= v =3D typeof x[i] =3D=3D 'function' ? x[i](m) : new = Template(x[i]).evaluate(m);=0A= exclusion.push("(" + v.substring(1, v.length - 1) + ")");=0A= e =3D e.replace(m[0], '');=0A= break;=0A= }=0A= }=0A= }=0A= return "[not(" + exclusion.join(" and ") + ")]";=0A= },=0A= 'nth-child': function(m) {=0A= return = Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);=0A= },=0A= 'nth-last-child': function(m) {=0A= return = Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);=0A= },=0A= 'nth-of-type': function(m) {=0A= return Selector.xpath.pseudos.nth("position() ", m);=0A= },=0A= 'nth-last-of-type': function(m) {=0A= return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", = m);=0A= },=0A= 'first-of-type': function(m) {=0A= m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);=0A= },=0A= 'last-of-type': function(m) {=0A= m[6] =3D "1"; return = Selector.xpath.pseudos['nth-last-of-type'](m);=0A= },=0A= 'only-of-type': function(m) {=0A= var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + = p['last-of-type'](m);=0A= },=0A= nth: function(fragment, m) {=0A= var mm, formula =3D m[6], predicate;=0A= if (formula =3D=3D 'even') formula =3D '2n+0';=0A= if (formula =3D=3D 'odd') formula =3D '2n+1';=0A= if (mm =3D formula.match(/^(\d+)$/)) // digit only=0A= return '[' + fragment + "=3D " + mm[1] + ']';=0A= if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b=0A= if (mm[1] =3D=3D "-") mm[1] =3D -1;=0A= var a =3D mm[1] ? Number(mm[1]) : 1;=0A= var b =3D mm[2] ? Number(mm[2]) : 0;=0A= predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +=0A= "((#{fragment} - #{b}) div #{a} >=3D 0)]";=0A= return new Template(predicate).evaluate({=0A= fragment: fragment, a: a, b: b });=0A= }=0A= }=0A= }=0A= },=0A= =0A= criteria: {=0A= tagName: 'n =3D h.tagName(n, r, "#{1}", c); c =3D false;',=0A= className: 'n =3D h.className(n, r, "#{1}", c); c =3D false;',=0A= id: 'n =3D h.id(n, r, "#{1}", c); c =3D false;',=0A= attrPresence: 'n =3D h.attrPresence(n, r, "#{1}"); c =3D false;',=0A= attr: function(m) {=0A= m[3] =3D (m[5] || m[6]);=0A= return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = =3D false;').evaluate(m);=0A= },=0A= pseudo: function(m) {=0A= if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');=0A= return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c = =3D false;').evaluate(m);=0A= },=0A= descendant: 'c =3D "descendant";',=0A= child: 'c =3D "child";',=0A= adjacent: 'c =3D "adjacent";',=0A= laterSibling: 'c =3D "laterSibling";'=0A= },=0A= =0A= patterns: {=0A= // combinators must be listed first=0A= // (and descendant needs to be last combinator)=0A= laterSibling: /^\s*~\s*/,=0A= child: /^\s*>\s*/,=0A= adjacent: /^\s*\+\s*/,=0A= descendant: /^\s/,=0A= =0A= // selectors follow=0A= tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,=0A= id: /^#([\w\-\*]+)(\b|$)/,=0A= className: /^\.([\w\-\*]+)(\b|$)/,=0A= pseudo: = /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis= )abled|not)(\((.*?)\))?(\b|$|\s|(?=3D:))/,=0A= attrPresence: /^\[([\w]+)\]/,=0A= attr: = /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\]]*?)\4|([^'"][^= \]]*?)))?\]/=0A= },=0A= =0A= handlers: {=0A= // UTILITY FUNCTIONS=0A= // joins two collections=0A= concat: function(a, b) {=0A= for (var i =3D 0, node; node =3D b[i]; i++)=0A= a.push(node);=0A= return a;=0A= },=0A= =0A= // marks an array of nodes for counting=0A= mark: function(nodes) {=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= node._counted =3D true;=0A= return nodes;=0A= },=0A= =0A= unmark: function(nodes) {=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= node._counted =3D undefined;=0A= return nodes;=0A= },=0A= =0A= // mark each child node with its position (for nth calls)=0A= // "ofType" flag indicates whether we're indexing for nth-of-type=0A= // rather than nth-child=0A= index: function(parentNode, reverse, ofType) {=0A= parentNode._counted =3D true;=0A= if (reverse) {=0A= for (var nodes =3D parentNode.childNodes, i =3D nodes.length - = 1, j =3D 1; i >=3D 0; i--) {=0A= node =3D nodes[i];=0A= if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) = node.nodeIndex =3D j++;=0A= }=0A= } else {=0A= for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node = =3D nodes[i]; i++)=0A= if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) = node.nodeIndex =3D j++;=0A= }=0A= },=0A= =0A= // filters out duplicates and extends all nodes=0A= unique: function(nodes) {=0A= if (nodes.length =3D=3D 0) return nodes;=0A= var results =3D [], n;=0A= for (var i =3D 0, l =3D nodes.length; i < l; i++)=0A= if (!(n =3D nodes[i])._counted) {=0A= n._counted =3D true;=0A= results.push(Element.extend(n));=0A= }=0A= return Selector.handlers.unmark(results);=0A= },=0A= =0A= // COMBINATOR FUNCTIONS=0A= descendant: function(nodes) {=0A= var h =3D Selector.handlers;=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= h.concat(results, node.getElementsByTagName('*'));=0A= return results;=0A= },=0A= =0A= child: function(nodes) {=0A= var h =3D Selector.handlers;=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A= for (var j =3D 0, children =3D [], child; child =3D = node.childNodes[j]; j++)=0A= if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') = results.push(child);=0A= }=0A= return results;=0A= },=0A= =0A= adjacent: function(nodes) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A= var next =3D this.nextElementSibling(node);=0A= if (next) results.push(next);=0A= }=0A= return results;=0A= },=0A= =0A= laterSibling: function(nodes) {=0A= var h =3D Selector.handlers;=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= h.concat(results, Element.nextSiblings(node));=0A= return results;=0A= },=0A= =0A= nextElementSibling: function(node) {=0A= while (node =3D node.nextSibling)=0A= if (node.nodeType =3D=3D 1) return node;=0A= return null;=0A= },=0A= =0A= previousElementSibling: function(node) {=0A= while (node =3D node.previousSibling)=0A= if (node.nodeType =3D=3D 1) return node;=0A= return null;=0A= },=0A= =0A= // TOKEN FUNCTIONS=0A= tagName: function(nodes, root, tagName, combinator) {=0A= tagName =3D tagName.toUpperCase();=0A= var results =3D [], h =3D Selector.handlers;=0A= if (nodes) {=0A= if (combinator) {=0A= // fastlane for ordinary descendant combinators=0A= if (combinator =3D=3D "descendant") {=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= h.concat(results, node.getElementsByTagName(tagName));=0A= return results;=0A= } else nodes =3D this[combinator](nodes);=0A= if (tagName =3D=3D "*") return nodes;=0A= }=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (node.tagName.toUpperCase() =3D=3D tagName) = results.push(node);=0A= return results;=0A= } else return root.getElementsByTagName(tagName);=0A= },=0A= =0A= id: function(nodes, root, id, combinator) {=0A= var targetNode =3D $(id), h =3D Selector.handlers;=0A= if (!nodes && root =3D=3D document) return targetNode ? = [targetNode] : [];=0A= if (nodes) {=0A= if (combinator) {=0A= if (combinator =3D=3D 'child') {=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (targetNode.parentNode =3D=3D node) return [targetNode];=0A= } else if (combinator =3D=3D 'descendant') {=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (Element.descendantOf(targetNode, node)) return = [targetNode];=0A= } else if (combinator =3D=3D 'adjacent') {=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (Selector.handlers.previousElementSibling(targetNode) = =3D=3D node)=0A= return [targetNode];=0A= } else nodes =3D h[combinator](nodes);=0A= }=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (node =3D=3D targetNode) return [targetNode];=0A= return [];=0A= }=0A= return (targetNode && Element.descendantOf(targetNode, root)) ? = [targetNode] : [];=0A= },=0A= =0A= className: function(nodes, root, className, combinator) {=0A= if (nodes && combinator) nodes =3D this[combinator](nodes);=0A= return Selector.handlers.byClassName(nodes, root, className);=0A= },=0A= =0A= byClassName: function(nodes, root, className) {=0A= if (!nodes) nodes =3D Selector.handlers.descendant([root]);=0A= var needle =3D ' ' + className + ' ';=0A= for (var i =3D 0, results =3D [], node, nodeClassName; node =3D = nodes[i]; i++) {=0A= nodeClassName =3D node.className;=0A= if (nodeClassName.length =3D=3D 0) continue;=0A= if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' = ').include(needle))=0A= results.push(node);=0A= }=0A= return results;=0A= },=0A= =0A= attrPresence: function(nodes, root, attr) {=0A= var results =3D [];=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (Element.hasAttribute(node, attr)) results.push(node);=0A= return results;=0A= },=0A= =0A= attr: function(nodes, root, attr, value, operator) {=0A= if (!nodes) nodes =3D root.getElementsByTagName("*");=0A= var handler =3D Selector.operators[operator], results =3D [];=0A= for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A= var nodeValue =3D Element.readAttribute(node, attr);=0A= if (nodeValue =3D=3D=3D null) continue;=0A= if (handler(nodeValue, value)) results.push(node);=0A= }=0A= return results;=0A= },=0A= =0A= pseudo: function(nodes, name, value, root, combinator) {=0A= if (nodes && combinator) nodes =3D this[combinator](nodes);=0A= if (!nodes) nodes =3D root.getElementsByTagName("*");=0A= return Selector.pseudos[name](nodes, value, root);=0A= }=0A= },=0A= =0A= pseudos: {=0A= 'first-child': function(nodes, value, root) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A= if (Selector.handlers.previousElementSibling(node)) continue;=0A= results.push(node);=0A= }=0A= return results;=0A= },=0A= 'last-child': function(nodes, value, root) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A= if (Selector.handlers.nextElementSibling(node)) continue;=0A= results.push(node);=0A= }=0A= return results;=0A= },=0A= 'only-child': function(nodes, value, root) {=0A= var h =3D Selector.handlers;=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= if (!h.previousElementSibling(node) && = !h.nextElementSibling(node))=0A= results.push(node);=0A= return results;=0A= },=0A= 'nth-child': function(nodes, formula, root) {=0A= return Selector.pseudos.nth(nodes, formula, root);=0A= },=0A= 'nth-last-child': function(nodes, formula, root) {=0A= return Selector.pseudos.nth(nodes, formula, root, true);=0A= },=0A= 'nth-of-type': function(nodes, formula, root) {=0A= return Selector.pseudos.nth(nodes, formula, root, false, true);=0A= },=0A= 'nth-last-of-type': function(nodes, formula, root) {=0A= return Selector.pseudos.nth(nodes, formula, root, true, true);=0A= },=0A= 'first-of-type': function(nodes, formula, root) {=0A= return Selector.pseudos.nth(nodes, "1", root, false, true);=0A= },=0A= 'last-of-type': function(nodes, formula, root) {=0A= return Selector.pseudos.nth(nodes, "1", root, true, true);=0A= },=0A= 'only-of-type': function(nodes, formula, root) {=0A= var p =3D Selector.pseudos;=0A= return p['last-of-type'](p['first-of-type'](nodes, formula, root), = formula, root);=0A= },=0A= =0A= // handles the an+b logic=0A= getIndices: function(a, b, total) {=0A= if (a =3D=3D 0) return b > 0 ? [b] : [];=0A= return $R(1, total).inject([], function(memo, i) {=0A= if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);=0A= return memo;=0A= });=0A= },=0A= =0A= // handles nth(-last)-child, nth(-last)-of-type, and = (first|last)-of-type=0A= nth: function(nodes, formula, root, reverse, ofType) {=0A= if (nodes.length =3D=3D 0) return [];=0A= if (formula =3D=3D 'even') formula =3D '2n+0';=0A= if (formula =3D=3D 'odd') formula =3D '2n+1';=0A= var h =3D Selector.handlers, results =3D [], indexed =3D [], m;=0A= h.mark(nodes);=0A= for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A= if (!node.parentNode._counted) {=0A= h.index(node.parentNode, reverse, ofType);=0A= indexed.push(node.parentNode);=0A= }=0A= }=0A= if (formula.match(/^\d+$/)) { // just a number=0A= formula =3D Number(formula);=0A= for (var i =3D 0, node; node =3D nodes[i]; i++)=0A= if (node.nodeIndex =3D=3D formula) results.push(node);=0A= } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // = an+b=0A= if (m[1] =3D=3D "-") m[1] =3D -1;=0A= var a =3D m[1] ? Number(m[1]) : 1;=0A= var b =3D m[2] ? Number(m[2]) : 0;=0A= var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);=0A= for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; = i++) {=0A= for (var j =3D 0; j < l; j++)=0A= if (node.nodeIndex =3D=3D indices[j]) results.push(node);=0A= }=0A= }=0A= h.unmark(nodes);=0A= h.unmark(indexed);=0A= return results;=0A= },=0A= =0A= 'empty': function(nodes, value, root) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A= // IE treats comments as element nodes=0A= if (node.tagName =3D=3D '!' || (node.firstChild && = !node.innerHTML.match(/^\s*$/))) continue;=0A= results.push(node);=0A= }=0A= return results;=0A= },=0A= =0A= 'not': function(nodes, selector, root) {=0A= var h =3D Selector.handlers, selectorType, m;=0A= var exclusions =3D new Selector(selector).findElements(root);=0A= h.mark(exclusions);=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= if (!node._counted) results.push(node);=0A= h.unmark(exclusions);=0A= return results;=0A= },=0A= =0A= 'enabled': function(nodes, value, root) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= if (!node.disabled) results.push(node);=0A= return results;=0A= },=0A= =0A= 'disabled': function(nodes, value, root) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= if (node.disabled) results.push(node);=0A= return results;=0A= },=0A= =0A= 'checked': function(nodes, value, root) {=0A= for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A= if (node.checked) results.push(node);=0A= return results;=0A= }=0A= },=0A= =0A= operators: {=0A= '=3D': function(nv, v) { return nv =3D=3D v; },=0A= '!=3D': function(nv, v) { return nv !=3D v; },=0A= '^=3D': function(nv, v) { return nv.startsWith(v); },=0A= '$=3D': function(nv, v) { return nv.endsWith(v); },=0A= '*=3D': function(nv, v) { return nv.include(v); },=0A= '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + = ' '); },=0A= '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + = '-').include('-' + v.toUpperCase() + '-'); }=0A= },=0A= =0A= matchElements: function(elements, expression) {=0A= var matches =3D new Selector(expression).findElements(), h =3D = Selector.handlers;=0A= h.mark(matches);=0A= for (var i =3D 0, results =3D [], element; element =3D elements[i]; = i++)=0A= if (element._counted) results.push(element);=0A= h.unmark(matches);=0A= return results;=0A= },=0A= =0A= findElement: function(elements, expression, index) {=0A= if (typeof expression =3D=3D 'number') {=0A= index =3D expression; expression =3D false;=0A= }=0A= return Selector.matchElements(elements, expression || '*')[index || = 0];=0A= },=0A= =0A= findChildElements: function(element, expressions) {=0A= var exprs =3D expressions.join(','), expressions =3D [];=0A= exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {=0A= expressions.push(m[1].strip());=0A= });=0A= var results =3D [], h =3D Selector.handlers;=0A= for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {=0A= selector =3D new Selector(expressions[i].strip());=0A= h.concat(results, selector.findElements(element));=0A= }=0A= return (l > 1) ? h.unique(results) : results;=0A= }=0A= });=0A= =0A= function $$() {=0A= return Selector.findChildElements(document, $A(arguments));=0A= }=0A= var Form =3D {=0A= reset: function(form) {=0A= $(form).reset();=0A= return form;=0A= },=0A= =0A= serializeElements: function(elements, getHash) {=0A= var data =3D elements.inject({}, function(result, element) {=0A= if (!element.disabled && element.name) {=0A= var key =3D element.name, value =3D $(element).getValue();=0A= if (value !=3D null) {=0A= if (key in result) {=0A= if (result[key].constructor !=3D Array) result[key] =3D = [result[key]];=0A= result[key].push(value);=0A= }=0A= else result[key] =3D value;=0A= }=0A= }=0A= return result;=0A= });=0A= =0A= return getHash ? data : Hash.toQueryString(data);=0A= }=0A= };=0A= =0A= Form.Methods =3D {=0A= serialize: function(form, getHash) {=0A= return Form.serializeElements(Form.getElements(form), getHash);=0A= },=0A= =0A= getElements: function(form) {=0A= return $A($(form).getElementsByTagName('*')).inject([],=0A= function(elements, child) {=0A= if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A= elements.push(Element.extend(child));=0A= return elements;=0A= }=0A= );=0A= },=0A= =0A= getInputs: function(form, typeName, name) {=0A= form =3D $(form);=0A= var inputs =3D form.getElementsByTagName('input');=0A= =0A= if (!typeName && !name) return $A(inputs).map(Element.extend);=0A= =0A= for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i = < length; i++) {=0A= var input =3D inputs[i];=0A= if ((typeName && input.type !=3D typeName) || (name && input.name = !=3D name))=0A= continue;=0A= matchingInputs.push(Element.extend(input));=0A= }=0A= =0A= return matchingInputs;=0A= },=0A= =0A= disable: function(form) {=0A= form =3D $(form);=0A= Form.getElements(form).invoke('disable');=0A= return form;=0A= },=0A= =0A= enable: function(form) {=0A= form =3D $(form);=0A= Form.getElements(form).invoke('enable');=0A= return form;=0A= },=0A= =0A= findFirstElement: function(form) {=0A= return $(form).getElements().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= form =3D $(form);=0A= form.findFirstElement().activate();=0A= return form;=0A= },=0A= =0A= request: function(form, options) {=0A= form =3D $(form), options =3D Object.clone(options || {});=0A= =0A= var params =3D options.parameters;=0A= options.parameters =3D form.serialize(true);=0A= =0A= if (params) {=0A= if (typeof params =3D=3D 'string') params =3D = params.toQueryParams();=0A= Object.extend(options.parameters, params);=0A= }=0A= =0A= if (form.hasAttribute('method') && !options.method)=0A= options.method =3D form.method;=0A= =0A= return new Ajax.Request(form.readAttribute('action'), options);=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Form.Element =3D {=0A= focus: function(element) {=0A= $(element).focus();=0A= return element;=0A= },=0A= =0A= select: function(element) {=0A= $(element).select();=0A= return element;=0A= }=0A= }=0A= =0A= Form.Element.Methods =3D {=0A= serialize: function(element) {=0A= element =3D $(element);=0A= if (!element.disabled && element.name) {=0A= var value =3D element.getValue();=0A= if (value !=3D undefined) {=0A= var pair =3D {};=0A= pair[element.name] =3D value;=0A= return Hash.toQueryString(pair);=0A= }=0A= }=0A= return '';=0A= },=0A= =0A= getValue: function(element) {=0A= element =3D $(element);=0A= var method =3D element.tagName.toLowerCase();=0A= return Form.Element.Serializers[method](element);=0A= },=0A= =0A= clear: function(element) {=0A= $(element).value =3D '';=0A= return element;=0A= },=0A= =0A= present: function(element) {=0A= return $(element).value !=3D '';=0A= },=0A= =0A= activate: function(element) {=0A= element =3D $(element);=0A= try {=0A= element.focus();=0A= if (element.select && (element.tagName.toLowerCase() !=3D 'input' = ||=0A= !['button', 'reset', 'submit'].include(element.type)))=0A= element.select();=0A= } catch (e) {}=0A= return element;=0A= },=0A= =0A= disable: function(element) {=0A= element =3D $(element);=0A= element.blur();=0A= element.disabled =3D true;=0A= return element;=0A= },=0A= =0A= enable: function(element) {=0A= element =3D $(element);=0A= element.disabled =3D false;=0A= return element;=0A= }=0A= }=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= var Field =3D Form.Element;=0A= var $F =3D Form.Element.Methods.getValue;=0A= =0A= /*-----------------------------------------------------------------------= ---*/=0A= =0A= Form.Element.Serializers =3D {=0A= input: function(element) {=0A= switch (element.type.toLowerCase()) {=0A= case 'checkbox':=0A= case 'radio':=0A= return Form.Element.Serializers.inputSelector(element);=0A= default:=0A= return Form.Element.Serializers.textarea(element);=0A= }=0A= },=0A= =0A= inputSelector: function(element) {=0A= return element.checked ? element.value : null;=0A= },=0A= =0A= textarea: function(element) {=0A= return element.value;=0A= },=0A= =0A= select: function(element) {=0A= return this[element.type =3D=3D 'select-one' ?=0A= 'selectOne' : 'selectMany'](element);=0A= },=0A= =0A= selectOne: function(element) {=0A= var index =3D element.selectedIndex;=0A= return index >=3D 0 ? this.optionValue(element.options[index]) : = null;=0A= },=0A= =0A= selectMany: function(element) {=0A= var values, length =3D element.length;=0A= if (!length) return null;=0A= =0A= for (var i =3D 0, values =3D []; i < length; i++) {=0A= var opt =3D element.options[i];=0A= if (opt.selected) values.push(this.optionValue(opt));=0A= }=0A= return values;=0A= },=0A= =0A= optionValue: function(opt) {=0A= // extend element because hasAttribute may not be native=0A= return Element.extend(opt).hasAttribute('value') ? opt.value : = opt.text;=0A= }=0A= }=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= var changed =3D ('string' =3D=3D typeof this.lastValue && 'string' = =3D=3D typeof value=0A= ? this.lastValue !=3D value : String(this.lastValue) !=3D = String(value));=0A= if (changed) {=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= = Form.getElements(this.element).each(this.registerCallback.bind(this));=0A= },=0A= =0A= registerCallback: function(element) {=0A= if (element.type) {=0A= switch (element.type.toLowerCase()) {=0A= case 'checkbox':=0A= case 'radio':=0A= Event.observe(element, 'click', = this.onElementEvent.bind(this));=0A= break;=0A= default:=0A= Event.observe(element, 'change', = this.onElementEvent.bind(this));=0A= break;=0A= }=0A= }=0A= }=0A= }=0A= =0A= Form.Element.EventObserver =3D Class.create();=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= KEY_HOME: 36,=0A= KEY_END: 35,=0A= KEY_PAGEUP: 33,=0A= KEY_PAGEDOWN: 34,=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, length =3D Event.observers.length; i < 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= element =3D $(element);=0A= useCapture =3D useCapture || false;=0A= =0A= if (name =3D=3D 'keypress' &&=0A= (Prototype.Browser.WebKit || element.attachEvent))=0A= name =3D 'keydown';=0A= =0A= Event._observeAndCache(element, name, observer, useCapture);=0A= },=0A= =0A= stopObserving: function(element, name, observer, useCapture) {=0A= element =3D $(element);=0A= useCapture =3D useCapture || false;=0A= =0A= if (name =3D=3D 'keypress' &&=0A= (Prototype.Browser.WebKit || element.attachEvent))=0A= name =3D 'keydown';=0A= =0A= if (element.removeEventListener) {=0A= element.removeEventListener(name, observer, useCapture);=0A= } else if (element.detachEvent) {=0A= try {=0A= element.detachEvent('on' + name, observer);=0A= } catch (e) {}=0A= }=0A= }=0A= });=0A= =0A= /* prevent memory leaks in IE */=0A= if (Prototype.Browser.IE)=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= if(element.tagName=3D=3D'BODY') break;=0A= var 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= 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=3D document.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= if (!window.opera || element.tagName=3D=3D'BODY') {=0A= valueT -=3D element.scrollTop || 0;=0A= valueL -=3D element.scrollLeft || 0;=0A= }=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 (Prototype.Browser.WebKit) {=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= }=0A= =0A= Element.addMethods(); ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.sciencedaily.com/scripts/google-story.js function google_ad_request_done(google_ads) { =0A= if (google_ads.length > 0) {=0A= var top =3D '
';=0A= if (google_info.feedback_url) {=0A= top +=3D 'Ads by Google';=0A= } else {=0A= top +=3D 'Ads by Google';=0A= }=0A= top +=3D '

';=0A= var first_ad_unit =3D '', second_ad_unit =3D '';=0A= for (var i =3D 0; i < google_ads.length; ++i) {=0A= if (i < 5) {=0A= first_ad_unit +=3D '';=0A= } else if (i < 8) {=0A= second_ad_unit +=3D '';=0A= }=0A= }=0A= var bottom =3D '
';=0A= document.getElementById("googlerelated").innerHTML =3D top + = first_ad_unit + bottom;=0A= if (google_ads.length > 4) {=0A= document.getElementById("googlebottom").innerHTML =3D top + = second_ad_unit + bottom;=0A= }=0A= }=0A= }=0A= google_ad_client =3D "pub-1787672658759074";=0A= google_ad_output =3D "js";=0A= google_max_num_ads =3D "8";=0A= google_feedback =3D "on";=0A= google_ad_region =3D "test";=0A= =0A= ------=_NextPart_000_008F_01C86121.E4F510A0 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js (function(){=0A= var = h=3D{google_ad_channel:"channel",google_ad_host:"host",google_ad_region:"= region",google_ad_section:"region",google_ad_type:"ad_type",google_adtest= :"adtest",google_alternate_ad_url:"alternate_ad_url",google_alternate_col= or:"alt_color",google_bid:"bid",google_city:"gcs",google_color_bg:"color_= bg",google_color_border:"color_border",google_color_line:"color_line",goo= gle_color_link:"color_link",google_color_text:"color_text",google_color_u= rl:"color_url",google_contents:"contents",google_country:"gl",=0A= google_cust_age:"cust_age",google_cust_ch:"cust_ch",google_cust_gender:"c= ust_gender",google_cust_id:"cust_id",google_cust_interests:"cust_interest= s",google_cust_job:"cust_job",google_cust_l:"cust_l",google_cust_lh:"cust= _lh",google_cust_u_url:"cust_u_url",google_disable_video_autoplay:"disabl= e_video_autoplay",google_ed:"ed",google_encoding:"oe",google_feedback:"fe= edback_link",google_flash_version:"flash",google_gl:"gl",google_hints:"hi= nts",google_kw:"kw",google_kw_type:"kw_type",google_language:"hl",=0A= google_referrer_url:"ref",google_region:"gr",google_reuse_colors:"reuse_c= olors",google_safe:"adsafe",google_targeting:"targeting",google_ui_featur= es:"ui"},m=3D{google_ad_format:"format",google_ad_output:"output",google_= ad_callback:"callback",google_ad_override:"google_ad_override",google_ad_= slot:"slotname",google_analytics_webpropids:"ga_wpids",google_correlator:= "correlator",google_cpa_choice:"cpa_choice",google_image_size:"image_size= ",google_last_modified_time:"lmt",google_max_num_ads:"num_ads",google_max= _radlink_len:"max_radlink_len",=0A= google_num_radlinks:"num_radlinks",google_num_radlinks_per_unit:"num_radl= inks_per_unit",google_only_ads_with_video:"only_ads_with_video",google_pa= ge_location:"loc",google_page_url:"url",google_rl_dest_url:"rl_dest_url",= google_rl_filtering:"rl_filtering",google_rl_mode:"rl_mode",google_rt:"rt= ",google_skip:"skip"};function n(b){return h[b]||m[b]||null}var = u=3Ddocument;function w(){var b=3Du.cookie,a=3DMath.round((new = Date).getTime()/1000),d=3Db.indexOf("__utma=3D")>-1,e=3Db.indexOf("__utmb= =3D")>-1,c=3Db.indexOf("__utmc=3D")>=0A= -1,f,g=3D{};if(d){f=3Db.split("__utma=3D")[1].split(";")[0].split(".");g.= sid=3D(!e||!c?a:f[4])+"";g.vid=3Df[1]+"."+f[2];g.from_cookie=3Dtrue}else{= g.sid=3Dwindow&&window.gaGlobal&&window.gaGlobal.sid?window.gaGlobal.sid:= a+"";g.vid=3Dwindow&&window.gaGlobal&&window.gaGlobal.vid?window.gaGlobal= .vid:Math.round(Math.random()*2147483647)+"."+a;g.from_cookie=3Dfalse}g.h= id=3Dwindow&&window.gaGlobal&&window.gaGlobal.hid?window.gaGlobal.hid:Mat= h.round(Math.random()*2147483647);window.gaGlobal=3Dg;return = g}(function(){function b(){}=0A= b.prototype.l=3Dfunction(e){var c=3De.indexOf("#")+1;return = c?e.substr(c):""};b.prototype.n=3Dfunction(e){return/[&<>\"]/.test(e)?e.r= eplace(/&/g,"&").replace(//g,">").replace(/\= "/g,"""):e};b.prototype.b=3Dfunction(e){var c=3D""};b.prototype.m=3Dfunction(e,c){try{return = e.frames[c]}catch(f){return null}};b.prototype.e=3Dfunction(e){var = c=3Ddocument.createElement("iframe");for(var f in e){c.setAttribute(f,=0A= e[f])}return c};b.prototype.i=3Dfunction(e,c){var = f=3Dthis;setTimeout(function(){document.body.appendChild(f.e({id:e,name:e= ,src:c,width:0,height:0,frameBorder:0}))},0)};b.prototype.r=3Dfunction(e,= c){var = f=3Dthis;document.write(f.b({id:e,name:e,src:c,width:0,height:0,frameBord= er:0}))};b.prototype.g=3Dfunction(e,c){var = f=3D[],g=3De.length,k=3D0;while(k0){g.f[c]=3Di[o];for(var = q=3D0;qIDICommon.MAX_URL_LENGTH){y+=3D= "$";var = H=3Dl.d(c),S=3DIDICommon.MAX_URL_LENGTH-1-H.length,I=3DIDICommon.g(y,S),J= =3DI.length;for(var s=3D0;s<\/script>")}else = if(b.google_ad_output=3D=3D"html"){if(b.name!=3D"google_ads_frame"){if(e!= =3Dnull){a.write('
')}if(R(b.google_ad_output,b.google_ad_client)){IDIHost.q("h= ttp://pagead2.googlesyndication.com/pagead/idi_relay.html");var = c=3D0;if(b.google_num_0ad_slots){c+=3D=0A= b.google_num_0ad_slots}if(b.google_num_ad_slots){c+=3Db.google_num_ad_slo= ts}if(b.google_num_sdo_slots){c+=3Db.google_num_sdo_slots}var = f=3D"google_inline_div"+c,g=3D"
';a.write(g);var = k=3D"google_frame"+c,j=3Db.setTimeout(function(){IDIHost.h(k)},5000);IDIH= ost.j(d,k,b.google_ad_width,b.google_ad_height,{callback:function(l,=0A= i){P(l,i,j)},pollingInterval:500,iframeAttrs:{style:"position: = absolute;left:0px",marginWidth:"0",marginHeight:"0",vspace:"0",hspace:"0"= ,allowTransparency:"true"},parentDivId:f})}else{a.write('")}if(e!=3Dnull){a.write("
")}= }}else if(b.google_ad_output=3D=3D=0A= "textlink"){a.write('