From: <Saved by Windows Internet Explorer 8>
Subject: =?iso-8859-1?Q?Tide=3F_Or_Ivory_Snow=3F_Public_Power_in_the_Age_of_Empire?=
	=?iso-8859-1?Q?_-_AlterInfos_-_Am=E9rica_Latina?=
Date: Mon, 27 Jun 2011 09:20:16 -0700
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0059_01CC34AB.6D9E88E0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6109

This is a multi-part message in MIME format.

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/spip.php?article1622

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML dir=3Dltr lang=3Den xml:lang=3D"en"=20
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Tide? Or Ivory Snow? =
Public Power in the Age of Empire - AlterInfos - Am=E9rica =
Latina</TITLE>
<META name=3Ddescription=20
content=3D"August 16th, 2004 - San Francisco, California. I've been =
asked to speak about &quot;Public Power in the Age of Empire.&quot; I'm =
not used to (...)">
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.19088"><LINK =
rel=3D"shortcut icon"=20
type=3Dimage/x-icon href=3D"squelettes/favicon.ico"><LINK=20
title=3D"Syndicate the whole site" rel=3Dalternate =
type=3Dapplication/rss+xml=20
href=3D"http://www.alterinfos.org/spip.php?page=3Dbackend"><LINK =
rel=3Dstylesheet=20
type=3Dtext/css href=3D"http://www.alterinfos.org/prive/spip_style.css"=20
media=3Dall><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.alterinfos.org/squelettes-dist/spip_formulaires.css"=20
media=3D"projection, screen, tv"><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.alterinfos.org/squelettes/habillage.css"=20
media=3D"projection, screen, tv"><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.alterinfos.org/squelettes-dist/impression.css"=20
media=3Dprint><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.alterinfos.org/extensions/porte_plume/css/barre_outils=
.css"=20
media=3Dall><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.alterinfos.org/spip.php?page=3Dbarre_outils_icones.css=
"=20
media=3Dall>
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/prive/javascript/jquery.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/prive/javascript/jquery.form.js"></SCRIP=
T>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/prive/javascript/ajaxCallback.js"></SCRI=
PT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/prive/javascript/jquery.cookie.js"></SCR=
IPT>
<!-- insert_head --><!--[if lt IE 7]>=0A=
	<script =
src=3D'extensions/msie_compat/javascript/jquery.ifixpng.js'></script>=0A=
	<script type=3D'text/javascript'>//<![CDATA[=0A=
		jQuery.ifixpng('rien.gif');		=0A=
		function fixie() {=0A=
			jQuery('img').ifixpng();=0A=
		}=0A=
		$(document).ready(function() { fixie(); });=0A=
		onAjaxLoad(fixie);	=0A=
	//]]></script>=0A=
<![endif]-->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/extensions/porte_plume/javascript/xregex=
p-min.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/extensions/porte_plume/javascript/jquery=
.markitup_pour_spip.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/extensions/porte_plume/javascript/jquery=
.previsu_spip.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/spip.php?page=3Dporte_plume_start.js&amp=
;lang=3Den"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/plugins/Lecteur_multimedia/soundmanager/=
soundmanager2.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript><!--=0A=
var =
musicplayerurl=3D"plugins/Lecteur_multimedia/eraplayer_playlist.swf";soun=
dManager.url =3D =
"plugins/Lecteur_multimedia/soundmanager/soundmanager2.swf";soundManager.=
consoleOnly =3D true;soundManager.debugMode =3D false;//--></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.alterinfos.org/plugins/Lecteur_multimedia/player_enclos=
ure.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript><!--=0A=
	$(document).ready(function(){=0A=
	soundManager.onload =3D function() {}});=0A=
	// --></SCRIPT>
<LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.alterinfos.org/plugins/Lecteur_multimedia/player.css" =

media=3D"projection, screen, tv"></HEAD>
<BODY class=3Dpage_article>
<DIV id=3Dpage>
<DIV id=3Dentete><A class=3Daccueil title=3D"Home page"=20
href=3D"http://www.alterinfos.org/" rel=3D"start home"><IMG=20
style=3D"WIDTH: 600px; HEIGHT: 76px" class=3Dspip_logos alt=3D""=20
src=3D"http://www.alterinfos.org/local/cache-vignettes/L600xH76/siteon0-c=
7449.jpg"=20
width=3D600 height=3D76> </A></DIV>
<DIV id=3Dconteneur class=3Dhfeed>
<DIV id=3Dcontenu class=3Dhentry>
<DIV id=3Dhierarchie><A href=3D"http://www.alterinfos.org/">Home =
page</A> &gt; <A=20
href=3D"http://www.alterinfos.org/spip.php?rubrique11">&gt;&gt; =
English</A> &gt;=20
<A href=3D"http://www.alterinfos.org/spip.php?rubrique15">Global</A> =
&gt; <STRONG=20
class=3Don>Tide? Or Ivory Snow? Public Power in the Age of =
Empire</STRONG></DIV>
<DIV class=3Dcartouche>
<DIV class=3Dsurlignable>
<P class=3Dsurtitre>Address to the 99th annual meeting of the American=20
Sociological Association</P>
<H1 class=3Dentry-title>Tide? Or Ivory Snow? Public Power in the Age of=20
Empire</H1>
<P class=3Dsoustitre>Arundhati Roy, Democracy Now!</P></DIV>
<P><SMALL><ABBR class=3Dpublished title=3D2007-09-23T22:20:00Z>Monday 24 =
September=20
2007</ABBR>, posted by <SPAN class=3D"vcard author"><A class=3D"url fn =
spip_in"=20
href=3D"http://www.alterinfos.org/spip.php?auteur19">John=20
Malone</A></SPAN></SMALL></P>
<P class=3Dtraductions>All the versions of this article: <SPAN dir=3Dltr =
lang=3Den=20
class=3Don xml:lang=3D"en">[English]</SPAN> <SPAN dir=3Dltr lang=3Des =
xml:lang=3D"es">[<A=20
title=3D"=BFCon qu=E9 detergente lavas? El poder p=FAblico en la era del =
imperio"=20
href=3D"http://www.alterinfos.org/spip.php?article1623" hreflang=3Des=20
rel=3Dalternate>Espa=F1ol</A>]</SPAN> </P></DIV>
<DIV class=3Dsurlignable>
<DIV class=3D"texte entry-content">
<P>August 16th, 2004 - San Francisco, California.</P>
<P>I=92ve been asked to speak about "Public Power in the Age of Empire." =
I=92m not=20
used to doing as I=92m told, but by happy coincidence, it=92s exactly =
what I=92d like=20
to speak about tonight.</P>
<P>When language has been butchered and bled of meaning, how do we =
understand=20
"public power"? When freedom means occupation, when democracy means =
neo-liberal=20
capitalism, when reform means repression, when words like "empowerment" =
and=20
"peacekeeping" make your blood run cold - why, then, "public power" =
could mean=20
whatever you want it to mean. A biceps building machine, or a Community =
Power=20
Shower. So, I=92ll just have to define "public power" as I go along, in =
my own=20
self-serving sort of way.</P>
<P>In India, the word public is now a Hindi word. It means people. In =
Hindi, we=20
have sarkar and public, the government and the people. Inherent in this =
use is=20
the underlying assumption that the government is quite separate from =
"the=20
people." This distinction has to do with the fact that India=92s freedom =
struggle,=20
though magnificent, was by no means revolutionary. The Indian elite =
stepped=20
easily and elegantly into the shoes of the British imperialists. A =
deeply=20
impoverished, essentially feudal society became a modern, independent =
nation=20
state. Even today, fifty seven years on to the day, the truly vanquished =
still=20
look upon the government as mai-baap, the parent and provider. The =
somewhat more=20
radical, those who still have fire in their bellies, see it as chor, the =
thief,=20
the snatcher-away of all things.</P>
<P>Either way, for most Indians, sarkar is very separate from public. =
However,=20
as you make your way up India=92s social ladder, the distinction between =
sarkar=20
and public gets blurred. The Indian elite, like the elite anywhere in =
the world,=20
finds it hard to separate itself from the state. It sees like the state, =
it=20
thinks like the state, it speaks like the state.</P>
<P>In the United States, on the other hand, the blurring of the =
distinction=20
between sarkar and public has penetrated far deeper into society. This =
could be=20
a sign of a robust democracy, but unfortunately, it=92s a little more =
complicated=20
and less pretty than that. Among other things, it has to do with the =
elaborate=20
web of paranoia generated by the U.S. sarkar and spun out by the =
corporate media=20
and Hollywood. Ordinary Americans have been manipulated into imagining =
they are=20
a people under siege whose sole refuge and protector is their =
government. If it=20
isn=92t the Communists, it=92s al-Qaeda. If it isn=92t Cuba. it=92s =
Nicaragua. As a=20
result, this, the most powerful nation in the world - with its =
unmatchable=20
arsenal of weapons, its history of having waged and sponsored endless =
wars, and=20
the only nation in history to have actually used nuclear bombs - is =
peopled by a=20
terrified citizenry, jumping at shadows. A people bonded to the state =
not by=20
social services, or public health care, or employment guarantees, but by =

fear.</P>
<P>This synthetically manufactured fear is used to gain public sanction =
for=20
further acts of aggression. And so it goes, building into a spiral of=20
self-fulfilling hysteria, now formally calibrated by the U.S =
government=92s=20
Amazing Technicolored Terror Alerts: fuchsia, turquoise, salmon =
pink.</P>
<P>To outside observers, this merging of sarkar and public in the United =
States=20
sometimes makes it hard to separate the actions of the U.S. government =
from the=20
American people. It is this confusion that fuels anti-Americanism in the =
world.=20
Anti-Americanism is then seized upon and amplified by the U.S. =
government and=20
its faithful media outlets. You know the routine: "Why do they hate us? =
They=20
hate our freedoms" . . . etc. . . . etc. This enhances the sense of =
isolation=20
among American people and makes the embrace between sarkar and public =
even more=20
intimate. Like Red Riding Hood looking for a cuddle in the wolf=92s =
bed.</P>
<P>Using the threat of an external enemy to rally people behind you is a =
tired=20
old horse, which politicians have ridden into power for centuries. But =
could it=20
be that ordinary people are fed up of that poor old horse and are =
looking for=20
something different? There=92s an old Hindi film song that goes yeh =
public hai,=20
yeh sab jaanti hai (the public, she knows it all). Wouldn=92t it be =
lovely if the=20
song were right and the politicians wrong?</P>
<P>Before Washington=92s illegal invasion of Iraq, a Gallup =
International poll=20
showed that in no European country was the support for a unilateral war =
higher=20
than 11 percent. On February 15, 2003, weeks before the invasion, more =
than ten=20
million people marched against the war on different continents, =
including North=20
America. And yet the governments of many supposedly democratic countries =
still=20
went to war.</P>
<P>The question is: is "democracy" still democratic?</P>
<P>Are democratic governments accountable to the people who elected =
them? And,=20
critically, is the public in democratic countries responsible for the =
actions of=20
its sarkar?</P>
<P>If you think about it, the logic that underlies the war on terrorism =
and the=20
logic that underlies terrorism is exactly the same. Both make ordinary =
citizens=20
pay for the actions of their government. Al-Qaeda made the people of the =
United=20
States pay with their lives for the actions of their government in =
Palestine,=20
Saudi Arabia, Iraq, and Afghanistan. The U.S government has made the =
people of=20
Afghanistan pay in their thousands for the actions of the Taliban and =
the people=20
of Iraq pay in their hundreds of thousands for the actions of Saddam=20
Hussein.</P>
<P>The crucial difference is that nobody really elected al-Qaeda, the =
Taliban,=20
or Saddam Hussein. But the president of the United States was elected =
(well ...=20
in a manner of speaking).</P>
<P>The prime ministers of Italy, Spain, and the United Kingdom were =
elected.=20
Could it then be argued that citizens of these countries are more =
responsible=20
for the actions of their government than Iraqis are for the actions of =
Saddam=20
Hussein or Afghans for the Taliban?</P>
<P>Whose God decides which is a "just war" and which isn=92t? George =
Bush senior=20
once said: "I will never apologize for the United States. I don=92t care =
what the=20
facts are." When the president of the most powerful country in the world =
doesn=92t=20
need to care what the facts are, then we can at least be sure we have =
entered=20
the Age of Empire.</P>
<P>So what does public power mean in the Age of Empire? Does it mean =
anything at=20
all? Does it actually exist?</P>
<P>In these allegedly democratic times, conventional political thought =
holds=20
that public power is exercised through the ballot. Scores of countries =
in the=20
world will go to the polls this year. Most (not all) of them will get =
the=20
governments they vote for. But will they get the governments they =
want?</P>
<P>In India this year, we voted the Hindu nationalists out of office. =
But even=20
as we celebrated, we knew that on nuclear bombs, neo-liberalism, =
privatization,=20
censorship, big dams - on every major issue other than overt Hindu =
nationalism -=20
the Congress and the BJP have no major ideological differences. We know =
that it=20
is the fifty-year legacy of the Congress Party that prepared the ground=20
culturally and politically for the far right. It was also the Congress =
Party=20
that first opened India=92s markets to corporate globalization.</P>
<P>In its election campaign, the Congress Party indicated that it was =
prepared=20
to rethink some of its earlier economic policies. Millions of India=92s =
poorest=20
people came out in strength to vote in the elections. The spectacle of =
the great=20
Indian democracy was telecast live - the poor farmers, the old and =
infirm, the=20
veiled women with their beautiful silver jewelry, making quaint journeys =
to=20
election booths on elephants and camels and bullock carts. Contrary to =
the=20
predictions of all India=92s experts and pollsters, Congress won more =
votes than=20
any other party. India=92s communist parties won the largest share of =
the vote in=20
their history. India=92s poor had clearly voted against =
neo-liberalism=92s economic=20
"reforms" and growing fascism. As soon as the votes were counted, the =
corporate=20
media dispatched them like badly paid extras on a film set. Television =
channels=20
featured split screens. Half the screen showed the chaos outside the =
home of=20
Sonia Gandhi, the leader of the Congress Party, as the coalition =
government was=20
cobbled together.</P>
<P>The other half showed frenzied stockbrokers outside the Bombay Stock=20
Exchange, panicking at the thought that the Congress Party might =
actually honor=20
its promises and implement its electoral mandate. We saw the Sensex =
stock index=20
move up and down and sideways. The media, whose own publicly listed =
stocks were=20
plummeting, reported the stock market crash as though Pakistan had =
launched=20
ICBMs on New Delhi.</P>
<P>Even before the new government was formally sworn in, senior Congress =

politicians made public statements reassuring investors and the media =
that=20
privatization of public utilities would continue. Meanwhile the BJP, now =
in=20
opposition, has cynically, and comically, begun to oppose foreign direct =

investment and the further opening of Indian markets.</P>
<P>This is the spurious, evolving dialectic of electoral democracy.</P>
<P>As for the Indian poor, once they=92ve provided the votes, they are =
expected to=20
bugger off home. Policy will be decided despite them.</P>
<P>And what of the U.S. elections? Do U.S. voters have a real =
choice?</P>
<P>It=92s true that if John Kerry becomes president, some of the oil =
tycoons and=20
Christian fundamentalists in the White House will change. Few will be =
sorry to=20
see the back of Dick Cheney or Donald Rumsfeld or John Ashcroft and =
their=20
blatant thuggery. But the real concern is that in the new administration =
their=20
policies will continue. That we will have Bushism without Bush.</P>
<P>Those positions of real power - the bankers, the CEOs - are not =
vulnerable to=20
the vote (. . . and in any case, they fund both sides).</P>
<P>Unfortunately the importance of the U.S elections has deteriorated =
into a=20
sort of personality contest. A squabble over who would do a better job =
of=20
overseeing empire. John Kerry believes in the idea of empire as =
fervently as=20
George Bush does.</P>
<P>The U.S. political system has been carefully crafted to ensure that =
no one=20
who questions the natural goodness of the military-industrial-corporate =
power=20
structure will be allowed through the portals of power.</P>
<P>Given this, it=92s no surprise that in this election you have two =
Yale=20
University graduates, both members of Skull and Bones, the same secret =
society,=20
both millionaires, both playing at soldier-soldier, both talking up war, =
and=20
arguing almost childishly about who will lead the war on terror more=20
effectively.</P>
<P>Like President Bill Clinton before him, Kerry will continue the =
expansion of=20
U.S. economic and military penetration into the world. He says he would =
have=20
voted to authorize Bush to go to war in Iraq even if he had known that =
Iraq had=20
no weapons of mass destruction. He promises to commit more troops to =
Iraq. He=20
said recently that he supports Bush=92s policies toward Israel and Ariel =
Sharon=20
100 percent. He says he=92ll retain 98% of Bush=92s tax cuts.</P>
<P>So, underneath the shrill exchange of insults, there is almost =
absolute=20
consensus. It looks as though even if Americans vote for Kerry, =
they=92ll still=20
get Bush. President John Kerbush or President George Berry.</P>
<P>It=92s not a real choice. It=92s an apparent choice. Like choosing a =
brand of=20
detergent. Whether you buy Ivory Snow or Tide, they=92re both owned by =
Proctor=20
&amp; Gamble.</P>
<P>This doesn=92t mean that one takes a position that is without nuance, =
that the=20
Congress and the BJP, New Labor and the Tories, the Democrats and =
Republicans=20
are the same. Of course, they=92re not. Neither are Tide and Ivory Snow. =
Tide has=20
oxy-boosting and Ivory Snow is a gentle cleanser.</P>
<P>In India, there is a difference between an overtly fascist party (the =
BJP)=20
and a party that slyly pits one community against another (Congress), =
and sows=20
the seeds of communalism that are then so ably harvested by the BJP.</P>
<P>There are differences in the I.Q.s and levels of ruthlessness between =
this=20
year=92s U.S. presidential candidates. The anti-war movement in the =
United States=20
has done a phenomenal job of exposing the lies and venality that led to =
the=20
invasion of Iraq, despite the propaganda and intimidation it faced.</P>
<P>This was a service not just to people here, but to the whole world. =
But now,=20
if the anti-war movement openly campaigns for Kerry, the rest of the =
world will=20
think that it approves of his policies of "sensitive" imperialism. Is =
U.S.=20
imperialism preferable if it is supported by the United Nations and =
European=20
countries? Is it preferable if UN asks Indian and Pakistani soldiers to =
do the=20
killing and dying in Iraq instead of U.S. soldiers? Is the only change =
that=20
Iraqis can hope for that French, German, and Russian companies will =
share in the=20
spoils of the occupation of their country?</P>
<P>Is this actually better or worse for those of us who live in subject =
nations?=20
Is it better for the world to have a smarter emperor in power or a =
stupider one?=20
Is that our only choice?</P>
<P>I=92m sorry, I know that these are uncomfortable, even brutal =
questions, but=20
they must be asked.</P>
<P>The fact is that electoral democracy has become a process of cynical=20
manipulation. It offers us a very reduced political space today. To =
believe that=20
this space constitutes real choice would be na=EFve.</P>
<P>The crisis in modern democracy is a profound one.</P>
<P>On the global stage, beyond the jurisdiction of sovereign =
governments,=20
international instruments of trade and finance oversee a complex system =
of=20
multilateral laws and agreements that have entrenched a system of =
appropriation=20
that puts colonialism to shame. This system allows the unrestricted =
entry and=20
exit of massive amounts of speculative capital - hot money - into and =
out of=20
third world countries, which then effectively dictates their economic =
policy.=20
Using the threat of capital flight as a lever, international capital =
insinuates=20
itself deeper and deeper into these economies. Giant transnational =
corporations=20
are taking control of their essential infrastructure and natural =
resources,=20
their minerals, their water, their electricity. The World Trade =
Organization,=20
the World Bank, the International Monetary Fund, and other financial=20
institutions like the Asian Development Bank, virtually write economic =
policy=20
and parliamentary legislation. With a deadly combination of arrogance =
and=20
ruthlessness, they take their sledgehammers to fragile, interdependent,=20
historically complex societies, and devastate them.</P>
<P>All this goes under the fluttering banner of "reform."</P>
<P>As a consequence of this reform, in Africa, Asia, and Latin America,=20
thousands of small enterprises and industries have closed down, millions =
of=20
workers and farmers have lost their jobs and land.</P>
<P><I>The Spectator</I> newspaper in London assures us that "[w]e live =
in the=20
happiest, healthiest and most peaceful era in human history." Billions =
wonder:=20
who=92s "we"? Where does he live? What=92s his Christian name?</P>
<P>The thing to understand is that modern democracy is safely premised =
on an=20
almost religious acceptance of the nation state. But corporate =
globalization is=20
not. Liquid capital is not. So, even though capital needs the coercive =
powers of=20
the nation state to put down revolts in the servants=92 quarters, this =
set up=20
ensures that no individual nation can oppose corporate globalization on =
its=20
own.</P>
<P>Radical change cannot and will not be negotiated by governments; it =
can only=20
be enforced by people. By the public. A public who can link hands across =

national borders.</P>
<P>So when we speak of "Public Power in the Age of Empire," I hope =
it=92s not=20
presumptuous to assume that the only thing that is worth discussing =
seriously is=20
the power of a dissenting public. A public which disagrees with the very =
concept=20
of empire. A public which has set itself against incumbent power -=20
international, national, regional, or provincial governments and =
institutions=20
that support and service empire.</P>
<P>What are the avenues of protest available to people who wish to =
resist=20
empire? By resist I don=92t mean only to express dissent, but to =
effectively force=20
change. Empire has a range of calling cards. It uses different weapons =
to break=20
open different markets. You know the check book and the cruise =
missile.</P>
<P>For poor people in many countries, Empire does not always appear in =
the form=20
of cruise missiles and tanks, as it has in Iraq or Afghanistan or =
Vietnam. It=20
appears in their lives in very local avatars - losing their jobs, being =
sent=20
unpayable electricity bills, having their water supply cut, being =
evicted from=20
their homes and uprooted from their land. All this overseen by the =
repressive=20
machinery of the state, the police, the army, the judiciary. It is a =
process of=20
relentless impoverishment with which the poor are historically familiar. =
What=20
Empire does is to further entrench and exacerbate already existing=20
inequalities.</P>
<P>Even until quite recently, it was sometimes difficult for people to =
see=20
themselves as victims of the conquests of Empire. But now local =
struggles have=20
begun to see their role with increasing clarity. However grand it might =
sound,=20
the fact is, they are confronting Empire in their own, very different =
ways.=20
Differently in Iraq, in South Africa, in India, in Argentina, and =
differently,=20
for that matter, on the streets of Europe and the United States.</P>
<P>Mass resistance movements, individual activists, journalists, =
artists, and=20
film makers have come together to strip Empire of its sheen. They have =
connected=20
the dots, turned cash-flow charts and boardroom speeches into real =
stories about=20
real people and real despair. They have shown how the neo-liberal =
project has=20
cost people their homes, their land, their jobs, their liberty, their =
dignity.=20
They have made the intangible tangible. The once seemingly incorporeal =
enemy is=20
now corporeal.</P>
<P>This is a huge victory. It was forged by the coming together of =
disparate=20
political groups, with a variety of strategies. But they all recognized =
that the=20
target of their anger, their activism, and their doggedness is the same. =
This=20
was the beginning of real globalization. The globalization of =
dissent.</P>
<P>Broadly speaking, there are two kinds of mass resistance movements in =
third=20
world countries today. The landless peoples=92 movement in Brazil, the =
anti-dam=20
movement in India, the Zapatistas in Mexico, the Anti-Privatization =
Forum in=20
South Africa, and hundreds of others, are fighting their own sovereign=20
governments, which have become agents of the neo-liberal project. Most =
of these=20
are radical struggles, fighting to change the structure and chosen model =
of=20
"development" of their own societies.</P>
<P>Then there are those fighting formal and brutal neocolonial =
occupations in=20
contested territories whose boundaries and fault lines were often =
arbitrarily=20
drawn last century by the imperialist powers. In Palestine, Tibet, =
Chechnya,=20
Kashmir, and several states in India=92s northeast provinces, people are =
waging=20
struggles for self-determination.</P>
<P>Several of these struggles might have been radical, even =
revolutionary when=20
they began, but often the brutality of the repression they face pushes =
them into=20
conservative, even retrogressive spaces in which they use the same =
violent=20
strategies and the same language of religious and cultural nationalism =
used by=20
the states they seek to replace.</P>
<P>Many of the foot soldiers in these struggles will find, like those =
who fought=20
apartheid in South Africa, that once they overcome overt occupation, =
they will=20
be left with another battle on their hands - a battle against covert =
economic=20
colonialism.</P>
<P>Meanwhile, as the rift between rich and poor is being driven deeper =
and the=20
battle to control the world=92s resources intensifies. Economic =
colonialism=20
through formal military aggression is staging a comeback.</P>
<P>Iraq today is a tragic illustration of this process. An illegal =
invasion. A=20
brutal occupation in the name of liberation. The rewriting of laws that =
allow=20
the shameless appropriation of the country=92s wealth and resources by=20
corporations allied to the occupation, and now the charade of a local =
"Iraqi=20
government."</P>
<P>For these reasons, it is absurd to condemn the resistance to the U.S. =

occupation in Iraq, as being masterminded by terrorists or insurgents or =

supporters of Saddam Hussein. After all if the United States were =
invaded and=20
occupied, would everybody who fought to liberate it be a terrorist or an =

insurgent or a Bushite?</P>
<P>The Iraqi resistance is fighting on the frontlines of the battle =
against=20
Empire. And therefore that battle is our battle.</P>
<P>Like most resistance movements, it combines a motley range of =
assorted=20
factions. Former Baathists, liberals, Islamists, fed-up =
collaborationists,=20
communists, etc. Of course, it is riddled with opportunism, local =
rivalry,=20
demagoguery, and criminality. But if we are only going to support =
pristine=20
movements, then no resistance will be worthy of our purity.</P>
<P>This is not to say that we shouldn=92t ever criticize resistance =
movements.=20
Many of them suffer from a lack of democracy, from the iconization of =
their=20
"leaders," a lack of transparency, a lack of vision and direction. But =
most of=20
all they suffer from vilification, repression, and lack of =
resources.</P>
<P>Before we prescribe how a pristine Iraqi resistance must conduct =
their=20
secular, feminist, democratic, nonviolent battle, we should shore up our =
end of=20
the resistance by forcing the U.S. and its allies government to withdraw =
from=20
Iraq.</P>
<P>The first militant confrontation in the United States between the =
global=20
justice movement and the neo-liberal junta took place famously at the =
WTO=20
conference in Seattle in December 1999. To many mass movements in =
developing=20
countries that had long been fighting lonely, isolated battles, Seattle =
was the=20
first delightful sign that their anger and their vision of another kind =
of world=20
was shared by people in the imperialist countries.</P>
<P>In January 2001, in Porto Alegre, Brazil, 20,000 activists, students, =
film=20
makers - some of the best minds in the world - came together to share =
their=20
experiences and exchange ideas about confronting Empire. That was the =
birth of=20
the now historic World Social Forum. It was the first, formal coming =
together of=20
an exciting, anarchic, unindoctrinated, energetic, new kind of "Public =
Power."=20
The rallying cry of the WSF is "Another World is Possible." It has =
become a=20
platform where hundreds of conversations, debates, and seminars have =
helped to=20
hone and refine a vision of what kind of world it should be.</P>
<P>By January 2004, when the fourth WSF was held in Mumbai, India, it =
attracted=20
200,000 delegates. I have never been part of a more electrifying =
gathering. It=20
was a sign of the social forum=92s success that the mainstream media in =
India=20
ignored it completely. But now, the WSF is threatened by its own =
success. The=20
safe, open, festive atmosphere of the forum has allowed politicians and=20
nongovernmental organizations that are imbricated in the political and =
economic=20
systems that the forum opposes to participate and make themselves =
heard.</P>
<P>Another danger is that the WSF, which has played such a vital role in =
the=20
movement for global justice, runs the risk of becoming an end unto =
itself. Just=20
organizing it every year consumes the energies of some of the best =
activists. If=20
conversations about resistance replace real civil disobedience, then the =
WSF=20
could become an asset to those whom it was created to oppose. The forum =
must be=20
held and must grow, but we have to find ways to channel our =
conversations there=20
back into concrete action.</P>
<P>As resistance movements have begun to reach out across national =
borders and=20
pose a real threat, governments have developed their own strategies of =
how to=20
deal with them. They range from cooptation to repression.</P>
<P>I=92m going to speak about three of the contemporary dangers that =
confront=20
resistance movements: the difficult meeting point between mass movements =
and the=20
mass media, the hazards of the NGO-ization of resistance, and the =
confrontation=20
between resistance movements and increasingly repressive states.</P>
<P>The place in which the mass media meets mass movements is a =
complicated=20
one.</P>
<P>Governments have learned that a crisis-driven media cannot afford to =
hang=20
about in the same place for too long. Like business houses need a cash =
turnover,=20
the media need crises turnover. Whole countries become old news. They =
cease to=20
exist, and the darkness becomes deeper than before the light was briefly =
shone=20
on them. We saw it happen in Afghanistan when the Soviets withdrew. And =
now,=20
after Operation Enduring Freedom put the CIA=92s Hamid Karzai in place,=20
Afghanistan has been thrown to its warlords once more.</P>
<P>Another CIA operative, Iyad Allawi, has been installed in Iraq, so =
perhaps=20
it=92s time for the media to move on from there, too.</P>
<P>While governments hone the art of waiting out crisis, resistance =
movements=20
are increasingly being ensnared in a vortex of crisis production, =
seeking to=20
find ways of manufacturing them in easily consumable, spectator-friendly =

formats.</P>
<P>Every self-respecting peoples=92 movement, every "issue" is expected =
to have=20
its own hot air balloon in the sky advertising its brand and =
purpose.</P>
<P>For this reason, starvation deaths are more effective advertisements =
for=20
impoverishment than millions of malnourished people, who don=92t quite =
make the=20
cut. Dams are not newsworthy until the devastation they wreak makes good =

television. (And by then, it=92s too late).</P>
<P>Standing in the rising water of a reservoir for days on end, watching =
your=20
home and belongings float away to protest against a big dam used to be =
an=20
effective strategy, but isn=92t any more. The media is dead bored of =
that one. So=20
the hundreds of thousands of people being displaced by dams are expected =
to=20
either conjure new tricks or give up the struggle.</P>
<P>Colorful demonstrations and weekend marches are vital but alone are =
not=20
powerful enough to stop wars. Wars will be stopped only when soldiers =
refuse to=20
fight, when workers refuse to load weapons onto ships and aircrafts, =
when people=20
boycott the economic outposts of Empire that are strung across the =
globe.</P>
<P>If we want to reclaim the space for civil disobedience, we will have =
to=20
liberate ourselves from the tyranny of crisis reportage and its fear of =
the=20
mundane. We have to use our experience, our imagination, and our art to=20
interrogate the instruments of that state that ensure that "normality" =
remains=20
what it is: cruel, unjust, unacceptable. We have to expose the policies =
and=20
processes that make ordinary things - food, water, shelter and dignity - =
such a=20
distant dream for ordinary people. Real pre-emptive strike is to =
understand that=20
wars are the end result of flawed and unjust peace.</P>
<P>As far as mass resistance movements are concerned, the fact is that =
no amount=20
of media coverage can make up for mass strength on the ground. There is =
no=20
option, really, to old-fashioned, back-breaking political =
mobilization.</P>
<P>Corporate globalization has increased the distance between those who =
make=20
decisions and those who have to suffer the effects of those decisions. =
Forums=20
like the WSF enable local resistance movements to reduce that distance =
and to=20
link up with their counterparts in rich countries. That alliance is an =
important=20
and formidable one. For example, when India=92s first private dam, the =
Maheshwar=20
Dam, was being built, alliances between the Narmada Bachao Andolan (the =
NBA),=20
the German organization Urgewald, the Berne Declaration in Switzerland, =
and the=20
International Rivers Network in Berkeley worked together to push a =
series of=20
international banks and corporations out of the project. This would not =
have=20
been possible had there not been a rock solid resistance movement on the =
ground.=20
The voice of that local movement was amplified by supporters on the =
global=20
stage, embarrassing and forcing investors to withdraw.</P>
<P>An infinite number of similar alliances, targeting specific projects =
and=20
specific corporations would help to make another world possible. We =
should begin=20
with the corporations who did business with Saddam Hussein and now =
profit from=20
the devastation and occupation of Iraq.</P>
<P>A second hazard facing mass movements is the NGO-ization of =
resistance. It=20
will be easy to twist what I=92m about to say into an indictment of all =
NGOs. That=20
would be a falsehood. In the murky waters of fake NGOs set up or to =
siphon off=20
grant money or as tax dodges (in states like Bihar, they are given as =
dowry), of=20
course there are NGOs doing valuable work. But it=92s important to =
consider the=20
NGO phenomenon in a broader political context.</P>
<P>In India, for instance, the funded NGO boom began in the late 1980s =
and=20
1990s. It coincided with the opening of India=92s markets to =
neo-liberalism. At=20
the time, the Indian state, in keeping with the requirements of =
structural=20
adjustment, was withdrawing funding from rural development, agriculture, =
energy,=20
transport, and public health. As the state abdicated its traditional =
role, NGOs=20
moved in to work in these very areas. The difference, of course, is that =
the=20
funds available to them are a minuscule fraction of the actual cut in =
public=20
spending. Most large funded NGOs are financed and patronized by aid and=20
development agencies, which are in turn funded by Western governments, =
the World=20
Bank, the UN, and some multinational corporations. Though they may not =
be the=20
very same agencies, they are certainly part of the same loose, political =

formation that oversees the neo-liberal project and demands the slash in =

government spending in the first place.</P>
<P>Why should these agencies fund NGOs? Could it be just old-fashioned=20
missionary zeal? Guilt? It=92s a little more than that. NGOs give the =
impression=20
that they are filling the vacuum created by a retreating state. And they =
are,=20
but in a materially inconsequential way. Their real contribution is that =
they=20
defuse political anger and dole out as aid or benevolence what people =
ought to=20
have by right.</P>
<P>They alter the public psyche. They turn people into dependent victims =
and=20
blunt the edges of political resistance. NGOs form a sort of buffer =
between the=20
sarkar and public. Between Empire and its subjects. They have become the =

arbitrators, the interpreters, the facilitators.</P>
<P>In the long run, NGOs are accountable to their funders, not to the =
people=20
they work among. They=92re what botanists would call an indicator =
species. It=92s=20
almost as though the greater the devastation caused by neo-liberalism, =
the=20
greater the outbreak of NGOs. Nothing illustrates this more poignantly =
than the=20
phenomenon of the U.S. preparing to invade a country and simultaneously =
readying=20
NGOs to go in and clean up the devastation.</P>
<P>In order make sure their funding is not jeopardized and that the =
governments=20
of the countries they work in will allow them to function, NGOs have to =
present=20
their work in a shallow framework more or less shorn of a political or=20
historical context. At any rate, an inconvenient historical or political =

context.</P>
<P>Apolitical (and therefore, actually, extremely political) distress =
reports=20
from poor countries and war zones eventually make the (dark) people of =
those=20
(dark) countries seem like pathological victims. Another malnourished =
Indian,=20
another starving Ethiopian, another Afghan refugee camp, another maimed =
Sudanese=20
. . . in need of the white man=92s help. They unwittingly reinforce =
racist=20
stereotypes and re-affirm the achievements, the comforts, and the =
compassion=20
(the tough love) of Western civilization. They=92re the secular =
missionaries of=20
the modern world.</P>
<P>Eventually - on a smaller scale but more insidiously - the capital =
available=20
to NGOs plays the same role in alternative politics as the speculative =
capital=20
that flows in and out of the economies of poor countries. It begins to =
dictate=20
the agenda. It turns confrontation into negotiation. It depoliticizes=20
resistance. It interferes with local peoples=92 movements that have =
traditionally=20
been self-reliant. NGOs have funds that can employ local people who =
might=20
otherwise be activists in resistance movements, but now can feel they =
are doing=20
some immediate, creative good (and earning a living while they=92re at =
it). Real=20
political resistance offers no such short cuts.</P>
<P>The NGO-ization of politics threatens to turn resistance into a=20
well-mannered, reasonable, salaried, 9-to-5 job. With a few perks thrown =
in.=20
Real resistance has real consequences. And no salary.</P>
<P>This brings us to a third danger I want to speak about tonight: the =
deadly=20
nature of the actual confrontation between resistance movements and =
increasingly=20
repressive states. Between public power and the agents of Empire.</P>
<P>Whenever civil resistance has shown the slightest signs of evolving =
from=20
symbolic action into anything remotely threatening, the crack down is =
merciless.=20
We=92ve seen what happened in the demonstrations in Seattle, in Miami, =
in=20
G=F6thenberg, in Genoa.</P>
<P>In the United States, you have the USA PATRIOT Act, which has become =
a=20
blueprint for antiterrorism laws passed by governments across the world. =

Freedoms are being curbed in the name of protecting freedom. And once we =

surrender our freedoms, to win them back will take a revolution.</P>
<P>Some governments have vast experience in the business of curbing =
freedoms and=20
still smelling sweet. The government of India, an old hand at the game, =
lights=20
the path.</P>
<P>Over the years the Indian government has passed a plethora of laws =
that allow=20
it to call almost anyone a terrorist, an insurgent, a militant. We have =
the=20
Armed Forces Special Powers Act, the Public Security Act, the Special =
Areas=20
Security Act, the Gangster Act, the Terrorist and Disruptive Areas Act =
(which=20
has formally lapsed but under which people are still facing trial), and, =
most=20
recently, POTA (the Prevention of Terrorism Act), the broad-spectrum =
antibiotic=20
for the disease of dissent.</P>
<P>There are other steps that are being taken, such as court judgments =
that in=20
effect curtail free speech, the right of government workers to go on =
strike, the=20
right to life and livelihood. Courts have begun to micro-manage our =
lives in=20
India. And criticizing the courts is a criminal offense.</P>
<P>But coming back to the counter-terrorism initiatives, over the last =
decade,=20
the number of people who have been killed by the police and security =
forces runs=20
into the tens of thousands. In the state of Andhra Pradesh (the pin-up =
girl of=20
corporate globalization in India), an average of about 200 "extremists" =
are=20
killed in what are called "encounters" every year. The Bombay police =
boast of=20
how many "gangsters" they have killed in "shoot outs." In Kashmir, in a=20
situation that almost amounts to war, an estimated 80,000 people have =
been=20
killed since 1989. Thousands have simply "disappeared." In the =
northeastern=20
provinces, the situation is similar.</P>
<P>In recent years, the Indian police have opened fire on unarmed =
people, mostly=20
Dalit and Adivasi. Their preferred method is to kill them and then call =
them=20
terrorists. India is not alone, though. We have seen similar thing =
happen in=20
countries such Bolivia, Chile, and South Africa. In the era of =
neo-liberalism,=20
poverty is a crime and protesting against it is more and more being =
defined as=20
terrorism.</P>
<P>In India, POTA (the Prevention of Terrorism Act) is often called the=20
Production of Terrorism Act. It=92s a versatile, hold-all law that could =
apply to=20
anyone from an al-Qaeda operative to a disgruntled bus conductor. As =
with all=20
anti-terrorism laws, the genius of POTA is that it can be whatever the=20
government wants. After the 2002 state-assisted pogrom in Gujarat, in =
which an=20
estimated 2,000 Muslims were savagely killed by Hindu mobs and 150,000 =
driven=20
from their homes, 287 people have been accused under POTA. Of these, 286 =
are=20
Muslim and one is a Sikh.</P>
<P>POTA allows confessions extracted in police custody to be admitted as =

judicial evidence. In effect, torture tends to replace investigation. =
The South=20
Asia Human Rights Documentation Center reports that India has the =
highest number=20
of torture and custodial deaths in the world. Government records show =
that there=20
were 1,307 deaths in judicial custody in 2002 alone.</P>
<P>A few months ago, I was a member of a peoples=92 tribunal on POTA. =
Over a=20
period of two days, we listened to harrowing testimonies of what is =
happening in=20
our wonderful democracy. It=92s everything - from people being forced to =
drink=20
urine, to being stripped, humiliated, given electric shocks, burned with =

cigarette butts, having iron rods put up their anuses, to being beaten =
and=20
kicked to death.</P>
<P>The new government has promised to repeal POTA. I=92d be surprised if =
that=20
happens before similar legislation under a different name is put in =
place. If=20
its not POTA it=92ll be MOTA or something.</P>
<P>When every avenue of non-violent dissent is closed down, and everyone =
who=20
protests against the violation of their human rights is called a =
terrorist,=20
should we really be surprised if vast parts of the country are overrun =
by those=20
who believe in armed struggle and are more or less beyond the control of =
the=20
state: in Kashmir, the north eastern provinces, large parts of Madhya =
Pradesh,=20
Chattisgarh, Jharkhand, and Andhra Pradesh. Ordinary people in these =
regions are=20
trapped between the violence of the militants and the state.</P>
<P>In Kashmir, the Indian army estimates that 3,000 to 4,000 militants =
are=20
operating at any given time. To control them, the Indian government =
deploys=20
about 500,000 soldiers. Clearly, it isn=92t just the militants the army =
seeks to=20
control, but a whole population of humiliated, unhappy people who see =
the Indian=20
army as an occupation force.</P>
<P>The Armed Forces Special Powers Act allows not just officers, but =
even junior=20
commissioned officers and non-commissioned officers of the army, to use =
force=20
and even kill any person on suspicion of disturbing public order. It was =
first=20
imposed on a few districts in the state of Manipur in 1958. Today, it =
applies to=20
virtually all of the north east and Kashmir. The documentation of =
instances of=20
torture, disappearances, custodial deaths, rape, and summary execution =
by=20
security forces is enough to turn your stomach.</P>
<P>In Andhra Pradesh, in India=92s heartland, the militant =
Marxist-Leninist=20
Peoples=92 War Group - which for years has been engaged in a violent =
armed=20
struggle and has been the principal target of many of the Andhra =
police=92s fake=20
"encounters" - held its first public meeting in years on July 28, 2004, =
in the=20
town of Warangal.</P>
<P>It was attended by about hundreds of thousands of people. Under POTA, =
all of=20
them are considered terrorists. Are they all going to be detained in =
some Indian=20
equivalent of Guant=E1namo Bay?</P>
<P>The whole of the north east and the Kashmir valley is in ferment. =
What will=20
the government do with these millions of people?</P>
<P>There is no discussion taking place in the world today that is more =
crucial=20
than the debate about strategies of resistance. And the choice of =
strategy is=20
not entirely in the hands of the public. It is also in the hands of =
sarkar.</P>
<P>After all, when the U.S. invades and occupies Iraq in the way it has =
done,=20
with such overwhelming military force, can the resistance be expected to =
be a=20
conventional military one? (Of course, even if it were conventional, it =
would=20
still be called terrorist.) In a strange sense, the U.S. government=92s =
arsenal of=20
weapons and unrivalled air and fire power makes terrorism an =
all-but-inescapable=20
response. What people lack in wealth and power, they will make up with =
stealth=20
and strategy.</P>
<P>In this restive, despairing time, if governments do not do all they =
can to=20
honor nonviolent resistance, then by default they privilege those who =
turn to=20
violence. No government=92s condemnation of terrorism is credible if it =
cannot=20
show itself to be open to change by nonviolent dissent.</P>
<P>But instead nonviolent resistance movements are being crushed. Any =
kind of=20
mass political mobilization or organization is being bought off, or =
broken, or=20
simply ignored.</P>
<P>Meanwhile, governments and the corporate media, and let=92s not =
forget the film=20
industry, lavish their time, attention, technology, research, and =
admiration on=20
war and terrorism. Violence has been deified.</P>
<P>The message this sends is disturbing and dangerous: If you seek to =
air a=20
public grievance, violence is more effective than nonviolence.</P>
<P>As the rift between the rich and poor grows, as the need to =
appropriate and=20
control the world=92s resources to feed the great capitalist machine =
becomes more=20
urgent, the unrest will only escalate.</P>
<P>For those of us who are on the wrong side of Empire, the humiliation =
is=20
becoming unbearable.</P>
<P>Each of the Iraqi children killed by the United States was our child. =
Each of=20
the prisoners tortured in Abu Ghraib was our comrade. Each of their =
screams was=20
ours. When they were humiliated, we were humiliated. The U.S. soldiers =
fighting=20
in Iraq - mostly volunteers in a poverty draft from small towns and poor =
urban=20
neighborhoods - are victims just as much as the Iraqis of the same =
horrendous=20
process, which asks them to die for a victory that will never be =
theirs.</P>
<P>The mandarins of the corporate world, the CEOs, the bankers, the =
politicians,=20
the judges and generals look down on us from on high and shake their =
heads=20
sternly. "There=92s no Alternative," they say. And let slip the dogs of =
war.</P>
<P>Then, from the ruins of Afghanistan, from the rubble of Iraq and =
Chechnya,=20
from the streets of occupied Palestine and the mountains of Kashmir, =
from the=20
hills and plains of Colombia and the forests of Andhra Pradesh and Assam =
comes=20
the chilling reply: "There=92s no alternative but terrorism." Terrorism. =
Armed=20
struggle. Insurgency. Call it what you want.</P>
<P>Terrorism is vicious, ugly, and dehumanizing for its perpetrators, as =
well as=20
its victims. But so is war. You could say that terrorism is the =
privatization of=20
war. Terrorists are the free marketers of war. They are people who =
don=92t believe=20
that the state has a monopoly on the legitimate use of violence.</P>
<P>Human society is journeying to a terrible place.</P>
<P>Of course, there is an alternative to terrorism. It=92s called =
justice.</P>
<P>It=92s time to recognize that no amount of nuclear weapons or =
full-spectrum=20
dominance or daisy cutters or spurious governing councils and loya =
jirgas can=20
buy peace at the cost of justice.</P>
<P>The urge for hegemony and preponderance by some will be matched with =
greater=20
intensity by the longing for dignity and justice by others.</P>
<P>Exactly what form that battle takes, whether its beautiful or =
bloodthirsty,=20
depends on us.</P>
<HR class=3Dspip>

<P>Transcript of full speech by Arundhati Roy in San Francisco, =
California on=20
August 16th, 2004.</P>
<P>Copyright 2004 Arundhati Roy. For permission to reprint contact=20
arnove[AT]igc.org.</P>
<P><A class=3Dspip_out=20
href=3D"http://www.democracynow.org/static/Arundhati_Trans.shtml"=20
rel=3Dexternal>http://www.democracynow.org/static/Arundhati_Trans.shtml</=
A>.</P></DIV></DIV>
<DIV class=3Dtexte align=3Djustify><SMALL><I><STRONG>The opinions =
expressed herein=20
in the articles and comments are those of their authors and do not =
necessarily=20
reflect those of AlterInfos. Insulting or injurious comments will be =
deleted=20
without previous notice.</STRONG></I></SMALL></DIV><BR><A id=3Dforum=20
href=3D"http://www.alterinfos.org/spip.php?article1622#forum" =
name=3Dforum></A>
<H2>1 Message</H2>
<UL class=3Dforum>
  <LI class=3Dforum-fil>
  <DIV class=3Dforum-message>
  <DIV class=3Dforum-chapo><STRONG class=3Dforum-titre><A id=3Dforum1005 =

  href=3D"http://www.alterinfos.org/spip.php?article1622#forum1005"=20
  name=3Dforum1005>Tide? Or Ivory Snow? Public Power in the Age of=20
  Empire</A></STRONG> <SMALL>24 September 2007&nbsp;07:39, posted by =
<SPAN>Prof=20
  T B Vijayakumar Kerala India</SPAN></SMALL> </DIV>
  <DIV class=3Dforum-texte>
  <P>This piece is wonderful, truthful and exciting. <BR>Kindly accept =
my=20
  congratulations. Madam Arubdati roy How are you? <BR>I am an old =
humble=20
  admiror from Kerala. <BR>Prof T B Vijayakumar <BR>Thrissur <BR>Kerala=20
  <BR>India <BR>Email: vapn2005@yahoo.co.in</P>
  <P class=3Drepondre><A=20
  =
href=3D"http://www.alterinfos.org/spip.php?page=3Dforum&amp;id_article=3D=
1622&amp;id_forum=3D1005&amp;lang=3Den"=20
  rel=3D"noindex nofollow">Reply to this =
message</A></P></DIV></DIV></LI></UL>
<P class=3Drepondre><A=20
href=3D"http://www.alterinfos.org/spip.php?page=3Dforum&amp;id_article=3D=
1622&amp;lang=3Den"=20
rel=3D"noindex nofollow">Reply to this =
article</A></P></DIV><!--#contenu--></DIV><!--#conteneur-->
<DIV id=3Dnavigation>
<DIV class=3D"menu rubriques">
<H2>Sections</H2>
<UL>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique30">+ =
Agenda</A> </LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique28">+ =
Cinema</A> </LI>
  <LI><A class=3Don =
href=3D"http://www.alterinfos.org/spip.php?rubrique11">&gt;&gt;=20
  English</A>=20
  <UL>
    <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique133">=91It=92s for=20
    Oaxaca=92 Campaign - Oaxaca Community&nbsp;(...)</A> </LI>
    <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique23">&gt;&gt;=20
    AlterInfos, Dial and you</A> </LI>
    <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique34">Books, =
journals,=20
    reports, and documents</A> </LI>
    <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique67">Canada</A> </LI>
    <LI><A class=3Don=20
    href=3D"http://www.alterinfos.org/spip.php?rubrique15">Global</A> =
</LI>
    <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique20">Latest =
news</A>=20
    </LI>
    <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique12">Latin =
America=20
    and the Caribbean</A> </LI>
    <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique29">United =

    States</A> </LI></UL></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique6">&gt;&gt;=20
  Espa=F1ol</A> </LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique1">&gt;&gt;=20
  Fran=E7ais</A> </LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?rubrique17">&gt;&gt; =

  Portugu=EAs</A> </LI>
  <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique66">Academia</A> =
</LI>
  <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique35">Index</A> </LI>
  <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique141">Internet</A>=20
</LI>
  <LI><A =
href=3D"http://www.alterinfos.org/spip.php?rubrique143">MetaMedia</A>=20
  </LI></UL></DIV>
<DIV><B>
<SCRIPT type=3Dtext/javascript>=0A=
	/*=0A=
	Open Centered Popup Window Script-=0A=
	 DHTMLShock (www.dhtmlshock.com)=0A=
	To add more shock to your site, visit www.DHTMLShock.com=0A=
	*/=0A=
	function centrarVentana(theURL,winName,features, myWidth, myHeight, =
isCenter) { //v3.0=0A=
		if(window.screen)if(isCenter)if(isCenter=3D=3D"true"){=0A=
		var myLeft =3D (screen.width-myWidth)/2;=0A=
		var myTop =3D (screen.height-myHeight)/2;=0A=
		features+=3D(features!=3D'')?',':'';=0A=
		features+=3D',left=3D'+myLeft+',top=3D'+myTop;=0A=
	}=0A=
	=
window.open(theURL,winName,features+((features!=3D'')?',':'')+'width=3D'+=
myWidth+',height=3D'+myHeight);=0A=
	}=0A=
</SCRIPT>
<A=20
style=3D"BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; =
BORDER-TOP: medium none; BORDER-RIGHT: medium none"=20
title=3DPrint=20
onclick=3D"centrarVentana('http://www.alterinfos.org/spip.php?page=3Dimpr=
imir_articulo&amp;id_article=3D1622','Imprimir_documento','scrollbars=3Dy=
es,resizable=3Dyes','700','470','true')"=20
href=3D"javascript:;"><IMG=20
style=3D"BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; =
BORDER-TOP: medium none; BORDER-RIGHT: medium none"=20
alt=3DPrint=20
src=3D"http://www.alterinfos.org/plugins/imprimir_documento/impresora.gif=
">=20
Print</A> <BR>
<SCRIPT language=3DJavaScript1.2>=0A=
	/*=0A=
	Open Centered Popup Window Script-=0A=
	=A9 DHTMLShock (www.dhtmlshock.com)=0A=
	To add more shock to your site, visit www.DHTMLShock.com=0A=
	*/=0A=
	function centrarVentana(theURL,winName,features, myWidth, myHeight, =
isCenter) { //v3.0=0A=
		if(window.screen)if(isCenter)if(isCenter=3D=3D"true"){=0A=
		var myLeft =3D (screen.width-myWidth)/2;=0A=
		var myTop =3D (screen.height-myHeight)/2;=0A=
		features+=3D(features!=3D'')?',':'';=0A=
		features+=3D',left=3D'+myLeft+',top=3D'+myTop;=0A=
	}=0A=
	=
window.open(theURL,winName,features+((features!=3D'')?',':'')+'width=3D'+=
myWidth+',height=3D'+myHeight);=0A=
	}=0A=
</SCRIPT>
<A=20
style=3D"BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; =
BORDER-TOP: medium none; BORDER-RIGHT: medium none"=20
title=3DShare=20
onclick=3D"centrarVentana('http://www.alterinfos.org/spip.php?page=3Denvi=
ar_email_articulo&amp;id_article=3D1622','Enviar_documento','scrollbars=3D=
yes,resizable=3Dyes','440','460','true')"=20
href=3D"javascript:;"><IMG=20
style=3D"BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; =
BORDER-TOP: medium none; BORDER-RIGHT: medium none"=20
alt=3D"Share title=3D"=20
src=3D"http://www.alterinfos.org/plugins/enviar_email/sobre.gif" Share?> =

Share</A></B></DIV>
<DIV id=3Dformulaire_recherche class=3D"formulaire_spip =
formulaire_recherche">
<FORM method=3Dget =
action=3Dhttp://www.alterinfos.org/spip.php?page=3Drecherche>
<DIV><INPUT value=3Drecherche type=3Dhidden name=3Dpage> <INPUT =
value=3Den type=3Dhidden=20
name=3Dlang> <LABEL for=3Drecherche>Search:</LABEL> <INPUT accessKey=3D4 =
id=3Drecherche=20
class=3Dtext size=3D10 type=3Dtext name=3Drecherche><INPUT =
class=3Dsubmit title=3DSearch value=3D">>" type=3Dsubmit>=20
</DIV></FORM></DIV></DIV><!--#navigation-->
<DIV id=3Dextra>
<DIV class=3Dmenu>
<H2><A href=3D"http://www.alterinfos.org/spip.php?rubrique15">In the =
same=20
section</A></H2>
<UL>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article2794">Open =
Letter to=20
  the World Trade Organization on the July 2008 Round of =
Negotiations</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article2222">FRANCE =
- Back in=20
  NATO? Is this for real?</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article1848">The =
Price of=20
  Climate Change</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article1697">UNITED=20
  STATES-IRAN - Mahmoud Ahmadinejad Speaks at Columbia University Amid =
Protests,=20
  Univ. President Excoriates Iran Leader from Podium</A></LI>
  <LI><A class=3Don =
href=3D"http://www.alterinfos.org/spip.php?article1622">Tide? Or=20
  Ivory Snow? Public Power in the Age of Empire</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article1625">NGOs =
and=20
  Imperialism</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article1578">Naomi =
Klein: From=20
  Think Tanks to Battle Tanks, =93The Quest to Impose a Single World =
Market Has=20
  Casualties Now in the Millions=94</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article1289">Global =
Campaign=20
  Calls for Tackling the Roots of Poverty</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article873">The =
World Social=20
  Forum: From Defense to Offense</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?article752">The =
Third=20
  Age</A></LI></UL></DIV>
<DIV class=3Dmenu>
<H2>Keywords</H2>
<UL>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot110"=20
rel=3Dtag>Global</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot136" =
rel=3Dtag>imp=E9rialisme /=20
  imperialismo</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot326" =
rel=3Dtag>India</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot104" =
rel=3Dtag>mobilisations=20
  / movilizaciones</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot166" =
rel=3Dtag>mondialisation=20
  / globalizaci=F3n</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot59" =
rel=3Dtag>mouvements=20
  sociaux / movimientos sociales</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot144" =
rel=3Dtag>ONGs</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot9" =
rel=3Dtag>politique /=20
  pol=EDtica</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot146" =
rel=3Dtag>soci=E9t=E9 civile=20
  / sociedad civil</A></LI>
  <LI><A href=3D"http://www.alterinfos.org/spip.php?mot99" =
rel=3Dtag>United=20
  States</A></LI></UL></DIV></DIV><!--#extra-->
<DIV id=3Dpied><BR>N=FAmeros ISSN : 1955-2556 (AlterInfos) - 1955-253X =
(Dial)=20
<BR><BR><A href=3D"http://www.alterinfos.org/spip.php?article2052">About =
us</A> |=20
<A title=3D"Site created with SPIP" href=3D"http://www.spip.net/"><IMG =
alt=3DSPIP=20
src=3D"http://www.alterinfos.org/squelettes-dist/spip.png" width=3D48 =
height=3D16></A>=20
| <A class=3Dlogin_modal=20
href=3D"http://www.alterinfos.org/spip.php?page=3Dlogin&amp;url=3Dspip.ph=
p%3Farticle1622"=20
rel=3Dnofollow>Sign In</A> | <A=20
href=3D"http://www.alterinfos.org/spip.php?page=3Dplan" =
rel=3Dcontents>Site Map</A> |=20
<A title=3D"Syndicate the whole site"=20
href=3D"http://www.alterinfos.org/spip.php?page=3Dbackend" =
rel=3Dalternate><IMG=20
alt=3D"Follow-up of the site's activity"=20
src=3D"http://www.alterinfos.org/squelettes-dist/feed.png" width=3D16=20
height=3D16>&nbsp;RSS&nbsp;2.0</A> </DIV><!-- SPIP-CRON -->
<DIV=20
style=3D"BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/spip.php?action=3Dcron)"></DIV></DIV><!--#p=
age--></BODY></HTML>

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://www.alterinfos.org/local/cache-vignettes/L600xH76/siteon0-c7449.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gODUK/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEP
EhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4e
Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgATAJY
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
+y6KKKACiiigAooooAKKTNLQAUUUlAC0UUUAFFJS0AFFJmigBaKKKACiiigAooooAKKKKACiikJo
AXOKyvEniDRfDunvf63qVtY26/xTOBuPoB1J9hXKfGH4k2PgbTo4Ylju9augfslqW4Hbe+Oig/n2
r5j1WTWPFmqya74u1T7QsI3MBnaoPRVXoPpXs5dlE8UvaTfLD8X6GNSso6Lc9q8RftC6dEzxeGPD
V/rDg4SV2EUbe44JI/CuDuf2mfGS3DRr4c0SHacbX81yD6Ehx/KvNtX1S6u02WDm0gQYiCL8zget
Zen6dNPPunZt7HLFznNfTUsjwkFrD72crrzfU9u0n9p3VYnB1vwnayw5+aSzuWUgeu1gc/mK9c8A
/FzwX4wdLez1EWl6/S1u8Ru3+6ejfga+MdStvJlZTsI6YHNVtHR4LtQ8bPGT/D97Ht9OtZ4jh/C1
F7i5fT/IccRJbn6Lgj2pa+bvhJ8XpdDubPRPFGom90mcBba/k/1kBJwFkPdffqPpX0ckiugdCGVh
kEHIIr5DG4Grg58s/k+52Qmpq6H0VG00auEZ1DHoCeTT647li0UUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFJS0AFFFFABRSUtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRSUtABRRRQAUUUlA
C0UUUAFFFJQAtIelGaxPGmsJovh+4u/OhimbENu0zhUErnam4nsCQT7A0AalrdQXUbSW00cqKxQs
jAgMDgjjuDUNzqmn290lrNf20Vw5wsTSqGb6AnJrzX4ZS6f4W8a3vg6z1aPUbHUIhfWsonWRhOOJ
gxB6vgP9Q571o+ObW1k+LvgGaSJGkW4u+SP+nSegDurzUrKzaNby8t7YyAlBLIF3Y64z1xkfnVVf
EegsWVNb01ioycXKcD16/X8qt3NjZ3F1Fcz28UssSMiM6g7VYqWA+u0flXnvw703Tx8SfiAos7fA
ubQAeWOB5JP8yaAO6m17RofLM2r2EQlAaMvOq7wehGTzTxrWlGBrgapZGFG2tJ567VPoTnFedfEK
xtLL4jeARbaQbwRyXSJbwiMHaITjG8qMD61q+L4oLv4d+Kp5tDbTXNvKhilVNzbI8q3yFl79ifzo
A7Oy1TT744sr+1uTt3YilV+PXg0t7qdhYsi3l7bW5c4USyBdx9s145plzZ3+rfD/AE3SLSbSb2C1
hme7uIDAs0SxqWiQ/wDLQlQ3HTBJ7V1fxstbe5s/DjTRozL4gsCMgH/l4j4oA7V9W05LqO1bUbVZ
5MbIjKoZs9MDqasXV1BawGe5njgiXkvIwVR9Sa4b4keF9N8S+IdDsrpWifyrlo54SUeN1CFGBHoe
R6Vl3mu3SeHdZ8G+L/LOrR2Mpt7gjEeoRBT869g4GNy/iPQAHotzrGl2saSXWpWcEb/daSZVB+hJ
5qS01GxvHZLS9t7hlGWEUgYgepxXm/xsggHhzwpJ9gF0ya3ZBYUC7nGfujcQO3cgVY+Iet3ekeDv
EWsWWgz6VfWdiywyyCPc4KM+R5bMMAoB1yCenTIB3dzrWlWs/kXGp2cUvdHmUEfUZ4q550fleb5i
eXjO7PGPXNYXhfw7pWn+HbWyS2huA0SmWWRA7TsR8zsT1JPNeejT9Rutb8Z/D/SLtobNIIbqz3Hc
luzEM0X+6393pjPqTQB6pa6xpt1c/ZrbULWafaX8tJQW2jGTjPTkc1fWvP8AwR4gttQ16LSNd0Ia
P4lsoG2AKDFPHwGaJ8cj7pKkAjjqOa9AWgBaQUtFABRRRQAVl+KtatPD3h+81m/bEFrGXYd2PZR7
k4FaleHftS6yzWukeFoHbddM13Oqn7yIQFH0ySf+AiunB0Y160YSdl19FqyZN203PE9V1W/1nUdT
8W62RNeXTFYlJ+WNewHoAKvJpd7qng9vJtXZy26Xyz2/hx6jGP1rnfEgS5vrLSPtJi0+If6UIz8z
HIwtdnptrdWGgFhfKunRyNAkUL5divPzN179q93JalSspYzZVHeK7RWkV93vPzZvmqhSlHCx/wCX
as33k9ZfjovJHIW+g3+VgjhdX6VNJYTWbFbhSpU8kDkV3GmWEN+Irm/1HY4Y/uU6gDHJ6DnPbNbd
7oulMkSXFjP5YbAMbhnPpkHH6HivchmlOrFSg1KL6r/M8yeHnTk4TVmujPKL6ys5oWkDorAc5OD+
Vc7Ppt9DLmHB2/MGVq9huvD3h3Vrqa1s5IbG6ii3LFcMNjH/AH+mfY/nXEal4M8T25eW1W1dGbgQ
y7lYeoNddLFwkrN29TJwaOQ/tBoLL7FPHvQk/MeqH29vrXvXwc+JfiVfA66EUSe6jcpY3kxwFgA7
g8nb29vpXitrpubuZ9WVUgtB5k7Z9P4az/D+ualqvxH0y9tI5RY28oRoYzgLBnDe3Svk+J8V9a58
JSkoxguac/5e0U/5mtW+i82j3srwsaMY4ipHmlJ2hH+Z935Lt1fkme+ape3DXkNyL28vdR80P9pa
QgDHJ2j0r3PwDq1xq2jrPcqQ/evH9Pt3uLwP9nCT3ACQQjnyYvf3Ne3eF9PGnaTDBgBsZNfEZVh4
04yqwjZS272Wzd9bvV69LHbm+JnUlClOXM4btbXe6VtLLRaaXuatV7u7trXabi4hhDdDI4XP51Yr
z/482sF14IjSdFYf2lZpyOzXEYI/EV6x453EF1bznENxFKcZ+Rw3H4Uk97awSBJrmGJj0DuAf1Nc
r4+8OabL4avbu2iXT72zgaa2u7b91JEyjIIK9uOlcjqt5J4i8IfD7WdSRPtdzqFk0x243EzxZP0O
M496APVZNTsI22yX1qjejSqD/OkbU7ARiQ39qEbo3mrg/jmvPfG1vbL8ZvC0jaUb/Nhd5ijVDyNu
GIcgcZNVPi1bWkvwqnuBo72ZfUYWa1ZVD5+0KpHBx8wHrjmgD01NSsXDMl9bMqjLESqQPrzUkd5b
yRGWO4heMdXVwVH41zEtvaXEWqIfD0ummOw2h5EjAkVt2VGwkcbB+dM+DcEcfws8PptBDWas2R1J
yTmgDqob21mRniuYZFX7xVwQv1xUcep6fKrtHf2rqmN5WVSF+vPFeS+GNEv9Q+Hur2uiGEXEeuPK
Ips+XOqbD5b99pxzXRaLqui6/Y69HJor6PrkViYb+zmQBtmH2sCOHXJbDdfUA8UAd9b3MFwu6CeO
VfVGBH6UxL60e4MCXcDyjrGJAWH4da8ct7u5tPhd4I0eyne2TWr2K1uZ4jhkRpfm+btnJX6kV6be
eF9Dm0g2C2EECKmEeNdrxnswYcg985oA17i8trdgs9zDEzdA7hSfzqSWZIoy8siog6sxwB+NeSWo
Xxr8NrKHX0+0PHq4sjO333QSbc59dp2n1IPFbFhqN54bd/CHiiZrmCeJk0rUZOROAOIZCf8AloOx
/i+vUA9CguIZ4/MgmjlT+8jBh+YqKbULKGTy5r23jfpteVQfyzWb4Ciig8GaPHEgRRZRcAf7Irl/
HGn2d18UvBzTwRS5nlLKygg4trnGfx/XFAHfwzxTLuhlSQDglWBqCbUtPhcpLf2sbDqGlUEfrXnv
xdt4vC+mQeL9BX7DfWl1EJI4PlW6jLgNG6jhsjIHHBIpniW3tV+OWmSNo7aiW0OZjHGsZ2kSqN3z
sB7Z60AemQTxTxiWGVJUPRkYEH8RUb31ok3lPdwLJnGwyAN+VVPCqQrokDQae2nLLumNswAMTOxZ
gQOOpJ49a5HxRbW7fGnwnKUTd9luieOuEOP5mgD0EtgZJFVhqNkdwF7bHby371ePrWb4k0qfUrzR
5YZ2iSyvRcShWI3qEYbffkjiuY8E2VsPiR41xFGystqCpAxy05P86AO+t7iGePfBNHKmcbkYMP0q
Nr+zWR4zeW4dPvKZBlfqK8r0HTL/AMIWT+KNBjmutPlurhdT01TnKJNIqyRDoGVQBjuAB2GOq8KX
Ok6t4r1XVdPaG4gurG1KygZzzLwfQ9iPUc0AdMuq6azhF1G0ZicACZck/nU89xDbxmS4mjijHVnY
KPzNeR/Cq3s18LXdo3hue6SbV5YGulWIgKzhd2d28bR7cYrc8BlfFHijxNqusL5507UBYWltKNyQ
IIY5CwU8bmMmM/7NAHoENxDNEJYZo5EPRkYEfnUa6hYtJ5a3tsz5xtEq5/LNcP4yC+GfE+hajpCe
SL67S0vLaPhJ1d0TO3puXfuz1+XHQmuW1i50XTPFHxDkv9IubxWhtdogtDKFJjfHI+7zzmgD2aae
KBC80yRoP4nYAfrT4pFkQOjK6kZDA5BridHinT4PAavdQ37DTJJDLv8ANVk2syfOfvYXaN3fGazP
hheTeGBP4L1u5J+x2wvLG4kP+styMup90Yn/AICQO1AHoslzDHMsUk8SSN91GYAn6CnTSrGm53VQ
SBknHJOBXlemR3M3xt0vXb8n/iaaNeC2hYcwRLLbtGP94gMx9C2O3Op8VY7XX2Xws+sRacY7c30r
mdY2DgkQAZP94M2R08seooA76aeOCIyzSpGg6s5AA59TVf8AtbTO+o2np/r1/wAawPA+p23jTwRZ
3N9HDNIGVLpByvnxOCfw3KGHsRWFqOlaefjpo/8AoVuAdIunI8sYLB4gDj1AJoA74anp+wP9vtdr
dD5q4P45qw00axea0iCPGd5Ix+ded/FzSdPh0fR1ht44g3iC1kIVQBktg/nT0Y+IPi5faRqIJ0/R
tPhuIbVv9XLLK7rvI/i2iPv/AHx+IB3trd290he2uYZlHUxuGH6UR3ltJMYI7mF5R1jVwWH4Vwvx
Uhi8P+H38UaQiWeoacfMHlDaJ1AJMbgfeBx36YOOeareJvDJ1nxtHqelTPpesQaZHcW06cYfewIc
dGBU7SD2/CgD0Sa6ghkRJp4o2c4UM4BY+g9aK89fXofEA0q01K0W01zTtXtlvLVudrZIEiE8mNuS
D+BwRRQB6T+NFct8Q/GEfhHT7a7axlvTLOBJHGeY4RzLL0Odq847nA71u3N3KdNa7sFhuSY/Mi3S
bUcYyDuAPB9cUAXMVh6to95fa9p1617b/YLIu5tGtixkkYYDb92BgFuNp5Oe1U/h14wg8X6K94LY
2d1BK0VxbFslO6tkgZDKQw47kdQarar41aD4had4RsrBLhrmN2uLl5iiwMEZ1UDadzEIxPIx8vrQ
A7xx4TvNcuNKvNL1O20q6027W5ilazMpOD8yHDr8rLlT9ar+KPCWu6t4r0PxDYa/YWcmkGQrFLpz
TLKXjdGyRMpHD8fSq17r3iG8+IsnhuzsbeOOxtheM5viizAkABgIiep6ZHSrniHxVrejRaOr6Hay
T6jeJaOpvGCxM0gTcDsO5cHPY0AbWm2OvJqUl1qer2VxD5PlxQW9m0IVs5LsWkbd0AA4xz61leD/
AAnqWh+KvEGt3Ws294usyROYEtDGYjGrKMMZGzwR27Vb0HxM174hv/D1/Ziz1K0iWfasvmJLExID
KcA9RgggVBpvijULrx5qHhibS4Io7KziumuVuC24SO6gbdg5/dk9aAK/i3wnrOr+L9E8QWGuWVmd
JMhSCawaYSb0KnJEq9jU+u+HPEGs+H9V0y616xVr6MRI8dgwWJMEN8plJJOeuccdKfpXia8164uT
oGnwzWNvKYTd3E5RZHX7wQBSSB0z65rV0e71iS4uYtW0+1thHtMMkFwZVkBznOVUgjA9etAGBf8A
gb+0PBWm6Fd6kBfabFELXUIIdjRyRgAOFLHuORnFN8Y+D9b8R6dosEuv2cE2nXlveSyrp7ETvFIr
jC+b8oJX1PWrWleNLe+8f3/hU2jxfZ4d8FyzfLcOpHmovHVNydz1b+6a6smgDBv9H1K58Q6Vqiaj
bRx2KSq8JtWYyeYFBIbeNuNvoar/ABB8Had4x0GTTL4Kkn3oJwvzROOjAjn9ai1DxPqFr4+0/wAM
Lpdu8d5byTi5NwQUCdRt2/Tv3rqgeKAOO8deENR8RwaPDbaxb2Eem3kN3hrQymRoyCBw64B5HfrX
S6jp8GpaXNp+oRxzQzoUlXGAQfT0rA0Hxpb6p411Tw19leA2ibradm+W62kLLt4/gYqD16+1Hifx
B4g0bSL/AFUaLYy29q52q16yySR5A3Y8sgHnpmgB+maDr+k6dHpmna/bNaQrshN3YmWWNB0G4SKD
j3FR2XhGfS7OeTSdVCavdXSXF3f3UHnefg8oVVlwuCQADxmptC1jxFqOnadfyaPp8UN7bCYhLx2M
RZNyg5jH0zWZonjTV9V8Harr8eh2yPp89zF9na7bMghJDEHZxnBwMUAbNt4enl8SQa9qt5DcXNtE
Y7dIYPLRMggtyzEnBI6966Ecda5XwL4vTxHbTQz2T6bq1tgz2MrZZVP3XBwNyHscdcjtV/wvq99q
ovmu7KC2FtdyWy+XOZC+w43cqMZ9KANvNLXJQeM4JfiJL4SNq6qsG6O7LfLLMAGeIDHVUZW6+o7G
utAoAKQkCg1znj3xNF4b0oSonn3058u1g7u3r9BWVevChTdSbskbUKE8RUVKmrtnQNNErhGkUM3Q
E8n6V8zftJTRwfEOfWZ5VaHTtMVI0z/GSxOfzH51Prt7cTXjXV5cTXuryHIdXIWE+iAeleP/AB01
K6XSBFLNI897cASFzksFyWOfrtrxPr+KxdRYSMORTaUnfXle620k4p6X0R9JhsBhcEni3U53FNpW
snJdVrrFNpXsrs5bQLia6vHvp2LeY+4mT5sDrxXq2ianHDYQg28Ll2Jjj2gLux94gfh09K838GWT
3NpHFHCXKEEnoMe5r0EXtlYrBK0EbSJ8mQ25AR/I1+uSxmCpShg3Ne0f2bq/3HxyweJqU5Ynkbh3
toLe3V5BertuGJYfMR65rfj1zUp7SKNphEIujAAuTjrmsK9W31HZcWkgUhdrpjA3ex79aispj56R
XKSQoMbj6D69K5cNiMvlXnhqUl7SOrj1u9/Xzte3U0rYXFqjHEVIvkez9Py8r/Is3dtdSsxiBPQb
s+9WNGktrPT5gZGYqu4oT711M9jotpCkn29sBRhBgsTXCa7q1hpspijR5ZW+VY8cnj+I9uK5cXxD
hqUvYQTnU/ljv83tFebaNsLlNatH2s2oU/5paL5dW/JXMjxppMl9pq2y3UVhZM/nXdwx6gcAe9cF
rPiOysdKk0bwqjRRY2y3R+/L+PYVs+Jz/wAJvGtpa6kljc2zlWtpm2pMP7yn1rNtfAeswoIxDA2c
AnzQa+My+dD2k/7XrKMuaUuR6K7babv8elrP4UkrK59PjlXlCP8AZlJyjypc61dktlb4Ot1u3e7s
fbPwj8NGPQdP1i/Jlubi2ily3XlAa9GGAOledWXxJ8NadpVrY2kV/dfZ4UiHlwEZ2qB3+lJL8UHk
UGy8N3jZ7zyrGKylm+DlJqE+b0Tf5Jnkf2NjUrzhy/4mo/m0ejZFcx8R/DN14r0WLTbXVU07ZcRz
mQ2/mkmN1dRjcvdeazvDvjK+v7zZfWtjbRHosUxkcn64AxXbRsHQMO9dlKoqkeZJr1VvwZwVaTpS
5W0/R3/FHM614c1XXbAafq2uItm4AuEsrUwmYehZnYgH2qDxP4NfVF0SDT7+HTbXSLiGaKEWxfPl
ujKudwwPkx+NdfigitDM5PUPC19d+PNM8UHVYkFhBJALYWxw6vjJLb+uR6VJ8RPC9x4r0NdKh1Nd
PQTRzF/IMjEowYD7wxyKteNfEKeHNOguWjSRri5jto/MfYis5wC7YO1feq95qniOxstTurmw0+aO
1tlnt3inYCX75dSCpKkBVxjOd1AG80JltWhuCrl1KuVG0EfTJrm9H8N6zomlJpGka5bJYxZEAuLI
ySxKSTtDCQA4zxlateFNcv8AW/A9l4gksYLe4u7RblbcSllXcudpbaD+OKwbTxzq8/w31HxcdFtF
eylvF+y/am+dbeWSMnds4JMZOMcUAa2meFbnRtItbLRNW8mWO6e6uZbiHzRcs4bcGUMuOSCMHjaB
SyeFZ5ZNUvJNQiOpX9sbYTC3wkKEYO1d2c8Kclv4RVS18Y30F7oVvrOlwWya3Gv2eS3uDIEkKbtj
AqPpkd8V2fUUAcfp3gW3TwNa+FtSuzdraENBcxx+VJGwYsrDk4IP8qu3Oi67dWJsLjxEvkMux5Ir
QLOw7/NuKjjuFFVrHxNqc/xCuvC8mm2yQW9qLj7SJ2LMDtGNu3/a9e1a13rIg8T2OiC0lkN1byz+
cv3UCFRz9dwoApXnhhV0XT9J0eeKwt7KeOYb4TKXKtuOfmHLHJJ5OTmrvifQLDxHoNxo+qxJLDcR
lWOPunHDD0IPIrH8ZeNE8O67pGntZNPDdyhbycHC2aMdkbNx/E5wM44VvStfxdql1o3hy/1a1t4b
hrKB7h45JCoZUBY4IB5wDjigCx4f00aRollpaSmVbSBIQ5GCwUAZNYHibwtqup+K9L16y1q3tG05
i0cMlmZVfMciEMfMHaU9PQVpeCfEMXibw5b6rHF9nkbKXFuxy0EqnDoehyCD2GeDWPpvjSfU/iPf
+FbPT4ja2dn55vXmP7xw+xkVduCFJwWz1BHagC3f+FX1jU7O61/UReQWcqzQWkUPlQ+YvKswJYsQ
eRziq+p+FNZn8eQ+K7PXbWB4rNrNbeSxMilGYNkkSDnIrM0XXvFGseMNdt4rGzij0WVbcK+oOqSl
037ioi9COpPtWjq3ijXbPxLoeipo1kz6pBJI7yXbL5DIm5l4Q55wM0AdLo1tfW1mU1G9S8uWkd2k
ji8tcFiVULk4AGB1OcZrnPEfhPV9R8aab4ksdet7NrCN40gksjKrhwQ2T5i+vb0q94S8Svrj6nZT
WYtNR02YQzxCTemSMqytgZB5HTqDWf4e8ZXN3deIxq1la2FrolwYWlScuZABndgqMcdvegDd0ix1
eC6u7jU9UhvDMqLEkNsYkiC7snBdiSS3Jz2FZXh3wtfaT4l1rWn1aK4OqiPMX2YqIihkIwd5z/rP
0p2ka34h1rTItW0/SrKCznUSW6Xc7CSVDyrHCkJkYI69al0TxOdWsdRWK0+z6pp5K3FnM/3W5wQQ
OVOCAwHUEdQaALnhjSbnSdKNldXkd4fOlkEiw+X9+RnwQWPTdj8Ko+H/AAhZaBres6ppLJA2qmN3
iKEojruywAI67unHSj4e+Ib7xR4QttdnsILKS5MmyBZjIBtkZBk7R1256d6z/D/i7WdV07xDcHR7
SKXSLl7dU+0sRMUjVyc7OPvY70AX/h54XuPCmjy6bNqS6gr3DziTyPLILEEj7xzUknhlrfXrjWtF
vhYXF2oF1G8XmQzEZwxXIIbk8gjNUPBHiTxJ4g0HR9buNG0y2tdQRZHSO9d5IkIJBwYwD0HfvXU6
jNcQ2M01vHHJJGhYK7EA4GcZANAGNB4aabW4NZ1i++33VsD9lQRbIYCRgsq5J3YJGST1qDQfClxp
/ifXtXutQhu4tZEQkt/s20IEDAAHcc5DdxUvw68QXvifwvDrN5YQ2LTSzRiKOYyYEcrx5yVHXZn8
am8da9L4e8OT6ha2n227yEtrbdt82Q9BnnAAyScdAaAMi38E3Nn4Y1nw5Y61s0+/SRbZZbfe1mJA
Q6qdwyvJIHbmr/ifwdY+Ip9IuNQkYS6dOJd0QK+au0q0Z5+62Rkc5HHvViw1yfWfDFjrGh20UxvF
Rgk7lBGD98MQCcryMY6jFYz+KfEq+P4vCv8AY2lfvLJrz7R9tkwFDBcbfL65NAF/VfDF3e+NdJ8R
JqccS6crotv9mJ8xXVlILbhjqD0/hFX9F0eazudQuby5gu5ryfzdwg2bFACqnLHIAH86w/EfinxB
oaaUtxo9hLLfXwtG23TBU3SqisPk5yrZxxyMe9R+L/GmreGvEFnbXOgpd6XNC0891bTs0luiMiux
j28gGROh5GfTBANLwz4Yu9E8RavqKanE9nqbrK1mlsUWOUDaXVtx5KhQeP4R70y68LXk/wAQbPxU
NViVLa1ktRa/ZidyuVJJbf1yo7Va8Qa9NbaTY6lo8VnqEF3dW0KuZyqbJpFQOCAQQN2cd6y9a8T6
/aeONN8NWWkadP8AbbaW48+W7dAgj25GBGc8uKALnj7wvdeKINPgh1NLFLO+ivM/ZzIXMZJC/eGA
c1PqnhpbrWLfXLS7NjqsMZiMyJlJUJBKOhPIyB3yMDnitLRp9Rmhk/tK1gt5llKgQymRGXAwQSAf
UYx2rQwKAOZu/DU+rXVtLr+opeW9tIJEtIYPKiZweGcFmLY9M49quLpN4PFL6wb2EwNarbC38g5A
DFt27d159K2sUYoA5rxF4Q03WNf0fXJAIr7S7gSpKo5dcEFG9Qcg/UCiulxRQBw+y68R6vq15biw
nsUibTYxM7cd5W4HdsD6Rj1rJ8B619g8G674dv7hDeeHkliDA8SQbSYmB745T6p7ivSY4I48iKJE
B6hRjNN+x23OLaEbuG+Qc0AeYX8d54Vm0TxZoVi99HfWsFhf2kRAMhYARSD0KtwfZm6nFSa/bx6J
4x8CieVXvZr64kvJf7zvEVJ9hl8AdgAO1enCJVUIqKqjoAOBSPbQSMHkhjdh0LKCaAPK72bSbj44
6lHfapLZKujrGrxXjQBm3ISMqRkgGn+P7qxlsPB1vYalM0f9sW6JcgguQsyKXyQc89yPevTWsrRi
S1rAxPcxinG0tiADbwnaOMoOPpQB534cjl8KfEO8ttamkvk1sA2WrT43kr/y7uVAUdSVwADyOuKk
0i5huvjR4ntY5ADJolmiuPUS3GQD6/MK9DeFHUK8asFOQCM4pq2sCSeYkESv/eCjP50Aec/CjUI/
DGlz+FPEH/EvvbS6meJ5htjuI3cuGRunG4gjOeM9CK6jUPFWlrol9qFhewXX2Y+SpRtyNMcbUyOp
yVzj1roJYYpQBLGj47MM0z7Lb7Nn2eLZnO3YMfWgDy7xhpes6H4Y0rW1Fg91oMwuy8TMZLktnzhy
ACX3v+LV6bpd9a6nptvqFnMs1tcxrLE47qwyD+tTyQRSIEeJGUdmUEflSxxJEoSNFRR2UYFAHnHi
jVtPs/jZoAvLyC3RdOnXfI4VdzHgZ9flNdFrPi3T002/bTbyCe5g8uKMqwZTNKdsa5784zXQvZ2s
jbpLaF27lowTSCztQu0WsAXOcbBjPrQB5d4ysNT8M6JoviEJZM3h9g8hhdmluIm4lHIG4sCze7Gu
n+Jd/aTfDLUruCdJIZ7dWidTkOGZcY/OuukgikUJJEjqOgZQRTTawGMRtBEUHRdowPwoAx/Bc8J8
C6NOXURjToCxJ6fu1zmuH8AXtu/wn8UOXVAt5qp54OC8jD88ivUhBEI/LWKMJ/d2jH5UwWlsEKC3
hCnqAgwaAOQ1nw+dZ0rTNb0K6S01uzgVrW5AysgKjMcg/iRsYI/kaqeCdemtPA+r65rVkdOuI7+7
eS3L7vnDYCqR1yenfkV3scaxptiRUUdAowKRreJ1KyRI6k5wVBGaAPLfFej67Y+DLTVB/Z39oaRN
/aSyxyMXklJLSKOADu3Mp9iR3r0jw7qtrrei2eq2b74LqFZUPcAjOD6GrbwxvH5bRoVHRSoIpYYo
4UCRoqL6KAB+lAD26V4R8Q9ZF14s1G8dyVs8Wdsp/hOPnIHrzXu7dOleS/EjwPc3munU9MiAklYN
J6Z9cetebmOHrV1D2VtHfXbbR+dnrbyPTyzE0KDqe2vqrab7q68rrS/RHG6Dp80ky4TdfXIwF6+U
h/qa4r44eELO7eSzubj7JPp9wkvmFc/ujHmT+h/Cvo3wD4SGlQi6vBvumHJNQfETwNH4kkEqKiuR
tc45ZfQ0vqNSlCn9Xnyyi7uTV22003666dPkaU8yhOrOWIheLVkk7JJNNL0016/M+F9X8VLJB/ZP
h1Gt7GP5d44eX3JpumXVzbaRdW4+czMj5zyhU9cfSut+NXwmvvhjrqXMULzaFenNvcKMiJu8behH
b1H0NcTbMVYsDx619/lWXYT6uoxV9U276uSd7t7t3/y2PHxWYYipVc5O2jVuiTVrJdFb+rnQWvie
9s7ARpawTup3xtJ/A2OvvVvw74+uSqRalZ77hzs85DtVvTIrl5J41BAGTjGfSiKVdgcbQyEFcdc0
YzhnLsVWlWcbTerabT+9PZ9UtH6mtDPMbRpqmpXiujSa+5rp0fQ9Jj1TVNVtwLW2aItLsL+lZ2r6
O3h/SLnWtTv/ALRNMPKiQj+JiDkfQD9a6LwzqcM+nB4Wj3PgcHADEDPB964j4sXlze6tBplsjNbW
iZYjCqZDyT+WK1wWUUMAuSjBJeS3/VnLisdXxcuetJt+f9aHG6jdreSNuON3PTvXc/s7+AdV8a+O
ohFPN9g01Rc3Ehc7Qc4RfqTzj0U1xej+H9S1bWrfSdLtmvb+5cRxRRnOSf6DqTX318Dvh7afDrwT
BpKlJdQmxLfzqP8AWSkdB/sjoP8A69c2b14xhaa957EUbp6PQy4fhtdEYkv5Nvsa0bL4b2UZzNcO
/wBTXf0V8vsdJgaV4V0vTyGijyw7mt5QFXA6UtFACc0c0tFAHP8AjObQfsUOneIhCbO/cwDzh8hb
aWwT24U4rkPCun31pF4n0PSry61HQFs9th5zbjHMyuGiRz95fu8dAfY4HpjoH4ZQR7ilVQq4AAA6
AUAcD4I1/SdN+HOm2V/eR213ZWK288EmVkWRF2kbevUceuRWEsVxpv7PerpfQSW890upTRRSDD4n
uJpIwR1yVdePevWTEhcOUUsO5AzSsit95QfqKAPIHtJtBHhnxoZrvWdLhs4ormGfMrWQZADNEAMg
joR6E98V67DLHNAssUgkjdQVZTwQe4pwRQNoUAemKUKAMAAD2oA8wg17SbL43aoL2+gtlOmrEjyN
hWYGNiAe55rttL1PSNW8/ULSSKZbR2t/tI+70VmCt3H3c+49q1/KT+4v5ClCLt27Rj07UAedjS7n
xb4f1q7aXT2sdayIzMjblgUFY+c8ZGW7EbvWqdj4n/tb4P38eoTBtRgU6XdlgQXkJEe/H+0GDcep
r1ARqFICDB7YpPJj/wCea/8AfIoA831a21jw942P/CO2zS2fiYbJCuNtpcqv+vPtsBz6kIKSxWy0
f4y6bp8B2xf2BPBuP95ZYGXcf7xG8+p5r0vaMAADim+VGTkoufoKAPHNCm8O3vjbx+up6vLY/aLm
JU2Xjwh0EIUsACA3IPPNanjC6ttY+IvgwQXlzbJNbXEglhbY6B4vlzxwT7969P8AKj/uL/3yKDEh
Odi5+lAHnfw73+F9d1DwnqoL3E8jXlrqUg+a+QjkSN0MidO2VxxwTWJptj/wldn8StEtpfLlu7x4
o26bsoVyD3r2BkU9QD9RSCJFOVVQfYUAebW/xAbR9Csob3w9fLPa26RXkSsiNHIqgEIjEFxxweB0
561U+HF/Br/jPxLr0UN7bPeW0dvDazWskbbIy58xiRtGTJgDPYnvXqrRqSCVBI6HFCoASQoGetAH
n/wx1bTtD8EW2k6vdx2N9YPNHPDP8jD965BAPUFSCCPX1yKr+DS9n4T8WaxdRPb2+oXtxc23mgqX
QxKoODzyVOPUYPevR3ijdgzIrEdCQCRSsisMMoP1oA8m+DVz4dj8G+EcavcNqCwLCLQ3bvh2BBBj
JwMcnoMYr03WJo7bSrqaRgirC5JP+6atiNAchVBHoKcVDDBAI96APLPhJ4t0DTvhpD9q1S3imtpr
tpIC4EmTcSsBtPOSCMeuRXRXFxc654uVdPntTFpEWXSZSd08q9sEfdT/ANGH0rrxFH2jX8hSiNVO
VUA+woA84+HN0dB8W6x4Lu5YmV3N/YtGpCAPjzYhn0Yhh/vkfw06a7hPx/towwJGhSISPuhvNU7c
+uO1eiCJAchFz64FHlJnOxc/SgDz/wCLt5DBeeGYmYbv7Xt5GHXCiaPJPoOf0ra1C5tJPiFpto7o
xbSbwFTyCDLbcfiAa6do0Y5KKT7ik8tM52Ln1xQB5b4h0XVvDGo6fZ6PD9p8OX2s2cjwE82En2lG
LJ/sNjlex5GOaXxve6UPjL4eTUL5rSKLT7sNKlw0WHbyiqlgR1Ctx7V6my57Z+tNMSE5KLn1IFAG
P4Rk05tNeHSrqS7t4biQec8hfLM28jcfvY34z7Vt80ioFGFAH0p1ACc0c0tFACGilooAKKKO1ABR
SUtABRRSUALRRRQAUUUd6ACiik7UALRRSUALRRQKACikpaACikooAWikpaACkIB7UUtACAUtJS0A
Z/iHRdM8QaRcaTrFnDeWVwhSSKRcg+49COxHIr5L+Kv7OfiHQLifUPBpfWNLOW+yk/6RD7Afxj3H
PtX2JSEV1YXGVcM7wfyIlBS3PzNv7G9s7l7a7tZredDh4pUKMp9wahUtE/CNnFfpNrWgaHrUXl6v
pFjfr2FxAr4+mRxXK3Hwd+GUzl5PB2nknrjco/IGvchn1O15QdzF0H0Z8O6D4kisSsEsEkmDlQmC
R+dd9o/ws8f/ABAkhuLaxWytLhtwmulKJGmerHGWPoAK+udC+H/gjQpBLpXhbSbWUciRbZS4+jHJ
FdMAAMDgCor8QzlHlpx+bCOHXU87+Dnwj8O/DiyMlsovtYlXbcahKg3kd1QfwL7Dr3r0UClor5+p
UlUk5Sd2dCSWiCiiioGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//2Q==

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.alterinfos.org/plugins/imprimir_documento/impresora.gif

R0lGODlhDQALAJEAADRLa////////wAAACH5BAUUAAIALAAAAAANAAsAAAIalIEJxrL9oEOuHRvZ
SvVsPFEKp1jQiKbqOhYAOw==

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.alterinfos.org/plugins/enviar_email/sobre.gif

R0lGODlhDQALAPEAMf///zRLa/9oLAAAACH5BAEAAAAALAAAAAANAAsAAAIajI8Iyw3nGgzxPWrl
MgznK3GdV4HlRlbJehQAOw==

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.alterinfos.org/squelettes-dist/spip.png

iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAaGSURB
VEiJ1VZtUFNXGn5vci+BlBCTgBhCMCFh+GZWEAVZgXH8qK0u7Npp19m1O9v6o9Y6SnfXqe2MnVmd
tmzH7biO2p2xVdqqoGAVQZcA8hXclQ/RSFQkGnCBmBA+5IaEc+899+wfo+wuMrNOf2yff++8z3nO
+7znvHMOlZuby0RELlwboQhPDaEZAj8CcAJPTbE++5TXY6HjTAnFu3Zs35yemvxCYj09NxbExcX5
NRo19wPXOS/+ZmkwHDtextChMllCWkoyJi/Q+9raGu3Bg4eWqVSqQEVFueWHL/P5WFWYT52p+j6R
ZhiaEELwi4jo9XqWYRikVCrZ/0WD53gpO+GTqaMX+AGof8s9GnQr7tsHI1OyEtyqaJV/Ph1ZCENo
QggBICJCiKqsrNI3NTXrKYoCs9k0sXXr247Kyiq91WqNLSoqcnR2di2UyULEkpJdt1UqFc+yPsps
Nj+SyWSC3++H6upqXV2dxZCdvdQ1OflY5vF45CUlu3oXL44LAACgACdtOX/V3N1yM5ULcDKpVIKT
sxP7N23b0AMA8PfLXYsbzrYsl0olYkNFM7Np24bGtJxkz3wmaEIIEELwnj0fZVkslkSdTjeJMaZs
NttCm+2W+vbt21qEEN3Tc0MbGhrKBwIBpqWlVf/FFwea33ln22pBEKRGo9FbWvqnpAsXLqRyHEd3
dHTEyuVyND09Levo6Ig5dOhgY2Zm5uMrVW0J7bUdmU9PAkDa03oryZiyeHhJfprLeulayvI1mddX
v1HQd+LT8rzqr+pyU5cnnZvPgISIIiEEcHd3d3QgEJBQFMVv2vQLu1wun/7222+uqNXqSYQQlJTs
aj169PCl8PBwn8vleqm9/apqx473rAghQAiRjz/ee8NgMLgRQpCXt6KvvPxUtUajmXC73fIjR75M
JASwLl47KvACMDLGr9QovFjABAuY9NseRBICmAtwkvbLnenffX42O7Mg4x7H8RQhgAkB/A9Ll7a2
rN58s92uHB3xPp1YmhACAAQXFf3MfuJE2ZLe3t7ooaEhRX7+yvsABCOECEIIRFEUsrKyxsPCwqaH
h4cV9fX1+vXr1z8IGpjN5XkBG41GNjp64YTT6VQ5HA4lAMFpOUmu3YffOxmmCOMPf/DVGjTDARFF
aoEmfJIQkX97768uVvzlfG5qTlJf0zlrWlh4qJdDHEczUtFac804eHfIQEkoUcSidPmazC4AcNIi
IYQQgquqzpk3b/7ldau1PdZms8XW1zfEO50DN58UCIIgiIIgiGNjYzKO4yAuLs7L87yIEIKZmRkQ
RSL4/X5xenoaAoGAKIoi73QOyFmWBalU6hdFkQMAiNAouItf16U8sA/qAABCZAzSmWI8hBAhMkbN
bv/sLcuEZzJ0yOFaJFeETf9u496toXKZP0KtmPrgrztPfv9lzVIO8UxP6610MEOlJDgDDx8+jDh9
ujwpKSnxESFEYBhmRq+P9XEcRxBCcObMWfOyZTkbXS6XQq1Wj+/cubO3ra1tEUIIWJalL12qjcQY
A8YY7Pbe6JUrC14dGRlZoFKp2AMHPr8aPPI7XfciGyvbfhqMOcTLjn504rXOhh7d7LstpSVCpFY1
vrnk57XmDKOToiiY8EyE3bcPxA/c/achIy/FDgAgCS4wGAxenufpioozP4mPN47u37+vVSJ5mgan
0xnJMAwuKMi/19TUeJ5lp+iuru44o9HoIYRQx4+XJQW54+Pj4TMzM3RGRvrQxYsXzqenp7PBXOWR
mpUiFp8JAwAhhHrYP6wOxoN9Q0qe40NyXs6+k7Nu6VB6bvLA6MhYVN2p5iW7D++o+HPNH49t2f16
JwAAHVzU1NR4eb5pf//9kqvvvrvNGYyjoqK4/v6+k7M5hYWrXgEAWLEi7/7p0yetc+moopSTo8Pe
aKlUgiPUiseRWo03SqeZePXN1XcAADoarsecOnBuAyEiFfZSqAAAkJiZMKqLXzQsYiyR0hJCUc/e
DnquTYLYsuXNPLfbrQQAKC0tzTeZTL5169aOzsXdt29/ssPhiAYAaGtrS/jkk0+9H3645+5/8rZ/
9lbTiPNRZ4xxkW92IUHo4rVTv/7DazWmdOOYKkqJnphGvz+0fc4G04jj/1vlCYqLix+YTKYJAACK
oiAhwex7HrewsNCNMb72LC5wz8WjKAp08drn6ujitb758rOBOJ6iXt5YVLz1t79Zu6ow/7lG/h9x
pbmVHDteZqF+7N/pfwEg6Fl9SdSTOQAAAABJRU5ErkJggg==

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.alterinfos.org/squelettes-dist/feed.png

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVQ4jXWSQWhUVxSGv3PfmzfT
ZMbEmMHEhDZtjSC6cRqKC40gCiqCtItSKaXuXDrVjSAhKgq6KM1G6LqrumndKEihLsSFGIMQRBO1
1EqaxARM82Im896997h4kxEjXrj89y7+c/7//EdGvy+3l8qdw4WoUDUCYgQxa3H1DSKC87DwMh6J
5+bPhaVy53B7sb1ql19jQiEwBhMKJqSBjRsIEjTQQHu5q/rPQ5Dnp3doaB25cg8tA0eQANyLMfx/
Yx8kiwjOKgvzltBI1inX2UPr3uOsHq3HpA+u4savInbpPbKrewQITu3ZdDYXCiY0SLqELk4jhRKm
dQNBb4Xc9q/h/38hfv4O2dY9aaLI1FBF82v9hkL48RdEu39ENvQD4G5fxD663iS7RFlJFCMmI0Sf
DrDuxF+0fPMLUeUovHpC+vsP+Cc3AAh2n4GeXU2ySzzqFCMm6y6BIPlSJntXlfx3f2DK/fjbF3GT
WZFo3xDeFHFJVsQ73irQmTFWfv2K9NYFNJ6GqEh46Aratpn6zfP4xWkkXyKqfJuR06aCt1GxPIM+
vYG9diyTHhUJ91/CSSu1P38C4KOdR/FppkD9qoVGztGBy+QOX8H0DWLvjKDxNLKuG/PJILXxW+hK
nCVU3oKzTQsggRD0VjB9g0j3DuTzg9h4keT+bwDk+vfgEqX+bDSbxWcD+HRVgTQ2bHkGkqUsstnJ
LOepCQBMWzc+9SQvsj/5It4qqiCzl77U9Z0BIoIvdOELG0n+Hm1GFfRU8FapPb6X2WnrJnk5RTI7
RdgRIRMnt/7ct62rqnblnSVpRtUYmLOKTxVvFe+UQkeRmolHgmOb5W7ttS9AuDNNlDRRUqs4B04F
j6BGUGMgFIgMQUtI3SyPxHPz594AMl1RPpGlHgQAAAAASUVORK5CYII=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/prive/spip_style.css

H3.spip {
	TEXT-ALIGN: center; MARGIN-TOP: 2em; MARGIN-BOTTOM: 1.4em; FONT-SIZE: =
1.15em; FONT-WEIGHT: bold
}
HR.spip {
	MARGIN: 2em auto
}
UL.spip {
=09
}
OL.spip {
	LIST-STYLE-TYPE: decimal
}
BLOCKQUOTE.spip {
	BORDER-LEFT: #aaa 1px dotted; MARGIN: 2em 0px 2em 1em; PADDING-LEFT: =
1em
}
BLOCKQUOTE.spip_poesie {
	BORDER-LEFT: #aaa 1px solid; MARGIN: 2em 0px 2em 1em; PADDING-LEFT: 1em
}
BLOCKQUOTE.spip_poesie DIV {
	TEXT-INDENT: -3em; MARGIN-LEFT: 3em
}
.spip_code {
	FONT-FAMILY: Courier, "Courier New", monospace; COLOR: #036
}
.spip_cadre {
	FONT-FAMILY: Courier, "Courier New", monospace; COLOR: #036
}
.spip_cadre {
	BORDER-BOTTOM: 1px inset; BORDER-LEFT: 1px inset; BACKGROUND-COLOR: =
#f4f8f8; WIDTH: 99%; FONT-SIZE: inherit; BORDER-TOP: 1px inset; =
BORDER-RIGHT: 1px inset
}
DIV.spip_code {
	MARGIN-BOTTOM: 1em
}
.spip_cadre {
	MARGIN-BOTTOM: 1em
}
.spip_surligne {
	BACKGROUND: #ff6
}
TABLE.spip {
	LINE-HEIGHT: normal; BORDER-SPACING: 0; BORDER-COLLAPSE: collapse; =
MAX-WIDTH: 99%; MARGIN-BOTTOM: 1em; MARGIN-LEFT: auto; MARGIN-RIGHT: =
auto
}
TABLE.spip CAPTION {
	TEXT-ALIGN: center; CAPTION-SIDE: top; MARGIN-LEFT: auto; FONT-WEIGHT: =
bold; MARGIN-RIGHT: auto
}
TABLE.spip TR.row_first {
	BACKGROUND: #ffc
}
TABLE.spip TR.row_odd {
	BACKGROUND: #eee
}
TABLE.spip TR.row_even {
	BACKGROUND: #ddd
}
TABLE.spip TH {
	BORDER-BOTTOM: 1px solid; TEXT-ALIGN: left; BORDER-LEFT: 1px solid; =
PADDING-BOTTOM: 0.2em; PADDING-LEFT: 0.4em; PADDING-RIGHT: 0.4em; =
BORDER-TOP: 1px solid; BORDER-RIGHT: 1px solid; PADDING-TOP: 0.2em
}
TABLE.spip TD {
	BORDER-BOTTOM: 1px solid; TEXT-ALIGN: left; BORDER-LEFT: 1px solid; =
PADDING-BOTTOM: 0.2em; PADDING-LEFT: 0.4em; PADDING-RIGHT: 0.4em; =
BORDER-TOP: 1px solid; BORDER-RIGHT: 1px solid; PADDING-TOP: 0.2em
}
TABLE.spip TH {
	VERTICAL-ALIGN: bottom; FONT-WEIGHT: bold
}
TABLE.spip TD {
	VERTICAL-ALIGN: top
}
TABLE.spip TD.numeric {
	TEXT-ALIGN: right
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
.spip_logos {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
.spip_documents {
	TEXT-ALIGN: center; LINE-HEIGHT: normal
}
.spip_documents P {
	PADDING-BOTTOM: 0px; MARGIN: 0.1em; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.spip_documents_center {
	MARGIN: 1em auto; WIDTH: 100%; DISPLAY: block; CLEAR: both
}
.spip_documents_left {
	MARGIN-BOTTOM: 5px; FLOAT: left; MARGIN-RIGHT: 15px
}
.spip_documents_right {
	MARGIN-BOTTOM: 5px; FLOAT: right; MARGIN-LEFT: 15px
}
.spip_doc_titre {
	MARGIN-LEFT: auto; FONT-SIZE: 0.9em; FONT-WEIGHT: bold; MARGIN-RIGHT: =
auto
}
.spip_doc_descriptif {
	MARGIN-LEFT: auto; CLEAR: both; FONT-SIZE: 0.9em; MARGIN-RIGHT: auto
}
.spip_modele {
	BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; PADDING-BOTTOM: 1em; =
PADDING-LEFT: 1em; WIDTH: 180px; PADDING-RIGHT: 1em; DISPLAY: block; =
FLOAT: right; BORDER-TOP: 1px solid; BORDER-RIGHT: 1px solid; =
PADDING-TOP: 1em
}
A.spip_note {
=09
}
A.spip_ancre {
=09
}
A.spip_in {
=09
}
A.spip_mail {
	COLOR: #900
}
A.spip_mail:before {
	CONTENT: "\002709"
}
A.spip_out {
	COLOR: #009
}
A.spip_url {
	COLOR: #009
}
A.spip_glossaire {
	COLOR: #060
}
A.spip_glossaire:hover {
	TEXT-DECORATION: underline overline
}
.on {
	FONT-WEIGHT: bold
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/squelettes-dist/spip_formulaires.css

INPUT {
	FONT-FAMILY: inherit; FONT-SIZE: 100%
}
SELECT {
	FONT-FAMILY: inherit; FONT-SIZE: 100%
}
TEXTAREA {
	FONT-FAMILY: inherit; FONT-SIZE: 100%
}
.formulaire_spip {
	BORDER-BOTTOM: 0px; TEXT-ALIGN: left; BORDER-LEFT: 0px; PADDING-BOTTOM: =
0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; MARGIN-BOTTOM: 2em; CLEAR: =
both; FONT-SIZE: 1em; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: =
0px
}
.formulaire_spip FORM {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.formulaire_spip FIELDSET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 1em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; CLEAR: both; BORDER-TOP: =
0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
.formulaire_spip FIELDSET LEGEND {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; COLOR: #333; FONT-SIZE: 1.05em; FONT-WEIGHT: =
bold; PADDING-TOP: 0px
}
.formulaire_spip FIELDSET FIELDSET {
	MARGIN-TOP: 1em
}
.formulaire_spip FIELDSET FIELDSET LEGEND {
	FONT-SIZE: 1em; FONT-WEIGHT: normal
}
.formulaire_spip .explication {
	MARGIN: 0.5em 0px; COLOR: #444
}
.formulaire_spip UL {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
.formulaire_spip UL LI {
	PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; CLEAR: both; PADDING-TOP: 0.5em
}
.formulaire_spip LABEL {
	POSITION: relative; TEXT-ALIGN: left; DISPLAY: block; COLOR: #444; =
FONT-WEIGHT: bold
}
.formulaire_spip LI P {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
.formulaire_spip .choix LABEL {
	DISPLAY: inline; FONT-WEIGHT: normal
}
.formulaire_spip .choix INPUT.radio {
	WIDTH: auto
}
.formulaire_spip .choix INPUT.checkbox {
	WIDTH: auto
}
.formulaire_spip INPUT.text {
	BORDER-BOTTOM: 1px inset; BORDER-LEFT: 1px inset; WIDTH: 15em; =
BORDER-TOP: 1px inset; BORDER-RIGHT: 1px inset
}
.formulaire_spip TEXTAREA {
	BORDER-BOTTOM: 1px inset; BORDER-LEFT: 1px inset; WIDTH: 99%; =
BORDER-TOP: 1px inset; BORDER-RIGHT: 1px inset
}
.formulaire_spip SELECT {
	WIDTH: 99%
}
.formulaire_spip .boutons {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; CLEAR: both; PADDING-TOP: 0px
}
.formulaire_spip .boutons INPUT {
	MARGIN-LEFT: 1em
}
.formulaire_spip .boutons INPUT {
=09
}
INPUT.submit {
=09
}
.formulaire_spip LI.obligatoire {
=09
}
.formulaire_spip LI.obligatoire LABEL {
=09
}
.formulaire_spip FIELDSET.previsu {
	BORDER-BOTTOM: #f57900 2px dashed; BORDER-LEFT: #f57900 2px dashed; =
PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; =
MARGIN-BOTTOM: 2em; BORDER-TOP: #f57900 2px dashed; BORDER-RIGHT: =
#f57900 2px dashed; PADDING-TOP: 1em
}
.formulaire_spip FIELDSET.previsu LEGEND {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; COLOR: =
#f57900; FONT-WEIGHT: bold; PADDING-TOP: 0px
}
.formulaire_spip FIELDSET.previsu LI {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: =
3px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BORDER-TOP: medium none; =
BORDER-RIGHT: medium none; PADDING-TOP: 3px
}
.formulaire_spip FIELDSET.previsu P {
	MARGIN: 1em 0px
}
.reponse_formulaire {
	COLOR: #e86519; FONT-SIZE: 1.2em; FONT-WEIGHT: bold
}
FIELDSET.reponse_formulaire {
	BORDER-BOTTOM-COLOR: #e86519; BORDER-TOP-COLOR: #e86519; =
BORDER-RIGHT-COLOR: #e86519; BORDER-LEFT-COLOR: #e86519; FONT-WEIGHT: =
normal
}
FIELDSET.reponse_formulaire.reponse_formulaire LEGEND {
	COLOR: #f57900
}
.formulaire_spip LI.erreur .erreur_message {
	DISPLAY: block; COLOR: #c30; FONT-WEIGHT: bold
}
.formulaire_spip LI.erreur INPUT.text {
	BORDER-BOTTOM-STYLE: solid; BORDER-BOTTOM-COLOR: #c30; =
BORDER-RIGHT-STYLE: solid; BACKGROUND-COLOR: #fcc; BORDER-TOP-COLOR: =
#c30; BORDER-TOP-STYLE: solid; BORDER-RIGHT-COLOR: #c30; =
BORDER-LEFT-STYLE: solid; BORDER-LEFT-COLOR: #c30
}
.formulaire_spip LI.erreur TEXTAREA {
	BORDER-BOTTOM-STYLE: solid; BORDER-BOTTOM-COLOR: #c30; =
BORDER-RIGHT-STYLE: solid; BACKGROUND-COLOR: #fcc; BORDER-TOP-COLOR: =
#c30; BORDER-TOP-STYLE: solid; BORDER-RIGHT-COLOR: #c30; =
BORDER-LEFT-STYLE: solid; BORDER-LEFT-COLOR: #c30
}
.reponse_formulaire_erreur {
	MARGIN: 0px; COLOR: #c30; FONT-WEIGHT: bold
}
.reponse_formulaire_ok {
	MARGIN: 0px; COLOR: #53ad20; FONT-WEIGHT: bold
}
TABLE.spip_barre {
	WIDTH: 100%
}
TABLE.spip_barre A IMG {
	BORDER-BOTTOM: #cc9 1px outset; BORDER-LEFT: #cc9 1px outset; =
PADDING-BOTTOM: 3px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; BACKGROUND: =
#fda; BORDER-TOP: #cc9 1px outset; BORDER-RIGHT: #cc9 1px outset; =
PADDING-TOP: 3px
}
TABLE.spip_barre A:focus IMG {
	BORDER-BOTTOM: #cc9 1px solid; BORDER-LEFT: #cc9 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #cc9 1px solid; BORDER-RIGHT: #cc9 1px solid
}
TABLE.spip_barre A:hover IMG {
	BORDER-BOTTOM: #cc9 1px solid; BORDER-LEFT: #cc9 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #cc9 1px solid; BORDER-RIGHT: #cc9 1px solid
}
TABLE.spip_barre A:active IMG {
	BORDER-BOTTOM: #cc9 1px solid; BORDER-LEFT: #cc9 1px solid; BACKGROUND: =
#fff; BORDER-TOP: #cc9 1px solid; BORDER-RIGHT: #cc9 1px solid
}
TABLE.spip_barre INPUT.barre {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 99%; BACKGROUND: none =
transparent scroll repeat 0% 0%; COLOR: inherit; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px
}
.formulaire_forum .saisie_titre INPUT.text {
	WIDTH: 98%
}
.formulaire_forum .saisie_titre TEXTAREA {
	WIDTH: 98%
}
.formulaire_menu_lang {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-TOP: 0px
}
.formulaire_recherche {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-TOP: 0px
}
.formulaire_recherche * {
	DISPLAY: inline; VERTICAL-ALIGN: middle
}
.formulaire_recherche LABEL {
=09
}
.formulaire_recherche INPUT.text {
	PADDING-LEFT: 25px; WIDTH: 10em; BACKGROUND: url(rechercher.gif) #fff =
no-repeat left center
}
.formulaire_recherche INPUT.submit {
=09
}
.spip_surligne {
=09
}
UL.choix_mots {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; DISPLAY: block; LIST-STYLE-IMAGE: none; =
PADDING-TOP: 0px
}
UL.choix_mots LI {
	PADDING-BOTTOM: 1%; PADDING-LEFT: 1%; WIDTH: 30%; PADDING-RIGHT: 1%; =
DISPLAY: block; FLOAT: left; CLEAR: none; PADDING-TOP: 1%
}
UL.choix_mots LI LABEL {
	DISPLAY: inline; FONT-WEIGHT: normal
}
.formulaire_spip .bugajaxie {
	DISPLAY: none
}
.formulaire_login UL LI {
	CLEAR: left
}
.formulaire_login .editer_password .details {
	DISPLAY: block
}
.formulaire_login #spip_logo_auteur {
	FLOAT: right
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/squelettes/habillage.css

HTML {
	FONT-SIZE: 100%
}
BODY {
	FONT-FAMILY: "Luxi sans", "Lucida Grande", Lucida, "Lucida Sans =
Unicode", sans-serif; COLOR: #333; FONT-SIZE: 0.81em
}
H1 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 1em; FONT-WEIGHT: =
normal; PADDING-TOP: 0px
}
H2 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 1em; FONT-WEIGHT: =
normal; PADDING-TOP: 0px
}
H3 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 1em; FONT-WEIGHT: =
normal; PADDING-TOP: 0px
}
H4 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 1em; FONT-WEIGHT: =
normal; PADDING-TOP: 0px
}
H5 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 1em; FONT-WEIGHT: =
normal; PADDING-TOP: 0px
}
H6 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 1em; FONT-WEIGHT: =
normal; PADDING-TOP: 0px
}
H1 {
	COLOR: #000; FONT-SIZE: 1.7em
}
H2 {
	FONT-SIZE: 1.4em; FONT-WEIGHT: normal
}
H2 {
	COLOR: #003
}
H2 A {
	COLOR: #003
}
H2 A:focus {
	COLOR: #003
}
H2 A:hover {
	COLOR: #003
}
H2 A:active {
	COLOR: #003
}
H3 {
	FONT-SIZE: 1.2em; FONT-WEIGHT: bold
}
H3.spip {
=09
}
HR.spip {
=09
}
STRONG {
	FONT-WEIGHT: bold
}
EM {
	FONT-STYLE: italic
}
ABBR {
	BORDER-BOTTOM: 1px dotted; CURSOR: help
}
ACRONYM {
	BORDER-BOTTOM: 1px dotted; CURSOR: help
}
SMALL {
	COLOR: #666; FONT-SIZE: 0.9em
}
DFN {
	COLOR: #666; FONT-WEIGHT: bold
}
DEL {
	TEXT-DECORATION: line-through
}
INS {
	COLOR: red !important; TEXT-DECORATION: none
}
SUP {
	FONT-VARIANT: normal; FONT-SIZE: 0.8em
}
SUB {
	FONT-VARIANT: normal; FONT-SIZE: 0.8em
}
UL.spip {
=09
}
OL.spip {
=09
}
DL {
=09
}
DT {
=09
}
DD {
=09
}
CITE {
=09
}
Q {
=09
}
BLOCKQUOTE {
=09
}
BLOCKQUOTE.spip {
=09
}
BLOCKQUOTE.spip_poesie {
=09
}
.spip_code {
=09
}
.spip_cadre {
=09
}
ADDRESS {
=09
}
TABLE.spip {
=09
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
.spip_logos {
=09
}
.spip_documents {
=09
}
.spip_documents_center {
=09
}
.spip_documents_left {
=09
}
.spip_documents_right {
=09
}
.spip_doc_titre {
=09
}
.spip_doc_descriptif {
=09
}
BODY {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; BACKGROUND: #fff; PADDING-TOP: 0px
}
#page {
	POSITION: relative; TEXT-ALIGN: left; MARGIN: 0px auto; WIDTH: 58em
}
#entete {
	BORDER-BOTTOM: #8b6f92 2px solid; MARGIN: 0px; WIDTH: 58em; =
PADDING-TOP: 1.6em
}
#entete A.accueil {
	WIDTH: 67%; DISPLAY: block
}
#entete A.accueil IMG.spip_logos {
	LINE-HEIGHT: 1em; VERTICAL-ALIGN: bottom
}
#entete A.accueil #nom_site_spip {
	FONT-FAMILY: Georgia, Times, serif; FONT-SIZE: 2.2em; VERTICAL-ALIGN: =
bottom; FONT-WEIGHT: normal
}
#entete .formulaire_menu_lang {
	POSITION: absolute; WIDTH: 30%; DISPLAY: block; TOP: 0.9em; RIGHT: 0px
}
#conteneur {
	WIDTH: 67%; FLOAT: left; CLEAR: both; OVERFLOW: hidden
}
#contenu {
	PADDING-TOP: 0.3em
}
#navigation {
	MARGIN-TOP: 1em; WIDTH: 30%; FLOAT: right; OVERFLOW: hidden
}
#extra {
	MARGIN-TOP: 1em; WIDTH: 30%; FLOAT: right; CLEAR: right; OVERFLOW: =
hidden
}
#pied {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0.4em; MARGIN: 0px; PADDING-LEFT: =
0px; WIDTH: 100%; PADDING-RIGHT: 0px; CLEAR: both; FONT-SIZE: 0.9em; =
BORDER-TOP: #8b6f92 1px solid; PADDING-TOP: 0.4em
}
#pied IMG {
	VERTICAL-ALIGN: middle
}
.nettoyeur {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; LINE-HEIGHT: =
1px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 0px; =
CLEAR: both; FONT-SIZE: 1px; BORDER-TOP: 0px; BORDER-RIGHT: 0px; =
PADDING-TOP: 0px
}
.invisible {
	POSITION: absolute; HEIGHT: 1%; TOP: -3000em
}
#hierarchie {
	MARGIN-BOTTOM: 2em; CLEAR: both; FONT-SIZE: 0.9em
}
#hierarchie {
	COLOR: #666
}
#hierarchie A {
	COLOR: #666
}
.cartouche {
	MARGIN-BOTTOM: 2em
}
.cartouche .spip_logos {
	MARGIN-BOTTOM: 4px; FLOAT: right; MARGIN-LEFT: 16px
}
.cartouche P {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; CLEAR: left; PADDING-TOP: 0px
}
.surtitre {
	LETTER-SPACING: 0.1em; COLOR: #666; FONT-SIZE: 0.9em
}
.soustitre {
	LETTER-SPACING: 0.1em; COLOR: #666; FONT-SIZE: 0.9em
}
.cartouche .surtitre {
	MARGIN-BOTTOM: 0.3em
}
.cartouche .soustitre {
	MARGIN-TOP: 0.5em; MARGIN-BOTTOM: 0.3em
}
.cartouche .traductions {
	FONT-SIZE: 0.9em
}
.chapo {
	TEXT-ALIGN: justify; LINE-HEIGHT: 1.4em; MARGIN-BOTTOM: 1.5em; COLOR: =
#669
}
.texte {
	TEXT-ALIGN: justify; LINE-HEIGHT: 1.6em; PADDING-RIGHT: 1.3em
}
.hyperlien {
	PADDING-BOTTOM: 0.5em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; DISPLAY: =
block; BACKGROUND: #eee; COLOR: #8b6f92; FONT-WEIGHT: bold; PADDING-TOP: =
0.5em
}
.ps {
	TEXT-ALIGN: justify; LINE-HEIGHT: 1.4em; MARGIN-BOTTOM: 2em
}
.notes {
	TEXT-ALIGN: justify; LINE-HEIGHT: 1.4em; MARGIN-BOTTOM: 2em
}
.notes {
	TEXT-ALIGN: justify; CLEAR: both; FONT-SIZE: 0.9em
}
ABBR.published {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
#documents_portfolio {
	TEXT-ALIGN: center; MARGIN: 2em auto; CLEAR: both
}
#documents_portfolio .spip_logos {
	BORDER-BOTTOM: #ddd 4px solid; BORDER-LEFT: #ddd 4px solid; MARGIN: 6px =
3px 0px; BORDER-TOP: #ddd 4px solid; BORDER-RIGHT: #ddd 4px solid
}
#documents_portfolio A.on .spip_logos {
	BORDER-BOTTOM-COLOR: #f57900; BORDER-TOP-COLOR: #f57900; =
BORDER-RIGHT-COLOR: #f57900; BORDER-LEFT-COLOR: #f57900
}
#documents_portfolio A:focus .spip_logos {
	BORDER-BOTTOM-COLOR: #8b6f92; BORDER-TOP-COLOR: #8b6f92; =
BORDER-RIGHT-COLOR: #8b6f92; BORDER-LEFT-COLOR: #8b6f92
}
#documents_portfolio A:hover .spip_logos {
	BORDER-BOTTOM-COLOR: #8b6f92; BORDER-TOP-COLOR: #8b6f92; =
BORDER-RIGHT-COLOR: #8b6f92; BORDER-LEFT-COLOR: #8b6f92
}
#documents_portfolio A:active .spip_logos {
	BORDER-BOTTOM-COLOR: #8b6f92; BORDER-TOP-COLOR: #8b6f92; =
BORDER-RIGHT-COLOR: #8b6f92; BORDER-LEFT-COLOR: #8b6f92
}
.repondre {
	TEXT-ALIGN: right; MARGIN-TOP: 2.5em; CLEAR: both; FONT-WEIGHT: bold; =
MARGIN-RIGHT: 1em
}
UL.forum {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; DISPLAY: block; CLEAR: both; PADDING-TOP: 0px
}
UL.forum {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
UL.forum UL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
.forum-fil {
	MARGIN-TOP: 1.5em
}
.forum-fil UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 1em; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; DISPLAY: block; PADDING-TOP: 0px
}
.forum-chapo .forum-titre {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; DISPLAY: block; COLOR: #333; FONT-WEIGHT: bold; PADDING-TOP: 0px
}
.forum-chapo .forum-titre A {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; DISPLAY: block; COLOR: #333; FONT-WEIGHT: bold; PADDING-TOP: 0px
}
.forum-texte {
	PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-LEFT: 1em; PADDING-RIGHT: =
1em; COLOR: #333; PADDING-TOP: 0.5em
}
.forum-texte .hyperlien {
=09
}
.forum-texte .repondre {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0.1em; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; PADDING-TOP: 0.1em
}
UL .forum-message {
	BORDER-BOTTOM: #666 1px solid; BORDER-LEFT: #666 1px solid; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0px 1em; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; BORDER-TOP: #666 1px solid; BORDER-RIGHT: #666 1px =
solid; PADDING-TOP: 0px
}
UL UL .forum-message {
	BORDER-BOTTOM: #a4a4a4 1px solid; BORDER-LEFT: #a4a4a4 1px solid; =
BORDER-TOP: #a4a4a4 1px solid; BORDER-RIGHT: #a4a4a4 1px solid
}
UL UL UL .forum-message {
	BORDER-BOTTOM: #b8b8b8 1px solid; BORDER-LEFT: #b8b8b8 1px solid; =
BORDER-TOP: #b8b8b8 1px solid; BORDER-RIGHT: #b8b8b8 1px solid
}
UL UL UL UL .forum-message {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; BORDER-TOP: =
#ccc 1px solid; BORDER-RIGHT: #ccc 1px solid
}
UL UL UL UL UL .forum-message {
	BORDER-BOTTOM: #e0e0e0 1px solid; BORDER-LEFT: #e0e0e0 1px solid; =
BORDER-TOP: #e0e0e0 1px solid; BORDER-RIGHT: #e0e0e0 1px solid
}
UL UL UL UL UL UL .forum-message {
	BORDER-BOTTOM: #e0e0e0 1px dotted; BORDER-LEFT: #e0e0e0 1px dotted; =
BORDER-TOP: #e0e0e0 1px dotted; BORDER-RIGHT: #e0e0e0 1px dotted
}
UL .forum-chapo {
	BORDER-BOTTOM: #b8b8b8 1px dotted; BORDER-LEFT: 0px; PADDING-BOTTOM: =
2px; MARGIN: 0px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; BACKGROUND: =
#c4e0e0; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 3px
}
UL UL .forum-chapo {
	BACKGROUND: #d4e8e8
}
UL UL UL .forum-chapo {
	BACKGROUND: #e4f0f0
}
UL UL UL UL .forum-chapo {
	BORDER-BOTTOM: #e0e0e0 1px dotted; BACKGROUND: #f4f8f8
}
UL UL UL UL UL .forum-chapo {
	BACKGROUND: #fff
}
#signatures {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 2em; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; =
CLEAR: both; PADDING-TOP: 0px
}
#signatures TABLE {
	MARGIN: 1em 0px 0px; WIDTH: 100%
}
#signatures THEAD {
	TEXT-ALIGN: center; COLOR: #555
}
#signatures TD {
	BORDER-BOTTOM: #fefefe 2px solid; BORDER-LEFT: #fefefe 2px solid; =
PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
VERTICAL-ALIGN: top; BORDER-TOP: #fefefe 2px solid; BORDER-RIGHT: =
#fefefe 2px solid; PADDING-TOP: 0.5em
}
#signatures TD.signature-date {
	TEXT-ALIGN: center; WHITE-SPACE: nowrap; BACKGROUND: #e4f0f0
}
#signatures TD.signature-nom {
	TEXT-ALIGN: center; BACKGROUND: #ecf4f4
}
#signatures TD.signature-nom SMALL {
	DISPLAY: block
}
#signatures TD.signature-message {
	BACKGROUND: #f4f8f8
}
#signatures .formulaire_recherche {
	TEXT-ALIGN: right; MARGIN: 1em 0px
}
#signatures .formulaire_recherche INPUT.text {
	TEXT-ALIGN: left; WIDTH: 10em
}
.menu {
	TEXT-ALIGN: left; MARGIN-BOTTOM: 2em; CLEAR: both
}
.menu P {
	PADDING-BOTTOM: 0.2em; MARGIN: 0.2em 0px; PADDING-LEFT: 0.1em; =
PADDING-RIGHT: 0.1em; PADDING-TOP: 0.2em
}
.menu UL {
	BORDER-BOTTOM: #ddd 1px solid; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: =
none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
.menu UL LI {
	PADDING-BOTTOM: 0.2em; MARGIN: 0.2em 0px; PADDING-LEFT: 0.2em; =
PADDING-RIGHT: 0.2em; BORDER-TOP: #ddd 1px solid; PADDING-TOP: 0.2em
}
.menu UL LI UL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN-LEFT: 1em; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
.menu UL LI LI {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
.pagination {
	TEXT-ALIGN: left; COLOR: #666; CLEAR: both; FONT-SIZE: 0.9em
}
.pagination .on {
	COLOR: #666; FONT-WEIGHT: bold
}
.rubriques UL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
.rubriques UL LI {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BACKGROUND: #eee; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
.formulaire_recherche {
	MARGIN-BOTTOM: 2em
}
.articles UL LI {
	PADDING-BOTTOM: 0.4em; PADDING-LEFT: 0.2em; PADDING-RIGHT: 0.2em; =
CLEAR: both; PADDING-TOP: 0.4em
}
.articles UL LI H3 {
	MARGIN: 0.3em 0px
}
.articles .spip_logos {
	MARGIN: 0px 0px 4px 16px; FLOAT: right; CLEAR: right
}
.articles UL LI .enclosures {
	TEXT-ALIGN: right; MARGIN: 0px; MAX-WIDTH: 60%; FLOAT: right
}
.articles UL LI .introduction {
	TEXT-ALIGN: justify; LINE-HEIGHT: 1.4em; MARGIN-TOP: 0.3em
}
A {
	COLOR: #604a7f; TEXT-DECORATION: none
}
A:focus {
	COLOR: #f57900; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #f57900; TEXT-DECORATION: underline
}
A:active {
	COLOR: #f57900; TEXT-DECORATION: underline
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/squelettes-dist/impression.css

BODY {
	TEXT-ALIGN: left; MARGIN: 15pt; FONT: 12pt "Luxi sans", "Lucida =
Grande", Lucida, "Lucida Sans Unicode", sans-serif; BACKGROUND: #fff; =
COLOR: #000
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
TABLE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
UL {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
OL {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
LI {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
H1 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 1em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
H2 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 1em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
H3 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 1em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
H4 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 1em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
H5 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 1em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
H6 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-SIZE: 1em; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
#entete {
	DISPLAY: none
}
#hierarchie {
	DISPLAY: none
}
#navigation {
	DISPLAY: none
}
#extra {
	DISPLAY: none
}
#pied {
	DISPLAY: none
}
.repondre {
	DISPLAY: none
}
.repondre {
	DISPLAY: none
}
.formulaire_spip {
	DISPLAY: none
}
.spip-admin {
	DISPLAY: none
}
.spip-admin-float {
	DISPLAY: none
}
.spip-previsu {
	DISPLAY: none
}
.invisible {
	DISPLAY: none
}
.nettoyeur {
	CLEAR: both
}
A {
	COLOR: #520; TEXT-DECORATION: underline
}
A.spip_out:after {
	DISPLAY: inline; CONTENT: " [" attr(href) "]"
}
A.spip_glossaire:after {
	DISPLAY: inline; CONTENT: " [" attr(href) "]"
}
A.spip_mail:after {
	DISPLAY: inline; CONTENT: " [" attr(href) "]"
}
.cartouche {
	MARGIN-BOTTOM: 2em
}
.cartouche SMALL {
	FONT-SIZE: 0.71em
}
H1 {
	FONT-SIZE: 1.27em; FONT-WEIGHT: bold
}
.cartouche P {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; CLEAR: left; PADDING-TOP: 0px
}
.cartouche .traductions {
	DISPLAY: none
}
.cartouche .surtitre {
	FONT-VARIANT: small-caps; FONT-SIZE: 0.82em
}
.cartouche .soustitre {
	FONT-VARIANT: small-caps; FONT-SIZE: 0.82em
}
.spip_logos {
	FLOAT: right; MARGIN-LEFT: 0.8em
}
.chapo {
	LINE-HEIGHT: 1.4em; MARGIN-BOTTOM: 1.5em; FONT-SIZE: 0.82em; =
FONT-WEIGHT: bold
}
.hyperlien {
	FONT-SIZE: 0.82em; FONT-WEIGHT: bold
}
.texte {
	LINE-HEIGHT: 1.4em
}
.ps {
	MARGIN-TOP: 1.4em; CLEAR: both; FONT-SIZE: 0.82em; BORDER-TOP: #ccc 2pt =
solid; PADDING-TOP: 0.2em
}
.notes {
	MARGIN-TOP: 1.4em; CLEAR: both; FONT-SIZE: 0.82em; BORDER-TOP: #ccc 2pt =
solid; PADDING-TOP: 0.2em
}
#documents_portfolio {
	MARGIN-TOP: 1.4em; CLEAR: both; FONT-SIZE: 0.82em; BORDER-TOP: #ccc 2pt =
solid; PADDING-TOP: 0.2em
}
#documents_joints {
	MARGIN-TOP: 1.4em; CLEAR: both; FONT-SIZE: 0.82em; BORDER-TOP: #ccc 2pt =
solid; PADDING-TOP: 0.2em
}
.ps H2 {
	CLEAR: both; FONT-WEIGHT: bold
}
.notes H2 {
	CLEAR: both; FONT-WEIGHT: bold
}
#documents_joints H2 {
	CLEAR: both; FONT-WEIGHT: bold
}
.hyperlien {
	BORDER-BOTTOM: #ccc 1pt dotted; BORDER-LEFT: #ccc 1pt dotted; =
PADDING-BOTTOM: 1em; MARGIN: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; =
BACKGROUND: #fff; BORDER-TOP: #ccc 1pt dotted; BORDER-RIGHT: #ccc 1pt =
dotted; PADDING-TOP: 1em
}
.articles LI .texte {
	BORDER-BOTTOM: #ccc 1pt dotted; BORDER-LEFT: #ccc 1pt dotted; =
PADDING-BOTTOM: 1em; MARGIN: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; =
BACKGROUND: #fff; BORDER-TOP: #ccc 1pt dotted; BORDER-RIGHT: #ccc 1pt =
dotted; PADDING-TOP: 1em
}
.forum {
	MARGIN: 2em 0px; FONT-SIZE: 0.82em
}
.forum-fil UL {
	MARGIN-LEFT: 0.5em
}
.forum-chapo .forum-titre {
	DISPLAY: block; FONT-WEIGHT: bold
}
UL .forum-message {
	BORDER-BOTTOM: #ccc 1pt solid; BORDER-LEFT: #ccc 1pt solid; =
PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; =
MARGIN-BOTTOM: 1em; BACKGROUND: #eee; BORDER-TOP: #ccc 1pt solid; =
BORDER-RIGHT: #ccc 1pt solid; PADDING-TOP: 1em
}
.articles LI {
	MARGIN-BOTTOM: 1em; PADDING-TOP: 0.3em
}
.articles LI .titre {
	FONT-SIZE: 1.03em; FONT-WEIGHT: bold
}
.articles LI P {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.articles LI SMALL {
	DISPLAY: block; FONT-SIZE: 0.71em
}
.page_plan #contenu H2 {
	FONT-SIZE: 1.15em; FONT-WEIGHT: bold
}
.page_plan #contenu UL {
	MARGIN-BOTTOM: 1em; MARGIN-LEFT: 1em
}
.page_plan #contenu LI {
	LIST-STYLE-TYPE: square
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/extensions/porte_plume/css/barre_outils.css

.formulaire_spip TEXTAREA.markItUpEditor {
=09
}
.formulaire_spip LI.editer_texte TEXTAREA {
=09
}
.markItUp .markItUpHeader A {
	COLOR: #000; TEXT-DECORATION: none
}
.markItUp .markItUpTabs A {
	COLOR: #000; TEXT-DECORATION: none
}
.markItUp .markItUpFooter A {
	COLOR: #000; TEXT-DECORATION: none
}
.markItUp {
	MARGIN: 5px 0px; CLEAR: both
}
.markItUp .markItUpContainer {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.markItUp .markItUpEditor {
	DISPLAY: block; CLEAR: both; OVERFLOW: auto
}
#text_area {
	HEIGHT: 300px
}
.markItUp .markItUpPreviewFrame {
=09
}
.markItUp .markItUpFooter {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 100%; =
PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.markItUp .markItUpResizeHandle {
	BACKGROUND-IMAGE: url(images/handle.png); WIDTH: 22px; HEIGHT: 5px; =
MARGIN-LEFT: auto; OVERFLOW: hidden; CURSOR: ns-resize; MARGIN-RIGHT: =
auto
}
.markItUp .markItUpTabs {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; MARGIN-TOP: 3px; PADDING-LEFT: =
1px; WIDTH: auto; PADDING-RIGHT: 1px; MARGIN-BOTTOM: -1px; FLOAT: right; =
CLEAR: both; OVERFLOW: hidden; MARGIN-RIGHT: 30px; PADDING-TOP: 1px
}
.markItUp .markItUpTabs A {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 2px; MARGIN: 0px 1px; PADDING-LEFT: 4px; PADDING-RIGHT: =
4px; DISPLAY: block; BACKGROUND: #f0f0f0; FLOAT: right; BORDER-TOP: #ccc =
1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 3px
}
.markItUp .markItUpTabs A.on {
	BORDER-BOTTOM: #fff 1px solid; BACKGROUND: #fff
}
.markItUp .markItUpTabs A:hover {
	BACKGROUND: #fff
}
.markItUp .markItUpPreview {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; BACKGROUND: =
#fff; CLEAR: both; OVERFLOW: auto; BORDER-TOP: #ccc 1px solid; =
BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 1em
}
.markItUp .preview P {
	MARGIN-BOTTOM: 1em
}
.markItUp .preview UL {
	MARGIN-TOP: 0.5em; MARGIN-BOTTOM: 1em
}
.markItUp .preview LI {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: =
1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; BORDER-TOP: medium none; =
BORDER-RIGHT: medium none; PADDING-TOP: 1px
}
.markItUp .preview .cadre OL {
	PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
PADDING-TOP: 0.5em
}
.markItUp .preview .cadre UL {
	PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
PADDING-TOP: 0.5em
}
.markItUp .markItUpHeader {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.markItUp .markItUpHeader UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.markItUp .markItUpHeader UL LI {
	BORDER-BOTTOM: 0px; POSITION: relative; BORDER-LEFT: 0px; =
PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FLOAT: left; CLEAR: none; OVERFLOW: visible; =
BORDER-TOP: 0px; LIST-STYLE-IMAGE: none; BORDER-RIGHT: 0px; PADDING-TOP: =
0px
}
.markItUp .markItUpHeader UL LI:first-child {
	PADDING-TOP: 0px
}
.markItUp .markItUpHeader UL .markItUpDropMenu {
=09
}
.markItUp .markItUpHeader UL .markItUpDropMenu LI {
	PADDING-BOTTOM: 1px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 1px; =
PADDING-RIGHT: 0px; MARGIN-RIGHT: 0px; PADDING-TOP: 1px
}
.markItUp .markItUpHeader UL UL {
	Z-INDEX: 2; POSITION: absolute; WIDTH: 150px; DISPLAY: none; TOP: 24px; =
PADDING-TOP: 2px; LEFT: -1px
}
.markItUp .markItUpHeader UL UL LI {
	FLOAT: left
}
.markItUp .markItUpHeader UL UL .markItUpDropMenu {
	BACKGROUND: url(images/submenu.png) #f5f5f5 no-repeat 50% 50%
}
.markItUp .markItUpHeader UL .markItUpSeparator {
	MARGIN: 0px 6px; WIDTH: 0px; HEIGHT: 16px; OVERFLOW: hidden
}
.markItUp .markItUpHeader UL UL .markItUpSeparator {
	MARGIN: 0px; WIDTH: auto; HEIGHT: 1px
}
.markItUp .markItUpHeader UL A {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #f5f5f5; PADDING-LEFT: 3px; =
PADDING-RIGHT: 3px; DISPLAY: block; BORDER-TOP: #ccc 1px solid; =
MARGIN-RIGHT: 1px; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 3px
}
.markItUp .markItUpHeader UL A B {
	TEXT-INDENT: -10000px; WIDTH: 16px; DISPLAY: block; BACKGROUND-REPEAT: =
no-repeat; HEIGHT: 16px
}
.markItUp .markItUpHeader UL A:hover {
	BORDER-BOTTOM: #888 1px solid; BORDER-LEFT: #888 1px solid; =
BACKGROUND-COLOR: #fff; BORDER-TOP: #888 1px solid; BORDER-RIGHT: #888 =
1px solid
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/spip.php?page=barre_outils_icones.css

.markItUp .outil_header1 A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -226px
}
.markItUp .outil_bold A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -478px
}
.markItUp .outil_italic A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -586px
}
.markItUp .outil_stroke_through A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -946px
}
.markItUp .outil_liste_ul A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -622px
}
.markItUp .outil_liste_ol A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -658px
}
.markItUp .outil_indenter A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -514px
}
.markItUp .outil_desindenter A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -550px
}
.markItUp .outil_quote A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -442px
}
.markItUp .outil_link A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -298px
}
.markItUp .outil_notes A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -334px
}
.markItUp .outil_guillemets A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -910px
}
.markItUp .outil_guillemets_simples A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -802px
}
.markItUp .outil_guillemets_de A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -766px
}
.markItUp .outil_guillemets_de_simples A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -838px
}
.markItUp .outil_guillemets_uniques A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -874px
}
.markItUp .outil_caracteres A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -262px
}
.markItUp .outil_a_maj_grave A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -82px
}
.markItUp .outil_e_maj_aigu A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -154px
}
.markItUp .outil_e_maj_grave A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -190px
}
.markItUp .outil_aelig A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -46px
}
.markItUp .outil_aelig_maj A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -10px
}
.markItUp .outil_oe A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -406px
}
.markItUp .outil_oe_maj A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -370px
}
.markItUp .outil_ccedil_maj A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -118px
}
.markItUp .outil_uppercase A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -730px
}
.markItUp .outil_lowercase A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -694px
}
.markItUp .outil_clean A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -982px
}
.markItUp .outil_preview A B {
	BACKGROUND-IMAGE: =
url(http://www.alterinfos.org/extensions/porte_plume/icones_barre/spt-v1.=
png); BACKGROUND-POSITION: -10px -1018px
}
.ajaxLoad {
	BACKGROUND: url(http://www.alterinfos.org/prive/images/searching.gif) =
white no-repeat left top
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/plugins/Lecteur_multimedia/player.css

.radiobox {
	PADDING-BOTTOM: 0px; MARGIN: 10px 0px; PADDING-LEFT: 0px; WIDTH: 200px; =
PADDING-RIGHT: 0px; FONT-FAMILY: verdana, sans-serif; COLOR: #999999; =
FONT-SIZE: 9px; PADDING-TOP: 0px
}
.controles {
	TEXT-ALIGN: right; MARGIN-BOTTOM: 5px; CURSOR: pointer
}
.playliste {
	BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; =
PADDING-BOTTOM: 3px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
3px; PADDING-RIGHT: 3px; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: =
#cccccc 1px solid; PADDING-TOP: 3px
}
.radiobox A {
	FONT-FAMILY: verdana, sans-serif; COLOR: #999999; TEXT-DECORATION: none
}
.radiobox A:hover {
	FONT-FAMILY: verdana, sans-serif; COLOR: #999999; TEXT-DECORATION: none
}
.radiobox LI.over {
	BACKGROUND: #e6e6e6
}
.playliste_pagination {
	BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; =
MARGIN: 5px 0px 0px; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: =
#cccccc 1px solid
}
.radiobox LI.play_on {
	BACKGROUND: #e6e6e6
}
DIV#now_playing {
	BORDER-BOTTOM: #cccccc 1px solid; TEXT-ALIGN: left; BORDER-LEFT: =
#cccccc 1px solid; WIDTH: 120px; FLOAT: left; HEIGHT: 13px; OVERFLOW: =
hidden; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid
}
SPAN.play_ {
	BACKGROUND: #e6ecff; CURSOR: pointer
}
SPAN.play_on {
	BACKGROUND: #ff0000; CURSOR: pointer
}

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/prive/javascript/jquery.js

/*!=0A=
 * jQuery JavaScript Library v1.4.4=0A=
 * http://jquery.com/=0A=
 *=0A=
 * Copyright 2010, John Resig=0A=
 * Dual licensed under the MIT or GPL Version 2 licenses.=0A=
 * http://jquery.org/license=0A=
 *=0A=
 * Includes Sizzle.js=0A=
 * http://sizzlejs.com/=0A=
 * Copyright 2010, The Dojo Foundation=0A=
 * Released under the MIT, BSD, and GPL Licenses.=0A=
 *=0A=
 * Date: Thu Nov 11 19:04:53 2010 -0500=0A=
 */=0A=
(function( window, undefined ) {=0A=
=0A=
// Use the correct document accordingly with window argument (sandbox)=0A=
var document =3D window.document;=0A=
var jQuery =3D (function() {=0A=
=0A=
// Define a local copy of jQuery=0A=
var jQuery =3D function( selector, context ) {=0A=
		// The jQuery object is actually just the init constructor 'enhanced'=0A=
		return new jQuery.fn.init( selector, context );=0A=
	},=0A=
=0A=
	// Map over jQuery in case of overwrite=0A=
	_jQuery =3D window.jQuery,=0A=
=0A=
	// Map over the $ in case of overwrite=0A=
	_$ =3D window.$,=0A=
=0A=
	// A central reference to the root jQuery(document)=0A=
	rootjQuery,=0A=
=0A=
	// A simple way to check for HTML strings or ID strings=0A=
	// (both of which we optimize for)=0A=
	quickExpr =3D /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,=0A=
=0A=
	// Is it a simple selector=0A=
	isSimple =3D /^.[^:#\[\.,]*$/,=0A=
=0A=
	// Check if a string has a non-whitespace character in it=0A=
	rnotwhite =3D /\S/,=0A=
	rwhite =3D /\s/,=0A=
=0A=
	// Used for trimming whitespace=0A=
	trimLeft =3D /^\s+/,=0A=
	trimRight =3D /\s+$/,=0A=
=0A=
	// Check for non-word characters=0A=
	rnonword =3D /\W/,=0A=
=0A=
	// Check for digits=0A=
	rdigit =3D /\d/,=0A=
=0A=
	// Match a standalone tag=0A=
	rsingleTag =3D /^<(\w+)\s*\/?>(?:<\/\1>)?$/,=0A=
=0A=
	// JSON RegExp=0A=
	rvalidchars =3D /^[\],:{}\s]*$/,=0A=
	rvalidescape =3D /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,=0A=
	rvalidtokens =3D =
/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,=0A=
	rvalidbraces =3D /(?:^|:|,)(?:\s*\[)+/g,=0A=
=0A=
	// Useragent RegExp=0A=
	rwebkit =3D /(webkit)[ \/]([\w.]+)/,=0A=
	ropera =3D /(opera)(?:.*version)?[ \/]([\w.]+)/,=0A=
	rmsie =3D /(msie) ([\w.]+)/,=0A=
	rmozilla =3D /(mozilla)(?:.*? rv:([\w.]+))?/,=0A=
=0A=
	// Keep a UserAgent string for use with jQuery.browser=0A=
	userAgent =3D navigator.userAgent,=0A=
=0A=
	// For matching the engine and version of the browser=0A=
	browserMatch,=0A=
	=0A=
	// Has the ready events already been bound?=0A=
	readyBound =3D false,=0A=
	=0A=
	// The functions to execute on DOM ready=0A=
	readyList =3D [],=0A=
=0A=
	// The ready event handler=0A=
	DOMContentLoaded,=0A=
=0A=
	// Save a reference to some core methods=0A=
	toString =3D Object.prototype.toString,=0A=
	hasOwn =3D Object.prototype.hasOwnProperty,=0A=
	push =3D Array.prototype.push,=0A=
	slice =3D Array.prototype.slice,=0A=
	trim =3D String.prototype.trim,=0A=
	indexOf =3D Array.prototype.indexOf,=0A=
	=0A=
	// [[Class]] -> type pairs=0A=
	class2type =3D {};=0A=
=0A=
jQuery.fn =3D jQuery.prototype =3D {=0A=
	init: function( selector, context ) {=0A=
		var match, elem, ret, doc;=0A=
=0A=
		// Handle $(""), $(null), or $(undefined)=0A=
		if ( !selector ) {=0A=
			return this;=0A=
		}=0A=
=0A=
		// Handle $(DOMElement)=0A=
		if ( selector.nodeType ) {=0A=
			this.context =3D this[0] =3D selector;=0A=
			this.length =3D 1;=0A=
			return this;=0A=
		}=0A=
		=0A=
		// The body element only exists once, optimize finding it=0A=
		if ( selector =3D=3D=3D "body" && !context && document.body ) {=0A=
			this.context =3D document;=0A=
			this[0] =3D document.body;=0A=
			this.selector =3D "body";=0A=
			this.length =3D 1;=0A=
			return this;=0A=
		}=0A=
=0A=
		// Handle HTML strings=0A=
		if ( typeof selector =3D=3D=3D "string" ) {=0A=
			// Are we dealing with HTML string or an ID?=0A=
			match =3D quickExpr.exec( selector );=0A=
=0A=
			// Verify a match, and that no context was specified for #id=0A=
			if ( match && (match[1] || !context) ) {=0A=
=0A=
				// HANDLE: $(html) -> $(array)=0A=
				if ( match[1] ) {=0A=
					doc =3D (context ? context.ownerDocument || context : document);=0A=
=0A=
					// If a single string is passed in and it's a single tag=0A=
					// just do a createElement and skip the rest=0A=
					ret =3D rsingleTag.exec( selector );=0A=
=0A=
					if ( ret ) {=0A=
						if ( jQuery.isPlainObject( context ) ) {=0A=
							selector =3D [ document.createElement( ret[1] ) ];=0A=
							jQuery.fn.attr.call( selector, context, true );=0A=
=0A=
						} else {=0A=
							selector =3D [ doc.createElement( ret[1] ) ];=0A=
						}=0A=
=0A=
					} else {=0A=
						ret =3D jQuery.buildFragment( [ match[1] ], [ doc ] );=0A=
						selector =3D (ret.cacheable ? ret.fragment.cloneNode(true) : =
ret.fragment).childNodes;=0A=
					}=0A=
					=0A=
					return jQuery.merge( this, selector );=0A=
					=0A=
				// HANDLE: $("#id")=0A=
				} else {=0A=
					elem =3D document.getElementById( match[2] );=0A=
=0A=
					// Check parentNode to catch when Blackberry 4.6 returns=0A=
					// nodes that are no longer in the document #6963=0A=
					if ( elem && elem.parentNode ) {=0A=
						// Handle the case where IE and Opera return items=0A=
						// by name instead of ID=0A=
						if ( elem.id !=3D=3D match[2] ) {=0A=
							return rootjQuery.find( selector );=0A=
						}=0A=
=0A=
						// Otherwise, we inject the element directly into the jQuery object=0A=
						this.length =3D 1;=0A=
						this[0] =3D elem;=0A=
					}=0A=
=0A=
					this.context =3D document;=0A=
					this.selector =3D selector;=0A=
					return this;=0A=
				}=0A=
=0A=
			// HANDLE: $("TAG")=0A=
			} else if ( !context && !rnonword.test( selector ) ) {=0A=
				this.selector =3D selector;=0A=
				this.context =3D document;=0A=
				selector =3D document.getElementsByTagName( selector );=0A=
				return jQuery.merge( this, selector );=0A=
=0A=
			// HANDLE: $(expr, $(...))=0A=
			} else if ( !context || context.jquery ) {=0A=
				return (context || rootjQuery).find( selector );=0A=
=0A=
			// HANDLE: $(expr, context)=0A=
			// (which is just equivalent to: $(context).find(expr)=0A=
			} else {=0A=
				return jQuery( context ).find( selector );=0A=
			}=0A=
=0A=
		// HANDLE: $(function)=0A=
		// Shortcut for document ready=0A=
		} else if ( jQuery.isFunction( selector ) ) {=0A=
			return rootjQuery.ready( selector );=0A=
		}=0A=
=0A=
		if (selector.selector !=3D=3D undefined) {=0A=
			this.selector =3D selector.selector;=0A=
			this.context =3D selector.context;=0A=
		}=0A=
=0A=
		return jQuery.makeArray( selector, this );=0A=
	},=0A=
=0A=
	// Start with an empty selector=0A=
	selector: "",=0A=
=0A=
	// The current version of jQuery being used=0A=
	jquery: "1.4.4",=0A=
=0A=
	// The default length of a jQuery object is 0=0A=
	length: 0,=0A=
=0A=
	// The number of elements contained in the matched element set=0A=
	size: function() {=0A=
		return this.length;=0A=
	},=0A=
=0A=
	toArray: function() {=0A=
		return slice.call( this, 0 );=0A=
	},=0A=
=0A=
	// Get the Nth element in the matched element set OR=0A=
	// Get the whole matched element set as a clean array=0A=
	get: function( num ) {=0A=
		return num =3D=3D null ?=0A=
=0A=
			// Return a 'clean' array=0A=
			this.toArray() :=0A=
=0A=
			// Return just the object=0A=
			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );=0A=
	},=0A=
=0A=
	// Take an array of elements and push it onto the stack=0A=
	// (returning the new matched element set)=0A=
	pushStack: function( elems, name, selector ) {=0A=
		// Build a new jQuery matched element set=0A=
		var ret =3D jQuery();=0A=
=0A=
		if ( jQuery.isArray( elems ) ) {=0A=
			push.apply( ret, elems );=0A=
		=0A=
		} else {=0A=
			jQuery.merge( ret, elems );=0A=
		}=0A=
=0A=
		// Add the old object onto the stack (as a reference)=0A=
		ret.prevObject =3D this;=0A=
=0A=
		ret.context =3D this.context;=0A=
=0A=
		if ( name =3D=3D=3D "find" ) {=0A=
			ret.selector =3D this.selector + (this.selector ? " " : "") + =
selector;=0A=
		} else if ( name ) {=0A=
			ret.selector =3D this.selector + "." + name + "(" + selector + ")";=0A=
		}=0A=
=0A=
		// Return the newly-formed element set=0A=
		return ret;=0A=
	},=0A=
=0A=
	// Execute a callback for every element in the matched set.=0A=
	// (You can seed the arguments with an array of args, but this is=0A=
	// only used internally.)=0A=
	each: function( callback, args ) {=0A=
		return jQuery.each( this, callback, args );=0A=
	},=0A=
	=0A=
	ready: function( fn ) {=0A=
		// Attach the listeners=0A=
		jQuery.bindReady();=0A=
=0A=
		// If the DOM is already ready=0A=
		if ( jQuery.isReady ) {=0A=
			// Execute the function immediately=0A=
			fn.call( document, jQuery );=0A=
=0A=
		// Otherwise, remember the function for later=0A=
		} else if ( readyList ) {=0A=
			// Add the function to the wait list=0A=
			readyList.push( fn );=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
	=0A=
	eq: function( i ) {=0A=
		return i =3D=3D=3D -1 ?=0A=
			this.slice( i ) :=0A=
			this.slice( i, +i + 1 );=0A=
	},=0A=
=0A=
	first: function() {=0A=
		return this.eq( 0 );=0A=
	},=0A=
=0A=
	last: function() {=0A=
		return this.eq( -1 );=0A=
	},=0A=
=0A=
	slice: function() {=0A=
		return this.pushStack( slice.apply( this, arguments ),=0A=
			"slice", slice.call(arguments).join(",") );=0A=
	},=0A=
=0A=
	map: function( callback ) {=0A=
		return this.pushStack( jQuery.map(this, function( elem, i ) {=0A=
			return callback.call( elem, i, elem );=0A=
		}));=0A=
	},=0A=
	=0A=
	end: function() {=0A=
		return this.prevObject || jQuery(null);=0A=
	},=0A=
=0A=
	// For internal use only.=0A=
	// Behaves like an Array's method, not like a jQuery method.=0A=
	push: push,=0A=
	sort: [].sort,=0A=
	splice: [].splice=0A=
};=0A=
=0A=
// Give the init function the jQuery prototype for later instantiation=0A=
jQuery.fn.init.prototype =3D jQuery.fn;=0A=
=0A=
jQuery.extend =3D jQuery.fn.extend =3D function() {=0A=
	 var options, name, src, copy, copyIsArray, clone,=0A=
		target =3D arguments[0] || {},=0A=
		i =3D 1,=0A=
		length =3D arguments.length,=0A=
		deep =3D false;=0A=
=0A=
	// Handle a deep copy situation=0A=
	if ( typeof target =3D=3D=3D "boolean" ) {=0A=
		deep =3D target;=0A=
		target =3D arguments[1] || {};=0A=
		// skip the boolean and the target=0A=
		i =3D 2;=0A=
	}=0A=
=0A=
	// Handle case when target is a string or something (possible in deep =
copy)=0A=
	if ( typeof target !=3D=3D "object" && !jQuery.isFunction(target) ) {=0A=
		target =3D {};=0A=
	}=0A=
=0A=
	// extend jQuery itself if only one argument is passed=0A=
	if ( length =3D=3D=3D i ) {=0A=
		target =3D this;=0A=
		--i;=0A=
	}=0A=
=0A=
	for ( ; i < length; i++ ) {=0A=
		// Only deal with non-null/undefined values=0A=
		if ( (options =3D arguments[ i ]) !=3D null ) {=0A=
			// Extend the base object=0A=
			for ( name in options ) {=0A=
				src =3D target[ name ];=0A=
				copy =3D options[ name ];=0A=
=0A=
				// Prevent never-ending loop=0A=
				if ( target =3D=3D=3D copy ) {=0A=
					continue;=0A=
				}=0A=
=0A=
				// Recurse if we're merging plain objects or arrays=0A=
				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray =
=3D jQuery.isArray(copy)) ) ) {=0A=
					if ( copyIsArray ) {=0A=
						copyIsArray =3D false;=0A=
						clone =3D src && jQuery.isArray(src) ? src : [];=0A=
=0A=
					} else {=0A=
						clone =3D src && jQuery.isPlainObject(src) ? src : {};=0A=
					}=0A=
=0A=
					// Never move original objects, clone them=0A=
					target[ name ] =3D jQuery.extend( deep, clone, copy );=0A=
=0A=
				// Don't bring in undefined values=0A=
				} else if ( copy !=3D=3D undefined ) {=0A=
					target[ name ] =3D copy;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	// Return the modified object=0A=
	return target;=0A=
};=0A=
=0A=
jQuery.extend({=0A=
	noConflict: function( deep ) {=0A=
		window.$ =3D _$;=0A=
=0A=
		if ( deep ) {=0A=
			window.jQuery =3D _jQuery;=0A=
		}=0A=
=0A=
		return jQuery;=0A=
	},=0A=
	=0A=
	// Is the DOM ready to be used? Set to true once it occurs.=0A=
	isReady: false,=0A=
=0A=
	// A counter to track how many items to wait for before=0A=
	// the ready event fires. See #6781=0A=
	readyWait: 1,=0A=
	=0A=
	// Handle when the DOM is ready=0A=
	ready: function( wait ) {=0A=
		// A third-party is pushing the ready event forwards=0A=
		if ( wait =3D=3D=3D true ) {=0A=
			jQuery.readyWait--;=0A=
		}=0A=
=0A=
		// Make sure that the DOM is not already loaded=0A=
		if ( !jQuery.readyWait || (wait !=3D=3D true && !jQuery.isReady) ) {=0A=
			// Make sure body exists, at least, in case IE gets a little =
overzealous (ticket #5443).=0A=
			if ( !document.body ) {=0A=
				return setTimeout( jQuery.ready, 1 );=0A=
			}=0A=
=0A=
			// Remember that the DOM is ready=0A=
			jQuery.isReady =3D true;=0A=
=0A=
			// If a normal DOM Ready event fired, decrement, and wait if need be=0A=
			if ( wait !=3D=3D true && --jQuery.readyWait > 0 ) {=0A=
				return;=0A=
			}=0A=
=0A=
			// If there are functions bound, to execute=0A=
			if ( readyList ) {=0A=
				// Execute all of them=0A=
				var fn,=0A=
					i =3D 0,=0A=
					ready =3D readyList;=0A=
=0A=
				// Reset the list of functions=0A=
				readyList =3D null;=0A=
=0A=
				while ( (fn =3D ready[ i++ ]) ) {=0A=
					fn.call( document, jQuery );=0A=
				}=0A=
=0A=
				// Trigger any bound ready events=0A=
				if ( jQuery.fn.trigger ) {=0A=
					jQuery( document ).trigger( "ready" ).unbind( "ready" );=0A=
				}=0A=
			}=0A=
		}=0A=
	},=0A=
	=0A=
	bindReady: function() {=0A=
		if ( readyBound ) {=0A=
			return;=0A=
		}=0A=
=0A=
		readyBound =3D true;=0A=
=0A=
		// Catch cases where $(document).ready() is called after the=0A=
		// browser event has already occurred.=0A=
		if ( document.readyState =3D=3D=3D "complete" ) {=0A=
			// Handle it asynchronously to allow scripts the opportunity to delay =
ready=0A=
			return setTimeout( jQuery.ready, 1 );=0A=
		}=0A=
=0A=
		// Mozilla, Opera and webkit nightlies currently support this event=0A=
		if ( document.addEventListener ) {=0A=
			// Use the handy event callback=0A=
			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, =
false );=0A=
			=0A=
			// A fallback to window.onload, that will always work=0A=
			window.addEventListener( "load", jQuery.ready, false );=0A=
=0A=
		// If IE event model is used=0A=
		} else if ( document.attachEvent ) {=0A=
			// ensure firing before onload,=0A=
			// maybe late but safe also for iframes=0A=
			document.attachEvent("onreadystatechange", DOMContentLoaded);=0A=
			=0A=
			// A fallback to window.onload, that will always work=0A=
			window.attachEvent( "onload", jQuery.ready );=0A=
=0A=
			// If IE and not a frame=0A=
			// continually check to see if the document is ready=0A=
			var toplevel =3D false;=0A=
=0A=
			try {=0A=
				toplevel =3D window.frameElement =3D=3D null;=0A=
			} catch(e) {}=0A=
=0A=
			if ( document.documentElement.doScroll && toplevel ) {=0A=
				doScrollCheck();=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	// See test/unit/core.js for details concerning isFunction.=0A=
	// Since version 1.3, DOM methods and functions like alert=0A=
	// aren't supported. They return false on IE (#2968).=0A=
	isFunction: function( obj ) {=0A=
		return jQuery.type(obj) =3D=3D=3D "function";=0A=
	},=0A=
=0A=
	isArray: Array.isArray || function( obj ) {=0A=
		return jQuery.type(obj) =3D=3D=3D "array";=0A=
	},=0A=
=0A=
	// A crude way of determining if an object is a window=0A=
	isWindow: function( obj ) {=0A=
		return obj && typeof obj =3D=3D=3D "object" && "setInterval" in obj;=0A=
	},=0A=
=0A=
	isNaN: function( obj ) {=0A=
		return obj =3D=3D null || !rdigit.test( obj ) || isNaN( obj );=0A=
	},=0A=
=0A=
	type: function( obj ) {=0A=
		return obj =3D=3D null ?=0A=
			String( obj ) :=0A=
			class2type[ toString.call(obj) ] || "object";=0A=
	},=0A=
=0A=
	isPlainObject: function( obj ) {=0A=
		// Must be an Object.=0A=
		// Because of IE, we also have to check the presence of the =
constructor property.=0A=
		// Make sure that DOM nodes and window objects don't pass through, as =
well=0A=
		if ( !obj || jQuery.type(obj) !=3D=3D "object" || obj.nodeType || =
jQuery.isWindow( obj ) ) {=0A=
			return false;=0A=
		}=0A=
		=0A=
		// Not own constructor property must be Object=0A=
		if ( obj.constructor &&=0A=
			!hasOwn.call(obj, "constructor") &&=0A=
			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {=0A=
			return false;=0A=
		}=0A=
		=0A=
		// Own properties are enumerated firstly, so to speed up,=0A=
		// if last one is own, then all properties are own.=0A=
	=0A=
		var key;=0A=
		for ( key in obj ) {}=0A=
		=0A=
		return key =3D=3D=3D undefined || hasOwn.call( obj, key );=0A=
	},=0A=
=0A=
	isEmptyObject: function( obj ) {=0A=
		for ( var name in obj ) {=0A=
			return false;=0A=
		}=0A=
		return true;=0A=
	},=0A=
	=0A=
	error: function( msg ) {=0A=
		throw msg;=0A=
	},=0A=
	=0A=
	parseJSON: function( data ) {=0A=
		if ( typeof data !=3D=3D "string" || !data ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		// Make sure leading/trailing whitespace is removed (IE can't handle =
it)=0A=
		data =3D jQuery.trim( data );=0A=
		=0A=
		// Make sure the incoming data is actual JSON=0A=
		// Logic borrowed from http://json.org/json2.js=0A=
		if ( rvalidchars.test(data.replace(rvalidescape, "@")=0A=
			.replace(rvalidtokens, "]")=0A=
			.replace(rvalidbraces, "")) ) {=0A=
=0A=
			// Try to use the native JSON parser first=0A=
			return window.JSON && window.JSON.parse ?=0A=
				window.JSON.parse( data ) :=0A=
				(new Function("return " + data))();=0A=
=0A=
		} else {=0A=
			jQuery.error( "Invalid JSON: " + data );=0A=
		}=0A=
	},=0A=
=0A=
	noop: function() {},=0A=
=0A=
	// Evalulates a script in a global context=0A=
	globalEval: function( data ) {=0A=
		if ( data && rnotwhite.test(data) ) {=0A=
			// Inspired by code by Andrea Giammarchi=0A=
			// =
http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom=
.html=0A=
			var head =3D document.getElementsByTagName("head")[0] || =
document.documentElement,=0A=
				script =3D document.createElement("script");=0A=
=0A=
			script.type =3D "text/javascript";=0A=
=0A=
			if ( jQuery.support.scriptEval ) {=0A=
				script.appendChild( document.createTextNode( data ) );=0A=
			} else {=0A=
				script.text =3D data;=0A=
			}=0A=
=0A=
			// Use insertBefore instead of appendChild to circumvent an IE6 bug.=0A=
			// This arises when a base node is used (#2709).=0A=
			head.insertBefore( script, head.firstChild );=0A=
			head.removeChild( script );=0A=
		}=0A=
	},=0A=
=0A=
	nodeName: function( elem, name ) {=0A=
		return elem.nodeName && elem.nodeName.toUpperCase() =3D=3D=3D =
name.toUpperCase();=0A=
	},=0A=
=0A=
	// args is for internal usage only=0A=
	each: function( object, callback, args ) {=0A=
		var name, i =3D 0,=0A=
			length =3D object.length,=0A=
			isObj =3D length =3D=3D=3D undefined || jQuery.isFunction(object);=0A=
=0A=
		if ( args ) {=0A=
			if ( isObj ) {=0A=
				for ( name in object ) {=0A=
					if ( callback.apply( object[ name ], args ) =3D=3D=3D false ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			} else {=0A=
				for ( ; i < length; ) {=0A=
					if ( callback.apply( object[ i++ ], args ) =3D=3D=3D false ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
		// A special, fast, case for the most common use of each=0A=
		} else {=0A=
			if ( isObj ) {=0A=
				for ( name in object ) {=0A=
					if ( callback.call( object[ name ], name, object[ name ] ) =
=3D=3D=3D false ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			} else {=0A=
				for ( var value =3D object[0];=0A=
					i < length && callback.call( value, i, value ) !=3D=3D false; value =
=3D object[++i] ) {}=0A=
			}=0A=
		}=0A=
=0A=
		return object;=0A=
	},=0A=
=0A=
	// Use native String.trim function wherever possible=0A=
	trim: trim ?=0A=
		function( text ) {=0A=
			return text =3D=3D null ?=0A=
				"" :=0A=
				trim.call( text );=0A=
		} :=0A=
=0A=
		// Otherwise use our own trimming functionality=0A=
		function( text ) {=0A=
			return text =3D=3D null ?=0A=
				"" :=0A=
				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );=0A=
		},=0A=
=0A=
	// results is for internal usage only=0A=
	makeArray: function( array, results ) {=0A=
		var ret =3D results || [];=0A=
=0A=
		if ( array !=3D null ) {=0A=
			// The window, strings (and functions) also have 'length'=0A=
			// The extra typeof function check is to prevent crashes=0A=
			// in Safari 2 (See: #3039)=0A=
			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930=0A=
			var type =3D jQuery.type(array);=0A=
=0A=
			if ( array.length =3D=3D null || type =3D=3D=3D "string" || type =
=3D=3D=3D "function" || type =3D=3D=3D "regexp" || jQuery.isWindow( =
array ) ) {=0A=
				push.call( ret, array );=0A=
			} else {=0A=
				jQuery.merge( ret, array );=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	inArray: function( elem, array ) {=0A=
		if ( array.indexOf ) {=0A=
			return array.indexOf( elem );=0A=
		}=0A=
=0A=
		for ( var i =3D 0, length =3D array.length; i < length; i++ ) {=0A=
			if ( array[ i ] =3D=3D=3D elem ) {=0A=
				return i;=0A=
			}=0A=
		}=0A=
=0A=
		return -1;=0A=
	},=0A=
=0A=
	merge: function( first, second ) {=0A=
		var i =3D first.length,=0A=
			j =3D 0;=0A=
=0A=
		if ( typeof second.length =3D=3D=3D "number" ) {=0A=
			for ( var l =3D second.length; j < l; j++ ) {=0A=
				first[ i++ ] =3D second[ j ];=0A=
			}=0A=
		=0A=
		} else {=0A=
			while ( second[j] !=3D=3D undefined ) {=0A=
				first[ i++ ] =3D second[ j++ ];=0A=
			}=0A=
		}=0A=
=0A=
		first.length =3D i;=0A=
=0A=
		return first;=0A=
	},=0A=
=0A=
	grep: function( elems, callback, inv ) {=0A=
		var ret =3D [], retVal;=0A=
		inv =3D !!inv;=0A=
=0A=
		// Go through the array, only saving the items=0A=
		// that pass the validator function=0A=
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {=0A=
			retVal =3D !!callback( elems[ i ], i );=0A=
			if ( inv !=3D=3D retVal ) {=0A=
				ret.push( elems[ i ] );=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	// arg is for internal usage only=0A=
	map: function( elems, callback, arg ) {=0A=
		var ret =3D [], value;=0A=
=0A=
		// Go through the array, translating each of the items to their=0A=
		// new value (or values).=0A=
		for ( var i =3D 0, length =3D elems.length; i < length; i++ ) {=0A=
			value =3D callback( elems[ i ], i, arg );=0A=
=0A=
			if ( value !=3D null ) {=0A=
				ret[ ret.length ] =3D value;=0A=
			}=0A=
		}=0A=
=0A=
		return ret.concat.apply( [], ret );=0A=
	},=0A=
=0A=
	// A global GUID counter for objects=0A=
	guid: 1,=0A=
=0A=
	proxy: function( fn, proxy, thisObject ) {=0A=
		if ( arguments.length =3D=3D=3D 2 ) {=0A=
			if ( typeof proxy =3D=3D=3D "string" ) {=0A=
				thisObject =3D fn;=0A=
				fn =3D thisObject[ proxy ];=0A=
				proxy =3D undefined;=0A=
=0A=
			} else if ( proxy && !jQuery.isFunction( proxy ) ) {=0A=
				thisObject =3D proxy;=0A=
				proxy =3D undefined;=0A=
			}=0A=
		}=0A=
=0A=
		if ( !proxy && fn ) {=0A=
			proxy =3D function() {=0A=
				return fn.apply( thisObject || this, arguments );=0A=
			};=0A=
		}=0A=
=0A=
		// Set the guid of unique handler to the same of original handler, so =
it can be removed=0A=
		if ( fn ) {=0A=
			proxy.guid =3D fn.guid =3D fn.guid || proxy.guid || jQuery.guid++;=0A=
		}=0A=
=0A=
		// So proxy can be declared as an argument=0A=
		return proxy;=0A=
	},=0A=
=0A=
	// Mutifunctional method to get and set values to a collection=0A=
	// The value/s can be optionally by executed if its a function=0A=
	access: function( elems, key, value, exec, fn, pass ) {=0A=
		var length =3D elems.length;=0A=
	=0A=
		// Setting many attributes=0A=
		if ( typeof key =3D=3D=3D "object" ) {=0A=
			for ( var k in key ) {=0A=
				jQuery.access( elems, k, key[k], exec, fn, value );=0A=
			}=0A=
			return elems;=0A=
		}=0A=
	=0A=
		// Setting one attribute=0A=
		if ( value !=3D=3D undefined ) {=0A=
			// Optionally, function values get executed if exec is true=0A=
			exec =3D !pass && exec && jQuery.isFunction(value);=0A=
		=0A=
			for ( var i =3D 0; i < length; i++ ) {=0A=
				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key =
) ) : value, pass );=0A=
			}=0A=
		=0A=
			return elems;=0A=
		}=0A=
	=0A=
		// Getting an attribute=0A=
		return length ? fn( elems[0], key ) : undefined;=0A=
	},=0A=
=0A=
	now: function() {=0A=
		return (new Date()).getTime();=0A=
	},=0A=
=0A=
	// Use of jQuery.browser is frowned upon.=0A=
	// More details: http://docs.jquery.com/Utilities/jQuery.browser=0A=
	uaMatch: function( ua ) {=0A=
		ua =3D ua.toLowerCase();=0A=
=0A=
		var match =3D rwebkit.exec( ua ) ||=0A=
			ropera.exec( ua ) ||=0A=
			rmsie.exec( ua ) ||=0A=
			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||=0A=
			[];=0A=
=0A=
		return { browser: match[1] || "", version: match[2] || "0" };=0A=
	},=0A=
=0A=
	browser: {}=0A=
});=0A=
=0A=
// Populate the class2type map=0A=
jQuery.each("Boolean Number String Function Array Date RegExp =
Object".split(" "), function(i, name) {=0A=
	class2type[ "[object " + name + "]" ] =3D name.toLowerCase();=0A=
});=0A=
=0A=
browserMatch =3D jQuery.uaMatch( userAgent );=0A=
if ( browserMatch.browser ) {=0A=
	jQuery.browser[ browserMatch.browser ] =3D true;=0A=
	jQuery.browser.version =3D browserMatch.version;=0A=
}=0A=
=0A=
// Deprecated, use jQuery.browser.webkit instead=0A=
if ( jQuery.browser.webkit ) {=0A=
	jQuery.browser.safari =3D true;=0A=
}=0A=
=0A=
if ( indexOf ) {=0A=
	jQuery.inArray =3D function( elem, array ) {=0A=
		return indexOf.call( array, elem );=0A=
	};=0A=
}=0A=
=0A=
// Verify that \s matches non-breaking spaces=0A=
// (IE fails on this test)=0A=
if ( !rwhite.test( "\xA0" ) ) {=0A=
	trimLeft =3D /^[\s\xA0]+/;=0A=
	trimRight =3D /[\s\xA0]+$/;=0A=
}=0A=
=0A=
// All jQuery objects should point back to these=0A=
rootjQuery =3D jQuery(document);=0A=
=0A=
// Cleanup functions for the document ready method=0A=
if ( document.addEventListener ) {=0A=
	DOMContentLoaded =3D function() {=0A=
		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, =
false );=0A=
		jQuery.ready();=0A=
	};=0A=
=0A=
} else if ( document.attachEvent ) {=0A=
	DOMContentLoaded =3D function() {=0A=
		// Make sure body exists, at least, in case IE gets a little =
overzealous (ticket #5443).=0A=
		if ( document.readyState =3D=3D=3D "complete" ) {=0A=
			document.detachEvent( "onreadystatechange", DOMContentLoaded );=0A=
			jQuery.ready();=0A=
		}=0A=
	};=0A=
}=0A=
=0A=
// The DOM ready check for Internet Explorer=0A=
function doScrollCheck() {=0A=
	if ( jQuery.isReady ) {=0A=
		return;=0A=
	}=0A=
=0A=
	try {=0A=
		// If IE is used, use the trick by Diego Perini=0A=
		// http://javascript.nwbox.com/IEContentLoaded/=0A=
		document.documentElement.doScroll("left");=0A=
	} catch(e) {=0A=
		setTimeout( doScrollCheck, 1 );=0A=
		return;=0A=
	}=0A=
=0A=
	// and execute any waiting functions=0A=
	jQuery.ready();=0A=
}=0A=
=0A=
// Expose jQuery to the global object=0A=
return (window.jQuery =3D window.$ =3D jQuery);=0A=
=0A=
})();=0A=
=0A=
=0A=
(function() {=0A=
=0A=
	jQuery.support =3D {};=0A=
=0A=
	var root =3D document.documentElement,=0A=
		script =3D document.createElement("script"),=0A=
		div =3D document.createElement("div"),=0A=
		id =3D "script" + jQuery.now();=0A=
=0A=
	div.style.display =3D "none";=0A=
	div.innerHTML =3D "   <link/><table></table><a href=3D'/a' =
style=3D'color:red;float:left;opacity:.55;'>a</a><input =
type=3D'checkbox'/>";=0A=
=0A=
	var all =3D div.getElementsByTagName("*"),=0A=
		a =3D div.getElementsByTagName("a")[0],=0A=
		select =3D document.createElement("select"),=0A=
		opt =3D select.appendChild( document.createElement("option") );=0A=
=0A=
	// Can't get basic test support=0A=
	if ( !all || !all.length || !a ) {=0A=
		return;=0A=
	}=0A=
=0A=
	jQuery.support =3D {=0A=
		// IE strips leading whitespace when .innerHTML is used=0A=
		leadingWhitespace: div.firstChild.nodeType =3D=3D=3D 3,=0A=
=0A=
		// Make sure that tbody elements aren't automatically inserted=0A=
		// IE will insert them into empty tables=0A=
		tbody: !div.getElementsByTagName("tbody").length,=0A=
=0A=
		// Make sure that link elements get serialized correctly by innerHTML=0A=
		// This requires a wrapper element in IE=0A=
		htmlSerialize: !!div.getElementsByTagName("link").length,=0A=
=0A=
		// Get the style information from getAttribute=0A=
		// (IE uses .cssText insted)=0A=
		style: /red/.test( a.getAttribute("style") ),=0A=
=0A=
		// Make sure that URLs aren't manipulated=0A=
		// (IE normalizes it by default)=0A=
		hrefNormalized: a.getAttribute("href") =3D=3D=3D "/a",=0A=
=0A=
		// Make sure that element opacity exists=0A=
		// (IE uses filter instead)=0A=
		// Use a regex to work around a WebKit issue. See #5145=0A=
		opacity: /^0.55$/.test( a.style.opacity ),=0A=
=0A=
		// Verify style float existence=0A=
		// (IE uses styleFloat instead of cssFloat)=0A=
		cssFloat: !!a.style.cssFloat,=0A=
=0A=
		// Make sure that if no value is specified for a checkbox=0A=
		// that it defaults to "on".=0A=
		// (WebKit defaults to "" instead)=0A=
		checkOn: div.getElementsByTagName("input")[0].value =3D=3D=3D "on",=0A=
=0A=
		// Make sure that a selected-by-default option has a working selected =
property.=0A=
		// (WebKit defaults to false instead of true, IE too, if it's in an =
optgroup)=0A=
		optSelected: opt.selected,=0A=
=0A=
		// Will be defined later=0A=
		deleteExpando: true,=0A=
		optDisabled: false,=0A=
		checkClone: false,=0A=
		scriptEval: false,=0A=
		noCloneEvent: true,=0A=
		boxModel: null,=0A=
		inlineBlockNeedsLayout: false,=0A=
		shrinkWrapBlocks: false,=0A=
		reliableHiddenOffsets: true=0A=
	};=0A=
=0A=
	// Make sure that the options inside disabled selects aren't marked as =
disabled=0A=
	// (WebKit marks them as diabled)=0A=
	select.disabled =3D true;=0A=
	jQuery.support.optDisabled =3D !opt.disabled;=0A=
=0A=
	script.type =3D "text/javascript";=0A=
	try {=0A=
		script.appendChild( document.createTextNode( "window." + id + "=3D1;" =
) );=0A=
	} catch(e) {}=0A=
=0A=
	root.insertBefore( script, root.firstChild );=0A=
=0A=
	// Make sure that the execution of code works by injecting a script=0A=
	// tag with appendChild/createTextNode=0A=
	// (IE doesn't support this, fails, and uses .text instead)=0A=
	if ( window[ id ] ) {=0A=
		jQuery.support.scriptEval =3D true;=0A=
		delete window[ id ];=0A=
	}=0A=
=0A=
	// Test to see if it's possible to delete an expando from an element=0A=
	// Fails in Internet Explorer=0A=
	try {=0A=
		delete script.test;=0A=
=0A=
	} catch(e) {=0A=
		jQuery.support.deleteExpando =3D false;=0A=
	}=0A=
=0A=
	root.removeChild( script );=0A=
=0A=
	if ( div.attachEvent && div.fireEvent ) {=0A=
		div.attachEvent("onclick", function click() {=0A=
			// Cloning a node shouldn't copy over any=0A=
			// bound event handlers (IE does this)=0A=
			jQuery.support.noCloneEvent =3D false;=0A=
			div.detachEvent("onclick", click);=0A=
		});=0A=
		div.cloneNode(true).fireEvent("onclick");=0A=
	}=0A=
=0A=
	div =3D document.createElement("div");=0A=
	div.innerHTML =3D "<input type=3D'radio' name=3D'radiotest' =
checked=3D'checked'/>";=0A=
=0A=
	var fragment =3D document.createDocumentFragment();=0A=
	fragment.appendChild( div.firstChild );=0A=
=0A=
	// WebKit doesn't clone checked state correctly in fragments=0A=
	jQuery.support.checkClone =3D =
fragment.cloneNode(true).cloneNode(true).lastChild.checked;=0A=
=0A=
	// Figure out if the W3C box model works as expected=0A=
	// document.body must exist before we can do this=0A=
	jQuery(function() {=0A=
		var div =3D document.createElement("div");=0A=
		div.style.width =3D div.style.paddingLeft =3D "1px";=0A=
=0A=
		document.body.appendChild( div );=0A=
		jQuery.boxModel =3D jQuery.support.boxModel =3D div.offsetWidth =
=3D=3D=3D 2;=0A=
=0A=
		if ( "zoom" in div.style ) {=0A=
			// Check if natively block-level elements act like inline-block=0A=
			// elements when setting their display to 'inline' and giving=0A=
			// them layout=0A=
			// (IE < 8 does this)=0A=
			div.style.display =3D "inline";=0A=
			div.style.zoom =3D 1;=0A=
			jQuery.support.inlineBlockNeedsLayout =3D div.offsetWidth =3D=3D=3D 2;=0A=
=0A=
			// Check if elements with layout shrink-wrap their children=0A=
			// (IE 6 does this)=0A=
			div.style.display =3D "";=0A=
			div.innerHTML =3D "<div style=3D'width:4px;'></div>";=0A=
			jQuery.support.shrinkWrapBlocks =3D div.offsetWidth !=3D=3D 2;=0A=
		}=0A=
=0A=
		div.innerHTML =3D "<table><tr><td =
style=3D'padding:0;display:none'></td><td>t</td></tr></table>";=0A=
		var tds =3D div.getElementsByTagName("td");=0A=
=0A=
		// Check if table cells still have offsetWidth/Height when they are set=0A=
		// to display:none and there are still other visible table cells in a=0A=
		// table row; if so, offsetWidth/Height are not reliable for use when=0A=
		// determining if an element has been hidden directly using=0A=
		// display:none (it is still safe to use offsets if a parent element is=0A=
		// hidden; don safety goggles and see bug #4512 for more information).=0A=
		// (only IE 8 fails this test)=0A=
		jQuery.support.reliableHiddenOffsets =3D tds[0].offsetHeight =3D=3D=3D =
0;=0A=
=0A=
		tds[0].style.display =3D "";=0A=
		tds[1].style.display =3D "none";=0A=
=0A=
		// Check if empty table cells still have offsetWidth/Height=0A=
		// (IE < 8 fail this test)=0A=
		jQuery.support.reliableHiddenOffsets =3D =
jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight =3D=3D=3D 0;=0A=
		div.innerHTML =3D "";=0A=
=0A=
		document.body.removeChild( div ).style.display =3D "none";=0A=
		div =3D tds =3D null;=0A=
	});=0A=
=0A=
	// Technique from Juriy Zaytsev=0A=
	// =
http://thinkweb2.com/projects/prototype/detecting-event-support-without-b=
rowser-sniffing/=0A=
	var eventSupported =3D function( eventName ) {=0A=
		var el =3D document.createElement("div");=0A=
		eventName =3D "on" + eventName;=0A=
=0A=
		var isSupported =3D (eventName in el);=0A=
		if ( !isSupported ) {=0A=
			el.setAttribute(eventName, "return;");=0A=
			isSupported =3D typeof el[eventName] =3D=3D=3D "function";=0A=
		}=0A=
		el =3D null;=0A=
=0A=
		return isSupported;=0A=
	};=0A=
=0A=
	jQuery.support.submitBubbles =3D eventSupported("submit");=0A=
	jQuery.support.changeBubbles =3D eventSupported("change");=0A=
=0A=
	// release memory in IE=0A=
	root =3D script =3D div =3D all =3D a =3D null;=0A=
})();=0A=
=0A=
=0A=
=0A=
var windowData =3D {},=0A=
	rbrace =3D /^(?:\{.*\}|\[.*\])$/;=0A=
=0A=
jQuery.extend({=0A=
	cache: {},=0A=
=0A=
	// Please use with caution=0A=
	uuid: 0,=0A=
=0A=
	// Unique for each copy of jQuery on the page	=0A=
	expando: "jQuery" + jQuery.now(),=0A=
=0A=
	// The following elements throw uncatchable exceptions if you=0A=
	// attempt to add expando properties to them.=0A=
	noData: {=0A=
		"embed": true,=0A=
		// Ban all objects except for Flash (which handle expandos)=0A=
		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",=0A=
		"applet": true=0A=
	},=0A=
=0A=
	data: function( elem, name, data ) {=0A=
		if ( !jQuery.acceptData( elem ) ) {=0A=
			return;=0A=
		}=0A=
=0A=
		elem =3D elem =3D=3D window ?=0A=
			windowData :=0A=
			elem;=0A=
=0A=
		var isNode =3D elem.nodeType,=0A=
			id =3D isNode ? elem[ jQuery.expando ] : null,=0A=
			cache =3D jQuery.cache, thisCache;=0A=
=0A=
		if ( isNode && !id && typeof name =3D=3D=3D "string" && data =3D=3D=3D =
undefined ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// Get the data from the object directly=0A=
		if ( !isNode ) {=0A=
			cache =3D elem;=0A=
=0A=
		// Compute a unique ID for the element=0A=
		} else if ( !id ) {=0A=
			elem[ jQuery.expando ] =3D id =3D ++jQuery.uuid;=0A=
		}=0A=
=0A=
		// Avoid generating a new cache unless none exists and we=0A=
		// want to manipulate it.=0A=
		if ( typeof name =3D=3D=3D "object" ) {=0A=
			if ( isNode ) {=0A=
				cache[ id ] =3D jQuery.extend(cache[ id ], name);=0A=
=0A=
			} else {=0A=
				jQuery.extend( cache, name );=0A=
			}=0A=
=0A=
		} else if ( isNode && !cache[ id ] ) {=0A=
			cache[ id ] =3D {};=0A=
		}=0A=
=0A=
		thisCache =3D isNode ? cache[ id ] : cache;=0A=
=0A=
		// Prevent overriding the named cache with undefined values=0A=
		if ( data !=3D=3D undefined ) {=0A=
			thisCache[ name ] =3D data;=0A=
		}=0A=
=0A=
		return typeof name =3D=3D=3D "string" ? thisCache[ name ] : thisCache;=0A=
	},=0A=
=0A=
	removeData: function( elem, name ) {=0A=
		if ( !jQuery.acceptData( elem ) ) {=0A=
			return;=0A=
		}=0A=
=0A=
		elem =3D elem =3D=3D window ?=0A=
			windowData :=0A=
			elem;=0A=
=0A=
		var isNode =3D elem.nodeType,=0A=
			id =3D isNode ? elem[ jQuery.expando ] : elem,=0A=
			cache =3D jQuery.cache,=0A=
			thisCache =3D isNode ? cache[ id ] : id;=0A=
=0A=
		// If we want to remove a specific section of the element's data=0A=
		if ( name ) {=0A=
			if ( thisCache ) {=0A=
				// Remove the section of cache data=0A=
				delete thisCache[ name ];=0A=
=0A=
				// If we've removed all the data, remove the element's cache=0A=
				if ( isNode && jQuery.isEmptyObject(thisCache) ) {=0A=
					jQuery.removeData( elem );=0A=
				}=0A=
			}=0A=
=0A=
		// Otherwise, we want to remove all of the element's data=0A=
		} else {=0A=
			if ( isNode && jQuery.support.deleteExpando ) {=0A=
				delete elem[ jQuery.expando ];=0A=
=0A=
			} else if ( elem.removeAttribute ) {=0A=
				elem.removeAttribute( jQuery.expando );=0A=
=0A=
			// Completely remove the data cache=0A=
			} else if ( isNode ) {=0A=
				delete cache[ id ];=0A=
=0A=
			// Remove all fields from the object=0A=
			} else {=0A=
				for ( var n in elem ) {=0A=
					delete elem[ n ];=0A=
				}=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	// A method for determining if a DOM node can handle the data expando=0A=
	acceptData: function( elem ) {=0A=
		if ( elem.nodeName ) {=0A=
			var match =3D jQuery.noData[ elem.nodeName.toLowerCase() ];=0A=
=0A=
			if ( match ) {=0A=
				return !(match =3D=3D=3D true || elem.getAttribute("classid") =
!=3D=3D match);=0A=
			}=0A=
		}=0A=
=0A=
		return true;=0A=
	}=0A=
});=0A=
=0A=
jQuery.fn.extend({=0A=
	data: function( key, value ) {=0A=
		var data =3D null;=0A=
=0A=
		if ( typeof key =3D=3D=3D "undefined" ) {=0A=
			if ( this.length ) {=0A=
				var attr =3D this[0].attributes, name;=0A=
				data =3D jQuery.data( this[0] );=0A=
=0A=
				for ( var i =3D 0, l =3D attr.length; i < l; i++ ) {=0A=
					name =3D attr[i].name;=0A=
=0A=
					if ( name.indexOf( "data-" ) =3D=3D=3D 0 ) {=0A=
						name =3D name.substr( 5 );=0A=
						dataAttr( this[0], name, data[ name ] );=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			return data;=0A=
=0A=
		} else if ( typeof key =3D=3D=3D "object" ) {=0A=
			return this.each(function() {=0A=
				jQuery.data( this, key );=0A=
			});=0A=
		}=0A=
=0A=
		var parts =3D key.split(".");=0A=
		parts[1] =3D parts[1] ? "." + parts[1] : "";=0A=
=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			data =3D this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);=0A=
=0A=
			// Try to fetch any internally stored data first=0A=
			if ( data =3D=3D=3D undefined && this.length ) {=0A=
				data =3D jQuery.data( this[0], key );=0A=
				data =3D dataAttr( this[0], key, data );=0A=
			}=0A=
=0A=
			return data =3D=3D=3D undefined && parts[1] ?=0A=
				this.data( parts[0] ) :=0A=
				data;=0A=
=0A=
		} else {=0A=
			return this.each(function() {=0A=
				var $this =3D jQuery( this ),=0A=
					args =3D [ parts[0], value ];=0A=
=0A=
				$this.triggerHandler( "setData" + parts[1] + "!", args );=0A=
				jQuery.data( this, key, value );=0A=
				$this.triggerHandler( "changeData" + parts[1] + "!", args );=0A=
			});=0A=
		}=0A=
	},=0A=
=0A=
	removeData: function( key ) {=0A=
		return this.each(function() {=0A=
			jQuery.removeData( this, key );=0A=
		});=0A=
	}=0A=
});=0A=
=0A=
function dataAttr( elem, key, data ) {=0A=
	// If nothing was found internally, try to fetch any=0A=
	// data from the HTML5 data-* attribute=0A=
	if ( data =3D=3D=3D undefined && elem.nodeType =3D=3D=3D 1 ) {=0A=
		data =3D elem.getAttribute( "data-" + key );=0A=
=0A=
		if ( typeof data =3D=3D=3D "string" ) {=0A=
			try {=0A=
				data =3D data =3D=3D=3D "true" ? true :=0A=
				data =3D=3D=3D "false" ? false :=0A=
				data =3D=3D=3D "null" ? null :=0A=
				!jQuery.isNaN( data ) ? parseFloat( data ) :=0A=
					rbrace.test( data ) ? jQuery.parseJSON( data ) :=0A=
					data;=0A=
			} catch( e ) {}=0A=
=0A=
			// Make sure we set the data so it isn't changed later=0A=
			jQuery.data( elem, key, data );=0A=
=0A=
		} else {=0A=
			data =3D undefined;=0A=
		}=0A=
	}=0A=
=0A=
	return data;=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
jQuery.extend({=0A=
	queue: function( elem, type, data ) {=0A=
		if ( !elem ) {=0A=
			return;=0A=
		}=0A=
=0A=
		type =3D (type || "fx") + "queue";=0A=
		var q =3D jQuery.data( elem, type );=0A=
=0A=
		// Speed up dequeue by getting out quickly if this is just a lookup=0A=
		if ( !data ) {=0A=
			return q || [];=0A=
		}=0A=
=0A=
		if ( !q || jQuery.isArray(data) ) {=0A=
			q =3D jQuery.data( elem, type, jQuery.makeArray(data) );=0A=
=0A=
		} else {=0A=
			q.push( data );=0A=
		}=0A=
=0A=
		return q;=0A=
	},=0A=
=0A=
	dequeue: function( elem, type ) {=0A=
		type =3D type || "fx";=0A=
=0A=
		var queue =3D jQuery.queue( elem, type ),=0A=
			fn =3D queue.shift();=0A=
=0A=
		// If the fx queue is dequeued, always remove the progress sentinel=0A=
		if ( fn =3D=3D=3D "inprogress" ) {=0A=
			fn =3D queue.shift();=0A=
		}=0A=
=0A=
		if ( fn ) {=0A=
			// Add a progress sentinel to prevent the fx queue from being=0A=
			// automatically dequeued=0A=
			if ( type =3D=3D=3D "fx" ) {=0A=
				queue.unshift("inprogress");=0A=
			}=0A=
=0A=
			fn.call(elem, function() {=0A=
				jQuery.dequeue(elem, type);=0A=
			});=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
jQuery.fn.extend({=0A=
	queue: function( type, data ) {=0A=
		if ( typeof type !=3D=3D "string" ) {=0A=
			data =3D type;=0A=
			type =3D "fx";=0A=
		}=0A=
=0A=
		if ( data =3D=3D=3D undefined ) {=0A=
			return jQuery.queue( this[0], type );=0A=
		}=0A=
		return this.each(function( i ) {=0A=
			var queue =3D jQuery.queue( this, type, data );=0A=
=0A=
			if ( type =3D=3D=3D "fx" && queue[0] !=3D=3D "inprogress" ) {=0A=
				jQuery.dequeue( this, type );=0A=
			}=0A=
		});=0A=
	},=0A=
	dequeue: function( type ) {=0A=
		return this.each(function() {=0A=
			jQuery.dequeue( this, type );=0A=
		});=0A=
	},=0A=
=0A=
	// Based off of the plugin by Clint Helfers, with permission.=0A=
	// http://blindsignals.com/index.php/2009/07/jquery-delay/=0A=
	delay: function( time, type ) {=0A=
		time =3D jQuery.fx ? jQuery.fx.speeds[time] || time : time;=0A=
		type =3D type || "fx";=0A=
=0A=
		return this.queue( type, function() {=0A=
			var elem =3D this;=0A=
			setTimeout(function() {=0A=
				jQuery.dequeue( elem, type );=0A=
			}, time );=0A=
		});=0A=
	},=0A=
=0A=
	clearQueue: function( type ) {=0A=
		return this.queue( type || "fx", [] );=0A=
	}=0A=
});=0A=
=0A=
=0A=
=0A=
=0A=
var rclass =3D /[\n\t]/g,=0A=
	rspaces =3D /\s+/,=0A=
	rreturn =3D /\r/g,=0A=
	rspecialurl =3D /^(?:href|src|style)$/,=0A=
	rtype =3D /^(?:button|input)$/i,=0A=
	rfocusable =3D /^(?:button|input|object|select|textarea)$/i,=0A=
	rclickable =3D /^a(?:rea)?$/i,=0A=
	rradiocheck =3D /^(?:radio|checkbox)$/i;=0A=
=0A=
jQuery.props =3D {=0A=
	"for": "htmlFor",=0A=
	"class": "className",=0A=
	readonly: "readOnly",=0A=
	maxlength: "maxLength",=0A=
	cellspacing: "cellSpacing",=0A=
	rowspan: "rowSpan",=0A=
	colspan: "colSpan",=0A=
	tabindex: "tabIndex",=0A=
	usemap: "useMap",=0A=
	frameborder: "frameBorder"=0A=
};=0A=
=0A=
jQuery.fn.extend({=0A=
	attr: function( name, value ) {=0A=
		return jQuery.access( this, name, value, true, jQuery.attr );=0A=
	},=0A=
=0A=
	removeAttr: function( name, fn ) {=0A=
		return this.each(function(){=0A=
			jQuery.attr( this, name, "" );=0A=
			if ( this.nodeType =3D=3D=3D 1 ) {=0A=
				this.removeAttribute( name );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	addClass: function( value ) {=0A=
		if ( jQuery.isFunction(value) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.addClass( value.call(this, i, self.attr("class")) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( value && typeof value =3D=3D=3D "string" ) {=0A=
			var classNames =3D (value || "").split( rspaces );=0A=
=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				var elem =3D this[i];=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
					if ( !elem.className ) {=0A=
						elem.className =3D value;=0A=
=0A=
					} else {=0A=
						var className =3D " " + elem.className + " ",=0A=
							setClass =3D elem.className;=0A=
=0A=
						for ( var c =3D 0, cl =3D classNames.length; c < cl; c++ ) {=0A=
							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {=0A=
								setClass +=3D " " + classNames[c];=0A=
							}=0A=
						}=0A=
						elem.className =3D jQuery.trim( setClass );=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	removeClass: function( value ) {=0A=
		if ( jQuery.isFunction(value) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.removeClass( value.call(this, i, self.attr("class")) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( (value && typeof value =3D=3D=3D "string") || value =3D=3D=3D =
undefined ) {=0A=
			var classNames =3D (value || "").split( rspaces );=0A=
=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				var elem =3D this[i];=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 && elem.className ) {=0A=
					if ( value ) {=0A=
						var className =3D (" " + elem.className + " ").replace(rclass, " =
");=0A=
						for ( var c =3D 0, cl =3D classNames.length; c < cl; c++ ) {=0A=
							className =3D className.replace(" " + classNames[c] + " ", " ");=0A=
						}=0A=
						elem.className =3D jQuery.trim( className );=0A=
=0A=
					} else {=0A=
						elem.className =3D "";=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	toggleClass: function( value, stateVal ) {=0A=
		var type =3D typeof value,=0A=
			isBool =3D typeof stateVal =3D=3D=3D "boolean";=0A=
=0A=
		if ( jQuery.isFunction( value ) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), =
stateVal );=0A=
			});=0A=
		}=0A=
=0A=
		return this.each(function() {=0A=
			if ( type =3D=3D=3D "string" ) {=0A=
				// toggle individual class names=0A=
				var className,=0A=
					i =3D 0,=0A=
					self =3D jQuery( this ),=0A=
					state =3D stateVal,=0A=
					classNames =3D value.split( rspaces );=0A=
=0A=
				while ( (className =3D classNames[ i++ ]) ) {=0A=
					// check each className given, space seperated list=0A=
					state =3D isBool ? state : !self.hasClass( className );=0A=
					self[ state ? "addClass" : "removeClass" ]( className );=0A=
				}=0A=
=0A=
			} else if ( type =3D=3D=3D "undefined" || type =3D=3D=3D "boolean" ) {=0A=
				if ( this.className ) {=0A=
					// store className if set=0A=
					jQuery.data( this, "__className__", this.className );=0A=
				}=0A=
=0A=
				// toggle whole className=0A=
				this.className =3D this.className || value =3D=3D=3D false ? "" : =
jQuery.data( this, "__className__" ) || "";=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	hasClass: function( selector ) {=0A=
		var className =3D " " + selector + " ";=0A=
		for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( =
className ) > -1 ) {=0A=
				return true;=0A=
			}=0A=
		}=0A=
=0A=
		return false;=0A=
	},=0A=
=0A=
	val: function( value ) {=0A=
		if ( !arguments.length ) {=0A=
			var elem =3D this[0];=0A=
=0A=
			if ( elem ) {=0A=
				if ( jQuery.nodeName( elem, "option" ) ) {=0A=
					// attributes.value is undefined in Blackberry 4.7 but=0A=
					// uses .value. See #6932=0A=
					var val =3D elem.attributes.value;=0A=
					return !val || val.specified ? elem.value : elem.text;=0A=
				}=0A=
=0A=
				// We need to handle select boxes special=0A=
				if ( jQuery.nodeName( elem, "select" ) ) {=0A=
					var index =3D elem.selectedIndex,=0A=
						values =3D [],=0A=
						options =3D elem.options,=0A=
						one =3D elem.type =3D=3D=3D "select-one";=0A=
=0A=
					// Nothing was selected=0A=
					if ( index < 0 ) {=0A=
						return null;=0A=
					}=0A=
=0A=
					// Loop through all the selected options=0A=
					for ( var i =3D one ? index : 0, max =3D one ? index + 1 : =
options.length; i < max; i++ ) {=0A=
						var option =3D options[ i ];=0A=
=0A=
						// Don't return options that are disabled or in a disabled optgroup=0A=
						if ( option.selected && (jQuery.support.optDisabled ? =
!option.disabled : option.getAttribute("disabled") =3D=3D=3D null) && =0A=
								(!option.parentNode.disabled || !jQuery.nodeName( =
option.parentNode, "optgroup" )) ) {=0A=
=0A=
							// Get the specific value for the option=0A=
							value =3D jQuery(option).val();=0A=
=0A=
							// We don't need an array for one selects=0A=
							if ( one ) {=0A=
								return value;=0A=
							}=0A=
=0A=
							// Multi-Selects return an array=0A=
							values.push( value );=0A=
						}=0A=
					}=0A=
=0A=
					return values;=0A=
				}=0A=
=0A=
				// Handle the case where in Webkit "" is returned instead of "on" if =
a value isn't specified=0A=
				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {=0A=
					return elem.getAttribute("value") =3D=3D=3D null ? "on" : =
elem.value;=0A=
				}=0A=
				=0A=
=0A=
				// Everything else, we just grab the value=0A=
				return (elem.value || "").replace(rreturn, "");=0A=
=0A=
			}=0A=
=0A=
			return undefined;=0A=
		}=0A=
=0A=
		var isFunction =3D jQuery.isFunction(value);=0A=
=0A=
		return this.each(function(i) {=0A=
			var self =3D jQuery(this), val =3D value;=0A=
=0A=
			if ( this.nodeType !=3D=3D 1 ) {=0A=
				return;=0A=
			}=0A=
=0A=
			if ( isFunction ) {=0A=
				val =3D value.call(this, i, self.val());=0A=
			}=0A=
=0A=
			// Treat null/undefined as ""; convert numbers to string=0A=
			if ( val =3D=3D null ) {=0A=
				val =3D "";=0A=
			} else if ( typeof val =3D=3D=3D "number" ) {=0A=
				val +=3D "";=0A=
			} else if ( jQuery.isArray(val) ) {=0A=
				val =3D jQuery.map(val, function (value) {=0A=
					return value =3D=3D null ? "" : value + "";=0A=
				});=0A=
			}=0A=
=0A=
			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {=0A=
				this.checked =3D jQuery.inArray( self.val(), val ) >=3D 0;=0A=
=0A=
			} else if ( jQuery.nodeName( this, "select" ) ) {=0A=
				var values =3D jQuery.makeArray(val);=0A=
=0A=
				jQuery( "option", this ).each(function() {=0A=
					this.selected =3D jQuery.inArray( jQuery(this).val(), values ) >=3D =
0;=0A=
				});=0A=
=0A=
				if ( !values.length ) {=0A=
					this.selectedIndex =3D -1;=0A=
				}=0A=
=0A=
			} else {=0A=
				this.value =3D val;=0A=
			}=0A=
		});=0A=
	}=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	attrFn: {=0A=
		val: true,=0A=
		css: true,=0A=
		html: true,=0A=
		text: true,=0A=
		data: true,=0A=
		width: true,=0A=
		height: true,=0A=
		offset: true=0A=
	},=0A=
		=0A=
	attr: function( elem, name, value, pass ) {=0A=
		// don't set attributes on text and comment nodes=0A=
		if ( !elem || elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) =
{=0A=
			return undefined;=0A=
		}=0A=
=0A=
		if ( pass && name in jQuery.attrFn ) {=0A=
			return jQuery(elem)[name](value);=0A=
		}=0A=
=0A=
		var notxml =3D elem.nodeType !=3D=3D 1 || !jQuery.isXMLDoc( elem ),=0A=
			// Whether we are setting (or getting)=0A=
			set =3D value !=3D=3D undefined;=0A=
=0A=
		// Try to normalize/fix the name=0A=
		name =3D notxml && jQuery.props[ name ] || name;=0A=
=0A=
		// These attributes require special treatment=0A=
		var special =3D rspecialurl.test( name );=0A=
=0A=
		// Safari mis-reports the default selected property of an option=0A=
		// Accessing the parent's selectedIndex property fixes it=0A=
		if ( name =3D=3D=3D "selected" && !jQuery.support.optSelected ) {=0A=
			var parent =3D elem.parentNode;=0A=
			if ( parent ) {=0A=
				parent.selectedIndex;=0A=
=0A=
				// Make sure that it also works with optgroups, see #5701=0A=
				if ( parent.parentNode ) {=0A=
					parent.parentNode.selectedIndex;=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		// If applicable, access the attribute via the DOM 0 way=0A=
		// 'in' checks fail in Blackberry 4.7 #6931=0A=
		if ( (name in elem || elem[ name ] !=3D=3D undefined) && notxml && =
!special ) {=0A=
			if ( set ) {=0A=
				// We can't allow the type property to be changed (since it causes =
problems in IE)=0A=
				if ( name =3D=3D=3D "type" && rtype.test( elem.nodeName ) && =
elem.parentNode ) {=0A=
					jQuery.error( "type property can't be changed" );=0A=
				}=0A=
=0A=
				if ( value =3D=3D=3D null ) {=0A=
					if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
						elem.removeAttribute( name );=0A=
					}=0A=
=0A=
				} else {=0A=
					elem[ name ] =3D value;=0A=
				}=0A=
			}=0A=
=0A=
			// browsers index elements by id/name on forms, give priority to =
attributes.=0A=
			if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) =
{=0A=
				return elem.getAttributeNode( name ).nodeValue;=0A=
			}=0A=
=0A=
			// elem.tabIndex doesn't always return the correct value when it =
hasn't been explicitly set=0A=
			// =
http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabi=
ndex-values-with-javascript/=0A=
			if ( name =3D=3D=3D "tabIndex" ) {=0A=
				var attributeNode =3D elem.getAttributeNode( "tabIndex" );=0A=
=0A=
				return attributeNode && attributeNode.specified ?=0A=
					attributeNode.value :=0A=
					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName =
) && elem.href ?=0A=
						0 :=0A=
						undefined;=0A=
			}=0A=
=0A=
			return elem[ name ];=0A=
		}=0A=
=0A=
		if ( !jQuery.support.style && notxml && name =3D=3D=3D "style" ) {=0A=
			if ( set ) {=0A=
				elem.style.cssText =3D "" + value;=0A=
			}=0A=
=0A=
			return elem.style.cssText;=0A=
		}=0A=
=0A=
		if ( set ) {=0A=
			// convert the value to a string (all browsers do this but IE) see =
#1070=0A=
			elem.setAttribute( name, "" + value );=0A=
		}=0A=
=0A=
		// Ensure that missing attributes return undefined=0A=
		// Blackberry 4.7 returns "" from getAttribute #6938=0A=
		if ( !elem.attributes[ name ] && (elem.hasAttribute && =
!elem.hasAttribute( name )) ) {=0A=
			return undefined;=0A=
		}=0A=
=0A=
		var attr =3D !jQuery.support.hrefNormalized && notxml && special ?=0A=
				// Some attributes require a special call on IE=0A=
				elem.getAttribute( name, 2 ) :=0A=
				elem.getAttribute( name );=0A=
=0A=
		// Non-existent attributes return null, we normalize to undefined=0A=
		return attr =3D=3D=3D null ? undefined : attr;=0A=
	}=0A=
});=0A=
=0A=
=0A=
=0A=
=0A=
var rnamespaces =3D /\.(.*)$/,=0A=
	rformElems =3D /^(?:textarea|input|select)$/i,=0A=
	rperiod =3D /\./g,=0A=
	rspace =3D / /g,=0A=
	rescape =3D /[^\w\s.|`]/g,=0A=
	fcleanup =3D function( nm ) {=0A=
		return nm.replace(rescape, "\\$&");=0A=
	},=0A=
	focusCounts =3D { focusin: 0, focusout: 0 };=0A=
=0A=
/*=0A=
 * A number of helper functions used for managing events.=0A=
 * Many of the ideas behind this code originated from=0A=
 * Dean Edwards' addEvent library.=0A=
 */=0A=
jQuery.event =3D {=0A=
=0A=
	// Bind an event to an element=0A=
	// Original by Dean Edwards=0A=
	add: function( elem, types, handler, data ) {=0A=
		if ( elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// For whatever reason, IE has trouble passing the window object=0A=
		// around, causing it to be cloned in the process=0A=
		if ( jQuery.isWindow( elem ) && ( elem !=3D=3D window && =
!elem.frameElement ) ) {=0A=
			elem =3D window;=0A=
		}=0A=
=0A=
		if ( handler =3D=3D=3D false ) {=0A=
			handler =3D returnFalse;=0A=
		} else if ( !handler ) {=0A=
			// Fixes bug #7229. Fix recommended by jdalton=0A=
		  return;=0A=
		}=0A=
=0A=
		var handleObjIn, handleObj;=0A=
=0A=
		if ( handler.handler ) {=0A=
			handleObjIn =3D handler;=0A=
			handler =3D handleObjIn.handler;=0A=
		}=0A=
=0A=
		// Make sure that the function being executed has a unique ID=0A=
		if ( !handler.guid ) {=0A=
			handler.guid =3D jQuery.guid++;=0A=
		}=0A=
=0A=
		// Init the element's event structure=0A=
		var elemData =3D jQuery.data( elem );=0A=
=0A=
		// If no elemData is found then we must be trying to bind to one of the=0A=
		// banned noData elements=0A=
		if ( !elemData ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// Use a key less likely to result in collisions for plain JS objects.=0A=
		// Fixes bug #7150.=0A=
		var eventKey =3D elem.nodeType ? "events" : "__events__",=0A=
			events =3D elemData[ eventKey ],=0A=
			eventHandle =3D elemData.handle;=0A=
			=0A=
		if ( typeof events =3D=3D=3D "function" ) {=0A=
			// On plain objects events is a fn that holds the the data=0A=
			// which prevents this data from being JSON serialized=0A=
			// the function does not need to be called, it just contains the data=0A=
			eventHandle =3D events.handle;=0A=
			events =3D events.events;=0A=
=0A=
		} else if ( !events ) {=0A=
			if ( !elem.nodeType ) {=0A=
				// On plain objects, create a fn that acts as the holder=0A=
				// of the values to avoid JSON serialization of event data=0A=
				elemData[ eventKey ] =3D elemData =3D function(){};=0A=
			}=0A=
=0A=
			elemData.events =3D events =3D {};=0A=
		}=0A=
=0A=
		if ( !eventHandle ) {=0A=
			elemData.handle =3D eventHandle =3D function() {=0A=
				// Handle the second event of a trigger and when=0A=
				// an event is called after a page has unloaded=0A=
				return typeof jQuery !=3D=3D "undefined" && !jQuery.event.triggered ?=0A=
					jQuery.event.handle.apply( eventHandle.elem, arguments ) :=0A=
					undefined;=0A=
			};=0A=
		}=0A=
=0A=
		// Add elem as a property of the handle function=0A=
		// This is to prevent a memory leak with non-native events in IE.=0A=
		eventHandle.elem =3D elem;=0A=
=0A=
		// Handle multiple events separated by a space=0A=
		// jQuery(...).bind("mouseover mouseout", fn);=0A=
		types =3D types.split(" ");=0A=
=0A=
		var type, i =3D 0, namespaces;=0A=
=0A=
		while ( (type =3D types[ i++ ]) ) {=0A=
			handleObj =3D handleObjIn ?=0A=
				jQuery.extend({}, handleObjIn) :=0A=
				{ handler: handler, data: data };=0A=
=0A=
			// Namespaced event handlers=0A=
			if ( type.indexOf(".") > -1 ) {=0A=
				namespaces =3D type.split(".");=0A=
				type =3D namespaces.shift();=0A=
				handleObj.namespace =3D namespaces.slice(0).sort().join(".");=0A=
=0A=
			} else {=0A=
				namespaces =3D [];=0A=
				handleObj.namespace =3D "";=0A=
			}=0A=
=0A=
			handleObj.type =3D type;=0A=
			if ( !handleObj.guid ) {=0A=
				handleObj.guid =3D handler.guid;=0A=
			}=0A=
=0A=
			// Get the current list of functions bound to this event=0A=
			var handlers =3D events[ type ],=0A=
				special =3D jQuery.event.special[ type ] || {};=0A=
=0A=
			// Init the event handler queue=0A=
			if ( !handlers ) {=0A=
				handlers =3D events[ type ] =3D [];=0A=
=0A=
				// Check for a special event handler=0A=
				// Only use addEventListener/attachEvent if the special=0A=
				// events handler returns false=0A=
				if ( !special.setup || special.setup.call( elem, data, namespaces, =
eventHandle ) =3D=3D=3D false ) {=0A=
					// Bind the global event handler to the element=0A=
					if ( elem.addEventListener ) {=0A=
						elem.addEventListener( type, eventHandle, false );=0A=
=0A=
					} else if ( elem.attachEvent ) {=0A=
						elem.attachEvent( "on" + type, eventHandle );=0A=
					}=0A=
				}=0A=
			}=0A=
			=0A=
			if ( special.add ) { =0A=
				special.add.call( elem, handleObj ); =0A=
=0A=
				if ( !handleObj.handler.guid ) {=0A=
					handleObj.handler.guid =3D handler.guid;=0A=
				}=0A=
			}=0A=
=0A=
			// Add the function to the element's handler list=0A=
			handlers.push( handleObj );=0A=
=0A=
			// Keep track of which events have been used, for global triggering=0A=
			jQuery.event.global[ type ] =3D true;=0A=
		}=0A=
=0A=
		// Nullify elem to prevent memory leaks in IE=0A=
		elem =3D null;=0A=
	},=0A=
=0A=
	global: {},=0A=
=0A=
	// Detach an event or set of events from an element=0A=
	remove: function( elem, types, handler, pos ) {=0A=
		// don't do events on text and comment nodes=0A=
		if ( elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 ) {=0A=
			return;=0A=
		}=0A=
=0A=
		if ( handler =3D=3D=3D false ) {=0A=
			handler =3D returnFalse;=0A=
		}=0A=
=0A=
		var ret, type, fn, j, i =3D 0, all, namespaces, namespace, special, =
eventType, handleObj, origType,=0A=
			eventKey =3D elem.nodeType ? "events" : "__events__",=0A=
			elemData =3D jQuery.data( elem ),=0A=
			events =3D elemData && elemData[ eventKey ];=0A=
=0A=
		if ( !elemData || !events ) {=0A=
			return;=0A=
		}=0A=
		=0A=
		if ( typeof events =3D=3D=3D "function" ) {=0A=
			elemData =3D events;=0A=
			events =3D events.events;=0A=
		}=0A=
=0A=
		// types is actually an event object here=0A=
		if ( types && types.type ) {=0A=
			handler =3D types.handler;=0A=
			types =3D types.type;=0A=
		}=0A=
=0A=
		// Unbind all events for the element=0A=
		if ( !types || typeof types =3D=3D=3D "string" && types.charAt(0) =
=3D=3D=3D "." ) {=0A=
			types =3D types || "";=0A=
=0A=
			for ( type in events ) {=0A=
				jQuery.event.remove( elem, type + types );=0A=
			}=0A=
=0A=
			return;=0A=
		}=0A=
=0A=
		// Handle multiple events separated by a space=0A=
		// jQuery(...).unbind("mouseover mouseout", fn);=0A=
		types =3D types.split(" ");=0A=
=0A=
		while ( (type =3D types[ i++ ]) ) {=0A=
			origType =3D type;=0A=
			handleObj =3D null;=0A=
			all =3D type.indexOf(".") < 0;=0A=
			namespaces =3D [];=0A=
=0A=
			if ( !all ) {=0A=
				// Namespaced event handlers=0A=
				namespaces =3D type.split(".");=0A=
				type =3D namespaces.shift();=0A=
=0A=
				namespace =3D new RegExp("(^|\\.)" + =0A=
					jQuery.map( namespaces.slice(0).sort(), fcleanup =
).join("\\.(?:.*\\.)?") + "(\\.|$)");=0A=
			}=0A=
=0A=
			eventType =3D events[ type ];=0A=
=0A=
			if ( !eventType ) {=0A=
				continue;=0A=
			}=0A=
=0A=
			if ( !handler ) {=0A=
				for ( j =3D 0; j < eventType.length; j++ ) {=0A=
					handleObj =3D eventType[ j ];=0A=
=0A=
					if ( all || namespace.test( handleObj.namespace ) ) {=0A=
						jQuery.event.remove( elem, origType, handleObj.handler, j );=0A=
						eventType.splice( j--, 1 );=0A=
					}=0A=
				}=0A=
=0A=
				continue;=0A=
			}=0A=
=0A=
			special =3D jQuery.event.special[ type ] || {};=0A=
=0A=
			for ( j =3D pos || 0; j < eventType.length; j++ ) {=0A=
				handleObj =3D eventType[ j ];=0A=
=0A=
				if ( handler.guid =3D=3D=3D handleObj.guid ) {=0A=
					// remove the given handler for the given type=0A=
					if ( all || namespace.test( handleObj.namespace ) ) {=0A=
						if ( pos =3D=3D null ) {=0A=
							eventType.splice( j--, 1 );=0A=
						}=0A=
=0A=
						if ( special.remove ) {=0A=
							special.remove.call( elem, handleObj );=0A=
						}=0A=
					}=0A=
=0A=
					if ( pos !=3D null ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			// remove generic event handler if no more handlers exist=0A=
			if ( eventType.length =3D=3D=3D 0 || pos !=3D null && =
eventType.length =3D=3D=3D 1 ) {=0A=
				if ( !special.teardown || special.teardown.call( elem, namespaces ) =
=3D=3D=3D false ) {=0A=
					jQuery.removeEvent( elem, type, elemData.handle );=0A=
				}=0A=
=0A=
				ret =3D null;=0A=
				delete events[ type ];=0A=
			}=0A=
		}=0A=
=0A=
		// Remove the expando if it's no longer used=0A=
		if ( jQuery.isEmptyObject( events ) ) {=0A=
			var handle =3D elemData.handle;=0A=
			if ( handle ) {=0A=
				handle.elem =3D null;=0A=
			}=0A=
=0A=
			delete elemData.events;=0A=
			delete elemData.handle;=0A=
=0A=
			if ( typeof elemData =3D=3D=3D "function" ) {=0A=
				jQuery.removeData( elem, eventKey );=0A=
=0A=
			} else if ( jQuery.isEmptyObject( elemData ) ) {=0A=
				jQuery.removeData( elem );=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	// bubbling is internal=0A=
	trigger: function( event, data, elem /*, bubbling */ ) {=0A=
		// Event object or event type=0A=
		var type =3D event.type || event,=0A=
			bubbling =3D arguments[3];=0A=
=0A=
		if ( !bubbling ) {=0A=
			event =3D typeof event =3D=3D=3D "object" ?=0A=
				// jQuery.Event object=0A=
				event[ jQuery.expando ] ? event :=0A=
				// Object literal=0A=
				jQuery.extend( jQuery.Event(type), event ) :=0A=
				// Just the event type (string)=0A=
				jQuery.Event(type);=0A=
=0A=
			if ( type.indexOf("!") >=3D 0 ) {=0A=
				event.type =3D type =3D type.slice(0, -1);=0A=
				event.exclusive =3D true;=0A=
			}=0A=
=0A=
			// Handle a global trigger=0A=
			if ( !elem ) {=0A=
				// Don't bubble custom events when global (to avoid too much =
overhead)=0A=
				event.stopPropagation();=0A=
=0A=
				// Only trigger if we've ever bound an event for it=0A=
				if ( jQuery.event.global[ type ] ) {=0A=
					jQuery.each( jQuery.cache, function() {=0A=
						if ( this.events && this.events[type] ) {=0A=
							jQuery.event.trigger( event, data, this.handle.elem );=0A=
						}=0A=
					});=0A=
				}=0A=
			}=0A=
=0A=
			// Handle triggering a single element=0A=
=0A=
			// don't do events on text and comment nodes=0A=
			if ( !elem || elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 =
) {=0A=
				return undefined;=0A=
			}=0A=
=0A=
			// Clean up in case it is reused=0A=
			event.result =3D undefined;=0A=
			event.target =3D elem;=0A=
=0A=
			// Clone the incoming data, if any=0A=
			data =3D jQuery.makeArray( data );=0A=
			data.unshift( event );=0A=
		}=0A=
=0A=
		event.currentTarget =3D elem;=0A=
=0A=
		// Trigger the event, it is assumed that "handle" is a function=0A=
		var handle =3D elem.nodeType ?=0A=
			jQuery.data( elem, "handle" ) :=0A=
			(jQuery.data( elem, "__events__" ) || {}).handle;=0A=
=0A=
		if ( handle ) {=0A=
			handle.apply( elem, data );=0A=
		}=0A=
=0A=
		var parent =3D elem.parentNode || elem.ownerDocument;=0A=
=0A=
		// Trigger an inline bound script=0A=
		try {=0A=
			if ( !(elem && elem.nodeName && =
jQuery.noData[elem.nodeName.toLowerCase()]) ) {=0A=
				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) =
=3D=3D=3D false ) {=0A=
					event.result =3D false;=0A=
					event.preventDefault();=0A=
				}=0A=
			}=0A=
=0A=
		// prevent IE from throwing an error for some elements with some event =
types, see #3533=0A=
		} catch (inlineError) {}=0A=
=0A=
		if ( !event.isPropagationStopped() && parent ) {=0A=
			jQuery.event.trigger( event, data, parent, true );=0A=
=0A=
		} else if ( !event.isDefaultPrevented() ) {=0A=
			var old,=0A=
				target =3D event.target,=0A=
				targetType =3D type.replace( rnamespaces, "" ),=0A=
				isClick =3D jQuery.nodeName( target, "a" ) && targetType =3D=3D=3D =
"click",=0A=
				special =3D jQuery.event.special[ targetType ] || {};=0A=
=0A=
			if ( (!special._default || special._default.call( elem, event ) =
=3D=3D=3D false) && =0A=
				!isClick && !(target && target.nodeName && =
jQuery.noData[target.nodeName.toLowerCase()]) ) {=0A=
=0A=
				try {=0A=
					if ( target[ targetType ] ) {=0A=
						// Make sure that we don't accidentally re-trigger the onFOO events=0A=
						old =3D target[ "on" + targetType ];=0A=
=0A=
						if ( old ) {=0A=
							target[ "on" + targetType ] =3D null;=0A=
						}=0A=
=0A=
						jQuery.event.triggered =3D true;=0A=
						target[ targetType ]();=0A=
					}=0A=
=0A=
				// prevent IE from throwing an error for some elements with some =
event types, see #3533=0A=
				} catch (triggerError) {}=0A=
=0A=
				if ( old ) {=0A=
					target[ "on" + targetType ] =3D old;=0A=
				}=0A=
=0A=
				jQuery.event.triggered =3D false;=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	handle: function( event ) {=0A=
		var all, handlers, namespaces, namespace_re, events,=0A=
			namespace_sort =3D [],=0A=
			args =3D jQuery.makeArray( arguments );=0A=
=0A=
		event =3D args[0] =3D jQuery.event.fix( event || window.event );=0A=
		event.currentTarget =3D this;=0A=
=0A=
		// Namespaced event handlers=0A=
		all =3D event.type.indexOf(".") < 0 && !event.exclusive;=0A=
=0A=
		if ( !all ) {=0A=
			namespaces =3D event.type.split(".");=0A=
			event.type =3D namespaces.shift();=0A=
			namespace_sort =3D namespaces.slice(0).sort();=0A=
			namespace_re =3D new RegExp("(^|\\.)" + =
namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");=0A=
		}=0A=
=0A=
		event.namespace =3D event.namespace || namespace_sort.join(".");=0A=
=0A=
		events =3D jQuery.data(this, this.nodeType ? "events" : "__events__");=0A=
=0A=
		if ( typeof events =3D=3D=3D "function" ) {=0A=
			events =3D events.events;=0A=
		}=0A=
=0A=
		handlers =3D (events || {})[ event.type ];=0A=
=0A=
		if ( events && handlers ) {=0A=
			// Clone the handlers to prevent manipulation=0A=
			handlers =3D handlers.slice(0);=0A=
=0A=
			for ( var j =3D 0, l =3D handlers.length; j < l; j++ ) {=0A=
				var handleObj =3D handlers[ j ];=0A=
=0A=
				// Filter the functions by class=0A=
				if ( all || namespace_re.test( handleObj.namespace ) ) {=0A=
					// Pass in a reference to the handler function itself=0A=
					// So that we can later remove it=0A=
					event.handler =3D handleObj.handler;=0A=
					event.data =3D handleObj.data;=0A=
					event.handleObj =3D handleObj;=0A=
	=0A=
					var ret =3D handleObj.handler.apply( this, args );=0A=
=0A=
					if ( ret !=3D=3D undefined ) {=0A=
						event.result =3D ret;=0A=
						if ( ret =3D=3D=3D false ) {=0A=
							event.preventDefault();=0A=
							event.stopPropagation();=0A=
						}=0A=
					}=0A=
=0A=
					if ( event.isImmediatePropagationStopped() ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return event.result;=0A=
	},=0A=
=0A=
	props: "altKey attrChange attrName bubbles button cancelable charCode =
clientX clientY ctrlKey currentTarget data detail eventPhase fromElement =
handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX =
pageY prevValue relatedNode relatedTarget screenX screenY shiftKey =
srcElement target toElement view wheelDelta which".split(" "),=0A=
=0A=
	fix: function( event ) {=0A=
		if ( event[ jQuery.expando ] ) {=0A=
			return event;=0A=
		}=0A=
=0A=
		// store a copy of the original event object=0A=
		// and "clone" to set read-only properties=0A=
		var originalEvent =3D event;=0A=
		event =3D jQuery.Event( originalEvent );=0A=
=0A=
		for ( var i =3D this.props.length, prop; i; ) {=0A=
			prop =3D this.props[ --i ];=0A=
			event[ prop ] =3D originalEvent[ prop ];=0A=
		}=0A=
=0A=
		// Fix target property, if necessary=0A=
		if ( !event.target ) {=0A=
			// Fixes #1925 where srcElement might not be defined either=0A=
			event.target =3D event.srcElement || document;=0A=
		}=0A=
=0A=
		// check if target is a textnode (safari)=0A=
		if ( event.target.nodeType =3D=3D=3D 3 ) {=0A=
			event.target =3D event.target.parentNode;=0A=
		}=0A=
=0A=
		// Add relatedTarget, if necessary=0A=
		if ( !event.relatedTarget && event.fromElement ) {=0A=
			event.relatedTarget =3D event.fromElement =3D=3D=3D event.target ? =
event.toElement : event.fromElement;=0A=
		}=0A=
=0A=
		// Calculate pageX/Y if missing and clientX/Y available=0A=
		if ( event.pageX =3D=3D null && event.clientX !=3D null ) {=0A=
			var doc =3D document.documentElement,=0A=
				body =3D document.body;=0A=
=0A=
			event.pageX =3D event.clientX + (doc && doc.scrollLeft || body && =
body.scrollLeft || 0) - (doc && doc.clientLeft || body && =
body.clientLeft || 0);=0A=
			event.pageY =3D event.clientY + (doc && doc.scrollTop  || body && =
body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop =
 || 0);=0A=
		}=0A=
=0A=
		// Add which for key events=0A=
		if ( event.which =3D=3D null && (event.charCode !=3D null || =
event.keyCode !=3D null) ) {=0A=
			event.which =3D event.charCode !=3D null ? event.charCode : =
event.keyCode;=0A=
		}=0A=
=0A=
		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for =
Macs)=0A=
		if ( !event.metaKey && event.ctrlKey ) {=0A=
			event.metaKey =3D event.ctrlKey;=0A=
		}=0A=
=0A=
		// Add which for click: 1 =3D=3D=3D left; 2 =3D=3D=3D middle; 3 =
=3D=3D=3D right=0A=
		// Note: button is not normalized, so don't use it=0A=
		if ( !event.which && event.button !=3D=3D undefined ) {=0A=
			event.which =3D (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( =
event.button & 4 ? 2 : 0 ) ));=0A=
		}=0A=
=0A=
		return event;=0A=
	},=0A=
=0A=
	// Deprecated, use jQuery.guid instead=0A=
	guid: 1E8,=0A=
=0A=
	// Deprecated, use jQuery.proxy instead=0A=
	proxy: jQuery.proxy,=0A=
=0A=
	special: {=0A=
		ready: {=0A=
			// Make sure the ready event is setup=0A=
			setup: jQuery.bindReady,=0A=
			teardown: jQuery.noop=0A=
		},=0A=
=0A=
		live: {=0A=
			add: function( handleObj ) {=0A=
				jQuery.event.add( this,=0A=
					liveConvert( handleObj.origType, handleObj.selector ),=0A=
					jQuery.extend({}, handleObj, {handler: liveHandler, guid: =
handleObj.handler.guid}) ); =0A=
			},=0A=
=0A=
			remove: function( handleObj ) {=0A=
				jQuery.event.remove( this, liveConvert( handleObj.origType, =
handleObj.selector ), handleObj );=0A=
			}=0A=
		},=0A=
=0A=
		beforeunload: {=0A=
			setup: function( data, namespaces, eventHandle ) {=0A=
				// We only want to do this special case on windows=0A=
				if ( jQuery.isWindow( this ) ) {=0A=
					this.onbeforeunload =3D eventHandle;=0A=
				}=0A=
			},=0A=
=0A=
			teardown: function( namespaces, eventHandle ) {=0A=
				if ( this.onbeforeunload =3D=3D=3D eventHandle ) {=0A=
					this.onbeforeunload =3D null;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
jQuery.removeEvent =3D document.removeEventListener ?=0A=
	function( elem, type, handle ) {=0A=
		if ( elem.removeEventListener ) {=0A=
			elem.removeEventListener( type, handle, false );=0A=
		}=0A=
	} : =0A=
	function( elem, type, handle ) {=0A=
		if ( elem.detachEvent ) {=0A=
			elem.detachEvent( "on" + type, handle );=0A=
		}=0A=
	};=0A=
=0A=
jQuery.Event =3D function( src ) {=0A=
	// Allow instantiation without the 'new' keyword=0A=
	if ( !this.preventDefault ) {=0A=
		return new jQuery.Event( src );=0A=
	}=0A=
=0A=
	// Event object=0A=
	if ( src && src.type ) {=0A=
		this.originalEvent =3D src;=0A=
		this.type =3D src.type;=0A=
	// Event type=0A=
	} else {=0A=
		this.type =3D src;=0A=
	}=0A=
=0A=
	// timeStamp is buggy for some events on Firefox(#3843)=0A=
	// So we won't rely on the native value=0A=
	this.timeStamp =3D jQuery.now();=0A=
=0A=
	// Mark it as fixed=0A=
	this[ jQuery.expando ] =3D true;=0A=
};=0A=
=0A=
function returnFalse() {=0A=
	return false;=0A=
}=0A=
function returnTrue() {=0A=
	return true;=0A=
}=0A=
=0A=
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript =
Language Binding=0A=
// =
http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-bind=
ing.html=0A=
jQuery.Event.prototype =3D {=0A=
	preventDefault: function() {=0A=
		this.isDefaultPrevented =3D returnTrue;=0A=
=0A=
		var e =3D this.originalEvent;=0A=
		if ( !e ) {=0A=
			return;=0A=
		}=0A=
		=0A=
		// if preventDefault exists run it on the original event=0A=
		if ( e.preventDefault ) {=0A=
			e.preventDefault();=0A=
=0A=
		// otherwise set the returnValue property of the original event to =
false (IE)=0A=
		} else {=0A=
			e.returnValue =3D false;=0A=
		}=0A=
	},=0A=
	stopPropagation: function() {=0A=
		this.isPropagationStopped =3D returnTrue;=0A=
=0A=
		var e =3D this.originalEvent;=0A=
		if ( !e ) {=0A=
			return;=0A=
		}=0A=
		// if stopPropagation exists run it on the original event=0A=
		if ( e.stopPropagation ) {=0A=
			e.stopPropagation();=0A=
		}=0A=
		// otherwise set the cancelBubble property of the original event to =
true (IE)=0A=
		e.cancelBubble =3D true;=0A=
	},=0A=
	stopImmediatePropagation: function() {=0A=
		this.isImmediatePropagationStopped =3D returnTrue;=0A=
		this.stopPropagation();=0A=
	},=0A=
	isDefaultPrevented: returnFalse,=0A=
	isPropagationStopped: returnFalse,=0A=
	isImmediatePropagationStopped: returnFalse=0A=
};=0A=
=0A=
// Checks if an event happened on an element within another element=0A=
// Used in jQuery.event.special.mouseenter and mouseleave handlers=0A=
var withinElement =3D function( event ) {=0A=
	// Check if mouse(over|out) are still within the same parent element=0A=
	var parent =3D event.relatedTarget;=0A=
=0A=
	// Firefox sometimes assigns relatedTarget a XUL element=0A=
	// which we cannot access the parentNode property of=0A=
	try {=0A=
		// Traverse up the tree=0A=
		while ( parent && parent !=3D=3D this ) {=0A=
			parent =3D parent.parentNode;=0A=
		}=0A=
=0A=
		if ( parent !=3D=3D this ) {=0A=
			// set the correct event type=0A=
			event.type =3D event.data;=0A=
=0A=
			// handle event if we actually just moused on to a non sub-element=0A=
			jQuery.event.handle.apply( this, arguments );=0A=
		}=0A=
=0A=
	// assuming we've left the element since we most likely mousedover a =
xul element=0A=
	} catch(e) { }=0A=
},=0A=
=0A=
// In case of event delegation, we only need to rename the event.type,=0A=
// liveHandler will take care of the rest.=0A=
delegate =3D function( event ) {=0A=
	event.type =3D event.data;=0A=
	jQuery.event.handle.apply( this, arguments );=0A=
};=0A=
=0A=
// Create mouseenter and mouseleave events=0A=
jQuery.each({=0A=
	mouseenter: "mouseover",=0A=
	mouseleave: "mouseout"=0A=
}, function( orig, fix ) {=0A=
	jQuery.event.special[ orig ] =3D {=0A=
		setup: function( data ) {=0A=
			jQuery.event.add( this, fix, data && data.selector ? delegate : =
withinElement, orig );=0A=
		},=0A=
		teardown: function( data ) {=0A=
			jQuery.event.remove( this, fix, data && data.selector ? delegate : =
withinElement );=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
// submit delegation=0A=
if ( !jQuery.support.submitBubbles ) {=0A=
=0A=
	jQuery.event.special.submit =3D {=0A=
		setup: function( data, namespaces ) {=0A=
			if ( this.nodeName.toLowerCase() !=3D=3D "form" ) {=0A=
				jQuery.event.add(this, "click.specialSubmit", function( e ) {=0A=
					var elem =3D e.target,=0A=
						type =3D elem.type;=0A=
=0A=
					if ( (type =3D=3D=3D "submit" || type =3D=3D=3D "image") && jQuery( =
elem ).closest("form").length ) {=0A=
						e.liveFired =3D undefined;=0A=
						return trigger( "submit", this, arguments );=0A=
					}=0A=
				});=0A=
	 =0A=
				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {=0A=
					var elem =3D e.target,=0A=
						type =3D elem.type;=0A=
=0A=
					if ( (type =3D=3D=3D "text" || type =3D=3D=3D "password") && =
jQuery( elem ).closest("form").length && e.keyCode =3D=3D=3D 13 ) {=0A=
						e.liveFired =3D undefined;=0A=
						return trigger( "submit", this, arguments );=0A=
					}=0A=
				});=0A=
=0A=
			} else {=0A=
				return false;=0A=
			}=0A=
		},=0A=
=0A=
		teardown: function( namespaces ) {=0A=
			jQuery.event.remove( this, ".specialSubmit" );=0A=
		}=0A=
	};=0A=
=0A=
}=0A=
=0A=
// change delegation, happens here so we have bind.=0A=
if ( !jQuery.support.changeBubbles ) {=0A=
=0A=
	var changeFilters,=0A=
=0A=
	getVal =3D function( elem ) {=0A=
		var type =3D elem.type, val =3D elem.value;=0A=
=0A=
		if ( type =3D=3D=3D "radio" || type =3D=3D=3D "checkbox" ) {=0A=
			val =3D elem.checked;=0A=
=0A=
		} else if ( type =3D=3D=3D "select-multiple" ) {=0A=
			val =3D elem.selectedIndex > -1 ?=0A=
				jQuery.map( elem.options, function( elem ) {=0A=
					return elem.selected;=0A=
				}).join("-") :=0A=
				"";=0A=
=0A=
		} else if ( elem.nodeName.toLowerCase() =3D=3D=3D "select" ) {=0A=
			val =3D elem.selectedIndex;=0A=
		}=0A=
=0A=
		return val;=0A=
	},=0A=
=0A=
	testChange =3D function testChange( e ) {=0A=
		var elem =3D e.target, data, val;=0A=
=0A=
		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {=0A=
			return;=0A=
		}=0A=
=0A=
		data =3D jQuery.data( elem, "_change_data" );=0A=
		val =3D getVal(elem);=0A=
=0A=
		// the current data will be also retrieved by beforeactivate=0A=
		if ( e.type !=3D=3D "focusout" || elem.type !=3D=3D "radio" ) {=0A=
			jQuery.data( elem, "_change_data", val );=0A=
		}=0A=
		=0A=
		if ( data =3D=3D=3D undefined || val =3D=3D=3D data ) {=0A=
			return;=0A=
		}=0A=
=0A=
		if ( data !=3D null || val ) {=0A=
			e.type =3D "change";=0A=
			e.liveFired =3D undefined;=0A=
			return jQuery.event.trigger( e, arguments[1], elem );=0A=
		}=0A=
	};=0A=
=0A=
	jQuery.event.special.change =3D {=0A=
		filters: {=0A=
			focusout: testChange, =0A=
=0A=
			beforedeactivate: testChange,=0A=
=0A=
			click: function( e ) {=0A=
				var elem =3D e.target, type =3D elem.type;=0A=
=0A=
				if ( type =3D=3D=3D "radio" || type =3D=3D=3D "checkbox" || =
elem.nodeName.toLowerCase() =3D=3D=3D "select" ) {=0A=
					return testChange.call( this, e );=0A=
				}=0A=
			},=0A=
=0A=
			// Change has to be called before submit=0A=
			// Keydown will be called before keypress, which is used in =
submit-event delegation=0A=
			keydown: function( e ) {=0A=
				var elem =3D e.target, type =3D elem.type;=0A=
=0A=
				if ( (e.keyCode =3D=3D=3D 13 && elem.nodeName.toLowerCase() !=3D=3D =
"textarea") ||=0A=
					(e.keyCode =3D=3D=3D 32 && (type =3D=3D=3D "checkbox" || type =
=3D=3D=3D "radio")) ||=0A=
					type =3D=3D=3D "select-multiple" ) {=0A=
					return testChange.call( this, e );=0A=
				}=0A=
			},=0A=
=0A=
			// Beforeactivate happens also before the previous element is blurred=0A=
			// with this event you can't trigger a change event, but you can store=0A=
			// information=0A=
			beforeactivate: function( e ) {=0A=
				var elem =3D e.target;=0A=
				jQuery.data( elem, "_change_data", getVal(elem) );=0A=
			}=0A=
		},=0A=
=0A=
		setup: function( data, namespaces ) {=0A=
			if ( this.type =3D=3D=3D "file" ) {=0A=
				return false;=0A=
			}=0A=
=0A=
			for ( var type in changeFilters ) {=0A=
				jQuery.event.add( this, type + ".specialChange", changeFilters[type] =
);=0A=
			}=0A=
=0A=
			return rformElems.test( this.nodeName );=0A=
		},=0A=
=0A=
		teardown: function( namespaces ) {=0A=
			jQuery.event.remove( this, ".specialChange" );=0A=
=0A=
			return rformElems.test( this.nodeName );=0A=
		}=0A=
	};=0A=
=0A=
	changeFilters =3D jQuery.event.special.change.filters;=0A=
=0A=
	// Handle when the input is .focus()'d=0A=
	changeFilters.focus =3D changeFilters.beforeactivate;=0A=
}=0A=
=0A=
function trigger( type, elem, args ) {=0A=
	args[0].type =3D type;=0A=
	return jQuery.event.handle.apply( elem, args );=0A=
}=0A=
=0A=
// Create "bubbling" focus and blur events=0A=
if ( document.addEventListener ) {=0A=
	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix =
) {=0A=
		jQuery.event.special[ fix ] =3D {=0A=
			setup: function() {=0A=
				if ( focusCounts[fix]++ =3D=3D=3D 0 ) {=0A=
					document.addEventListener( orig, handler, true );=0A=
				}=0A=
			}, =0A=
			teardown: function() { =0A=
				if ( --focusCounts[fix] =3D=3D=3D 0 ) {=0A=
					document.removeEventListener( orig, handler, true );=0A=
				}=0A=
			}=0A=
		};=0A=
=0A=
		function handler( e ) { =0A=
			e =3D jQuery.event.fix( e );=0A=
			e.type =3D fix;=0A=
			return jQuery.event.trigger( e, null, e.target );=0A=
		}=0A=
	});=0A=
}=0A=
=0A=
jQuery.each(["bind", "one"], function( i, name ) {=0A=
	jQuery.fn[ name ] =3D function( type, data, fn ) {=0A=
		// Handle object literals=0A=
		if ( typeof type =3D=3D=3D "object" ) {=0A=
			for ( var key in type ) {=0A=
				this[ name ](key, data, type[key], fn);=0A=
			}=0A=
			return this;=0A=
		}=0A=
		=0A=
		if ( jQuery.isFunction( data ) || data =3D=3D=3D false ) {=0A=
			fn =3D data;=0A=
			data =3D undefined;=0A=
		}=0A=
=0A=
		var handler =3D name =3D=3D=3D "one" ? jQuery.proxy( fn, function( =
event ) {=0A=
			jQuery( this ).unbind( event, handler );=0A=
			return fn.apply( this, arguments );=0A=
		}) : fn;=0A=
=0A=
		if ( type =3D=3D=3D "unload" && name !=3D=3D "one" ) {=0A=
			this.one( type, data, fn );=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				jQuery.event.add( this[i], type, handler, data );=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	};=0A=
});=0A=
=0A=
jQuery.fn.extend({=0A=
	unbind: function( type, fn ) {=0A=
		// Handle object literals=0A=
		if ( typeof type =3D=3D=3D "object" && !type.preventDefault ) {=0A=
			for ( var key in type ) {=0A=
				this.unbind(key, type[key]);=0A=
			}=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
				jQuery.event.remove( this[i], type, fn );=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
	=0A=
	delegate: function( selector, types, data, fn ) {=0A=
		return this.live( types, data, fn, selector );=0A=
	},=0A=
	=0A=
	undelegate: function( selector, types, fn ) {=0A=
		if ( arguments.length =3D=3D=3D 0 ) {=0A=
				return this.unbind( "live" );=0A=
		=0A=
		} else {=0A=
			return this.die( types, null, fn, selector );=0A=
		}=0A=
	},=0A=
	=0A=
	trigger: function( type, data ) {=0A=
		return this.each(function() {=0A=
			jQuery.event.trigger( type, data, this );=0A=
		});=0A=
	},=0A=
=0A=
	triggerHandler: function( type, data ) {=0A=
		if ( this[0] ) {=0A=
			var event =3D jQuery.Event( type );=0A=
			event.preventDefault();=0A=
			event.stopPropagation();=0A=
			jQuery.event.trigger( event, data, this[0] );=0A=
			return event.result;=0A=
		}=0A=
	},=0A=
=0A=
	toggle: function( fn ) {=0A=
		// Save reference to arguments for access in closure=0A=
		var args =3D arguments,=0A=
			i =3D 1;=0A=
=0A=
		// link all the functions, so any of them can unbind this click handler=0A=
		while ( i < args.length ) {=0A=
			jQuery.proxy( fn, args[ i++ ] );=0A=
		}=0A=
=0A=
		return this.click( jQuery.proxy( fn, function( event ) {=0A=
			// Figure out which function to execute=0A=
			var lastToggle =3D ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 =
) % i;=0A=
			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );=0A=
=0A=
			// Make sure that clicks stop=0A=
			event.preventDefault();=0A=
=0A=
			// and execute the function=0A=
			return args[ lastToggle ].apply( this, arguments ) || false;=0A=
		}));=0A=
	},=0A=
=0A=
	hover: function( fnOver, fnOut ) {=0A=
		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );=0A=
	}=0A=
});=0A=
=0A=
var liveMap =3D {=0A=
	focus: "focusin",=0A=
	blur: "focusout",=0A=
	mouseenter: "mouseover",=0A=
	mouseleave: "mouseout"=0A=
};=0A=
=0A=
jQuery.each(["live", "die"], function( i, name ) {=0A=
	jQuery.fn[ name ] =3D function( types, data, fn, origSelector /* =
Internal Use Only */ ) {=0A=
		var type, i =3D 0, match, namespaces, preType,=0A=
			selector =3D origSelector || this.selector,=0A=
			context =3D origSelector ? this : jQuery( this.context );=0A=
		=0A=
		if ( typeof types =3D=3D=3D "object" && !types.preventDefault ) {=0A=
			for ( var key in types ) {=0A=
				context[ name ]( key, data, types[key], selector );=0A=
			}=0A=
			=0A=
			return this;=0A=
		}=0A=
=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			fn =3D data;=0A=
			data =3D undefined;=0A=
		}=0A=
=0A=
		types =3D (types || "").split(" ");=0A=
=0A=
		while ( (type =3D types[ i++ ]) !=3D null ) {=0A=
			match =3D rnamespaces.exec( type );=0A=
			namespaces =3D "";=0A=
=0A=
			if ( match )  {=0A=
				namespaces =3D match[0];=0A=
				type =3D type.replace( rnamespaces, "" );=0A=
			}=0A=
=0A=
			if ( type =3D=3D=3D "hover" ) {=0A=
				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );=0A=
				continue;=0A=
			}=0A=
=0A=
			preType =3D type;=0A=
=0A=
			if ( type =3D=3D=3D "focus" || type =3D=3D=3D "blur" ) {=0A=
				types.push( liveMap[ type ] + namespaces );=0A=
				type =3D type + namespaces;=0A=
=0A=
			} else {=0A=
				type =3D (liveMap[ type ] || type) + namespaces;=0A=
			}=0A=
=0A=
			if ( name =3D=3D=3D "live" ) {=0A=
				// bind live handler=0A=
				for ( var j =3D 0, l =3D context.length; j < l; j++ ) {=0A=
					jQuery.event.add( context[j], "live." + liveConvert( type, selector =
),=0A=
						{ data: data, selector: selector, handler: fn, origType: type, =
origHandler: fn, preType: preType } );=0A=
				}=0A=
=0A=
			} else {=0A=
				// unbind live handler=0A=
				context.unbind( "live." + liveConvert( type, selector ), fn );=0A=
			}=0A=
		}=0A=
		=0A=
		return this;=0A=
	};=0A=
});=0A=
=0A=
function liveHandler( event ) {=0A=
	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, =
close, namespace, ret,=0A=
		elems =3D [],=0A=
		selectors =3D [],=0A=
		events =3D jQuery.data( this, this.nodeType ? "events" : "__events__" =
);=0A=
=0A=
	if ( typeof events =3D=3D=3D "function" ) {=0A=
		events =3D events.events;=0A=
	}=0A=
=0A=
	// Make sure we avoid non-left-click bubbling in Firefox (#3861)=0A=
	if ( event.liveFired =3D=3D=3D this || !events || !events.live || =
event.button && event.type =3D=3D=3D "click" ) {=0A=
		return;=0A=
	}=0A=
	=0A=
	if ( event.namespace ) {=0A=
		namespace =3D new RegExp("(^|\\.)" + =
event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");=0A=
	}=0A=
=0A=
	event.liveFired =3D this;=0A=
=0A=
	var live =3D events.live.slice(0);=0A=
=0A=
	for ( j =3D 0; j < live.length; j++ ) {=0A=
		handleObj =3D live[j];=0A=
=0A=
		if ( handleObj.origType.replace( rnamespaces, "" ) =3D=3D=3D =
event.type ) {=0A=
			selectors.push( handleObj.selector );=0A=
=0A=
		} else {=0A=
			live.splice( j--, 1 );=0A=
		}=0A=
	}=0A=
=0A=
	match =3D jQuery( event.target ).closest( selectors, =
event.currentTarget );=0A=
=0A=
	for ( i =3D 0, l =3D match.length; i < l; i++ ) {=0A=
		close =3D match[i];=0A=
=0A=
		for ( j =3D 0; j < live.length; j++ ) {=0A=
			handleObj =3D live[j];=0A=
=0A=
			if ( close.selector =3D=3D=3D handleObj.selector && (!namespace || =
namespace.test( handleObj.namespace )) ) {=0A=
				elem =3D close.elem;=0A=
				related =3D null;=0A=
=0A=
				// Those two events require additional checking=0A=
				if ( handleObj.preType =3D=3D=3D "mouseenter" || handleObj.preType =
=3D=3D=3D "mouseleave" ) {=0A=
					event.type =3D handleObj.preType;=0A=
					related =3D jQuery( event.relatedTarget ).closest( =
handleObj.selector )[0];=0A=
				}=0A=
=0A=
				if ( !related || related !=3D=3D elem ) {=0A=
					elems.push({ elem: elem, handleObj: handleObj, level: close.level =
});=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	for ( i =3D 0, l =3D elems.length; i < l; i++ ) {=0A=
		match =3D elems[i];=0A=
=0A=
		if ( maxLevel && match.level > maxLevel ) {=0A=
			break;=0A=
		}=0A=
=0A=
		event.currentTarget =3D match.elem;=0A=
		event.data =3D match.handleObj.data;=0A=
		event.handleObj =3D match.handleObj;=0A=
=0A=
		ret =3D match.handleObj.origHandler.apply( match.elem, arguments );=0A=
=0A=
		if ( ret =3D=3D=3D false || event.isPropagationStopped() ) {=0A=
			maxLevel =3D match.level;=0A=
=0A=
			if ( ret =3D=3D=3D false ) {=0A=
				stop =3D false;=0A=
			}=0A=
			if ( event.isImmediatePropagationStopped() ) {=0A=
				break;=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	return stop;=0A=
}=0A=
=0A=
function liveConvert( type, selector ) {=0A=
	return (type && type !=3D=3D "*" ? type + "." : "") + =
selector.replace(rperiod, "`").replace(rspace, "&");=0A=
}=0A=
=0A=
jQuery.each( ("blur focus focusin focusout load resize scroll unload =
click dblclick " +=0A=
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " =
+=0A=
	"change select submit keydown keypress keyup error").split(" "), =
function( i, name ) {=0A=
=0A=
	// Handle event binding=0A=
	jQuery.fn[ name ] =3D function( data, fn ) {=0A=
		if ( fn =3D=3D null ) {=0A=
			fn =3D data;=0A=
			data =3D null;=0A=
		}=0A=
=0A=
		return arguments.length > 0 ?=0A=
			this.bind( name, data, fn ) :=0A=
			this.trigger( name );=0A=
	};=0A=
=0A=
	if ( jQuery.attrFn ) {=0A=
		jQuery.attrFn[ name ] =3D true;=0A=
	}=0A=
});=0A=
=0A=
// Prevent memory leaks in IE=0A=
// Window isn't included so as not to unbind existing unload events=0A=
// More info:=0A=
//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/=0A=
if ( window.attachEvent && !window.addEventListener ) {=0A=
	jQuery(window).bind("unload", function() {=0A=
		for ( var id in jQuery.cache ) {=0A=
			if ( jQuery.cache[ id ].handle ) {=0A=
				// Try/Catch is to handle iframes being unloaded, see #4280=0A=
				try {=0A=
					jQuery.event.remove( jQuery.cache[ id ].handle.elem );=0A=
				} catch(e) {}=0A=
			}=0A=
		}=0A=
	});=0A=
}=0A=
=0A=
=0A=
/*!=0A=
 * Sizzle CSS Selector Engine - v1.0=0A=
 *  Copyright 2009, The Dojo Foundation=0A=
 *  Released under the MIT, BSD, and GPL Licenses.=0A=
 *  More information: http://sizzlejs.com/=0A=
 */=0A=
(function(){=0A=
=0A=
var chunker =3D =
/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"=
]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,=0A=
	done =3D 0,=0A=
	toString =3D Object.prototype.toString,=0A=
	hasDuplicate =3D false,=0A=
	baseHasDuplicate =3D true;=0A=
=0A=
// Here we check if the JavaScript engine is using some sort of=0A=
// optimization where it does not always call our comparision=0A=
// function. If that is the case, discard the hasDuplicate value.=0A=
//   Thus far that includes Google Chrome.=0A=
[0, 0].sort(function() {=0A=
	baseHasDuplicate =3D false;=0A=
	return 0;=0A=
});=0A=
=0A=
var Sizzle =3D function( selector, context, results, seed ) {=0A=
	results =3D results || [];=0A=
	context =3D context || document;=0A=
=0A=
	var origContext =3D context;=0A=
=0A=
	if ( context.nodeType !=3D=3D 1 && context.nodeType !=3D=3D 9 ) {=0A=
		return [];=0A=
	}=0A=
	=0A=
	if ( !selector || typeof selector !=3D=3D "string" ) {=0A=
		return results;=0A=
	}=0A=
=0A=
	var m, set, checkSet, extra, ret, cur, pop, i,=0A=
		prune =3D true,=0A=
		contextXML =3D Sizzle.isXML( context ),=0A=
		parts =3D [],=0A=
		soFar =3D selector;=0A=
	=0A=
	// Reset the position of the chunker regexp (start from head)=0A=
	do {=0A=
		chunker.exec( "" );=0A=
		m =3D chunker.exec( soFar );=0A=
=0A=
		if ( m ) {=0A=
			soFar =3D m[3];=0A=
		=0A=
			parts.push( m[1] );=0A=
		=0A=
			if ( m[2] ) {=0A=
				extra =3D m[3];=0A=
				break;=0A=
			}=0A=
		}=0A=
	} while ( m );=0A=
=0A=
	if ( parts.length > 1 && origPOS.exec( selector ) ) {=0A=
=0A=
		if ( parts.length =3D=3D=3D 2 && Expr.relative[ parts[0] ] ) {=0A=
			set =3D posProcess( parts[0] + parts[1], context );=0A=
=0A=
		} else {=0A=
			set =3D Expr.relative[ parts[0] ] ?=0A=
				[ context ] :=0A=
				Sizzle( parts.shift(), context );=0A=
=0A=
			while ( parts.length ) {=0A=
				selector =3D parts.shift();=0A=
=0A=
				if ( Expr.relative[ selector ] ) {=0A=
					selector +=3D parts.shift();=0A=
				}=0A=
				=0A=
				set =3D posProcess( selector, set );=0A=
			}=0A=
		}=0A=
=0A=
	} else {=0A=
		// Take a shortcut and set the context if the root selector is an ID=0A=
		// (but not if it'll be faster if the inner selector is an ID)=0A=
		if ( !seed && parts.length > 1 && context.nodeType =3D=3D=3D 9 && =
!contextXML &&=0A=
				Expr.match.ID.test(parts[0]) && =
!Expr.match.ID.test(parts[parts.length - 1]) ) {=0A=
=0A=
			ret =3D Sizzle.find( parts.shift(), context, contextXML );=0A=
			context =3D ret.expr ?=0A=
				Sizzle.filter( ret.expr, ret.set )[0] :=0A=
				ret.set[0];=0A=
		}=0A=
=0A=
		if ( context ) {=0A=
			ret =3D seed ?=0A=
				{ expr: parts.pop(), set: makeArray(seed) } :=0A=
				Sizzle.find( parts.pop(), parts.length =3D=3D=3D 1 && (parts[0] =
=3D=3D=3D "~" || parts[0] =3D=3D=3D "+") && context.parentNode ? =
context.parentNode : context, contextXML );=0A=
=0A=
			set =3D ret.expr ?=0A=
				Sizzle.filter( ret.expr, ret.set ) :=0A=
				ret.set;=0A=
=0A=
			if ( parts.length > 0 ) {=0A=
				checkSet =3D makeArray( set );=0A=
=0A=
			} else {=0A=
				prune =3D false;=0A=
			}=0A=
=0A=
			while ( parts.length ) {=0A=
				cur =3D parts.pop();=0A=
				pop =3D cur;=0A=
=0A=
				if ( !Expr.relative[ cur ] ) {=0A=
					cur =3D "";=0A=
				} else {=0A=
					pop =3D parts.pop();=0A=
				}=0A=
=0A=
				if ( pop =3D=3D null ) {=0A=
					pop =3D context;=0A=
				}=0A=
=0A=
				Expr.relative[ cur ]( checkSet, pop, contextXML );=0A=
			}=0A=
=0A=
		} else {=0A=
			checkSet =3D parts =3D [];=0A=
		}=0A=
	}=0A=
=0A=
	if ( !checkSet ) {=0A=
		checkSet =3D set;=0A=
	}=0A=
=0A=
	if ( !checkSet ) {=0A=
		Sizzle.error( cur || selector );=0A=
	}=0A=
=0A=
	if ( toString.call(checkSet) =3D=3D=3D "[object Array]" ) {=0A=
		if ( !prune ) {=0A=
			results.push.apply( results, checkSet );=0A=
=0A=
		} else if ( context && context.nodeType =3D=3D=3D 1 ) {=0A=
			for ( i =3D 0; checkSet[i] !=3D null; i++ ) {=0A=
				if ( checkSet[i] && (checkSet[i] =3D=3D=3D true || =
checkSet[i].nodeType =3D=3D=3D 1 && Sizzle.contains(context, =
checkSet[i])) ) {=0A=
					results.push( set[i] );=0A=
				}=0A=
			}=0A=
=0A=
		} else {=0A=
			for ( i =3D 0; checkSet[i] !=3D null; i++ ) {=0A=
				if ( checkSet[i] && checkSet[i].nodeType =3D=3D=3D 1 ) {=0A=
					results.push( set[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
	} else {=0A=
		makeArray( checkSet, results );=0A=
	}=0A=
=0A=
	if ( extra ) {=0A=
		Sizzle( extra, origContext, results, seed );=0A=
		Sizzle.uniqueSort( results );=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
Sizzle.uniqueSort =3D function( results ) {=0A=
	if ( sortOrder ) {=0A=
		hasDuplicate =3D baseHasDuplicate;=0A=
		results.sort( sortOrder );=0A=
=0A=
		if ( hasDuplicate ) {=0A=
			for ( var i =3D 1; i < results.length; i++ ) {=0A=
				if ( results[i] =3D=3D=3D results[ i - 1 ] ) {=0A=
					results.splice( i--, 1 );=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	return results;=0A=
};=0A=
=0A=
Sizzle.matches =3D function( expr, set ) {=0A=
	return Sizzle( expr, null, null, set );=0A=
};=0A=
=0A=
Sizzle.matchesSelector =3D function( node, expr ) {=0A=
	return Sizzle( expr, null, null, [node] ).length > 0;=0A=
};=0A=
=0A=
Sizzle.find =3D function( expr, context, isXML ) {=0A=
	var set;=0A=
=0A=
	if ( !expr ) {=0A=
		return [];=0A=
	}=0A=
=0A=
	for ( var i =3D 0, l =3D Expr.order.length; i < l; i++ ) {=0A=
		var match,=0A=
			type =3D Expr.order[i];=0A=
		=0A=
		if ( (match =3D Expr.leftMatch[ type ].exec( expr )) ) {=0A=
			var left =3D match[1];=0A=
			match.splice( 1, 1 );=0A=
=0A=
			if ( left.substr( left.length - 1 ) !=3D=3D "\\" ) {=0A=
				match[1] =3D (match[1] || "").replace(/\\/g, "");=0A=
				set =3D Expr.find[ type ]( match, context, isXML );=0A=
=0A=
				if ( set !=3D null ) {=0A=
					expr =3D expr.replace( Expr.match[ type ], "" );=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	if ( !set ) {=0A=
		set =3D context.getElementsByTagName( "*" );=0A=
	}=0A=
=0A=
	return { set: set, expr: expr };=0A=
};=0A=
=0A=
Sizzle.filter =3D function( expr, set, inplace, not ) {=0A=
	var match, anyFound,=0A=
		old =3D expr,=0A=
		result =3D [],=0A=
		curLoop =3D set,=0A=
		isXMLFilter =3D set && set[0] && Sizzle.isXML( set[0] );=0A=
=0A=
	while ( expr && set.length ) {=0A=
		for ( var type in Expr.filter ) {=0A=
			if ( (match =3D Expr.leftMatch[ type ].exec( expr )) !=3D null && =
match[2] ) {=0A=
				var found, item,=0A=
					filter =3D Expr.filter[ type ],=0A=
					left =3D match[1];=0A=
=0A=
				anyFound =3D false;=0A=
=0A=
				match.splice(1,1);=0A=
=0A=
				if ( left.substr( left.length - 1 ) =3D=3D=3D "\\" ) {=0A=
					continue;=0A=
				}=0A=
=0A=
				if ( curLoop =3D=3D=3D result ) {=0A=
					result =3D [];=0A=
				}=0A=
=0A=
				if ( Expr.preFilter[ type ] ) {=0A=
					match =3D Expr.preFilter[ type ]( match, curLoop, inplace, result, =
not, isXMLFilter );=0A=
=0A=
					if ( !match ) {=0A=
						anyFound =3D found =3D true;=0A=
=0A=
					} else if ( match =3D=3D=3D true ) {=0A=
						continue;=0A=
					}=0A=
				}=0A=
=0A=
				if ( match ) {=0A=
					for ( var i =3D 0; (item =3D curLoop[i]) !=3D null; i++ ) {=0A=
						if ( item ) {=0A=
							found =3D filter( item, match, i, curLoop );=0A=
							var pass =3D not ^ !!found;=0A=
=0A=
							if ( inplace && found !=3D null ) {=0A=
								if ( pass ) {=0A=
									anyFound =3D true;=0A=
=0A=
								} else {=0A=
									curLoop[i] =3D false;=0A=
								}=0A=
=0A=
							} else if ( pass ) {=0A=
								result.push( item );=0A=
								anyFound =3D true;=0A=
							}=0A=
						}=0A=
					}=0A=
				}=0A=
=0A=
				if ( found !=3D=3D undefined ) {=0A=
					if ( !inplace ) {=0A=
						curLoop =3D result;=0A=
					}=0A=
=0A=
					expr =3D expr.replace( Expr.match[ type ], "" );=0A=
=0A=
					if ( !anyFound ) {=0A=
						return [];=0A=
					}=0A=
=0A=
					break;=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		// Improper expression=0A=
		if ( expr =3D=3D=3D old ) {=0A=
			if ( anyFound =3D=3D null ) {=0A=
				Sizzle.error( expr );=0A=
=0A=
			} else {=0A=
				break;=0A=
			}=0A=
		}=0A=
=0A=
		old =3D expr;=0A=
	}=0A=
=0A=
	return curLoop;=0A=
};=0A=
=0A=
Sizzle.error =3D function( msg ) {=0A=
	throw "Syntax error, unrecognized expression: " + msg;=0A=
};=0A=
=0A=
var Expr =3D Sizzle.selectors =3D {=0A=
	order: [ "ID", "NAME", "TAG" ],=0A=
=0A=
	match: {=0A=
		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,=0A=
		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,=0A=
		NAME: /\[name=3D['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,=0A=
		ATTR: =
/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=3D)\s*(['"]*)(.*?)\3|)\s*\=
]/,=0A=
		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,=0A=
		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,=0A=
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=3D[^\-]|$)/,=0A=
		PSEUDO: =
/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\=
))?/=0A=
	},=0A=
=0A=
	leftMatch: {},=0A=
=0A=
	attrMap: {=0A=
		"class": "className",=0A=
		"for": "htmlFor"=0A=
	},=0A=
=0A=
	attrHandle: {=0A=
		href: function( elem ) {=0A=
			return elem.getAttribute( "href" );=0A=
		}=0A=
	},=0A=
=0A=
	relative: {=0A=
		"+": function(checkSet, part){=0A=
			var isPartStr =3D typeof part =3D=3D=3D "string",=0A=
				isTag =3D isPartStr && !/\W/.test( part ),=0A=
				isPartStrNotTag =3D isPartStr && !isTag;=0A=
=0A=
			if ( isTag ) {=0A=
				part =3D part.toLowerCase();=0A=
			}=0A=
=0A=
			for ( var i =3D 0, l =3D checkSet.length, elem; i < l; i++ ) {=0A=
				if ( (elem =3D checkSet[i]) ) {=0A=
					while ( (elem =3D elem.previousSibling) && elem.nodeType !=3D=3D 1 =
) {}=0A=
=0A=
					checkSet[i] =3D isPartStrNotTag || elem && =
elem.nodeName.toLowerCase() =3D=3D=3D part ?=0A=
						elem || false :=0A=
						elem =3D=3D=3D part;=0A=
				}=0A=
			}=0A=
=0A=
			if ( isPartStrNotTag ) {=0A=
				Sizzle.filter( part, checkSet, true );=0A=
			}=0A=
		},=0A=
=0A=
		">": function( checkSet, part ) {=0A=
			var elem,=0A=
				isPartStr =3D typeof part =3D=3D=3D "string",=0A=
				i =3D 0,=0A=
				l =3D checkSet.length;=0A=
=0A=
			if ( isPartStr && !/\W/.test( part ) ) {=0A=
				part =3D part.toLowerCase();=0A=
=0A=
				for ( ; i < l; i++ ) {=0A=
					elem =3D checkSet[i];=0A=
=0A=
					if ( elem ) {=0A=
						var parent =3D elem.parentNode;=0A=
						checkSet[i] =3D parent.nodeName.toLowerCase() =3D=3D=3D part ? =
parent : false;=0A=
					}=0A=
				}=0A=
=0A=
			} else {=0A=
				for ( ; i < l; i++ ) {=0A=
					elem =3D checkSet[i];=0A=
=0A=
					if ( elem ) {=0A=
						checkSet[i] =3D isPartStr ?=0A=
							elem.parentNode :=0A=
							elem.parentNode =3D=3D=3D part;=0A=
					}=0A=
				}=0A=
=0A=
				if ( isPartStr ) {=0A=
					Sizzle.filter( part, checkSet, true );=0A=
				}=0A=
			}=0A=
		},=0A=
=0A=
		"": function(checkSet, part, isXML){=0A=
			var nodeCheck,=0A=
				doneName =3D done++,=0A=
				checkFn =3D dirCheck;=0A=
=0A=
			if ( typeof part =3D=3D=3D "string" && !/\W/.test(part) ) {=0A=
				part =3D part.toLowerCase();=0A=
				nodeCheck =3D part;=0A=
				checkFn =3D dirNodeCheck;=0A=
			}=0A=
=0A=
			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );=0A=
		},=0A=
=0A=
		"~": function( checkSet, part, isXML ) {=0A=
			var nodeCheck,=0A=
				doneName =3D done++,=0A=
				checkFn =3D dirCheck;=0A=
=0A=
			if ( typeof part =3D=3D=3D "string" && !/\W/.test( part ) ) {=0A=
				part =3D part.toLowerCase();=0A=
				nodeCheck =3D part;=0A=
				checkFn =3D dirNodeCheck;=0A=
			}=0A=
=0A=
			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, =
isXML );=0A=
		}=0A=
	},=0A=
=0A=
	find: {=0A=
		ID: function( match, context, isXML ) {=0A=
			if ( typeof context.getElementById !=3D=3D "undefined" && !isXML ) {=0A=
				var m =3D context.getElementById(match[1]);=0A=
				// Check parentNode to catch when Blackberry 4.6 returns=0A=
				// nodes that are no longer in the document #6963=0A=
				return m && m.parentNode ? [m] : [];=0A=
			}=0A=
		},=0A=
=0A=
		NAME: function( match, context ) {=0A=
			if ( typeof context.getElementsByName !=3D=3D "undefined" ) {=0A=
				var ret =3D [],=0A=
					results =3D context.getElementsByName( match[1] );=0A=
=0A=
				for ( var i =3D 0, l =3D results.length; i < l; i++ ) {=0A=
					if ( results[i].getAttribute("name") =3D=3D=3D match[1] ) {=0A=
						ret.push( results[i] );=0A=
					}=0A=
				}=0A=
=0A=
				return ret.length =3D=3D=3D 0 ? null : ret;=0A=
			}=0A=
		},=0A=
=0A=
		TAG: function( match, context ) {=0A=
			return context.getElementsByTagName( match[1] );=0A=
		}=0A=
	},=0A=
	preFilter: {=0A=
		CLASS: function( match, curLoop, inplace, result, not, isXML ) {=0A=
			match =3D " " + match[1].replace(/\\/g, "") + " ";=0A=
=0A=
			if ( isXML ) {=0A=
				return match;=0A=
			}=0A=
=0A=
			for ( var i =3D 0, elem; (elem =3D curLoop[i]) !=3D null; i++ ) {=0A=
				if ( elem ) {=0A=
					if ( not ^ (elem.className && (" " + elem.className + " =
").replace(/[\t\n]/g, " ").indexOf(match) >=3D 0) ) {=0A=
						if ( !inplace ) {=0A=
							result.push( elem );=0A=
						}=0A=
=0A=
					} else if ( inplace ) {=0A=
						curLoop[i] =3D false;=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			return false;=0A=
		},=0A=
=0A=
		ID: function( match ) {=0A=
			return match[1].replace(/\\/g, "");=0A=
		},=0A=
=0A=
		TAG: function( match, curLoop ) {=0A=
			return match[1].toLowerCase();=0A=
		},=0A=
=0A=
		CHILD: function( match ) {=0A=
			if ( match[1] =3D=3D=3D "nth" ) {=0A=
				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', =
'-n+6'=0A=
				var test =3D /(-?)(\d*)n((?:\+|-)?\d*)/.exec(=0A=
					match[2] =3D=3D=3D "even" && "2n" || match[2] =3D=3D=3D "odd" && =
"2n+1" ||=0A=
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);=0A=
=0A=
				// calculate the numbers (first)n+(last) including if they are =
negative=0A=
				match[2] =3D (test[1] + (test[2] || 1)) - 0;=0A=
				match[3] =3D test[3] - 0;=0A=
			}=0A=
=0A=
			// TODO: Move to normal caching system=0A=
			match[0] =3D done++;=0A=
=0A=
			return match;=0A=
		},=0A=
=0A=
		ATTR: function( match, curLoop, inplace, result, not, isXML ) {=0A=
			var name =3D match[1].replace(/\\/g, "");=0A=
			=0A=
			if ( !isXML && Expr.attrMap[name] ) {=0A=
				match[1] =3D Expr.attrMap[name];=0A=
			}=0A=
=0A=
			if ( match[2] =3D=3D=3D "~=3D" ) {=0A=
				match[4] =3D " " + match[4] + " ";=0A=
			}=0A=
=0A=
			return match;=0A=
		},=0A=
=0A=
		PSEUDO: function( match, curLoop, inplace, result, not ) {=0A=
			if ( match[1] =3D=3D=3D "not" ) {=0A=
				// If we're dealing with a complex expression, or a simple one=0A=
				if ( ( chunker.exec(match[3]) || "" ).length > 1 || =
/^\w/.test(match[3]) ) {=0A=
					match[3] =3D Sizzle(match[3], null, null, curLoop);=0A=
=0A=
				} else {=0A=
					var ret =3D Sizzle.filter(match[3], curLoop, inplace, true ^ not);=0A=
=0A=
					if ( !inplace ) {=0A=
						result.push.apply( result, ret );=0A=
					}=0A=
=0A=
					return false;=0A=
				}=0A=
=0A=
			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( =
match[0] ) ) {=0A=
				return true;=0A=
			}=0A=
			=0A=
			return match;=0A=
		},=0A=
=0A=
		POS: function( match ) {=0A=
			match.unshift( true );=0A=
=0A=
			return match;=0A=
		}=0A=
	},=0A=
	=0A=
	filters: {=0A=
		enabled: function( elem ) {=0A=
			return elem.disabled =3D=3D=3D false && elem.type !=3D=3D "hidden";=0A=
		},=0A=
=0A=
		disabled: function( elem ) {=0A=
			return elem.disabled =3D=3D=3D true;=0A=
		},=0A=
=0A=
		checked: function( elem ) {=0A=
			return elem.checked =3D=3D=3D true;=0A=
		},=0A=
		=0A=
		selected: function( elem ) {=0A=
			// Accessing this property makes selected-by-default=0A=
			// options in Safari work properly=0A=
			elem.parentNode.selectedIndex;=0A=
			=0A=
			return elem.selected =3D=3D=3D true;=0A=
		},=0A=
=0A=
		parent: function( elem ) {=0A=
			return !!elem.firstChild;=0A=
		},=0A=
=0A=
		empty: function( elem ) {=0A=
			return !elem.firstChild;=0A=
		},=0A=
=0A=
		has: function( elem, i, match ) {=0A=
			return !!Sizzle( match[3], elem ).length;=0A=
		},=0A=
=0A=
		header: function( elem ) {=0A=
			return (/h\d/i).test( elem.nodeName );=0A=
		},=0A=
=0A=
		text: function( elem ) {=0A=
			return "text" =3D=3D=3D elem.type;=0A=
		},=0A=
		radio: function( elem ) {=0A=
			return "radio" =3D=3D=3D elem.type;=0A=
		},=0A=
=0A=
		checkbox: function( elem ) {=0A=
			return "checkbox" =3D=3D=3D elem.type;=0A=
		},=0A=
=0A=
		file: function( elem ) {=0A=
			return "file" =3D=3D=3D elem.type;=0A=
		},=0A=
		password: function( elem ) {=0A=
			return "password" =3D=3D=3D elem.type;=0A=
		},=0A=
=0A=
		submit: function( elem ) {=0A=
			return "submit" =3D=3D=3D elem.type;=0A=
		},=0A=
=0A=
		image: function( elem ) {=0A=
			return "image" =3D=3D=3D elem.type;=0A=
		},=0A=
=0A=
		reset: function( elem ) {=0A=
			return "reset" =3D=3D=3D elem.type;=0A=
		},=0A=
=0A=
		button: function( elem ) {=0A=
			return "button" =3D=3D=3D elem.type || elem.nodeName.toLowerCase() =
=3D=3D=3D "button";=0A=
		},=0A=
=0A=
		input: function( elem ) {=0A=
			return (/input|select|textarea|button/i).test( elem.nodeName );=0A=
		}=0A=
	},=0A=
	setFilters: {=0A=
		first: function( elem, i ) {=0A=
			return i =3D=3D=3D 0;=0A=
		},=0A=
=0A=
		last: function( elem, i, match, array ) {=0A=
			return i =3D=3D=3D array.length - 1;=0A=
		},=0A=
=0A=
		even: function( elem, i ) {=0A=
			return i % 2 =3D=3D=3D 0;=0A=
		},=0A=
=0A=
		odd: function( elem, i ) {=0A=
			return i % 2 =3D=3D=3D 1;=0A=
		},=0A=
=0A=
		lt: function( elem, i, match ) {=0A=
			return i < match[3] - 0;=0A=
		},=0A=
=0A=
		gt: function( elem, i, match ) {=0A=
			return i > match[3] - 0;=0A=
		},=0A=
=0A=
		nth: function( elem, i, match ) {=0A=
			return match[3] - 0 =3D=3D=3D i;=0A=
		},=0A=
=0A=
		eq: function( elem, i, match ) {=0A=
			return match[3] - 0 =3D=3D=3D i;=0A=
		}=0A=
	},=0A=
	filter: {=0A=
		PSEUDO: function( elem, match, i, array ) {=0A=
			var name =3D match[1],=0A=
				filter =3D Expr.filters[ name ];=0A=
=0A=
			if ( filter ) {=0A=
				return filter( elem, i, match, array );=0A=
=0A=
			} else if ( name =3D=3D=3D "contains" ) {=0A=
				return (elem.textContent || elem.innerText || Sizzle.getText([ elem =
]) || "").indexOf(match[3]) >=3D 0;=0A=
=0A=
			} else if ( name =3D=3D=3D "not" ) {=0A=
				var not =3D match[3];=0A=
=0A=
				for ( var j =3D 0, l =3D not.length; j < l; j++ ) {=0A=
					if ( not[j] =3D=3D=3D elem ) {=0A=
						return false;=0A=
					}=0A=
				}=0A=
=0A=
				return true;=0A=
=0A=
			} else {=0A=
				Sizzle.error( "Syntax error, unrecognized expression: " + name );=0A=
			}=0A=
		},=0A=
=0A=
		CHILD: function( elem, match ) {=0A=
			var type =3D match[1],=0A=
				node =3D elem;=0A=
=0A=
			switch ( type ) {=0A=
				case "only":=0A=
				case "first":=0A=
					while ( (node =3D node.previousSibling) )	 {=0A=
						if ( node.nodeType =3D=3D=3D 1 ) { =0A=
							return false; =0A=
						}=0A=
					}=0A=
=0A=
					if ( type =3D=3D=3D "first" ) { =0A=
						return true; =0A=
					}=0A=
=0A=
					node =3D elem;=0A=
=0A=
				case "last":=0A=
					while ( (node =3D node.nextSibling) )	 {=0A=
						if ( node.nodeType =3D=3D=3D 1 ) { =0A=
							return false; =0A=
						}=0A=
					}=0A=
=0A=
					return true;=0A=
=0A=
				case "nth":=0A=
					var first =3D match[2],=0A=
						last =3D match[3];=0A=
=0A=
					if ( first =3D=3D=3D 1 && last =3D=3D=3D 0 ) {=0A=
						return true;=0A=
					}=0A=
					=0A=
					var doneName =3D match[0],=0A=
						parent =3D elem.parentNode;=0A=
	=0A=
					if ( parent && (parent.sizcache !=3D=3D doneName || =
!elem.nodeIndex) ) {=0A=
						var count =3D 0;=0A=
						=0A=
						for ( node =3D parent.firstChild; node; node =3D node.nextSibling =
) {=0A=
							if ( node.nodeType =3D=3D=3D 1 ) {=0A=
								node.nodeIndex =3D ++count;=0A=
							}=0A=
						} =0A=
=0A=
						parent.sizcache =3D doneName;=0A=
					}=0A=
					=0A=
					var diff =3D elem.nodeIndex - last;=0A=
=0A=
					if ( first =3D=3D=3D 0 ) {=0A=
						return diff =3D=3D=3D 0;=0A=
=0A=
					} else {=0A=
						return ( diff % first =3D=3D=3D 0 && diff / first >=3D 0 );=0A=
					}=0A=
			}=0A=
		},=0A=
=0A=
		ID: function( elem, match ) {=0A=
			return elem.nodeType =3D=3D=3D 1 && elem.getAttribute("id") =3D=3D=3D =
match;=0A=
		},=0A=
=0A=
		TAG: function( elem, match ) {=0A=
			return (match =3D=3D=3D "*" && elem.nodeType =3D=3D=3D 1) || =
elem.nodeName.toLowerCase() =3D=3D=3D match;=0A=
		},=0A=
		=0A=
		CLASS: function( elem, match ) {=0A=
			return (" " + (elem.className || elem.getAttribute("class")) + " ")=0A=
				.indexOf( match ) > -1;=0A=
		},=0A=
=0A=
		ATTR: function( elem, match ) {=0A=
			var name =3D match[1],=0A=
				result =3D Expr.attrHandle[ name ] ?=0A=
					Expr.attrHandle[ name ]( elem ) :=0A=
					elem[ name ] !=3D null ?=0A=
						elem[ name ] :=0A=
						elem.getAttribute( name ),=0A=
				value =3D result + "",=0A=
				type =3D match[2],=0A=
				check =3D match[4];=0A=
=0A=
			return result =3D=3D null ?=0A=
				type =3D=3D=3D "!=3D" :=0A=
				type =3D=3D=3D "=3D" ?=0A=
				value =3D=3D=3D check :=0A=
				type =3D=3D=3D "*=3D" ?=0A=
				value.indexOf(check) >=3D 0 :=0A=
				type =3D=3D=3D "~=3D" ?=0A=
				(" " + value + " ").indexOf(check) >=3D 0 :=0A=
				!check ?=0A=
				value && result !=3D=3D false :=0A=
				type =3D=3D=3D "!=3D" ?=0A=
				value !=3D=3D check :=0A=
				type =3D=3D=3D "^=3D" ?=0A=
				value.indexOf(check) =3D=3D=3D 0 :=0A=
				type =3D=3D=3D "$=3D" ?=0A=
				value.substr(value.length - check.length) =3D=3D=3D check :=0A=
				type =3D=3D=3D "|=3D" ?=0A=
				value =3D=3D=3D check || value.substr(0, check.length + 1) =3D=3D=3D =
check + "-" :=0A=
				false;=0A=
		},=0A=
=0A=
		POS: function( elem, match, i, array ) {=0A=
			var name =3D match[2],=0A=
				filter =3D Expr.setFilters[ name ];=0A=
=0A=
			if ( filter ) {=0A=
				return filter( elem, i, match, array );=0A=
			}=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
var origPOS =3D Expr.match.POS,=0A=
	fescape =3D function(all, num){=0A=
		return "\\" + (num - 0 + 1);=0A=
	};=0A=
=0A=
for ( var type in Expr.match ) {=0A=
	Expr.match[ type ] =3D new RegExp( Expr.match[ type ].source + =
(/(?![^\[]*\])(?![^\(]*\))/.source) );=0A=
	Expr.leftMatch[ type ] =3D new RegExp( /(^(?:.|\r|\n)*?)/.source + =
Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );=0A=
}=0A=
=0A=
var makeArray =3D function( array, results ) {=0A=
	array =3D Array.prototype.slice.call( array, 0 );=0A=
=0A=
	if ( results ) {=0A=
		results.push.apply( results, array );=0A=
		return results;=0A=
	}=0A=
	=0A=
	return array;=0A=
};=0A=
=0A=
// Perform a simple check to determine if the browser is capable of=0A=
// converting a NodeList to an array using builtin methods.=0A=
// Also verifies that the returned array holds DOM nodes=0A=
// (which is not the case in the Blackberry browser)=0A=
try {=0A=
	Array.prototype.slice.call( document.documentElement.childNodes, 0 =
)[0].nodeType;=0A=
=0A=
// Provide a fallback method if it does not work=0A=
} catch( e ) {=0A=
	makeArray =3D function( array, results ) {=0A=
		var i =3D 0,=0A=
			ret =3D results || [];=0A=
=0A=
		if ( toString.call(array) =3D=3D=3D "[object Array]" ) {=0A=
			Array.prototype.push.apply( ret, array );=0A=
=0A=
		} else {=0A=
			if ( typeof array.length =3D=3D=3D "number" ) {=0A=
				for ( var l =3D array.length; i < l; i++ ) {=0A=
					ret.push( array[i] );=0A=
				}=0A=
=0A=
			} else {=0A=
				for ( ; array[i]; i++ ) {=0A=
					ret.push( array[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	};=0A=
}=0A=
=0A=
var sortOrder, siblingCheck;=0A=
=0A=
if ( document.documentElement.compareDocumentPosition ) {=0A=
	sortOrder =3D function( a, b ) {=0A=
		if ( a =3D=3D=3D b ) {=0A=
			hasDuplicate =3D true;=0A=
			return 0;=0A=
		}=0A=
=0A=
		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {=0A=
			return a.compareDocumentPosition ? -1 : 1;=0A=
		}=0A=
=0A=
		return a.compareDocumentPosition(b) & 4 ? -1 : 1;=0A=
	};=0A=
=0A=
} else {=0A=
	sortOrder =3D function( a, b ) {=0A=
		var al, bl,=0A=
			ap =3D [],=0A=
			bp =3D [],=0A=
			aup =3D a.parentNode,=0A=
			bup =3D b.parentNode,=0A=
			cur =3D aup;=0A=
=0A=
		// The nodes are identical, we can exit early=0A=
		if ( a =3D=3D=3D b ) {=0A=
			hasDuplicate =3D true;=0A=
			return 0;=0A=
=0A=
		// If the nodes are siblings (or identical) we can do a quick check=0A=
		} else if ( aup =3D=3D=3D bup ) {=0A=
			return siblingCheck( a, b );=0A=
=0A=
		// If no parents were found then the nodes are disconnected=0A=
		} else if ( !aup ) {=0A=
			return -1;=0A=
=0A=
		} else if ( !bup ) {=0A=
			return 1;=0A=
		}=0A=
=0A=
		// Otherwise they're somewhere else in the tree so we need=0A=
		// to build up a full list of the parentNodes for comparison=0A=
		while ( cur ) {=0A=
			ap.unshift( cur );=0A=
			cur =3D cur.parentNode;=0A=
		}=0A=
=0A=
		cur =3D bup;=0A=
=0A=
		while ( cur ) {=0A=
			bp.unshift( cur );=0A=
			cur =3D cur.parentNode;=0A=
		}=0A=
=0A=
		al =3D ap.length;=0A=
		bl =3D bp.length;=0A=
=0A=
		// Start walking down the tree looking for a discrepancy=0A=
		for ( var i =3D 0; i < al && i < bl; i++ ) {=0A=
			if ( ap[i] !=3D=3D bp[i] ) {=0A=
				return siblingCheck( ap[i], bp[i] );=0A=
			}=0A=
		}=0A=
=0A=
		// We ended someplace up the tree so do a sibling check=0A=
		return i =3D=3D=3D al ?=0A=
			siblingCheck( a, bp[i], -1 ) :=0A=
			siblingCheck( ap[i], b, 1 );=0A=
	};=0A=
=0A=
	siblingCheck =3D function( a, b, ret ) {=0A=
		if ( a =3D=3D=3D b ) {=0A=
			return ret;=0A=
		}=0A=
=0A=
		var cur =3D a.nextSibling;=0A=
=0A=
		while ( cur ) {=0A=
			if ( cur =3D=3D=3D b ) {=0A=
				return -1;=0A=
			}=0A=
=0A=
			cur =3D cur.nextSibling;=0A=
		}=0A=
=0A=
		return 1;=0A=
	};=0A=
}=0A=
=0A=
// Utility function for retreiving the text value of an array of DOM =
nodes=0A=
Sizzle.getText =3D function( elems ) {=0A=
	var ret =3D "", elem;=0A=
=0A=
	for ( var i =3D 0; elems[i]; i++ ) {=0A=
		elem =3D elems[i];=0A=
=0A=
		// Get the text from text nodes and CDATA nodes=0A=
		if ( elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 4 ) {=0A=
			ret +=3D elem.nodeValue;=0A=
=0A=
		// Traverse everything else, except comment nodes=0A=
		} else if ( elem.nodeType !=3D=3D 8 ) {=0A=
			ret +=3D Sizzle.getText( elem.childNodes );=0A=
		}=0A=
	}=0A=
=0A=
	return ret;=0A=
};=0A=
=0A=
// Check to see if the browser returns elements by name when=0A=
// querying by getElementById (and provide a workaround)=0A=
(function(){=0A=
	// We're going to inject a fake input element with a specified name=0A=
	var form =3D document.createElement("div"),=0A=
		id =3D "script" + (new Date()).getTime(),=0A=
		root =3D document.documentElement;=0A=
=0A=
	form.innerHTML =3D "<a name=3D'" + id + "'/>";=0A=
=0A=
	// Inject it into the root element, check its status, and remove it =
quickly=0A=
	root.insertBefore( form, root.firstChild );=0A=
=0A=
	// The workaround has to do additional checks after a getElementById=0A=
	// Which slows things down for other browsers (hence the branching)=0A=
	if ( document.getElementById( id ) ) {=0A=
		Expr.find.ID =3D function( match, context, isXML ) {=0A=
			if ( typeof context.getElementById !=3D=3D "undefined" && !isXML ) {=0A=
				var m =3D context.getElementById(match[1]);=0A=
=0A=
				return m ?=0A=
					m.id =3D=3D=3D match[1] || typeof m.getAttributeNode !=3D=3D =
"undefined" && m.getAttributeNode("id").nodeValue =3D=3D=3D match[1] ?=0A=
						[m] :=0A=
						undefined :=0A=
					[];=0A=
			}=0A=
		};=0A=
=0A=
		Expr.filter.ID =3D function( elem, match ) {=0A=
			var node =3D typeof elem.getAttributeNode !=3D=3D "undefined" && =
elem.getAttributeNode("id");=0A=
=0A=
			return elem.nodeType =3D=3D=3D 1 && node && node.nodeValue =3D=3D=3D =
match;=0A=
		};=0A=
	}=0A=
=0A=
	root.removeChild( form );=0A=
=0A=
	// release memory in IE=0A=
	root =3D form =3D null;=0A=
})();=0A=
=0A=
(function(){=0A=
	// Check to see if the browser returns only elements=0A=
	// when doing getElementsByTagName("*")=0A=
=0A=
	// Create a fake element=0A=
	var div =3D document.createElement("div");=0A=
	div.appendChild( document.createComment("") );=0A=
=0A=
	// Make sure no comments are found=0A=
	if ( div.getElementsByTagName("*").length > 0 ) {=0A=
		Expr.find.TAG =3D function( match, context ) {=0A=
			var results =3D context.getElementsByTagName( match[1] );=0A=
=0A=
			// Filter out possible comments=0A=
			if ( match[1] =3D=3D=3D "*" ) {=0A=
				var tmp =3D [];=0A=
=0A=
				for ( var i =3D 0; results[i]; i++ ) {=0A=
					if ( results[i].nodeType =3D=3D=3D 1 ) {=0A=
						tmp.push( results[i] );=0A=
					}=0A=
				}=0A=
=0A=
				results =3D tmp;=0A=
			}=0A=
=0A=
			return results;=0A=
		};=0A=
	}=0A=
=0A=
	// Check to see if an attribute returns normalized href attributes=0A=
	div.innerHTML =3D "<a href=3D'#'></a>";=0A=
=0A=
	if ( div.firstChild && typeof div.firstChild.getAttribute !=3D=3D =
"undefined" &&=0A=
			div.firstChild.getAttribute("href") !=3D=3D "#" ) {=0A=
=0A=
		Expr.attrHandle.href =3D function( elem ) {=0A=
			return elem.getAttribute( "href", 2 );=0A=
		};=0A=
	}=0A=
=0A=
	// release memory in IE=0A=
	div =3D null;=0A=
})();=0A=
=0A=
if ( document.querySelectorAll ) {=0A=
	(function(){=0A=
		var oldSizzle =3D Sizzle,=0A=
			div =3D document.createElement("div"),=0A=
			id =3D "__sizzle__";=0A=
=0A=
		div.innerHTML =3D "<p class=3D'TEST'></p>";=0A=
=0A=
		// Safari can't handle uppercase or unicode characters when=0A=
		// in quirks mode.=0A=
		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length =
=3D=3D=3D 0 ) {=0A=
			return;=0A=
		}=0A=
	=0A=
		Sizzle =3D function( query, context, extra, seed ) {=0A=
			context =3D context || document;=0A=
=0A=
			// Make sure that attribute selectors are quoted=0A=
			query =3D query.replace(/\=3D\s*([^'"\]]*)\s*\]/g, "=3D'$1']");=0A=
=0A=
			// Only use querySelectorAll on non-XML documents=0A=
			// (ID selectors don't work in non-HTML documents)=0A=
			if ( !seed && !Sizzle.isXML(context) ) {=0A=
				if ( context.nodeType =3D=3D=3D 9 ) {=0A=
					try {=0A=
						return makeArray( context.querySelectorAll(query), extra );=0A=
					} catch(qsaError) {}=0A=
=0A=
				// qSA works strangely on Element-rooted queries=0A=
				// We can work around this by specifying an extra ID on the root=0A=
				// and working up from there (Thanks to Andrew Dupont for the =
technique)=0A=
				// IE 8 doesn't work on object elements=0A=
				} else if ( context.nodeType =3D=3D=3D 1 && =
context.nodeName.toLowerCase() !=3D=3D "object" ) {=0A=
					var old =3D context.getAttribute( "id" ),=0A=
						nid =3D old || id;=0A=
=0A=
					if ( !old ) {=0A=
						context.setAttribute( "id", nid );=0A=
					}=0A=
=0A=
					try {=0A=
						return makeArray( context.querySelectorAll( "#" + nid + " " + =
query ), extra );=0A=
=0A=
					} catch(pseudoError) {=0A=
					} finally {=0A=
						if ( !old ) {=0A=
							context.removeAttribute( "id" );=0A=
						}=0A=
					}=0A=
				}=0A=
			}=0A=
		=0A=
			return oldSizzle(query, context, extra, seed);=0A=
		};=0A=
=0A=
		for ( var prop in oldSizzle ) {=0A=
			Sizzle[ prop ] =3D oldSizzle[ prop ];=0A=
		}=0A=
=0A=
		// release memory in IE=0A=
		div =3D null;=0A=
	})();=0A=
}=0A=
=0A=
(function(){=0A=
	var html =3D document.documentElement,=0A=
		matches =3D html.matchesSelector || html.mozMatchesSelector || =
html.webkitMatchesSelector || html.msMatchesSelector,=0A=
		pseudoWorks =3D false;=0A=
=0A=
	try {=0A=
		// This should fail with an exception=0A=
		// Gecko does not error, returns false instead=0A=
		matches.call( document.documentElement, "[test!=3D'']:sizzle" );=0A=
	=0A=
	} catch( pseudoError ) {=0A=
		pseudoWorks =3D true;=0A=
	}=0A=
=0A=
	if ( matches ) {=0A=
		Sizzle.matchesSelector =3D function( node, expr ) {=0A=
			// Make sure that attribute selectors are quoted=0A=
			expr =3D expr.replace(/\=3D\s*([^'"\]]*)\s*\]/g, "=3D'$1']");=0A=
=0A=
			if ( !Sizzle.isXML( node ) ) {=0A=
				try { =0A=
					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && =
!/!=3D/.test( expr ) ) {=0A=
						return matches.call( node, expr );=0A=
					}=0A=
				} catch(e) {}=0A=
			}=0A=
=0A=
			return Sizzle(expr, null, null, [node]).length > 0;=0A=
		};=0A=
	}=0A=
})();=0A=
=0A=
(function(){=0A=
	var div =3D document.createElement("div");=0A=
=0A=
	div.innerHTML =3D "<div class=3D'test e'></div><div =
class=3D'test'></div>";=0A=
=0A=
	// Opera can't find a second classname (in 9.6)=0A=
	// Also, make sure that getElementsByClassName actually exists=0A=
	if ( !div.getElementsByClassName || =
div.getElementsByClassName("e").length =3D=3D=3D 0 ) {=0A=
		return;=0A=
	}=0A=
=0A=
	// Safari caches class attributes, doesn't catch changes (in 3.2)=0A=
	div.lastChild.className =3D "e";=0A=
=0A=
	if ( div.getElementsByClassName("e").length =3D=3D=3D 1 ) {=0A=
		return;=0A=
	}=0A=
	=0A=
	Expr.order.splice(1, 0, "CLASS");=0A=
	Expr.find.CLASS =3D function( match, context, isXML ) {=0A=
		if ( typeof context.getElementsByClassName !=3D=3D "undefined" && =
!isXML ) {=0A=
			return context.getElementsByClassName(match[1]);=0A=
		}=0A=
	};=0A=
=0A=
	// release memory in IE=0A=
	div =3D null;=0A=
})();=0A=
=0A=
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {=0A=
	for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
		var elem =3D checkSet[i];=0A=
=0A=
		if ( elem ) {=0A=
			var match =3D false;=0A=
=0A=
			elem =3D elem[dir];=0A=
=0A=
			while ( elem ) {=0A=
				if ( elem.sizcache =3D=3D=3D doneName ) {=0A=
					match =3D checkSet[elem.sizset];=0A=
					break;=0A=
				}=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 && !isXML ){=0A=
					elem.sizcache =3D doneName;=0A=
					elem.sizset =3D i;=0A=
				}=0A=
=0A=
				if ( elem.nodeName.toLowerCase() =3D=3D=3D cur ) {=0A=
					match =3D elem;=0A=
					break;=0A=
				}=0A=
=0A=
				elem =3D elem[dir];=0A=
			}=0A=
=0A=
			checkSet[i] =3D match;=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {=0A=
	for ( var i =3D 0, l =3D checkSet.length; i < l; i++ ) {=0A=
		var elem =3D checkSet[i];=0A=
=0A=
		if ( elem ) {=0A=
			var match =3D false;=0A=
			=0A=
			elem =3D elem[dir];=0A=
=0A=
			while ( elem ) {=0A=
				if ( elem.sizcache =3D=3D=3D doneName ) {=0A=
					match =3D checkSet[elem.sizset];=0A=
					break;=0A=
				}=0A=
=0A=
				if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
					if ( !isXML ) {=0A=
						elem.sizcache =3D doneName;=0A=
						elem.sizset =3D i;=0A=
					}=0A=
=0A=
					if ( typeof cur !=3D=3D "string" ) {=0A=
						if ( elem =3D=3D=3D cur ) {=0A=
							match =3D true;=0A=
							break;=0A=
						}=0A=
=0A=
					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {=0A=
						match =3D elem;=0A=
						break;=0A=
					}=0A=
				}=0A=
=0A=
				elem =3D elem[dir];=0A=
			}=0A=
=0A=
			checkSet[i] =3D match;=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
if ( document.documentElement.contains ) {=0A=
	Sizzle.contains =3D function( a, b ) {=0A=
		return a !=3D=3D b && (a.contains ? a.contains(b) : true);=0A=
	};=0A=
=0A=
} else if ( document.documentElement.compareDocumentPosition ) {=0A=
	Sizzle.contains =3D function( a, b ) {=0A=
		return !!(a.compareDocumentPosition(b) & 16);=0A=
	};=0A=
=0A=
} else {=0A=
	Sizzle.contains =3D function() {=0A=
		return false;=0A=
	};=0A=
}=0A=
=0A=
Sizzle.isXML =3D function( elem ) {=0A=
	// documentElement is verified for cases where it doesn't yet exist=0A=
	// (such as loading iframes in IE - #4833) =0A=
	var documentElement =3D (elem ? elem.ownerDocument || elem : =
0).documentElement;=0A=
=0A=
	return documentElement ? documentElement.nodeName !=3D=3D "HTML" : =
false;=0A=
};=0A=
=0A=
var posProcess =3D function( selector, context ) {=0A=
	var match,=0A=
		tmpSet =3D [],=0A=
		later =3D "",=0A=
		root =3D context.nodeType ? [context] : context;=0A=
=0A=
	// Position selectors must be done after the filter=0A=
	// And so must :not(positional) so we move all PSEUDOs to the end=0A=
	while ( (match =3D Expr.match.PSEUDO.exec( selector )) ) {=0A=
		later +=3D match[0];=0A=
		selector =3D selector.replace( Expr.match.PSEUDO, "" );=0A=
	}=0A=
=0A=
	selector =3D Expr.relative[selector] ? selector + "*" : selector;=0A=
=0A=
	for ( var i =3D 0, l =3D root.length; i < l; i++ ) {=0A=
		Sizzle( selector, root[i], tmpSet );=0A=
	}=0A=
=0A=
	return Sizzle.filter( later, tmpSet );=0A=
};=0A=
=0A=
// EXPOSE=0A=
jQuery.find =3D Sizzle;=0A=
jQuery.expr =3D Sizzle.selectors;=0A=
jQuery.expr[":"] =3D jQuery.expr.filters;=0A=
jQuery.unique =3D Sizzle.uniqueSort;=0A=
jQuery.text =3D Sizzle.getText;=0A=
jQuery.isXMLDoc =3D Sizzle.isXML;=0A=
jQuery.contains =3D Sizzle.contains;=0A=
=0A=
=0A=
})();=0A=
=0A=
=0A=
var runtil =3D /Until$/,=0A=
	rparentsprev =3D /^(?:parents|prevUntil|prevAll)/,=0A=
	// Note: This RegExp should be improved, or likely pulled from Sizzle=0A=
	rmultiselector =3D /,/,=0A=
	isSimple =3D /^.[^:#\[\.,]*$/,=0A=
	slice =3D Array.prototype.slice,=0A=
	POS =3D jQuery.expr.match.POS;=0A=
=0A=
jQuery.fn.extend({=0A=
	find: function( selector ) {=0A=
		var ret =3D this.pushStack( "", "find", selector ),=0A=
			length =3D 0;=0A=
=0A=
		for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
			length =3D ret.length;=0A=
			jQuery.find( selector, this[i], ret );=0A=
=0A=
			if ( i > 0 ) {=0A=
				// Make sure that the results are unique=0A=
				for ( var n =3D length; n < ret.length; n++ ) {=0A=
					for ( var r =3D 0; r < length; r++ ) {=0A=
						if ( ret[r] =3D=3D=3D ret[n] ) {=0A=
							ret.splice(n--, 1);=0A=
							break;=0A=
						}=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
=0A=
	has: function( target ) {=0A=
		var targets =3D jQuery( target );=0A=
		return this.filter(function() {=0A=
			for ( var i =3D 0, l =3D targets.length; i < l; i++ ) {=0A=
				if ( jQuery.contains( this, targets[i] ) ) {=0A=
					return true;=0A=
				}=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	not: function( selector ) {=0A=
		return this.pushStack( winnow(this, selector, false), "not", selector);=0A=
	},=0A=
=0A=
	filter: function( selector ) {=0A=
		return this.pushStack( winnow(this, selector, true), "filter", =
selector );=0A=
	},=0A=
	=0A=
	is: function( selector ) {=0A=
		return !!selector && jQuery.filter( selector, this ).length > 0;=0A=
	},=0A=
=0A=
	closest: function( selectors, context ) {=0A=
		var ret =3D [], i, l, cur =3D this[0];=0A=
=0A=
		if ( jQuery.isArray( selectors ) ) {=0A=
			var match, selector,=0A=
				matches =3D {},=0A=
				level =3D 1;=0A=
=0A=
			if ( cur && selectors.length ) {=0A=
				for ( i =3D 0, l =3D selectors.length; i < l; i++ ) {=0A=
					selector =3D selectors[i];=0A=
=0A=
					if ( !matches[selector] ) {=0A=
						matches[selector] =3D jQuery.expr.match.POS.test( selector ) ? =0A=
							jQuery( selector, context || this.context ) :=0A=
							selector;=0A=
					}=0A=
				}=0A=
=0A=
				while ( cur && cur.ownerDocument && cur !=3D=3D context ) {=0A=
					for ( selector in matches ) {=0A=
						match =3D matches[selector];=0A=
=0A=
						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) =
) {=0A=
							ret.push({ selector: selector, elem: cur, level: level });=0A=
						}=0A=
					}=0A=
=0A=
					cur =3D cur.parentNode;=0A=
					level++;=0A=
				}=0A=
			}=0A=
=0A=
			return ret;=0A=
		}=0A=
=0A=
		var pos =3D POS.test( selectors ) ? =0A=
			jQuery( selectors, context || this.context ) : null;=0A=
=0A=
		for ( i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
			cur =3D this[i];=0A=
=0A=
			while ( cur ) {=0A=
				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, =
selectors) ) {=0A=
					ret.push( cur );=0A=
					break;=0A=
=0A=
				} else {=0A=
					cur =3D cur.parentNode;=0A=
					if ( !cur || !cur.ownerDocument || cur =3D=3D=3D context ) {=0A=
						break;=0A=
					}=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		ret =3D ret.length > 1 ? jQuery.unique(ret) : ret;=0A=
		=0A=
		return this.pushStack( ret, "closest", selectors );=0A=
	},=0A=
	=0A=
	// Determine the position of an element within=0A=
	// the matched set of elements=0A=
	index: function( elem ) {=0A=
		if ( !elem || typeof elem =3D=3D=3D "string" ) {=0A=
			return jQuery.inArray( this[0],=0A=
				// If it receives a string, the selector is used=0A=
				// If it receives nothing, the siblings are used=0A=
				elem ? jQuery( elem ) : this.parent().children() );=0A=
		}=0A=
		// Locate the position of the desired element=0A=
		return jQuery.inArray(=0A=
			// If it receives a jQuery object, the first element is used=0A=
			elem.jquery ? elem[0] : elem, this );=0A=
	},=0A=
=0A=
	add: function( selector, context ) {=0A=
		var set =3D typeof selector =3D=3D=3D "string" ?=0A=
				jQuery( selector, context || this.context ) :=0A=
				jQuery.makeArray( selector ),=0A=
			all =3D jQuery.merge( this.get(), set );=0A=
=0A=
		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( =
all[0] ) ?=0A=
			all :=0A=
			jQuery.unique( all ) );=0A=
	},=0A=
=0A=
	andSelf: function() {=0A=
		return this.add( this.prevObject );=0A=
	}=0A=
});=0A=
=0A=
// A painfully simple check to see if an element is disconnected=0A=
// from a document (should be improved, where feasible).=0A=
function isDisconnected( node ) {=0A=
	return !node || !node.parentNode || node.parentNode.nodeType =3D=3D=3D =
11;=0A=
}=0A=
=0A=
jQuery.each({=0A=
	parent: function( elem ) {=0A=
		var parent =3D elem.parentNode;=0A=
		return parent && parent.nodeType !=3D=3D 11 ? parent : null;=0A=
	},=0A=
	parents: function( elem ) {=0A=
		return jQuery.dir( elem, "parentNode" );=0A=
	},=0A=
	parentsUntil: function( elem, i, until ) {=0A=
		return jQuery.dir( elem, "parentNode", until );=0A=
	},=0A=
	next: function( elem ) {=0A=
		return jQuery.nth( elem, 2, "nextSibling" );=0A=
	},=0A=
	prev: function( elem ) {=0A=
		return jQuery.nth( elem, 2, "previousSibling" );=0A=
	},=0A=
	nextAll: function( elem ) {=0A=
		return jQuery.dir( elem, "nextSibling" );=0A=
	},=0A=
	prevAll: function( elem ) {=0A=
		return jQuery.dir( elem, "previousSibling" );=0A=
	},=0A=
	nextUntil: function( elem, i, until ) {=0A=
		return jQuery.dir( elem, "nextSibling", until );=0A=
	},=0A=
	prevUntil: function( elem, i, until ) {=0A=
		return jQuery.dir( elem, "previousSibling", until );=0A=
	},=0A=
	siblings: function( elem ) {=0A=
		return jQuery.sibling( elem.parentNode.firstChild, elem );=0A=
	},=0A=
	children: function( elem ) {=0A=
		return jQuery.sibling( elem.firstChild );=0A=
	},=0A=
	contents: function( elem ) {=0A=
		return jQuery.nodeName( elem, "iframe" ) ?=0A=
			elem.contentDocument || elem.contentWindow.document :=0A=
			jQuery.makeArray( elem.childNodes );=0A=
	}=0A=
}, function( name, fn ) {=0A=
	jQuery.fn[ name ] =3D function( until, selector ) {=0A=
		var ret =3D jQuery.map( this, fn, until );=0A=
		=0A=
		if ( !runtil.test( name ) ) {=0A=
			selector =3D until;=0A=
		}=0A=
=0A=
		if ( selector && typeof selector =3D=3D=3D "string" ) {=0A=
			ret =3D jQuery.filter( selector, ret );=0A=
		}=0A=
=0A=
		ret =3D this.length > 1 ? jQuery.unique( ret ) : ret;=0A=
=0A=
		if ( (this.length > 1 || rmultiselector.test( selector )) && =
rparentsprev.test( name ) ) {=0A=
			ret =3D ret.reverse();=0A=
		}=0A=
=0A=
		return this.pushStack( ret, name, slice.call(arguments).join(",") );=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	filter: function( expr, elems, not ) {=0A=
		if ( not ) {=0A=
			expr =3D ":not(" + expr + ")";=0A=
		}=0A=
=0A=
		return elems.length =3D=3D=3D 1 ?=0A=
			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :=0A=
			jQuery.find.matches(expr, elems);=0A=
	},=0A=
	=0A=
	dir: function( elem, dir, until ) {=0A=
		var matched =3D [],=0A=
			cur =3D elem[ dir ];=0A=
=0A=
		while ( cur && cur.nodeType !=3D=3D 9 && (until =3D=3D=3D undefined || =
cur.nodeType !=3D=3D 1 || !jQuery( cur ).is( until )) ) {=0A=
			if ( cur.nodeType =3D=3D=3D 1 ) {=0A=
				matched.push( cur );=0A=
			}=0A=
			cur =3D cur[dir];=0A=
		}=0A=
		return matched;=0A=
	},=0A=
=0A=
	nth: function( cur, result, dir, elem ) {=0A=
		result =3D result || 1;=0A=
		var num =3D 0;=0A=
=0A=
		for ( ; cur; cur =3D cur[dir] ) {=0A=
			if ( cur.nodeType =3D=3D=3D 1 && ++num =3D=3D=3D result ) {=0A=
				break;=0A=
			}=0A=
		}=0A=
=0A=
		return cur;=0A=
	},=0A=
=0A=
	sibling: function( n, elem ) {=0A=
		var r =3D [];=0A=
=0A=
		for ( ; n; n =3D n.nextSibling ) {=0A=
			if ( n.nodeType =3D=3D=3D 1 && n !=3D=3D elem ) {=0A=
				r.push( n );=0A=
			}=0A=
		}=0A=
=0A=
		return r;=0A=
	}=0A=
});=0A=
=0A=
// Implement the identical functionality for filter and not=0A=
function winnow( elements, qualifier, keep ) {=0A=
	if ( jQuery.isFunction( qualifier ) ) {=0A=
		return jQuery.grep(elements, function( elem, i ) {=0A=
			var retVal =3D !!qualifier.call( elem, i, elem );=0A=
			return retVal =3D=3D=3D keep;=0A=
		});=0A=
=0A=
	} else if ( qualifier.nodeType ) {=0A=
		return jQuery.grep(elements, function( elem, i ) {=0A=
			return (elem =3D=3D=3D qualifier) =3D=3D=3D keep;=0A=
		});=0A=
=0A=
	} else if ( typeof qualifier =3D=3D=3D "string" ) {=0A=
		var filtered =3D jQuery.grep(elements, function( elem ) {=0A=
			return elem.nodeType =3D=3D=3D 1;=0A=
		});=0A=
=0A=
		if ( isSimple.test( qualifier ) ) {=0A=
			return jQuery.filter(qualifier, filtered, !keep);=0A=
		} else {=0A=
			qualifier =3D jQuery.filter( qualifier, filtered );=0A=
		}=0A=
	}=0A=
=0A=
	return jQuery.grep(elements, function( elem, i ) {=0A=
		return (jQuery.inArray( elem, qualifier ) >=3D 0) =3D=3D=3D keep;=0A=
	});=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
var rinlinejQuery =3D / jQuery\d+=3D"(?:\d+|null)"/g,=0A=
	rleadingWhitespace =3D /^\s+/,=0A=
	rxhtmlTag =3D =
/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig=
,=0A=
	rtagName =3D /<([\w:]+)/,=0A=
	rtbody =3D /<tbody/i,=0A=
	rhtml =3D /<|&#?\w+;/,=0A=
	rnocache =3D /<(?:script|object|embed|option|style)/i,=0A=
	// checked=3D"checked" or checked (html5)=0A=
	rchecked =3D /checked\s*(?:[^=3D]|=3D\s*.checked.)/i,=0A=
	raction =3D /\=3D([^=3D"'>\s]+\/)>/g,=0A=
	wrapMap =3D {=0A=
		option: [ 1, "<select multiple=3D'multiple'>", "</select>" ],=0A=
		legend: [ 1, "<fieldset>", "</fieldset>" ],=0A=
		thead: [ 1, "<table>", "</table>" ],=0A=
		tr: [ 2, "<table><tbody>", "</tbody></table>" ],=0A=
		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],=0A=
		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],=0A=
		area: [ 1, "<map>", "</map>" ],=0A=
		_default: [ 0, "", "" ]=0A=
	};=0A=
=0A=
wrapMap.optgroup =3D wrapMap.option;=0A=
wrapMap.tbody =3D wrapMap.tfoot =3D wrapMap.colgroup =3D wrapMap.caption =
=3D wrapMap.thead;=0A=
wrapMap.th =3D wrapMap.td;=0A=
=0A=
// IE can't serialize <link> and <script> tags normally=0A=
if ( !jQuery.support.htmlSerialize ) {=0A=
	wrapMap._default =3D [ 1, "div<div>", "</div>" ];=0A=
}=0A=
=0A=
jQuery.fn.extend({=0A=
	text: function( text ) {=0A=
		if ( jQuery.isFunction(text) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery( this );=0A=
=0A=
				self.text( text.call(this, i, self.text()) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( typeof text !=3D=3D "object" && text !=3D=3D undefined ) {=0A=
			return this.empty().append( (this[0] && this[0].ownerDocument || =
document).createTextNode( text ) );=0A=
		}=0A=
=0A=
		return jQuery.text( this );=0A=
	},=0A=
=0A=
	wrapAll: function( html ) {=0A=
		if ( jQuery.isFunction( html ) ) {=0A=
			return this.each(function(i) {=0A=
				jQuery(this).wrapAll( html.call(this, i) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( this[0] ) {=0A=
			// The elements to wrap the target around=0A=
			var wrap =3D jQuery( html, this[0].ownerDocument ).eq(0).clone(true);=0A=
=0A=
			if ( this[0].parentNode ) {=0A=
				wrap.insertBefore( this[0] );=0A=
			}=0A=
=0A=
			wrap.map(function() {=0A=
				var elem =3D this;=0A=
=0A=
				while ( elem.firstChild && elem.firstChild.nodeType =3D=3D=3D 1 ) {=0A=
					elem =3D elem.firstChild;=0A=
				}=0A=
=0A=
				return elem;=0A=
			}).append(this);=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	wrapInner: function( html ) {=0A=
		if ( jQuery.isFunction( html ) ) {=0A=
			return this.each(function(i) {=0A=
				jQuery(this).wrapInner( html.call(this, i) );=0A=
			});=0A=
		}=0A=
=0A=
		return this.each(function() {=0A=
			var self =3D jQuery( this ),=0A=
				contents =3D self.contents();=0A=
=0A=
			if ( contents.length ) {=0A=
				contents.wrapAll( html );=0A=
=0A=
			} else {=0A=
				self.append( html );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	wrap: function( html ) {=0A=
		return this.each(function() {=0A=
			jQuery( this ).wrapAll( html );=0A=
		});=0A=
	},=0A=
=0A=
	unwrap: function() {=0A=
		return this.parent().each(function() {=0A=
			if ( !jQuery.nodeName( this, "body" ) ) {=0A=
				jQuery( this ).replaceWith( this.childNodes );=0A=
			}=0A=
		}).end();=0A=
	},=0A=
=0A=
	append: function() {=0A=
		return this.domManip(arguments, true, function( elem ) {=0A=
			if ( this.nodeType =3D=3D=3D 1 ) {=0A=
				this.appendChild( elem );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	prepend: function() {=0A=
		return this.domManip(arguments, true, function( elem ) {=0A=
			if ( this.nodeType =3D=3D=3D 1 ) {=0A=
				this.insertBefore( elem, this.firstChild );=0A=
			}=0A=
		});=0A=
	},=0A=
=0A=
	before: function() {=0A=
		if ( this[0] && this[0].parentNode ) {=0A=
			return this.domManip(arguments, false, function( elem ) {=0A=
				this.parentNode.insertBefore( elem, this );=0A=
			});=0A=
		} else if ( arguments.length ) {=0A=
			var set =3D jQuery(arguments[0]);=0A=
			set.push.apply( set, this.toArray() );=0A=
			return this.pushStack( set, "before", arguments );=0A=
		}=0A=
	},=0A=
=0A=
	after: function() {=0A=
		if ( this[0] && this[0].parentNode ) {=0A=
			return this.domManip(arguments, false, function( elem ) {=0A=
				this.parentNode.insertBefore( elem, this.nextSibling );=0A=
			});=0A=
		} else if ( arguments.length ) {=0A=
			var set =3D this.pushStack( this, "after", arguments );=0A=
			set.push.apply( set, jQuery(arguments[0]).toArray() );=0A=
			return set;=0A=
		}=0A=
	},=0A=
	=0A=
	// keepData is for internal use only--do not document=0A=
	remove: function( selector, keepData ) {=0A=
		for ( var i =3D 0, elem; (elem =3D this[i]) !=3D null; i++ ) {=0A=
			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {=0A=
				if ( !keepData && elem.nodeType =3D=3D=3D 1 ) {=0A=
					jQuery.cleanData( elem.getElementsByTagName("*") );=0A=
					jQuery.cleanData( [ elem ] );=0A=
				}=0A=
=0A=
				if ( elem.parentNode ) {=0A=
					 elem.parentNode.removeChild( elem );=0A=
				}=0A=
			}=0A=
		}=0A=
		=0A=
		return this;=0A=
	},=0A=
=0A=
	empty: function() {=0A=
		for ( var i =3D 0, elem; (elem =3D this[i]) !=3D null; i++ ) {=0A=
			// Remove element nodes and prevent memory leaks=0A=
			if ( elem.nodeType =3D=3D=3D 1 ) {=0A=
				jQuery.cleanData( elem.getElementsByTagName("*") );=0A=
			}=0A=
=0A=
			// Remove any remaining nodes=0A=
			while ( elem.firstChild ) {=0A=
				elem.removeChild( elem.firstChild );=0A=
			}=0A=
		}=0A=
		=0A=
		return this;=0A=
	},=0A=
=0A=
	clone: function( events ) {=0A=
		// Do the clone=0A=
		var ret =3D this.map(function() {=0A=
			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {=0A=
				// IE copies events bound via attachEvent when=0A=
				// using cloneNode. Calling detachEvent on the=0A=
				// clone will also remove the events from the orignal=0A=
				// In order to get around this, we use innerHTML.=0A=
				// Unfortunately, this means some modifications to=0A=
				// attributes in IE that are actually only stored=0A=
				// as properties will not be copied (such as the=0A=
				// the name attribute on an input).=0A=
				var html =3D this.outerHTML,=0A=
					ownerDocument =3D this.ownerDocument;=0A=
=0A=
				if ( !html ) {=0A=
					var div =3D ownerDocument.createElement("div");=0A=
					div.appendChild( this.cloneNode(true) );=0A=
					html =3D div.innerHTML;=0A=
				}=0A=
=0A=
				return jQuery.clean([html.replace(rinlinejQuery, "")=0A=
					// Handle the case in IE 8 where action=3D/test/> self-closes a tag=0A=
					.replace(raction, '=3D"$1">')=0A=
					.replace(rleadingWhitespace, "")], ownerDocument)[0];=0A=
			} else {=0A=
				return this.cloneNode(true);=0A=
			}=0A=
		});=0A=
=0A=
		// Copy the events from the original to the clone=0A=
		if ( events =3D=3D=3D true ) {=0A=
			cloneCopyEvent( this, ret );=0A=
			cloneCopyEvent( this.find("*"), ret.find("*") );=0A=
		}=0A=
=0A=
		// Return the cloned set=0A=
		return ret;=0A=
	},=0A=
=0A=
	html: function( value ) {=0A=
		if ( value =3D=3D=3D undefined ) {=0A=
			return this[0] && this[0].nodeType =3D=3D=3D 1 ?=0A=
				this[0].innerHTML.replace(rinlinejQuery, "") :=0A=
				null;=0A=
=0A=
		// See if we can take a shortcut and just use innerHTML=0A=
		} else if ( typeof value =3D=3D=3D "string" && !rnocache.test( value ) =
&&=0A=
			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value =
)) &&=0A=
			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {=0A=
=0A=
			value =3D value.replace(rxhtmlTag, "<$1></$2>");=0A=
=0A=
			try {=0A=
				for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
					// Remove element nodes and prevent memory leaks=0A=
					if ( this[i].nodeType =3D=3D=3D 1 ) {=0A=
						jQuery.cleanData( this[i].getElementsByTagName("*") );=0A=
						this[i].innerHTML =3D value;=0A=
					}=0A=
				}=0A=
=0A=
			// If using innerHTML throws an exception, use the fallback method=0A=
			} catch(e) {=0A=
				this.empty().append( value );=0A=
			}=0A=
=0A=
		} else if ( jQuery.isFunction( value ) ) {=0A=
			this.each(function(i){=0A=
				var self =3D jQuery( this );=0A=
=0A=
				self.html( value.call(this, i, self.html()) );=0A=
			});=0A=
=0A=
		} else {=0A=
			this.empty().append( value );=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	replaceWith: function( value ) {=0A=
		if ( this[0] && this[0].parentNode ) {=0A=
			// Make sure that the elements are removed from the DOM before they =
are inserted=0A=
			// this can help fix replacing a parent with child elements=0A=
			if ( jQuery.isFunction( value ) ) {=0A=
				return this.each(function(i) {=0A=
					var self =3D jQuery(this), old =3D self.html();=0A=
					self.replaceWith( value.call( this, i, old ) );=0A=
				});=0A=
			}=0A=
=0A=
			if ( typeof value !=3D=3D "string" ) {=0A=
				value =3D jQuery( value ).detach();=0A=
			}=0A=
=0A=
			return this.each(function() {=0A=
				var next =3D this.nextSibling,=0A=
					parent =3D this.parentNode;=0A=
=0A=
				jQuery( this ).remove();=0A=
=0A=
				if ( next ) {=0A=
					jQuery(next).before( value );=0A=
				} else {=0A=
					jQuery(parent).append( value );=0A=
				}=0A=
			});=0A=
		} else {=0A=
			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : =
value), "replaceWith", value );=0A=
		}=0A=
	},=0A=
=0A=
	detach: function( selector ) {=0A=
		return this.remove( selector, true );=0A=
	},=0A=
=0A=
	domManip: function( args, table, callback ) {=0A=
		var results, first, fragment, parent,=0A=
			value =3D args[0],=0A=
			scripts =3D [];=0A=
=0A=
		// We can't cloneNode fragments that contain checked, in WebKit=0A=
		if ( !jQuery.support.checkClone && arguments.length =3D=3D=3D 3 && =
typeof value =3D=3D=3D "string" && rchecked.test( value ) ) {=0A=
			return this.each(function() {=0A=
				jQuery(this).domManip( args, table, callback, true );=0A=
			});=0A=
		}=0A=
=0A=
		if ( jQuery.isFunction(value) ) {=0A=
			return this.each(function(i) {=0A=
				var self =3D jQuery(this);=0A=
				args[0] =3D value.call(this, i, table ? self.html() : undefined);=0A=
				self.domManip( args, table, callback );=0A=
			});=0A=
		}=0A=
=0A=
		if ( this[0] ) {=0A=
			parent =3D value && value.parentNode;=0A=
=0A=
			// If we're in a fragment, just use that instead of building a new one=0A=
			if ( jQuery.support.parentNode && parent && parent.nodeType =3D=3D=3D =
11 && parent.childNodes.length =3D=3D=3D this.length ) {=0A=
				results =3D { fragment: parent };=0A=
=0A=
			} else {=0A=
				results =3D jQuery.buildFragment( args, this, scripts );=0A=
			}=0A=
			=0A=
			fragment =3D results.fragment;=0A=
			=0A=
			if ( fragment.childNodes.length =3D=3D=3D 1 ) {=0A=
				first =3D fragment =3D fragment.firstChild;=0A=
			} else {=0A=
				first =3D fragment.firstChild;=0A=
			}=0A=
=0A=
			if ( first ) {=0A=
				table =3D table && jQuery.nodeName( first, "tr" );=0A=
=0A=
				for ( var i =3D 0, l =3D this.length; i < l; i++ ) {=0A=
					callback.call(=0A=
						table ?=0A=
							root(this[i], first) :=0A=
							this[i],=0A=
						i > 0 || results.cacheable || this.length > 1  ?=0A=
							fragment.cloneNode(true) :=0A=
							fragment=0A=
					);=0A=
				}=0A=
			}=0A=
=0A=
			if ( scripts.length ) {=0A=
				jQuery.each( scripts, evalScript );=0A=
			}=0A=
		}=0A=
=0A=
		return this;=0A=
	}=0A=
});=0A=
=0A=
function root( elem, cur ) {=0A=
	return jQuery.nodeName(elem, "table") ?=0A=
		(elem.getElementsByTagName("tbody")[0] ||=0A=
		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :=0A=
		elem;=0A=
}=0A=
=0A=
function cloneCopyEvent(orig, ret) {=0A=
	var i =3D 0;=0A=
=0A=
	ret.each(function() {=0A=
		if ( this.nodeName !=3D=3D (orig[i] && orig[i].nodeName) ) {=0A=
			return;=0A=
		}=0A=
=0A=
		var oldData =3D jQuery.data( orig[i++] ),=0A=
			curData =3D jQuery.data( this, oldData ),=0A=
			events =3D oldData && oldData.events;=0A=
=0A=
		if ( events ) {=0A=
			delete curData.handle;=0A=
			curData.events =3D {};=0A=
=0A=
			for ( var type in events ) {=0A=
				for ( var handler in events[ type ] ) {=0A=
					jQuery.event.add( this, type, events[ type ][ handler ], events[ =
type ][ handler ].data );=0A=
				}=0A=
			}=0A=
		}=0A=
	});=0A=
}=0A=
=0A=
jQuery.buildFragment =3D function( args, nodes, scripts ) {=0A=
	var fragment, cacheable, cacheresults,=0A=
		doc =3D (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : =
document);=0A=
=0A=
	// Only cache "small" (1/2 KB) strings that are associated with the =
main document=0A=
	// Cloning options loses the selected state, so don't cache them=0A=
	// IE 6 doesn't like it when you put <object> or <embed> elements in a =
fragment=0A=
	// Also, WebKit does not clone 'checked' attributes on cloneNode, so =
don't cache=0A=
	if ( args.length =3D=3D=3D 1 && typeof args[0] =3D=3D=3D "string" && =
args[0].length < 512 && doc =3D=3D=3D document &&=0A=
		!rnocache.test( args[0] ) && (jQuery.support.checkClone || =
!rchecked.test( args[0] )) ) {=0A=
=0A=
		cacheable =3D true;=0A=
		cacheresults =3D jQuery.fragments[ args[0] ];=0A=
		if ( cacheresults ) {=0A=
			if ( cacheresults !=3D=3D 1 ) {=0A=
				fragment =3D cacheresults;=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
	if ( !fragment ) {=0A=
		fragment =3D doc.createDocumentFragment();=0A=
		jQuery.clean( args, doc, fragment, scripts );=0A=
	}=0A=
=0A=
	if ( cacheable ) {=0A=
		jQuery.fragments[ args[0] ] =3D cacheresults ? fragment : 1;=0A=
	}=0A=
=0A=
	return { fragment: fragment, cacheable: cacheable };=0A=
};=0A=
=0A=
jQuery.fragments =3D {};=0A=
=0A=
jQuery.each({=0A=
	appendTo: "append",=0A=
	prependTo: "prepend",=0A=
	insertBefore: "before",=0A=
	insertAfter: "after",=0A=
	replaceAll: "replaceWith"=0A=
}, function( name, original ) {=0A=
	jQuery.fn[ name ] =3D function( selector ) {=0A=
		var ret =3D [],=0A=
			insert =3D jQuery( selector ),=0A=
			parent =3D this.length =3D=3D=3D 1 && this[0].parentNode;=0A=
		=0A=
		if ( parent && parent.nodeType =3D=3D=3D 11 && =
parent.childNodes.length =3D=3D=3D 1 && insert.length =3D=3D=3D 1 ) {=0A=
			insert[ original ]( this[0] );=0A=
			return this;=0A=
			=0A=
		} else {=0A=
			for ( var i =3D 0, l =3D insert.length; i < l; i++ ) {=0A=
				var elems =3D (i > 0 ? this.clone(true) : this).get();=0A=
				jQuery( insert[i] )[ original ]( elems );=0A=
				ret =3D ret.concat( elems );=0A=
			}=0A=
		=0A=
			return this.pushStack( ret, name, insert.selector );=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	clean: function( elems, context, fragment, scripts ) {=0A=
		context =3D context || document;=0A=
=0A=
		// !context.createElement fails in IE with an error but returns typeof =
'object'=0A=
		if ( typeof context.createElement =3D=3D=3D "undefined" ) {=0A=
			context =3D context.ownerDocument || context[0] && =
context[0].ownerDocument || document;=0A=
		}=0A=
=0A=
		var ret =3D [];=0A=
=0A=
		for ( var i =3D 0, elem; (elem =3D elems[i]) !=3D null; i++ ) {=0A=
			if ( typeof elem =3D=3D=3D "number" ) {=0A=
				elem +=3D "";=0A=
			}=0A=
=0A=
			if ( !elem ) {=0A=
				continue;=0A=
			}=0A=
=0A=
			// Convert html string into DOM nodes=0A=
			if ( typeof elem =3D=3D=3D "string" && !rhtml.test( elem ) ) {=0A=
				elem =3D context.createTextNode( elem );=0A=
=0A=
			} else if ( typeof elem =3D=3D=3D "string" ) {=0A=
				// Fix "XHTML"-style tags in all browsers=0A=
				elem =3D elem.replace(rxhtmlTag, "<$1></$2>");=0A=
=0A=
				// Trim whitespace, otherwise indexOf won't work as expected=0A=
				var tag =3D (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),=0A=
					wrap =3D wrapMap[ tag ] || wrapMap._default,=0A=
					depth =3D wrap[0],=0A=
					div =3D context.createElement("div");=0A=
=0A=
				// Go to html and back, then peel off extra wrappers=0A=
				div.innerHTML =3D wrap[1] + elem + wrap[2];=0A=
=0A=
				// Move to the right depth=0A=
				while ( depth-- ) {=0A=
					div =3D div.lastChild;=0A=
				}=0A=
=0A=
				// Remove IE's autoinserted <tbody> from table fragments=0A=
				if ( !jQuery.support.tbody ) {=0A=
=0A=
					// String was a <table>, *may* have spurious <tbody>=0A=
					var hasBody =3D rtbody.test(elem),=0A=
						tbody =3D tag =3D=3D=3D "table" && !hasBody ?=0A=
							div.firstChild && div.firstChild.childNodes :=0A=
=0A=
							// String was a bare <thead> or <tfoot>=0A=
							wrap[1] =3D=3D=3D "<table>" && !hasBody ?=0A=
								div.childNodes :=0A=
								[];=0A=
=0A=
					for ( var j =3D tbody.length - 1; j >=3D 0 ; --j ) {=0A=
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j =
].childNodes.length ) {=0A=
							tbody[ j ].parentNode.removeChild( tbody[ j ] );=0A=
						}=0A=
					}=0A=
=0A=
				}=0A=
=0A=
				// IE completely kills leading whitespace when innerHTML is used=0A=
				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( =
elem ) ) {=0A=
					div.insertBefore( context.createTextNode( =
rleadingWhitespace.exec(elem)[0] ), div.firstChild );=0A=
				}=0A=
=0A=
				elem =3D div.childNodes;=0A=
			}=0A=
=0A=
			if ( elem.nodeType ) {=0A=
				ret.push( elem );=0A=
			} else {=0A=
				ret =3D jQuery.merge( ret, elem );=0A=
			}=0A=
		}=0A=
=0A=
		if ( fragment ) {=0A=
			for ( i =3D 0; ret[i]; i++ ) {=0A=
				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type =
|| ret[i].type.toLowerCase() =3D=3D=3D "text/javascript") ) {=0A=
					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( =
ret[i] ) : ret[i] );=0A=
				=0A=
				} else {=0A=
					if ( ret[i].nodeType =3D=3D=3D 1 ) {=0A=
						ret.splice.apply( ret, [i + 1, =
0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );=0A=
					}=0A=
					fragment.appendChild( ret[i] );=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	},=0A=
	=0A=
	cleanData: function( elems ) {=0A=
		var data, id, cache =3D jQuery.cache,=0A=
			special =3D jQuery.event.special,=0A=
			deleteExpando =3D jQuery.support.deleteExpando;=0A=
		=0A=
		for ( var i =3D 0, elem; (elem =3D elems[i]) !=3D null; i++ ) {=0A=
			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {=0A=
				continue;=0A=
			}=0A=
=0A=
			id =3D elem[ jQuery.expando ];=0A=
			=0A=
			if ( id ) {=0A=
				data =3D cache[ id ];=0A=
				=0A=
				if ( data && data.events ) {=0A=
					for ( var type in data.events ) {=0A=
						if ( special[ type ] ) {=0A=
							jQuery.event.remove( elem, type );=0A=
=0A=
						} else {=0A=
							jQuery.removeEvent( elem, type, data.handle );=0A=
						}=0A=
					}=0A=
				}=0A=
				=0A=
				if ( deleteExpando ) {=0A=
					delete elem[ jQuery.expando ];=0A=
=0A=
				} else if ( elem.removeAttribute ) {=0A=
					elem.removeAttribute( jQuery.expando );=0A=
				}=0A=
				=0A=
				delete cache[ id ];=0A=
			}=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
function evalScript( i, elem ) {=0A=
	if ( elem.src ) {=0A=
		jQuery.ajax({=0A=
			url: elem.src,=0A=
			async: false,=0A=
			dataType: "script"=0A=
		});=0A=
	} else {=0A=
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || =
"" );=0A=
	}=0A=
=0A=
	if ( elem.parentNode ) {=0A=
		elem.parentNode.removeChild( elem );=0A=
	}=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
var ralpha =3D /alpha\([^)]*\)/i,=0A=
	ropacity =3D /opacity=3D([^)]*)/,=0A=
	rdashAlpha =3D /-([a-z])/ig,=0A=
	rupper =3D /([A-Z])/g,=0A=
	rnumpx =3D /^-?\d+(?:px)?$/i,=0A=
	rnum =3D /^-?\d/,=0A=
=0A=
	cssShow =3D { position: "absolute", visibility: "hidden", display: =
"block" },=0A=
	cssWidth =3D [ "Left", "Right" ],=0A=
	cssHeight =3D [ "Top", "Bottom" ],=0A=
	curCSS,=0A=
=0A=
	getComputedStyle,=0A=
	currentStyle,=0A=
=0A=
	fcamelCase =3D function( all, letter ) {=0A=
		return letter.toUpperCase();=0A=
	};=0A=
=0A=
jQuery.fn.css =3D function( name, value ) {=0A=
	// Setting 'undefined' is a no-op=0A=
	if ( arguments.length =3D=3D=3D 2 && value =3D=3D=3D undefined ) {=0A=
		return this;=0A=
	}=0A=
=0A=
	return jQuery.access( this, name, value, true, function( elem, name, =
value ) {=0A=
		return value !=3D=3D undefined ?=0A=
			jQuery.style( elem, name, value ) :=0A=
			jQuery.css( elem, name );=0A=
	});=0A=
};=0A=
=0A=
jQuery.extend({=0A=
	// Add in style property hooks for overriding the default=0A=
	// behavior of getting and setting a style property=0A=
	cssHooks: {=0A=
		opacity: {=0A=
			get: function( elem, computed ) {=0A=
				if ( computed ) {=0A=
					// We should always get a number back from opacity=0A=
					var ret =3D curCSS( elem, "opacity", "opacity" );=0A=
					return ret =3D=3D=3D "" ? "1" : ret;=0A=
=0A=
				} else {=0A=
					return elem.style.opacity;=0A=
				}=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	// Exclude the following css properties to add px=0A=
	cssNumber: {=0A=
		"zIndex": true,=0A=
		"fontWeight": true,=0A=
		"opacity": true,=0A=
		"zoom": true,=0A=
		"lineHeight": true=0A=
	},=0A=
=0A=
	// Add in properties whose names you wish to fix before=0A=
	// setting or getting the value=0A=
	cssProps: {=0A=
		// normalize float css property=0A=
		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"=0A=
	},=0A=
=0A=
	// Get and set the style property on a DOM Node=0A=
	style: function( elem, name, value, extra ) {=0A=
		// Don't set styles on text and comment nodes=0A=
		if ( !elem || elem.nodeType =3D=3D=3D 3 || elem.nodeType =3D=3D=3D 8 =
|| !elem.style ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// Make sure that we're working with the right name=0A=
		var ret, origName =3D jQuery.camelCase( name ),=0A=
			style =3D elem.style, hooks =3D jQuery.cssHooks[ origName ];=0A=
=0A=
		name =3D jQuery.cssProps[ origName ] || origName;=0A=
=0A=
		// Check if we're setting a value=0A=
		if ( value !=3D=3D undefined ) {=0A=
			// Make sure that NaN and null values aren't set. See: #7116=0A=
			if ( typeof value =3D=3D=3D "number" && isNaN( value ) || value =
=3D=3D null ) {=0A=
				return;=0A=
			}=0A=
=0A=
			// If a number was passed in, add 'px' to the (except for certain CSS =
properties)=0A=
			if ( typeof value =3D=3D=3D "number" && !jQuery.cssNumber[ origName ] =
) {=0A=
				value +=3D "px";=0A=
			}=0A=
=0A=
			// If a hook was provided, use that value, otherwise just set the =
specified value=0A=
			if ( !hooks || !("set" in hooks) || (value =3D hooks.set( elem, value =
)) !=3D=3D undefined ) {=0A=
				// Wrapped to prevent IE from throwing errors when 'invalid' values =
are provided=0A=
				// Fixes bug #5509=0A=
				try {=0A=
					style[ name ] =3D value;=0A=
				} catch(e) {}=0A=
			}=0A=
=0A=
		} else {=0A=
			// If a hook was provided get the non-computed value from there=0A=
			if ( hooks && "get" in hooks && (ret =3D hooks.get( elem, false, =
extra )) !=3D=3D undefined ) {=0A=
				return ret;=0A=
			}=0A=
=0A=
			// Otherwise just get the value from the style object=0A=
			return style[ name ];=0A=
		}=0A=
	},=0A=
=0A=
	css: function( elem, name, extra ) {=0A=
		// Make sure that we're working with the right name=0A=
		var ret, origName =3D jQuery.camelCase( name ),=0A=
			hooks =3D jQuery.cssHooks[ origName ];=0A=
=0A=
		name =3D jQuery.cssProps[ origName ] || origName;=0A=
=0A=
		// If a hook was provided get the computed value from there=0A=
		if ( hooks && "get" in hooks && (ret =3D hooks.get( elem, true, extra =
)) !=3D=3D undefined ) {=0A=
			return ret;=0A=
=0A=
		// Otherwise, if a way to get the computed value exists, use that=0A=
		} else if ( curCSS ) {=0A=
			return curCSS( elem, name, origName );=0A=
		}=0A=
	},=0A=
=0A=
	// A method for quickly swapping in/out CSS properties to get correct =
calculations=0A=
	swap: function( elem, options, callback ) {=0A=
		var old =3D {};=0A=
=0A=
		// Remember the old values, and insert the new ones=0A=
		for ( var name in options ) {=0A=
			old[ name ] =3D elem.style[ name ];=0A=
			elem.style[ name ] =3D options[ name ];=0A=
		}=0A=
=0A=
		callback.call( elem );=0A=
=0A=
		// Revert the old values=0A=
		for ( name in options ) {=0A=
			elem.style[ name ] =3D old[ name ];=0A=
		}=0A=
	},=0A=
=0A=
	camelCase: function( string ) {=0A=
		return string.replace( rdashAlpha, fcamelCase );=0A=
	}=0A=
});=0A=
=0A=
// DEPRECATED, Use jQuery.css() instead=0A=
jQuery.curCSS =3D jQuery.css;=0A=
=0A=
jQuery.each(["height", "width"], function( i, name ) {=0A=
	jQuery.cssHooks[ name ] =3D {=0A=
		get: function( elem, computed, extra ) {=0A=
			var val;=0A=
=0A=
			if ( computed ) {=0A=
				if ( elem.offsetWidth !=3D=3D 0 ) {=0A=
					val =3D getWH( elem, name, extra );=0A=
=0A=
				} else {=0A=
					jQuery.swap( elem, cssShow, function() {=0A=
						val =3D getWH( elem, name, extra );=0A=
					});=0A=
				}=0A=
=0A=
				if ( val <=3D 0 ) {=0A=
					val =3D curCSS( elem, name, name );=0A=
=0A=
					if ( val =3D=3D=3D "0px" && currentStyle ) {=0A=
						val =3D currentStyle( elem, name, name );=0A=
					}=0A=
=0A=
					if ( val !=3D null ) {=0A=
						// Should return "auto" instead of 0, use 0 for=0A=
						// temporary backwards-compat=0A=
						return val =3D=3D=3D "" || val =3D=3D=3D "auto" ? "0px" : val;=0A=
					}=0A=
				}=0A=
=0A=
				if ( val < 0 || val =3D=3D null ) {=0A=
					val =3D elem.style[ name ];=0A=
=0A=
					// Should return "auto" instead of 0, use 0 for=0A=
					// temporary backwards-compat=0A=
					return val =3D=3D=3D "" || val =3D=3D=3D "auto" ? "0px" : val;=0A=
				}=0A=
=0A=
				return typeof val =3D=3D=3D "string" ? val : val + "px";=0A=
			}=0A=
		},=0A=
=0A=
		set: function( elem, value ) {=0A=
			if ( rnumpx.test( value ) ) {=0A=
				// ignore negative width and height values #1599=0A=
				value =3D parseFloat(value);=0A=
=0A=
				if ( value >=3D 0 ) {=0A=
					return value + "px";=0A=
				}=0A=
=0A=
			} else {=0A=
				return value;=0A=
			}=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
if ( !jQuery.support.opacity ) {=0A=
	jQuery.cssHooks.opacity =3D {=0A=
		get: function( elem, computed ) {=0A=
			// IE uses filters for opacity=0A=
			return ropacity.test((computed && elem.currentStyle ? =
elem.currentStyle.filter : elem.style.filter) || "") ?=0A=
				(parseFloat(RegExp.$1) / 100) + "" :=0A=
				computed ? "1" : "";=0A=
		},=0A=
=0A=
		set: function( elem, value ) {=0A=
			var style =3D elem.style;=0A=
=0A=
			// IE has trouble with opacity if it does not have layout=0A=
			// Force it by setting the zoom level=0A=
			style.zoom =3D 1;=0A=
=0A=
			// Set the alpha filter to set the opacity=0A=
			var opacity =3D jQuery.isNaN(value) ?=0A=
				"" :=0A=
				"alpha(opacity=3D" + value * 100 + ")",=0A=
				filter =3D style.filter || "";=0A=
=0A=
			style.filter =3D ralpha.test(filter) ?=0A=
				filter.replace(ralpha, opacity) :=0A=
				style.filter + ' ' + opacity;=0A=
		}=0A=
	};=0A=
}=0A=
=0A=
if ( document.defaultView && document.defaultView.getComputedStyle ) {=0A=
	getComputedStyle =3D function( elem, newName, name ) {=0A=
		var ret, defaultView, computedStyle;=0A=
=0A=
		name =3D name.replace( rupper, "-$1" ).toLowerCase();=0A=
=0A=
		if ( !(defaultView =3D elem.ownerDocument.defaultView) ) {=0A=
			return undefined;=0A=
		}=0A=
=0A=
		if ( (computedStyle =3D defaultView.getComputedStyle( elem, null )) ) {=0A=
			ret =3D computedStyle.getPropertyValue( name );=0A=
			if ( ret =3D=3D=3D "" && !jQuery.contains( =
elem.ownerDocument.documentElement, elem ) ) {=0A=
				ret =3D jQuery.style( elem, name );=0A=
			}=0A=
		}=0A=
=0A=
		return ret;=0A=
	};=0A=
}=0A=
=0A=
if ( document.documentElement.currentStyle ) {=0A=
	currentStyle =3D function( elem, name ) {=0A=
		var left, rsLeft,=0A=
			ret =3D elem.currentStyle && elem.currentStyle[ name ],=0A=
			style =3D elem.style;=0A=
=0A=
		// From the awesome hack by Dean Edwards=0A=
		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291=0A=
=0A=
		// If we're not dealing with a regular pixel number=0A=
		// but a number that has a weird ending, we need to convert it to =
pixels=0A=
		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {=0A=
			// Remember the original values=0A=
			left =3D style.left;=0A=
			rsLeft =3D elem.runtimeStyle.left;=0A=
=0A=
			// Put in the new values to get a computed value out=0A=
			elem.runtimeStyle.left =3D elem.currentStyle.left;=0A=
			style.left =3D name =3D=3D=3D "fontSize" ? "1em" : (ret || 0);=0A=
			ret =3D style.pixelLeft + "px";=0A=
=0A=
			// Revert the changed values=0A=
			style.left =3D left;=0A=
			elem.runtimeStyle.left =3D rsLeft;=0A=
		}=0A=
=0A=
		return ret =3D=3D=3D "" ? "auto" : ret;=0A=
	};=0A=
}=0A=
=0A=
curCSS =3D getComputedStyle || currentStyle;=0A=
=0A=
function getWH( elem, name, extra ) {=0A=
	var which =3D name =3D=3D=3D "width" ? cssWidth : cssHeight,=0A=
		val =3D name =3D=3D=3D "width" ? elem.offsetWidth : elem.offsetHeight;=0A=
=0A=
	if ( extra =3D=3D=3D "border" ) {=0A=
		return val;=0A=
	}=0A=
=0A=
	jQuery.each( which, function() {=0A=
		if ( !extra ) {=0A=
			val -=3D parseFloat(jQuery.css( elem, "padding" + this )) || 0;=0A=
		}=0A=
=0A=
		if ( extra =3D=3D=3D "margin" ) {=0A=
			val +=3D parseFloat(jQuery.css( elem, "margin" + this )) || 0;=0A=
=0A=
		} else {=0A=
			val -=3D parseFloat(jQuery.css( elem, "border" + this + "Width" )) || =
0;=0A=
		}=0A=
	});=0A=
=0A=
	return val;=0A=
}=0A=
=0A=
if ( jQuery.expr && jQuery.expr.filters ) {=0A=
	jQuery.expr.filters.hidden =3D function( elem ) {=0A=
		var width =3D elem.offsetWidth,=0A=
			height =3D elem.offsetHeight;=0A=
=0A=
		return (width =3D=3D=3D 0 && height =3D=3D=3D 0) || =
(!jQuery.support.reliableHiddenOffsets && (elem.style.display || =
jQuery.css( elem, "display" )) =3D=3D=3D "none");=0A=
	};=0A=
=0A=
	jQuery.expr.filters.visible =3D function( elem ) {=0A=
		return !jQuery.expr.filters.hidden( elem );=0A=
	};=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
var jsc =3D jQuery.now(),=0A=
	rscript =3D /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,=0A=
	rselectTextarea =3D /^(?:select|textarea)/i,=0A=
	rinput =3D =
/^(?:color|date|datetime|email|hidden|month|number|password|range|search|=
tel|text|time|url|week)$/i,=0A=
	rnoContent =3D /^(?:GET|HEAD)$/,=0A=
	rbracket =3D /\[\]$/,=0A=
	jsre =3D /\=3D\?(&|$)/,=0A=
	rquery =3D /\?/,=0A=
	rts =3D /([?&])_=3D[^&]*/,=0A=
	rurl =3D /^(\w+:)?\/\/([^\/?#]+)/,=0A=
	r20 =3D /%20/g,=0A=
	rhash =3D /#.*$/,=0A=
=0A=
	// Keep a copy of the old load method=0A=
	_load =3D jQuery.fn.load;=0A=
=0A=
jQuery.fn.extend({=0A=
	load: function( url, params, callback ) {=0A=
		if ( typeof url !=3D=3D "string" && _load ) {=0A=
			return _load.apply( this, arguments );=0A=
=0A=
		// Don't do a request if no elements are being requested=0A=
		} else if ( !this.length ) {=0A=
			return this;=0A=
		}=0A=
=0A=
		var off =3D url.indexOf(" ");=0A=
		if ( off >=3D 0 ) {=0A=
			var selector =3D url.slice(off, url.length);=0A=
			url =3D url.slice(0, off);=0A=
		}=0A=
=0A=
		// Default to a GET request=0A=
		var type =3D "GET";=0A=
=0A=
		// If the second parameter was provided=0A=
		if ( params ) {=0A=
			// If it's a function=0A=
			if ( jQuery.isFunction( params ) ) {=0A=
				// We assume that it's the callback=0A=
				callback =3D params;=0A=
				params =3D null;=0A=
=0A=
			// Otherwise, build a param string=0A=
			} else if ( typeof params =3D=3D=3D "object" ) {=0A=
				params =3D jQuery.param( params, jQuery.ajaxSettings.traditional );=0A=
				type =3D "POST";=0A=
			}=0A=
		}=0A=
=0A=
		var self =3D this;=0A=
=0A=
		// Request the remote document=0A=
		jQuery.ajax({=0A=
			url: url,=0A=
			type: type,=0A=
			dataType: "html",=0A=
			data: params,=0A=
			complete: function( res, status ) {=0A=
				// If successful, inject the HTML into all the matched elements=0A=
				if ( status =3D=3D=3D "success" || status =3D=3D=3D "notmodified" ) {=0A=
					// See if a selector was specified=0A=
					self.html( selector ?=0A=
						// Create a dummy div to hold the results=0A=
						jQuery("<div>")=0A=
							// inject the contents of the document in, removing the scripts=0A=
							// to avoid any 'Permission Denied' errors in IE=0A=
							.append(res.responseText.replace(rscript, ""))=0A=
=0A=
							// Locate the specified elements=0A=
							.find(selector) :=0A=
=0A=
						// If not, just inject the full result=0A=
						res.responseText );=0A=
				}=0A=
=0A=
				if ( callback ) {=0A=
					self.each( callback, [res.responseText, status, res] );=0A=
				}=0A=
			}=0A=
		});=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	serialize: function() {=0A=
		return jQuery.param(this.serializeArray());=0A=
	},=0A=
=0A=
	serializeArray: function() {=0A=
		return this.map(function() {=0A=
			return this.elements ? jQuery.makeArray(this.elements) : this;=0A=
		})=0A=
		.filter(function() {=0A=
			return this.name && !this.disabled &&=0A=
				(this.checked || rselectTextarea.test(this.nodeName) ||=0A=
					rinput.test(this.type));=0A=
		})=0A=
		.map(function( i, elem ) {=0A=
			var val =3D jQuery(this).val();=0A=
=0A=
			return val =3D=3D null ?=0A=
				null :=0A=
				jQuery.isArray(val) ?=0A=
					jQuery.map( val, function( val, i ) {=0A=
						return { name: elem.name, value: val };=0A=
					}) :=0A=
					{ name: elem.name, value: val };=0A=
		}).get();=0A=
	}=0A=
});=0A=
=0A=
// Attach a bunch of functions for handling common AJAX events=0A=
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess =
ajaxSend".split(" "), function( i, o ) {=0A=
	jQuery.fn[o] =3D function( f ) {=0A=
		return this.bind(o, f);=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	get: function( url, data, callback, type ) {=0A=
		// shift arguments if data argument was omited=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			type =3D type || callback;=0A=
			callback =3D data;=0A=
			data =3D null;=0A=
		}=0A=
=0A=
		return jQuery.ajax({=0A=
			type: "GET",=0A=
			url: url,=0A=
			data: data,=0A=
			success: callback,=0A=
			dataType: type=0A=
		});=0A=
	},=0A=
=0A=
	getScript: function( url, callback ) {=0A=
		return jQuery.get(url, null, callback, "script");=0A=
	},=0A=
=0A=
	getJSON: function( url, data, callback ) {=0A=
		return jQuery.get(url, data, callback, "json");=0A=
	},=0A=
=0A=
	post: function( url, data, callback, type ) {=0A=
		// shift arguments if data argument was omited=0A=
		if ( jQuery.isFunction( data ) ) {=0A=
			type =3D type || callback;=0A=
			callback =3D data;=0A=
			data =3D {};=0A=
		}=0A=
=0A=
		return jQuery.ajax({=0A=
			type: "POST",=0A=
			url: url,=0A=
			data: data,=0A=
			success: callback,=0A=
			dataType: type=0A=
		});=0A=
	},=0A=
=0A=
	ajaxSetup: function( settings ) {=0A=
		jQuery.extend( jQuery.ajaxSettings, settings );=0A=
	},=0A=
=0A=
	ajaxSettings: {=0A=
		url: location.href,=0A=
		global: true,=0A=
		type: "GET",=0A=
		contentType: "application/x-www-form-urlencoded",=0A=
		processData: true,=0A=
		async: true,=0A=
		/*=0A=
		timeout: 0,=0A=
		data: null,=0A=
		username: null,=0A=
		password: null,=0A=
		traditional: false,=0A=
		*/=0A=
		// This function can be overriden by calling jQuery.ajaxSetup=0A=
		xhr: function() {=0A=
			return new window.XMLHttpRequest();=0A=
		},=0A=
		accepts: {=0A=
			xml: "application/xml, text/xml",=0A=
			html: "text/html",=0A=
			script: "text/javascript, application/javascript",=0A=
			json: "application/json, text/javascript",=0A=
			text: "text/plain",=0A=
			_default: "*/*"=0A=
		}=0A=
	},=0A=
=0A=
	ajax: function( origSettings ) {=0A=
		var s =3D jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),=0A=
			jsonp, status, data, type =3D s.type.toUpperCase(), noContent =3D =
rnoContent.test(type);=0A=
=0A=
		s.url =3D s.url.replace( rhash, "" );=0A=
=0A=
		// Use original (not extended) context object if it was provided=0A=
		s.context =3D origSettings && origSettings.context !=3D null ? =
origSettings.context : s;=0A=
=0A=
		// convert data if not already a string=0A=
		if ( s.data && s.processData && typeof s.data !=3D=3D "string" ) {=0A=
			s.data =3D jQuery.param( s.data, s.traditional );=0A=
		}=0A=
=0A=
		// Handle JSONP Parameter Callbacks=0A=
		if ( s.dataType =3D=3D=3D "jsonp" ) {=0A=
			if ( type =3D=3D=3D "GET" ) {=0A=
				if ( !jsre.test( s.url ) ) {=0A=
					s.url +=3D (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || =
"callback") + "=3D?";=0A=
				}=0A=
			} else if ( !s.data || !jsre.test(s.data) ) {=0A=
				s.data =3D (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + =
"=3D?";=0A=
			}=0A=
			s.dataType =3D "json";=0A=
		}=0A=
=0A=
		// Build temporary JSONP function=0A=
		if ( s.dataType =3D=3D=3D "json" && (s.data && jsre.test(s.data) || =
jsre.test(s.url)) ) {=0A=
			jsonp =3D s.jsonpCallback || ("jsonp" + jsc++);=0A=
=0A=
			// Replace the =3D? sequence both in the query string and the data=0A=
			if ( s.data ) {=0A=
				s.data =3D (s.data + "").replace(jsre, "=3D" + jsonp + "$1");=0A=
			}=0A=
=0A=
			s.url =3D s.url.replace(jsre, "=3D" + jsonp + "$1");=0A=
=0A=
			// We need to make sure=0A=
			// that a JSONP style response is executed properly=0A=
			s.dataType =3D "script";=0A=
=0A=
			// Handle JSONP-style loading=0A=
			var customJsonp =3D window[ jsonp ];=0A=
=0A=
			window[ jsonp ] =3D function( tmp ) {=0A=
				if ( jQuery.isFunction( customJsonp ) ) {=0A=
					customJsonp( tmp );=0A=
=0A=
				} else {=0A=
					// Garbage collect=0A=
					window[ jsonp ] =3D undefined;=0A=
=0A=
					try {=0A=
						delete window[ jsonp ];=0A=
					} catch( jsonpError ) {}=0A=
				}=0A=
=0A=
				data =3D tmp;=0A=
				jQuery.handleSuccess( s, xhr, status, data );=0A=
				jQuery.handleComplete( s, xhr, status, data );=0A=
				=0A=
				if ( head ) {=0A=
					head.removeChild( script );=0A=
				}=0A=
			};=0A=
		}=0A=
=0A=
		if ( s.dataType =3D=3D=3D "script" && s.cache =3D=3D=3D null ) {=0A=
			s.cache =3D false;=0A=
		}=0A=
=0A=
		if ( s.cache =3D=3D=3D false && noContent ) {=0A=
			var ts =3D jQuery.now();=0A=
=0A=
			// try replacing _=3D if it is there=0A=
			var ret =3D s.url.replace(rts, "$1_=3D" + ts);=0A=
=0A=
			// if nothing was replaced, add timestamp to the end=0A=
			s.url =3D ret + ((ret =3D=3D=3D s.url) ? (rquery.test(s.url) ? "&" : =
"?") + "_=3D" + ts : "");=0A=
		}=0A=
=0A=
		// If data is available, append data to url for GET/HEAD requests=0A=
		if ( s.data && noContent ) {=0A=
			s.url +=3D (rquery.test(s.url) ? "&" : "?") + s.data;=0A=
		}=0A=
=0A=
		// Watch for a new set of requests=0A=
		if ( s.global && jQuery.active++ =3D=3D=3D 0 ) {=0A=
			jQuery.event.trigger( "ajaxStart" );=0A=
		}=0A=
=0A=
		// Matches an absolute URL, and saves the domain=0A=
		var parts =3D rurl.exec( s.url ),=0A=
			remote =3D parts && (parts[1] && parts[1].toLowerCase() !=3D=3D =
location.protocol || parts[2].toLowerCase() !=3D=3D location.host);=0A=
=0A=
		// If we're requesting a remote document=0A=
		// and trying to load JSON or Script with a GET=0A=
		if ( s.dataType =3D=3D=3D "script" && type =3D=3D=3D "GET" && remote ) =
{=0A=
			var head =3D document.getElementsByTagName("head")[0] || =
document.documentElement;=0A=
			var script =3D document.createElement("script");=0A=
			if ( s.scriptCharset ) {=0A=
				script.charset =3D s.scriptCharset;=0A=
			}=0A=
			script.src =3D s.url;=0A=
=0A=
			// Handle Script loading=0A=
			if ( !jsonp ) {=0A=
				var done =3D false;=0A=
=0A=
				// Attach handlers for all browsers=0A=
				script.onload =3D script.onreadystatechange =3D function() {=0A=
					if ( !done && (!this.readyState ||=0A=
							this.readyState =3D=3D=3D "loaded" || this.readyState =3D=3D=3D =
"complete") ) {=0A=
						done =3D true;=0A=
						jQuery.handleSuccess( s, xhr, status, data );=0A=
						jQuery.handleComplete( s, xhr, status, data );=0A=
=0A=
						// Handle memory leak in IE=0A=
						script.onload =3D script.onreadystatechange =3D null;=0A=
						if ( head && script.parentNode ) {=0A=
							head.removeChild( script );=0A=
						}=0A=
					}=0A=
				};=0A=
			}=0A=
=0A=
			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.=0A=
			// This arises when a base node is used (#2709 and #4378).=0A=
			head.insertBefore( script, head.firstChild );=0A=
=0A=
			// We handle everything using the script element injection=0A=
			return undefined;=0A=
		}=0A=
=0A=
		var requestDone =3D false;=0A=
=0A=
		// Create the request object=0A=
		var xhr =3D s.xhr();=0A=
=0A=
		if ( !xhr ) {=0A=
			return;=0A=
		}=0A=
=0A=
		// Open the socket=0A=
		// Passing null username, generates a login popup on Opera (#2865)=0A=
		if ( s.username ) {=0A=
			xhr.open(type, s.url, s.async, s.username, s.password);=0A=
		} else {=0A=
			xhr.open(type, s.url, s.async);=0A=
		}=0A=
=0A=
		// Need an extra try/catch for cross domain requests in Firefox 3=0A=
		try {=0A=
			// Set content-type if data specified and content-body is valid for =
this type=0A=
			if ( (s.data !=3D null && !noContent) || (origSettings && =
origSettings.contentType) ) {=0A=
				xhr.setRequestHeader("Content-Type", s.contentType);=0A=
			}=0A=
=0A=
			// Set the If-Modified-Since and/or If-None-Match header, if in =
ifModified mode.=0A=
			if ( s.ifModified ) {=0A=
				if ( jQuery.lastModified[s.url] ) {=0A=
					xhr.setRequestHeader("If-Modified-Since", =
jQuery.lastModified[s.url]);=0A=
				}=0A=
=0A=
				if ( jQuery.etag[s.url] ) {=0A=
					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);=0A=
				}=0A=
			}=0A=
=0A=
			// Set header so the called script knows that it's an XMLHttpRequest=0A=
			// Only send the header if it's not a remote XHR=0A=
			if ( !remote ) {=0A=
				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");=0A=
			}=0A=
=0A=
			// Set the Accepts header for the server, depending on the dataType=0A=
			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?=0A=
				s.accepts[ s.dataType ] + ", */*; q=3D0.01" :=0A=
				s.accepts._default );=0A=
		} catch( headerError ) {}=0A=
=0A=
		// Allow custom headers/mimetypes and early abort=0A=
		if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) =3D=3D=3D =
false ) {=0A=
			// Handle the global AJAX counter=0A=
			if ( s.global && jQuery.active-- =3D=3D=3D 1 ) {=0A=
				jQuery.event.trigger( "ajaxStop" );=0A=
			}=0A=
=0A=
			// close opended socket=0A=
			xhr.abort();=0A=
			return false;=0A=
		}=0A=
=0A=
		if ( s.global ) {=0A=
			jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] );=0A=
		}=0A=
=0A=
		// Wait for a response to come back=0A=
		var onreadystatechange =3D xhr.onreadystatechange =3D function( =
isTimeout ) {=0A=
			// The request was aborted=0A=
			if ( !xhr || xhr.readyState =3D=3D=3D 0 || isTimeout =3D=3D=3D =
"abort" ) {=0A=
				// Opera doesn't call onreadystatechange before this point=0A=
				// so we simulate the call=0A=
				if ( !requestDone ) {=0A=
					jQuery.handleComplete( s, xhr, status, data );=0A=
				}=0A=
=0A=
				requestDone =3D true;=0A=
				if ( xhr ) {=0A=
					xhr.onreadystatechange =3D jQuery.noop;=0A=
				}=0A=
=0A=
			// The transfer is complete and the data is available, or the request =
timed out=0A=
			} else if ( !requestDone && xhr && (xhr.readyState =3D=3D=3D 4 || =
isTimeout =3D=3D=3D "timeout") ) {=0A=
				requestDone =3D true;=0A=
				xhr.onreadystatechange =3D jQuery.noop;=0A=
=0A=
				status =3D isTimeout =3D=3D=3D "timeout" ?=0A=
					"timeout" :=0A=
					!jQuery.httpSuccess( xhr ) ?=0A=
						"error" :=0A=
						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?=0A=
							"notmodified" :=0A=
							"success";=0A=
=0A=
				var errMsg;=0A=
=0A=
				if ( status =3D=3D=3D "success" ) {=0A=
					// Watch for, and catch, XML document parse errors=0A=
					try {=0A=
						// process the data (runs the xml through httpData regardless of =
callback)=0A=
						data =3D jQuery.httpData( xhr, s.dataType, s );=0A=
					} catch( parserError ) {=0A=
						status =3D "parsererror";=0A=
						errMsg =3D parserError;=0A=
					}=0A=
				}=0A=
=0A=
				// Make sure that the request was successful or notmodified=0A=
				if ( status =3D=3D=3D "success" || status =3D=3D=3D "notmodified" ) {=0A=
					// JSONP handles its own success callback=0A=
					if ( !jsonp ) {=0A=
						jQuery.handleSuccess( s, xhr, status, data );=0A=
					}=0A=
				} else {=0A=
					jQuery.handleError( s, xhr, status, errMsg );=0A=
				}=0A=
=0A=
				// Fire the complete handlers=0A=
				if ( !jsonp ) {=0A=
					jQuery.handleComplete( s, xhr, status, data );=0A=
				}=0A=
=0A=
				if ( isTimeout =3D=3D=3D "timeout" ) {=0A=
					xhr.abort();=0A=
				}=0A=
=0A=
				// Stop memory leaks=0A=
				if ( s.async ) {=0A=
					xhr =3D null;=0A=
				}=0A=
			}=0A=
		};=0A=
=0A=
		// Override the abort handler, if we can (IE 6 doesn't allow it, but =
that's OK)=0A=
		// Opera doesn't fire onreadystatechange at all on abort=0A=
		try {=0A=
			var oldAbort =3D xhr.abort;=0A=
			xhr.abort =3D function() {=0A=
				if ( xhr ) {=0A=
					// oldAbort has no call property in IE7 so=0A=
					// just do it this way, which works in all=0A=
					// browsers=0A=
					Function.prototype.call.call( oldAbort, xhr );=0A=
				}=0A=
=0A=
				onreadystatechange( "abort" );=0A=
			};=0A=
		} catch( abortError ) {}=0A=
=0A=
		// Timeout checker=0A=
		if ( s.async && s.timeout > 0 ) {=0A=
			setTimeout(function() {=0A=
				// Check to see if the request is still happening=0A=
				if ( xhr && !requestDone ) {=0A=
					onreadystatechange( "timeout" );=0A=
				}=0A=
			}, s.timeout);=0A=
		}=0A=
=0A=
		// Send the data=0A=
		try {=0A=
			xhr.send( noContent || s.data =3D=3D null ? null : s.data );=0A=
=0A=
		} catch( sendError ) {=0A=
			jQuery.handleError( s, xhr, null, sendError );=0A=
=0A=
			// Fire the complete handlers=0A=
			jQuery.handleComplete( s, xhr, status, data );=0A=
		}=0A=
=0A=
		// firefox 1.5 doesn't fire statechange for sync requests=0A=
		if ( !s.async ) {=0A=
			onreadystatechange();=0A=
		}=0A=
=0A=
		// return XMLHttpRequest to allow aborting the request etc.=0A=
		return xhr;=0A=
	},=0A=
=0A=
	// Serialize an array of form elements or a set of=0A=
	// key/values into a query string=0A=
	param: function( a, traditional ) {=0A=
		var s =3D [],=0A=
			add =3D function( key, value ) {=0A=
				// If value is a function, invoke it and return its value=0A=
				value =3D jQuery.isFunction(value) ? value() : value;=0A=
				s[ s.length ] =3D encodeURIComponent(key) + "=3D" + =
encodeURIComponent(value);=0A=
			};=0A=
		=0A=
		// Set traditional to true for jQuery <=3D 1.3.2 behavior.=0A=
		if ( traditional =3D=3D=3D undefined ) {=0A=
			traditional =3D jQuery.ajaxSettings.traditional;=0A=
		}=0A=
		=0A=
		// If an array was passed in, assume that it is an array of form =
elements.=0A=
		if ( jQuery.isArray(a) || a.jquery ) {=0A=
			// Serialize the form elements=0A=
			jQuery.each( a, function() {=0A=
				add( this.name, this.value );=0A=
			});=0A=
			=0A=
		} else {=0A=
			// If traditional, encode the "old" way (the way 1.3.2 or older=0A=
			// did it), otherwise encode params recursively.=0A=
			for ( var prefix in a ) {=0A=
				buildParams( prefix, a[prefix], traditional, add );=0A=
			}=0A=
		}=0A=
=0A=
		// Return the resulting serialization=0A=
		return s.join("&").replace(r20, "+");=0A=
	}=0A=
});=0A=
=0A=
function buildParams( prefix, obj, traditional, add ) {=0A=
	if ( jQuery.isArray(obj) && obj.length ) {=0A=
		// Serialize array item.=0A=
		jQuery.each( obj, function( i, v ) {=0A=
			if ( traditional || rbracket.test( prefix ) ) {=0A=
				// Treat each array item as a scalar.=0A=
				add( prefix, v );=0A=
=0A=
			} else {=0A=
				// If array item is non-scalar (array or object), encode its=0A=
				// numeric index to resolve deserialization ambiguity issues.=0A=
				// Note that rack (as of 1.0.0) can't currently deserialize=0A=
				// nested arrays properly, and attempting to do so may cause=0A=
				// a server error. Possible fixes are to modify rack's=0A=
				// deserialization algorithm or to provide an option or flag=0A=
				// to force array serialization to be shallow.=0A=
				buildParams( prefix + "[" + ( typeof v =3D=3D=3D "object" || =
jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );=0A=
			}=0A=
		});=0A=
			=0A=
	} else if ( !traditional && obj !=3D null && typeof obj =3D=3D=3D =
"object" ) {=0A=
		if ( jQuery.isEmptyObject( obj ) ) {=0A=
			add( prefix, "" );=0A=
=0A=
		// Serialize object item.=0A=
		} else {=0A=
			jQuery.each( obj, function( k, v ) {=0A=
				buildParams( prefix + "[" + k + "]", v, traditional, add );=0A=
			});=0A=
		}=0A=
					=0A=
	} else {=0A=
		// Serialize scalar item.=0A=
		add( prefix, obj );=0A=
	}=0A=
}=0A=
=0A=
// This is still on the jQuery object... for now=0A=
// Want to move this to jQuery.ajax some day=0A=
jQuery.extend({=0A=
=0A=
	// Counter for holding the number of active queries=0A=
	active: 0,=0A=
=0A=
	// Last-Modified header cache for next request=0A=
	lastModified: {},=0A=
	etag: {},=0A=
=0A=
	handleError: function( s, xhr, status, e ) {=0A=
		// If a local callback was specified, fire it=0A=
		if ( s.error ) {=0A=
			s.error.call( s.context, xhr, status, e );=0A=
		}=0A=
=0A=
		// Fire the global callback=0A=
		if ( s.global ) {=0A=
			jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] );=0A=
		}=0A=
	},=0A=
=0A=
	handleSuccess: function( s, xhr, status, data ) {=0A=
		// If a local callback was specified, fire it and pass it the data=0A=
		if ( s.success ) {=0A=
			s.success.call( s.context, data, status, xhr );=0A=
		}=0A=
=0A=
		// Fire the global callback=0A=
		if ( s.global ) {=0A=
			jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );=0A=
		}=0A=
	},=0A=
=0A=
	handleComplete: function( s, xhr, status ) {=0A=
		// Process result=0A=
		if ( s.complete ) {=0A=
			s.complete.call( s.context, xhr, status );=0A=
		}=0A=
=0A=
		// The request was completed=0A=
		if ( s.global ) {=0A=
			jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] );=0A=
		}=0A=
=0A=
		// Handle the global AJAX counter=0A=
		if ( s.global && jQuery.active-- =3D=3D=3D 1 ) {=0A=
			jQuery.event.trigger( "ajaxStop" );=0A=
		}=0A=
	},=0A=
		=0A=
	triggerGlobal: function( s, type, args ) {=0A=
		(s.context && s.context.url =3D=3D null ? jQuery(s.context) : =
jQuery.event).trigger(type, args);=0A=
	},=0A=
=0A=
	// Determines if an XMLHttpRequest was successful or not=0A=
	httpSuccess: function( xhr ) {=0A=
		try {=0A=
			// IE error sometimes returns 1223 when it should be 204 so treat it =
as success, see #1450=0A=
			return !xhr.status && location.protocol =3D=3D=3D "file:" ||=0A=
				xhr.status >=3D 200 && xhr.status < 300 ||=0A=
				xhr.status =3D=3D=3D 304 || xhr.status =3D=3D=3D 1223;=0A=
		} catch(e) {}=0A=
=0A=
		return false;=0A=
	},=0A=
=0A=
	// Determines if an XMLHttpRequest returns NotModified=0A=
	httpNotModified: function( xhr, url ) {=0A=
		var lastModified =3D xhr.getResponseHeader("Last-Modified"),=0A=
			etag =3D xhr.getResponseHeader("Etag");=0A=
=0A=
		if ( lastModified ) {=0A=
			jQuery.lastModified[url] =3D lastModified;=0A=
		}=0A=
=0A=
		if ( etag ) {=0A=
			jQuery.etag[url] =3D etag;=0A=
		}=0A=
=0A=
		return xhr.status =3D=3D=3D 304;=0A=
	},=0A=
=0A=
	httpData: function( xhr, type, s ) {=0A=
		var ct =3D xhr.getResponseHeader("content-type") || "",=0A=
			xml =3D type =3D=3D=3D "xml" || !type && ct.indexOf("xml") >=3D 0,=0A=
			data =3D xml ? xhr.responseXML : xhr.responseText;=0A=
=0A=
		if ( xml && data.documentElement.nodeName =3D=3D=3D "parsererror" ) {=0A=
			jQuery.error( "parsererror" );=0A=
		}=0A=
=0A=
		// Allow a pre-filtering function to sanitize the response=0A=
		// s is checked to keep backwards compatibility=0A=
		if ( s && s.dataFilter ) {=0A=
			data =3D s.dataFilter( data, type );=0A=
		}=0A=
=0A=
		// The filter can actually parse the response=0A=
		if ( typeof data =3D=3D=3D "string" ) {=0A=
			// Get the JavaScript object, if JSON is used.=0A=
			if ( type =3D=3D=3D "json" || !type && ct.indexOf("json") >=3D 0 ) {=0A=
				data =3D jQuery.parseJSON( data );=0A=
=0A=
			// If the type is "script", eval it in global context=0A=
			} else if ( type =3D=3D=3D "script" || !type && =
ct.indexOf("javascript") >=3D 0 ) {=0A=
				jQuery.globalEval( data );=0A=
			}=0A=
		}=0A=
=0A=
		return data;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
 * Create the request object; Microsoft failed to properly=0A=
 * implement the XMLHttpRequest in IE7 (can't request local files),=0A=
 * so we use the ActiveXObject when it is available=0A=
 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so=0A=
 * we need a fallback.=0A=
 */=0A=
if ( window.ActiveXObject ) {=0A=
	jQuery.ajaxSettings.xhr =3D function() {=0A=
		if ( window.location.protocol !=3D=3D "file:" ) {=0A=
			try {=0A=
				return new window.XMLHttpRequest();=0A=
			} catch(xhrError) {}=0A=
		}=0A=
=0A=
		try {=0A=
			return new window.ActiveXObject("Microsoft.XMLHTTP");=0A=
		} catch(activeError) {}=0A=
	};=0A=
}=0A=
=0A=
// Does this browser support XHR requests?=0A=
jQuery.support.ajax =3D !!jQuery.ajaxSettings.xhr();=0A=
=0A=
=0A=
=0A=
=0A=
var elemdisplay =3D {},=0A=
	rfxtypes =3D /^(?:toggle|show|hide)$/,=0A=
	rfxnum =3D /^([+\-]=3D)?([\d+.\-]+)(.*)$/,=0A=
	timerId,=0A=
	fxAttrs =3D [=0A=
		// height animations=0A=
		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" =
],=0A=
		// width animations=0A=
		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" =
],=0A=
		// opacity animations=0A=
		[ "opacity" ]=0A=
	];=0A=
=0A=
jQuery.fn.extend({=0A=
	show: function( speed, easing, callback ) {=0A=
		var elem, display;=0A=
=0A=
		if ( speed || speed =3D=3D=3D 0 ) {=0A=
			return this.animate( genFx("show", 3), speed, easing, callback);=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, j =3D this.length; i < j; i++ ) {=0A=
				elem =3D this[i];=0A=
				display =3D elem.style.display;=0A=
=0A=
				// Reset the inline display of this element to learn if it is=0A=
				// being hidden by cascaded rules or not=0A=
				if ( !jQuery.data(elem, "olddisplay") && display =3D=3D=3D "none" ) {=0A=
					display =3D elem.style.display =3D "";=0A=
				}=0A=
=0A=
				// Set elements which have been overridden with display: none=0A=
				// in a stylesheet to whatever the default browser style is=0A=
				// for such an element=0A=
				if ( display =3D=3D=3D "" && jQuery.css( elem, "display" ) =3D=3D=3D =
"none" ) {=0A=
					jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));=0A=
				}=0A=
			}=0A=
=0A=
			// Set the display of most of the elements in a second loop=0A=
			// to avoid the constant reflow=0A=
			for ( i =3D 0; i < j; i++ ) {=0A=
				elem =3D this[i];=0A=
				display =3D elem.style.display;=0A=
=0A=
				if ( display =3D=3D=3D "" || display =3D=3D=3D "none" ) {=0A=
					elem.style.display =3D jQuery.data(elem, "olddisplay") || "";=0A=
				}=0A=
			}=0A=
=0A=
			return this;=0A=
		}=0A=
	},=0A=
=0A=
	hide: function( speed, easing, callback ) {=0A=
		if ( speed || speed =3D=3D=3D 0 ) {=0A=
			return this.animate( genFx("hide", 3), speed, easing, callback);=0A=
=0A=
		} else {=0A=
			for ( var i =3D 0, j =3D this.length; i < j; i++ ) {=0A=
				var display =3D jQuery.css( this[i], "display" );=0A=
=0A=
				if ( display !=3D=3D "none" ) {=0A=
					jQuery.data( this[i], "olddisplay", display );=0A=
				}=0A=
			}=0A=
=0A=
			// Set the display of the elements in a second loop=0A=
			// to avoid the constant reflow=0A=
			for ( i =3D 0; i < j; i++ ) {=0A=
				this[i].style.display =3D "none";=0A=
			}=0A=
=0A=
			return this;=0A=
		}=0A=
	},=0A=
=0A=
	// Save the old toggle function=0A=
	_toggle: jQuery.fn.toggle,=0A=
=0A=
	toggle: function( fn, fn2, callback ) {=0A=
		var bool =3D typeof fn =3D=3D=3D "boolean";=0A=
=0A=
		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {=0A=
			this._toggle.apply( this, arguments );=0A=
=0A=
		} else if ( fn =3D=3D null || bool ) {=0A=
			this.each(function() {=0A=
				var state =3D bool ? fn : jQuery(this).is(":hidden");=0A=
				jQuery(this)[ state ? "show" : "hide" ]();=0A=
			});=0A=
=0A=
		} else {=0A=
			this.animate(genFx("toggle", 3), fn, fn2, callback);=0A=
		}=0A=
=0A=
		return this;=0A=
	},=0A=
=0A=
	fadeTo: function( speed, to, easing, callback ) {=0A=
		return this.filter(":hidden").css("opacity", 0).show().end()=0A=
					.animate({opacity: to}, speed, easing, callback);=0A=
	},=0A=
=0A=
	animate: function( prop, speed, easing, callback ) {=0A=
		var optall =3D jQuery.speed(speed, easing, callback);=0A=
=0A=
		if ( jQuery.isEmptyObject( prop ) ) {=0A=
			return this.each( optall.complete );=0A=
		}=0A=
=0A=
		return this[ optall.queue =3D=3D=3D false ? "each" : "queue" =
](function() {=0A=
			// XXX 'this' does not always have a nodeName when running the=0A=
			// test suite=0A=
=0A=
			var opt =3D jQuery.extend({}, optall), p,=0A=
				isElement =3D this.nodeType =3D=3D=3D 1,=0A=
				hidden =3D isElement && jQuery(this).is(":hidden"),=0A=
				self =3D this;=0A=
=0A=
			for ( p in prop ) {=0A=
				var name =3D jQuery.camelCase( p );=0A=
=0A=
				if ( p !=3D=3D name ) {=0A=
					prop[ name ] =3D prop[ p ];=0A=
					delete prop[ p ];=0A=
					p =3D name;=0A=
				}=0A=
=0A=
				if ( prop[p] =3D=3D=3D "hide" && hidden || prop[p] =3D=3D=3D "show" =
&& !hidden ) {=0A=
					return opt.complete.call(this);=0A=
				}=0A=
=0A=
				if ( isElement && ( p =3D=3D=3D "height" || p =3D=3D=3D "width" ) ) {=0A=
					// Make sure that nothing sneaks out=0A=
					// Record all 3 overflow attributes because IE does not=0A=
					// change the overflow attribute when overflowX and=0A=
					// overflowY are set to the same value=0A=
					opt.overflow =3D [ this.style.overflow, this.style.overflowX, =
this.style.overflowY ];=0A=
=0A=
					// Set display property to inline-block for height/width=0A=
					// animations on inline elements that are having width/height=0A=
					// animated=0A=
					if ( jQuery.css( this, "display" ) =3D=3D=3D "inline" &&=0A=
							jQuery.css( this, "float" ) =3D=3D=3D "none" ) {=0A=
						if ( !jQuery.support.inlineBlockNeedsLayout ) {=0A=
							this.style.display =3D "inline-block";=0A=
=0A=
						} else {=0A=
							var display =3D defaultDisplay(this.nodeName);=0A=
=0A=
							// inline-level elements accept inline-block;=0A=
							// block-level elements need to be inline with layout=0A=
							if ( display =3D=3D=3D "inline" ) {=0A=
								this.style.display =3D "inline-block";=0A=
=0A=
							} else {=0A=
								this.style.display =3D "inline";=0A=
								this.style.zoom =3D 1;=0A=
							}=0A=
						}=0A=
					}=0A=
				}=0A=
=0A=
				if ( jQuery.isArray( prop[p] ) ) {=0A=
					// Create (if needed) and add to specialEasing=0A=
					(opt.specialEasing =3D opt.specialEasing || {})[p] =3D prop[p][1];=0A=
					prop[p] =3D prop[p][0];=0A=
				}=0A=
			}=0A=
=0A=
			if ( opt.overflow !=3D null ) {=0A=
				this.style.overflow =3D "hidden";=0A=
			}=0A=
=0A=
			opt.curAnim =3D jQuery.extend({}, prop);=0A=
=0A=
			jQuery.each( prop, function( name, val ) {=0A=
				var e =3D new jQuery.fx( self, opt, name );=0A=
=0A=
				if ( rfxtypes.test(val) ) {=0A=
					e[ val =3D=3D=3D "toggle" ? hidden ? "show" : "hide" : val ]( prop =
);=0A=
=0A=
				} else {=0A=
					var parts =3D rfxnum.exec(val),=0A=
						start =3D e.cur() || 0;=0A=
=0A=
					if ( parts ) {=0A=
						var end =3D parseFloat( parts[2] ),=0A=
							unit =3D parts[3] || "px";=0A=
=0A=
						// We need to compute starting value=0A=
						if ( unit !=3D=3D "px" ) {=0A=
							jQuery.style( self, name, (end || 1) + unit);=0A=
							start =3D ((end || 1) / e.cur()) * start;=0A=
							jQuery.style( self, name, start + unit);=0A=
						}=0A=
=0A=
						// If a +=3D/-=3D token was provided, we're doing a relative =
animation=0A=
						if ( parts[1] ) {=0A=
							end =3D ((parts[1] =3D=3D=3D "-=3D" ? -1 : 1) * end) + start;=0A=
						}=0A=
=0A=
						e.custom( start, end, unit );=0A=
=0A=
					} else {=0A=
						e.custom( start, val, "" );=0A=
					}=0A=
				}=0A=
			});=0A=
=0A=
			// For JS strict compliance=0A=
			return true;=0A=
		});=0A=
	},=0A=
=0A=
	stop: function( clearQueue, gotoEnd ) {=0A=
		var timers =3D jQuery.timers;=0A=
=0A=
		if ( clearQueue ) {=0A=
			this.queue([]);=0A=
		}=0A=
=0A=
		this.each(function() {=0A=
			// go in reverse order so anything added to the queue during the loop =
is ignored=0A=
			for ( var i =3D timers.length - 1; i >=3D 0; i-- ) {=0A=
				if ( timers[i].elem =3D=3D=3D this ) {=0A=
					if (gotoEnd) {=0A=
						// force the next step to be the last=0A=
						timers[i](true);=0A=
					}=0A=
=0A=
					timers.splice(i, 1);=0A=
				}=0A=
			}=0A=
		});=0A=
=0A=
		// start the next in the queue if the last step wasn't forced=0A=
		if ( !gotoEnd ) {=0A=
			this.dequeue();=0A=
		}=0A=
=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
function genFx( type, num ) {=0A=
	var obj =3D {};=0A=
=0A=
	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() =
{=0A=
		obj[ this ] =3D type;=0A=
	});=0A=
=0A=
	return obj;=0A=
}=0A=
=0A=
// Generate shortcuts for custom animations=0A=
jQuery.each({=0A=
	slideDown: genFx("show", 1),=0A=
	slideUp: genFx("hide", 1),=0A=
	slideToggle: genFx("toggle", 1),=0A=
	fadeIn: { opacity: "show" },=0A=
	fadeOut: { opacity: "hide" },=0A=
	fadeToggle: { opacity: "toggle" }=0A=
}, function( name, props ) {=0A=
	jQuery.fn[ name ] =3D function( speed, easing, callback ) {=0A=
		return this.animate( props, speed, easing, callback );=0A=
	};=0A=
});=0A=
=0A=
jQuery.extend({=0A=
	speed: function( speed, easing, fn ) {=0A=
		var opt =3D speed && typeof speed =3D=3D=3D "object" ? =
jQuery.extend({}, speed) : {=0A=
			complete: fn || !fn && easing ||=0A=
				jQuery.isFunction( speed ) && speed,=0A=
			duration: speed,=0A=
			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing=0A=
		};=0A=
=0A=
		opt.duration =3D jQuery.fx.off ? 0 : typeof opt.duration =3D=3D=3D =
"number" ? opt.duration :=0A=
			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : =
jQuery.fx.speeds._default;=0A=
=0A=
		// Queueing=0A=
		opt.old =3D opt.complete;=0A=
		opt.complete =3D function() {=0A=
			if ( opt.queue !=3D=3D false ) {=0A=
				jQuery(this).dequeue();=0A=
			}=0A=
			if ( jQuery.isFunction( opt.old ) ) {=0A=
				opt.old.call( this );=0A=
			}=0A=
		};=0A=
=0A=
		return opt;=0A=
	},=0A=
=0A=
	easing: {=0A=
		linear: function( p, n, firstNum, diff ) {=0A=
			return firstNum + diff * p;=0A=
		},=0A=
		swing: function( p, n, firstNum, diff ) {=0A=
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;=0A=
		}=0A=
	},=0A=
=0A=
	timers: [],=0A=
=0A=
	fx: function( elem, options, prop ) {=0A=
		this.options =3D options;=0A=
		this.elem =3D elem;=0A=
		this.prop =3D prop;=0A=
=0A=
		if ( !options.orig ) {=0A=
			options.orig =3D {};=0A=
		}=0A=
	}=0A=
=0A=
});=0A=
=0A=
jQuery.fx.prototype =3D {=0A=
	// Simple function for setting a style value=0A=
	update: function() {=0A=
		if ( this.options.step ) {=0A=
			this.options.step.call( this.elem, this.now, this );=0A=
		}=0A=
=0A=
		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );=0A=
	},=0A=
=0A=
	// Get the current size=0A=
	cur: function() {=0A=
		if ( this.elem[this.prop] !=3D null && (!this.elem.style || =
this.elem.style[this.prop] =3D=3D null) ) {=0A=
			return this.elem[ this.prop ];=0A=
		}=0A=
=0A=
		var r =3D parseFloat( jQuery.css( this.elem, this.prop ) );=0A=
		return r && r > -10000 ? r : 0;=0A=
	},=0A=
=0A=
	// Start an animation from one number to another=0A=
	custom: function( from, to, unit ) {=0A=
		var self =3D this,=0A=
			fx =3D jQuery.fx;=0A=
=0A=
		this.startTime =3D jQuery.now();=0A=
		this.start =3D from;=0A=
		this.end =3D to;=0A=
		this.unit =3D unit || this.unit || "px";=0A=
		this.now =3D this.start;=0A=
		this.pos =3D this.state =3D 0;=0A=
=0A=
		function t( gotoEnd ) {=0A=
			return self.step(gotoEnd);=0A=
		}=0A=
=0A=
		t.elem =3D this.elem;=0A=
=0A=
		if ( t() && jQuery.timers.push(t) && !timerId ) {=0A=
			timerId =3D setInterval(fx.tick, fx.interval);=0A=
		}=0A=
	},=0A=
=0A=
	// Simple 'show' function=0A=
	show: function() {=0A=
		// Remember where we started, so that we can go back to it later=0A=
		this.options.orig[this.prop] =3D jQuery.style( this.elem, this.prop );=0A=
		this.options.show =3D true;=0A=
=0A=
		// Begin the animation=0A=
		// Make sure that we start at a small width/height to avoid any=0A=
		// flash of content=0A=
		this.custom(this.prop =3D=3D=3D "width" || this.prop =3D=3D=3D =
"height" ? 1 : 0, this.cur());=0A=
=0A=
		// Start by showing the element=0A=
		jQuery( this.elem ).show();=0A=
	},=0A=
=0A=
	// Simple 'hide' function=0A=
	hide: function() {=0A=
		// Remember where we started, so that we can go back to it later=0A=
		this.options.orig[this.prop] =3D jQuery.style( this.elem, this.prop );=0A=
		this.options.hide =3D true;=0A=
=0A=
		// Begin the animation=0A=
		this.custom(this.cur(), 0);=0A=
	},=0A=
=0A=
	// Each step of an animation=0A=
	step: function( gotoEnd ) {=0A=
		var t =3D jQuery.now(), done =3D true;=0A=
=0A=
		if ( gotoEnd || t >=3D this.options.duration + this.startTime ) {=0A=
			this.now =3D this.end;=0A=
			this.pos =3D this.state =3D 1;=0A=
			this.update();=0A=
=0A=
			this.options.curAnim[ this.prop ] =3D true;=0A=
=0A=
			for ( var i in this.options.curAnim ) {=0A=
				if ( this.options.curAnim[i] !=3D=3D true ) {=0A=
					done =3D false;=0A=
				}=0A=
			}=0A=
=0A=
			if ( done ) {=0A=
				// Reset the overflow=0A=
				if ( this.options.overflow !=3D null && =
!jQuery.support.shrinkWrapBlocks ) {=0A=
					var elem =3D this.elem,=0A=
						options =3D this.options;=0A=
=0A=
					jQuery.each( [ "", "X", "Y" ], function (index, value) {=0A=
						elem.style[ "overflow" + value ] =3D options.overflow[index];=0A=
					} );=0A=
				}=0A=
=0A=
				// Hide the element if the "hide" operation was done=0A=
				if ( this.options.hide ) {=0A=
					jQuery(this.elem).hide();=0A=
				}=0A=
=0A=
				// Reset the properties, if the item has been hidden or shown=0A=
				if ( this.options.hide || this.options.show ) {=0A=
					for ( var p in this.options.curAnim ) {=0A=
						jQuery.style( this.elem, p, this.options.orig[p] );=0A=
					}=0A=
				}=0A=
=0A=
				// Execute the complete function=0A=
				this.options.complete.call( this.elem );=0A=
			}=0A=
=0A=
			return false;=0A=
=0A=
		} else {=0A=
			var n =3D t - this.startTime;=0A=
			this.state =3D n / this.options.duration;=0A=
=0A=
			// Perform the easing function, defaults to swing=0A=
			var specialEasing =3D this.options.specialEasing && =
this.options.specialEasing[this.prop];=0A=
			var defaultEasing =3D this.options.easing || (jQuery.easing.swing ? =
"swing" : "linear");=0A=
			this.pos =3D jQuery.easing[specialEasing || =
defaultEasing](this.state, n, 0, 1, this.options.duration);=0A=
			this.now =3D this.start + ((this.end - this.start) * this.pos);=0A=
=0A=
			// Perform the next step of the animation=0A=
			this.update();=0A=
		}=0A=
=0A=
		return true;=0A=
	}=0A=
};=0A=
=0A=
jQuery.extend( jQuery.fx, {=0A=
	tick: function() {=0A=
		var timers =3D jQuery.timers;=0A=
=0A=
		for ( var i =3D 0; i < timers.length; i++ ) {=0A=
			if ( !timers[i]() ) {=0A=
				timers.splice(i--, 1);=0A=
			}=0A=
		}=0A=
=0A=
		if ( !timers.length ) {=0A=
			jQuery.fx.stop();=0A=
		}=0A=
	},=0A=
=0A=
	interval: 13,=0A=
=0A=
	stop: function() {=0A=
		clearInterval( timerId );=0A=
		timerId =3D null;=0A=
	},=0A=
=0A=
	speeds: {=0A=
		slow: 600,=0A=
		fast: 200,=0A=
		// Default speed=0A=
		_default: 400=0A=
	},=0A=
=0A=
	step: {=0A=
		opacity: function( fx ) {=0A=
			jQuery.style( fx.elem, "opacity", fx.now );=0A=
		},=0A=
=0A=
		_default: function( fx ) {=0A=
			if ( fx.elem.style && fx.elem.style[ fx.prop ] !=3D null ) {=0A=
				fx.elem.style[ fx.prop ] =3D (fx.prop =3D=3D=3D "width" || fx.prop =
=3D=3D=3D "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;=0A=
			} else {=0A=
				fx.elem[ fx.prop ] =3D fx.now;=0A=
			}=0A=
		}=0A=
	}=0A=
});=0A=
=0A=
if ( jQuery.expr && jQuery.expr.filters ) {=0A=
	jQuery.expr.filters.animated =3D function( elem ) {=0A=
		return jQuery.grep(jQuery.timers, function( fn ) {=0A=
			return elem =3D=3D=3D fn.elem;=0A=
		}).length;=0A=
	};=0A=
}=0A=
=0A=
function defaultDisplay( nodeName ) {=0A=
	if ( !elemdisplay[ nodeName ] ) {=0A=
		var elem =3D jQuery("<" + nodeName + ">").appendTo("body"),=0A=
			display =3D elem.css("display");=0A=
=0A=
		elem.remove();=0A=
=0A=
		if ( display =3D=3D=3D "none" || display =3D=3D=3D "" ) {=0A=
			display =3D "block";=0A=
		}=0A=
=0A=
		elemdisplay[ nodeName ] =3D display;=0A=
	}=0A=
=0A=
	return elemdisplay[ nodeName ];=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
var rtable =3D /^t(?:able|d|h)$/i,=0A=
	rroot =3D /^(?:body|html)$/i;=0A=
=0A=
if ( "getBoundingClientRect" in document.documentElement ) {=0A=
	jQuery.fn.offset =3D function( options ) {=0A=
		var elem =3D this[0], box;=0A=
=0A=
		if ( options ) { =0A=
			return this.each(function( i ) {=0A=
				jQuery.offset.setOffset( this, options, i );=0A=
			});=0A=
		}=0A=
=0A=
		if ( !elem || !elem.ownerDocument ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		if ( elem =3D=3D=3D elem.ownerDocument.body ) {=0A=
			return jQuery.offset.bodyOffset( elem );=0A=
		}=0A=
=0A=
		try {=0A=
			box =3D elem.getBoundingClientRect();=0A=
		} catch(e) {}=0A=
=0A=
		var doc =3D elem.ownerDocument,=0A=
			docElem =3D doc.documentElement;=0A=
=0A=
		// Make sure we're not dealing with a disconnected DOM node=0A=
		if ( !box || !jQuery.contains( docElem, elem ) ) {=0A=
			return box || { top: 0, left: 0 };=0A=
		}=0A=
=0A=
		var body =3D doc.body,=0A=
			win =3D getWindow(doc),=0A=
			clientTop  =3D docElem.clientTop  || body.clientTop  || 0,=0A=
			clientLeft =3D docElem.clientLeft || body.clientLeft || 0,=0A=
			scrollTop  =3D (win.pageYOffset || jQuery.support.boxModel && =
docElem.scrollTop  || body.scrollTop ),=0A=
			scrollLeft =3D (win.pageXOffset || jQuery.support.boxModel && =
docElem.scrollLeft || body.scrollLeft),=0A=
			top  =3D box.top  + scrollTop  - clientTop,=0A=
			left =3D box.left + scrollLeft - clientLeft;=0A=
=0A=
		return { top: top, left: left };=0A=
	};=0A=
=0A=
} else {=0A=
	jQuery.fn.offset =3D function( options ) {=0A=
		var elem =3D this[0];=0A=
=0A=
		if ( options ) { =0A=
			return this.each(function( i ) {=0A=
				jQuery.offset.setOffset( this, options, i );=0A=
			});=0A=
		}=0A=
=0A=
		if ( !elem || !elem.ownerDocument ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		if ( elem =3D=3D=3D elem.ownerDocument.body ) {=0A=
			return jQuery.offset.bodyOffset( elem );=0A=
		}=0A=
=0A=
		jQuery.offset.initialize();=0A=
=0A=
		var computedStyle,=0A=
			offsetParent =3D elem.offsetParent,=0A=
			prevOffsetParent =3D elem,=0A=
			doc =3D elem.ownerDocument,=0A=
			docElem =3D doc.documentElement,=0A=
			body =3D doc.body,=0A=
			defaultView =3D doc.defaultView,=0A=
			prevComputedStyle =3D defaultView ? defaultView.getComputedStyle( =
elem, null ) : elem.currentStyle,=0A=
			top =3D elem.offsetTop,=0A=
			left =3D elem.offsetLeft;=0A=
=0A=
		while ( (elem =3D elem.parentNode) && elem !=3D=3D body && elem =
!=3D=3D docElem ) {=0A=
			if ( jQuery.offset.supportsFixedPosition && =
prevComputedStyle.position =3D=3D=3D "fixed" ) {=0A=
				break;=0A=
			}=0A=
=0A=
			computedStyle =3D defaultView ? defaultView.getComputedStyle(elem, =
null) : elem.currentStyle;=0A=
			top  -=3D elem.scrollTop;=0A=
			left -=3D elem.scrollLeft;=0A=
=0A=
			if ( elem =3D=3D=3D offsetParent ) {=0A=
				top  +=3D elem.offsetTop;=0A=
				left +=3D elem.offsetLeft;=0A=
=0A=
				if ( jQuery.offset.doesNotAddBorder && =
!(jQuery.offset.doesAddBorderForTableAndCells && =
rtable.test(elem.nodeName)) ) {=0A=
					top  +=3D parseFloat( computedStyle.borderTopWidth  ) || 0;=0A=
					left +=3D parseFloat( computedStyle.borderLeftWidth ) || 0;=0A=
				}=0A=
=0A=
				prevOffsetParent =3D offsetParent;=0A=
				offsetParent =3D elem.offsetParent;=0A=
			}=0A=
=0A=
			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && =
computedStyle.overflow !=3D=3D "visible" ) {=0A=
				top  +=3D parseFloat( computedStyle.borderTopWidth  ) || 0;=0A=
				left +=3D parseFloat( computedStyle.borderLeftWidth ) || 0;=0A=
			}=0A=
=0A=
			prevComputedStyle =3D computedStyle;=0A=
		}=0A=
=0A=
		if ( prevComputedStyle.position =3D=3D=3D "relative" || =
prevComputedStyle.position =3D=3D=3D "static" ) {=0A=
			top  +=3D body.offsetTop;=0A=
			left +=3D body.offsetLeft;=0A=
		}=0A=
=0A=
		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position =
=3D=3D=3D "fixed" ) {=0A=
			top  +=3D Math.max( docElem.scrollTop, body.scrollTop );=0A=
			left +=3D Math.max( docElem.scrollLeft, body.scrollLeft );=0A=
		}=0A=
=0A=
		return { top: top, left: left };=0A=
	};=0A=
}=0A=
=0A=
jQuery.offset =3D {=0A=
	initialize: function() {=0A=
		var body =3D document.body, container =3D =
document.createElement("div"), innerDiv, checkDiv, table, td, =
bodyMarginTop =3D parseFloat( jQuery.css(body, "marginTop") ) || 0,=0A=
			html =3D "<div =
style=3D'position:absolute;top:0;left:0;margin:0;border:5px solid =
#000;padding:0;width:1px;height:1px;'><div></div></div><table =
style=3D'position:absolute;top:0;left:0;margin:0;border:5px solid =
#000;padding:0;width:1px;height:1px;' cellpadding=3D'0' =
cellspacing=3D'0'><tr><td></td></tr></table>";=0A=
=0A=
		jQuery.extend( container.style, { position: "absolute", top: 0, left: =
0, margin: 0, border: 0, width: "1px", height: "1px", visibility: =
"hidden" } );=0A=
=0A=
		container.innerHTML =3D html;=0A=
		body.insertBefore( container, body.firstChild );=0A=
		innerDiv =3D container.firstChild;=0A=
		checkDiv =3D innerDiv.firstChild;=0A=
		td =3D innerDiv.nextSibling.firstChild.firstChild;=0A=
=0A=
		this.doesNotAddBorder =3D (checkDiv.offsetTop !=3D=3D 5);=0A=
		this.doesAddBorderForTableAndCells =3D (td.offsetTop =3D=3D=3D 5);=0A=
=0A=
		checkDiv.style.position =3D "fixed";=0A=
		checkDiv.style.top =3D "20px";=0A=
=0A=
		// safari subtracts parent border width here which is 5px=0A=
		this.supportsFixedPosition =3D (checkDiv.offsetTop =3D=3D=3D 20 || =
checkDiv.offsetTop =3D=3D=3D 15);=0A=
		checkDiv.style.position =3D checkDiv.style.top =3D "";=0A=
=0A=
		innerDiv.style.overflow =3D "hidden";=0A=
		innerDiv.style.position =3D "relative";=0A=
=0A=
		this.subtractsBorderForOverflowNotVisible =3D (checkDiv.offsetTop =
=3D=3D=3D -5);=0A=
=0A=
		this.doesNotIncludeMarginInBodyOffset =3D (body.offsetTop !=3D=3D =
bodyMarginTop);=0A=
=0A=
		body.removeChild( container );=0A=
		body =3D container =3D innerDiv =3D checkDiv =3D table =3D td =3D null;=0A=
		jQuery.offset.initialize =3D jQuery.noop;=0A=
	},=0A=
=0A=
	bodyOffset: function( body ) {=0A=
		var top =3D body.offsetTop,=0A=
			left =3D body.offsetLeft;=0A=
=0A=
		jQuery.offset.initialize();=0A=
=0A=
		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {=0A=
			top  +=3D parseFloat( jQuery.css(body, "marginTop") ) || 0;=0A=
			left +=3D parseFloat( jQuery.css(body, "marginLeft") ) || 0;=0A=
		}=0A=
=0A=
		return { top: top, left: left };=0A=
	},=0A=
	=0A=
	setOffset: function( elem, options, i ) {=0A=
		var position =3D jQuery.css( elem, "position" );=0A=
=0A=
		// set position first, in-case top/left are set even on static elem=0A=
		if ( position =3D=3D=3D "static" ) {=0A=
			elem.style.position =3D "relative";=0A=
		}=0A=
=0A=
		var curElem =3D jQuery( elem ),=0A=
			curOffset =3D curElem.offset(),=0A=
			curCSSTop =3D jQuery.css( elem, "top" ),=0A=
			curCSSLeft =3D jQuery.css( elem, "left" ),=0A=
			calculatePosition =3D (position =3D=3D=3D "absolute" && =
jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),=0A=
			props =3D {}, curPosition =3D {}, curTop, curLeft;=0A=
=0A=
		// need to be able to calculate position if either top or left is auto =
and position is absolute=0A=
		if ( calculatePosition ) {=0A=
			curPosition =3D curElem.position();=0A=
		}=0A=
=0A=
		curTop  =3D calculatePosition ? curPosition.top  : parseInt( =
curCSSTop,  10 ) || 0;=0A=
		curLeft =3D calculatePosition ? curPosition.left : parseInt( =
curCSSLeft, 10 ) || 0;=0A=
=0A=
		if ( jQuery.isFunction( options ) ) {=0A=
			options =3D options.call( elem, i, curOffset );=0A=
		}=0A=
=0A=
		if (options.top !=3D null) {=0A=
			props.top =3D (options.top - curOffset.top) + curTop;=0A=
		}=0A=
		if (options.left !=3D null) {=0A=
			props.left =3D (options.left - curOffset.left) + curLeft;=0A=
		}=0A=
		=0A=
		if ( "using" in options ) {=0A=
			options.using.call( elem, props );=0A=
		} else {=0A=
			curElem.css( props );=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
=0A=
jQuery.fn.extend({=0A=
	position: function() {=0A=
		if ( !this[0] ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		var elem =3D this[0],=0A=
=0A=
		// Get *real* offsetParent=0A=
		offsetParent =3D this.offsetParent(),=0A=
=0A=
		// Get correct offsets=0A=
		offset       =3D this.offset(),=0A=
		parentOffset =3D rroot.test(offsetParent[0].nodeName) ? { top: 0, =
left: 0 } : offsetParent.offset();=0A=
=0A=
		// Subtract element margins=0A=
		// note: when an element has margin: auto the offsetLeft and marginLeft=0A=
		// are the same in Safari causing offset.left to incorrectly be 0=0A=
		offset.top  -=3D parseFloat( jQuery.css(elem, "marginTop") ) || 0;=0A=
		offset.left -=3D parseFloat( jQuery.css(elem, "marginLeft") ) || 0;=0A=
=0A=
		// Add offsetParent borders=0A=
		parentOffset.top  +=3D parseFloat( jQuery.css(offsetParent[0], =
"borderTopWidth") ) || 0;=0A=
		parentOffset.left +=3D parseFloat( jQuery.css(offsetParent[0], =
"borderLeftWidth") ) || 0;=0A=
=0A=
		// Subtract the two offsets=0A=
		return {=0A=
			top:  offset.top  - parentOffset.top,=0A=
			left: offset.left - parentOffset.left=0A=
		};=0A=
	},=0A=
=0A=
	offsetParent: function() {=0A=
		return this.map(function() {=0A=
			var offsetParent =3D this.offsetParent || document.body;=0A=
			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && =
jQuery.css(offsetParent, "position") =3D=3D=3D "static") ) {=0A=
				offsetParent =3D offsetParent.offsetParent;=0A=
			}=0A=
			return offsetParent;=0A=
		});=0A=
	}=0A=
});=0A=
=0A=
=0A=
// Create scrollLeft and scrollTop methods=0A=
jQuery.each( ["Left", "Top"], function( i, name ) {=0A=
	var method =3D "scroll" + name;=0A=
=0A=
	jQuery.fn[ method ] =3D function(val) {=0A=
		var elem =3D this[0], win;=0A=
		=0A=
		if ( !elem ) {=0A=
			return null;=0A=
		}=0A=
=0A=
		if ( val !=3D=3D undefined ) {=0A=
			// Set the scroll offset=0A=
			return this.each(function() {=0A=
				win =3D getWindow( this );=0A=
=0A=
				if ( win ) {=0A=
					win.scrollTo(=0A=
						!i ? val : jQuery(win).scrollLeft(),=0A=
						 i ? val : jQuery(win).scrollTop()=0A=
					);=0A=
=0A=
				} else {=0A=
					this[ method ] =3D val;=0A=
				}=0A=
			});=0A=
		} else {=0A=
			win =3D getWindow( elem );=0A=
=0A=
			// Return the scroll offset=0A=
			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : =
"pageXOffset" ] :=0A=
				jQuery.support.boxModel && win.document.documentElement[ method ] ||=0A=
					win.document.body[ method ] :=0A=
				elem[ method ];=0A=
		}=0A=
	};=0A=
});=0A=
=0A=
function getWindow( elem ) {=0A=
	return jQuery.isWindow( elem ) ?=0A=
		elem :=0A=
		elem.nodeType =3D=3D=3D 9 ?=0A=
			elem.defaultView || elem.parentWindow :=0A=
			false;=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
// Create innerHeight, innerWidth, outerHeight and outerWidth methods=0A=
jQuery.each([ "Height", "Width" ], function( i, name ) {=0A=
=0A=
	var type =3D name.toLowerCase();=0A=
=0A=
	// innerHeight and innerWidth=0A=
	jQuery.fn["inner" + name] =3D function() {=0A=
		return this[0] ?=0A=
			parseFloat( jQuery.css( this[0], type, "padding" ) ) :=0A=
			null;=0A=
	};=0A=
=0A=
	// outerHeight and outerWidth=0A=
	jQuery.fn["outer" + name] =3D function( margin ) {=0A=
		return this[0] ?=0A=
			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) =
) :=0A=
			null;=0A=
	};=0A=
=0A=
	jQuery.fn[ type ] =3D function( size ) {=0A=
		// Get window width or height=0A=
		var elem =3D this[0];=0A=
		if ( !elem ) {=0A=
			return size =3D=3D null ? null : this;=0A=
		}=0A=
		=0A=
		if ( jQuery.isFunction( size ) ) {=0A=
			return this.each(function( i ) {=0A=
				var self =3D jQuery( this );=0A=
				self[ type ]( size.call( this, i, self[ type ]() ) );=0A=
			});=0A=
		}=0A=
=0A=
		if ( jQuery.isWindow( elem ) ) {=0A=
			// Everyone else use document.documentElement or document.body =
depending on Quirks vs Standards mode=0A=
			return elem.document.compatMode =3D=3D=3D "CSS1Compat" && =
elem.document.documentElement[ "client" + name ] ||=0A=
				elem.document.body[ "client" + name ];=0A=
=0A=
		// Get document width or height=0A=
		} else if ( elem.nodeType =3D=3D=3D 9 ) {=0A=
			// Either scroll[Width/Height] or offset[Width/Height], whichever is =
greater=0A=
			return Math.max(=0A=
				elem.documentElement["client" + name],=0A=
				elem.body["scroll" + name], elem.documentElement["scroll" + name],=0A=
				elem.body["offset" + name], elem.documentElement["offset" + name]=0A=
			);=0A=
=0A=
		// Get or set width or height on the element=0A=
		} else if ( size =3D=3D=3D undefined ) {=0A=
			var orig =3D jQuery.css( elem, type ),=0A=
				ret =3D parseFloat( orig );=0A=
=0A=
			return jQuery.isNaN( ret ) ? orig : ret;=0A=
=0A=
		// Set the width or height on the element (default to pixels if value =
is unitless)=0A=
		} else {=0A=
			return this.css( type, typeof size =3D=3D=3D "string" ? size : size + =
"px" );=0A=
		}=0A=
	};=0A=
=0A=
});=0A=
=0A=
=0A=
})(window);=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/prive/javascript/jquery.form.js

/*=0A=
 * jQuery Form Plugin=0A=
 * version: 2.36 (07-NOV-2009)=0A=
 * @requires jQuery v1.2.6 or later=0A=
 *=0A=
 * Examples and documentation at: http://malsup.com/jquery/form/=0A=
 * Dual licensed under the MIT and GPL licenses:=0A=
 *   http://www.opensource.org/licenses/mit-license.php=0A=
 *   http://www.gnu.org/licenses/gpl.html=0A=
 */=0A=
;(function($) {=0A=
=0A=
/*=0A=
	Usage Note:=0A=
	-----------=0A=
	Do not use both ajaxSubmit and ajaxForm on the same form.  These=0A=
	functions are intended to be exclusive.  Use ajaxSubmit if you want=0A=
	to bind your own submit handler to the form.  For example,=0A=
=0A=
	$(document).ready(function() {=0A=
		$('#myForm').bind('submit', function() {=0A=
			$(this).ajaxSubmit({=0A=
				target: '#output'=0A=
			});=0A=
			return false; // <-- important!=0A=
		});=0A=
	});=0A=
=0A=
	Use ajaxForm when you want the plugin to manage all the event binding=0A=
	for you.  For example,=0A=
=0A=
	$(document).ready(function() {=0A=
		$('#myForm').ajaxForm({=0A=
			target: '#output'=0A=
		});=0A=
	});=0A=
=0A=
	When using ajaxForm, the ajaxSubmit function will be invoked for you=0A=
	at the appropriate time.=0A=
*/=0A=
=0A=
/**=0A=
 * ajaxSubmit() provides a mechanism for immediately submitting=0A=
 * an HTML form using AJAX.=0A=
 */=0A=
$.fn.ajaxSubmit =3D function(options) {=0A=
	// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)=0A=
	if (!this.length) {=0A=
		log('ajaxSubmit: skipping submit process - no element selected');=0A=
		return this;=0A=
	}=0A=
=0A=
	if (typeof options =3D=3D 'function')=0A=
		options =3D { success: options };=0A=
=0A=
	var url =3D $.trim(this.attr('action'));=0A=
	if (url) {=0A=
		// clean url (don't include hash vaue)=0A=
		url =3D (url.match(/^([^#]+)/)||[])[1];=0A=
   	}=0A=
   	url =3D url || window.location.href || '';=0A=
=0A=
	options =3D $.extend({=0A=
		url:  url,=0A=
		type: this.attr('method') || 'GET',=0A=
		iframeSrc: /^https/i.test(window.location.href || '') ? =
'javascript:false' : 'about:blank'=0A=
	}, options || {});=0A=
=0A=
	// hook for manipulating the form data before it is extracted;=0A=
	// convenient for use with rich editors like tinyMCE or FCKEditor=0A=
	var veto =3D {};=0A=
	this.trigger('form-pre-serialize', [this, options, veto]);=0A=
	if (veto.veto) {=0A=
		log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');=0A=
		return this;=0A=
	}=0A=
=0A=
	// provide opportunity to alter form data before it is serialized=0A=
	if (options.beforeSerialize && options.beforeSerialize(this, options) =
=3D=3D=3D false) {=0A=
		log('ajaxSubmit: submit aborted via beforeSerialize callback');=0A=
		return this;=0A=
	}=0A=
=0A=
	var a =3D this.formToArray(options.semantic);=0A=
	if (options.data) {=0A=
		options.extraData =3D options.data;=0A=
		for (var n in options.data) {=0A=
		  if(options.data[n] instanceof Array) {=0A=
			for (var k in options.data[n])=0A=
			  a.push( { name: n, value: options.data[n][k] } );=0A=
		  }=0A=
		  else=0A=
			 a.push( { name: n, value: options.data[n] } );=0A=
		}=0A=
	}=0A=
=0A=
	// give pre-submit callback an opportunity to abort the submit=0A=
	if (options.beforeSubmit && options.beforeSubmit(a, this, options) =
=3D=3D=3D false) {=0A=
		log('ajaxSubmit: submit aborted via beforeSubmit callback');=0A=
		return this;=0A=
	}=0A=
=0A=
	// fire vetoable 'validate' event=0A=
	this.trigger('form-submit-validate', [a, this, options, veto]);=0A=
	if (veto.veto) {=0A=
		log('ajaxSubmit: submit vetoed via form-submit-validate trigger');=0A=
		return this;=0A=
	}=0A=
=0A=
	var q =3D $.param(a);=0A=
=0A=
	if (options.type.toUpperCase() =3D=3D 'GET') {=0A=
		options.url +=3D (options.url.indexOf('?') >=3D 0 ? '&' : '?') + q;=0A=
		options.data =3D null;  // data is null for 'get'=0A=
	}=0A=
	else=0A=
		options.data =3D q; // data is the query string for 'post'=0A=
=0A=
	var $form =3D this, callbacks =3D [];=0A=
	if (options.resetForm) callbacks.push(function() { $form.resetForm(); =
});=0A=
	if (options.clearForm) callbacks.push(function() { $form.clearForm(); =
});=0A=
=0A=
	// perform a load on the target only if dataType is not provided=0A=
	if (!options.dataType && options.target) {=0A=
		var oldSuccess =3D options.success || function(){};=0A=
		callbacks.push(function(data) {=0A=
			$(options.target).html(data).each(oldSuccess, arguments);=0A=
		});=0A=
	}=0A=
	else if (options.success)=0A=
		callbacks.push(options.success);=0A=
=0A=
	options.success =3D function(data, status) {=0A=
		for (var i=3D0, max=3Dcallbacks.length; i < max; i++)=0A=
			callbacks[i].apply(options, [data, status, $form]);=0A=
	};=0A=
=0A=
	// are there files to upload?=0A=
	var files =3D $('input:file', this).fieldValue();=0A=
	var found =3D false;=0A=
	for (var j=3D0; j < files.length; j++)=0A=
		if (files[j])=0A=
			found =3D true;=0A=
=0A=
	var multipart =3D false;=0A=
//	var mp =3D 'multipart/form-data';=0A=
//	multipart =3D ($form.attr('enctype') =3D=3D mp || =
$form.attr('encoding') =3D=3D mp);=0A=
=0A=
	// options.iframe allows user to force iframe mode=0A=
	// 06-NOV-09: now defaulting to iframe mode if file input is detected=0A=
   if ((files.length && options.iframe !=3D=3D false) || options.iframe =
|| found || multipart) {=0A=
	   // hack to fix Safari hang (thanks to Tim Molendijk for this)=0A=
	   // see:  =
http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab5=
10dd5d=0A=
	   if (options.closeKeepAlive)=0A=
		   $.get(options.closeKeepAlive, fileUpload);=0A=
	   else=0A=
		   fileUpload();=0A=
	   }=0A=
   else=0A=
	   $.ajax(options);=0A=
=0A=
	// fire 'notify' event=0A=
	this.trigger('form-submit-notify', [this, options]);=0A=
	return this;=0A=
=0A=
=0A=
	// private function for handling file uploads (hat tip to YAHOO!)=0A=
	function fileUpload() {=0A=
		var form =3D $form[0];=0A=
=0A=
		if ($(':input[name=3Dsubmit]', form).length) {=0A=
			alert('Error: Form elements must not be named "submit".');=0A=
			return;=0A=
		}=0A=
=0A=
		var opts =3D $.extend({}, $.ajaxSettings, options);=0A=
		var s =3D $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);=0A=
=0A=
		var id =3D 'jqFormIO' + (new Date().getTime());=0A=
		var $io =3D $('<iframe id=3D"' + id + '" name=3D"' + id + '" src=3D"'+ =
opts.iframeSrc +'" />');=0A=
		var io =3D $io[0];=0A=
=0A=
		$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });=0A=
=0A=
		var xhr =3D { // mock object=0A=
			aborted: 0,=0A=
			responseText: null,=0A=
			responseXML: null,=0A=
			status: 0,=0A=
			statusText: 'n/a',=0A=
			getAllResponseHeaders: function() {},=0A=
			getResponseHeader: function() {},=0A=
			setRequestHeader: function() {},=0A=
			abort: function() {=0A=
				this.aborted =3D 1;=0A=
				$io.attr('src', opts.iframeSrc); // abort op in progress=0A=
			}=0A=
		};=0A=
=0A=
		var g =3D opts.global;=0A=
		// trigger ajax global events so that activity/block indicators work =
like normal=0A=
		if (g && ! $.active++) $.event.trigger("ajaxStart");=0A=
		if (g) $.event.trigger("ajaxSend", [xhr, opts]);=0A=
=0A=
		if (s.beforeSend && s.beforeSend(xhr, s) =3D=3D=3D false) {=0A=
			s.global && $.active--;=0A=
			return;=0A=
		}=0A=
		if (xhr.aborted)=0A=
			return;=0A=
=0A=
		var cbInvoked =3D 0;=0A=
		var timedOut =3D 0;=0A=
=0A=
		// add submitting element to data if we know it=0A=
		var sub =3D form.clk;=0A=
		if (sub) {=0A=
			var n =3D sub.name;=0A=
			if (n && !sub.disabled) {=0A=
				options.extraData =3D options.extraData || {};=0A=
				options.extraData[n] =3D sub.value;=0A=
				if (sub.type =3D=3D "image") {=0A=
					options.extraData[name+'.x'] =3D form.clk_x;=0A=
					options.extraData[name+'.y'] =3D form.clk_y;=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		// take a breath so that pending repaints get some cpu time before the =
upload starts=0A=
		setTimeout(function() {=0A=
			// make sure form attrs are set=0A=
			var t =3D $form.attr('target'), a =3D $form.attr('action');=0A=
=0A=
			// update form attrs in IE friendly way=0A=
			form.setAttribute('target',id);=0A=
			if (form.getAttribute('method') !=3D 'POST')=0A=
				form.setAttribute('method', 'POST');=0A=
			if (form.getAttribute('action') !=3D opts.url)=0A=
				form.setAttribute('action', opts.url);=0A=
=0A=
			// ie borks in some cases when setting encoding=0A=
			if (! options.skipEncodingOverride) {=0A=
				$form.attr({=0A=
					encoding: 'multipart/form-data',=0A=
					enctype:  'multipart/form-data'=0A=
				});=0A=
			}=0A=
=0A=
			// support timout=0A=
			if (opts.timeout)=0A=
				setTimeout(function() { timedOut =3D true; cb(); }, opts.timeout);=0A=
=0A=
			// add "extra" data to form if provided in options=0A=
			var extraInputs =3D [];=0A=
			try {=0A=
				if (options.extraData)=0A=
					for (var n in options.extraData)=0A=
						extraInputs.push(=0A=
							$('<input type=3D"hidden" name=3D"'+n+'" =
value=3D"'+options.extraData[n]+'" />')=0A=
								.appendTo(form)[0]);=0A=
=0A=
				// add iframe to doc and submit the form=0A=
				$io.appendTo('body');=0A=
				io.attachEvent ? io.attachEvent('onload', cb) : =
io.addEventListener('load', cb, false);=0A=
				form.submit();=0A=
			}=0A=
			finally {=0A=
				// reset attrs and remove "extra" input elements=0A=
				form.setAttribute('action',a);=0A=
				t ? form.setAttribute('target', t) : $form.removeAttr('target');=0A=
				$(extraInputs).remove();=0A=
			}=0A=
		}, 10);=0A=
=0A=
		var domCheckCount =3D 50;=0A=
=0A=
		function cb() {=0A=
			if (cbInvoked++) return;=0A=
=0A=
			io.detachEvent ? io.detachEvent('onload', cb) : =
io.removeEventListener('load', cb, false);=0A=
=0A=
			var ok =3D true;=0A=
			try {=0A=
				if (timedOut) throw 'timeout';=0A=
				// extract the server response from the iframe=0A=
				var data, doc;=0A=
=0A=
				doc =3D io.contentWindow ? io.contentWindow.document : =
io.contentDocument ? io.contentDocument : io.document;=0A=
=0A=
				var isXml =3D opts.dataType =3D=3D 'xml' || doc.XMLDocument || =
$.isXMLDoc(doc);=0A=
				log('isXml=3D'+isXml);=0A=
				if (!isXml && (doc.body =3D=3D null || doc.body.innerHTML =3D=3D =
'')) {=0A=
				 	if (--domCheckCount) {=0A=
						// in some browsers (Opera) the iframe DOM is not always =
traversable when=0A=
						// the onload callback fires, so we loop a bit to accommodate=0A=
						cbInvoked =3D 0;=0A=
						setTimeout(cb, 100);=0A=
						return;=0A=
					}=0A=
					log('Could not access iframe DOM after 50 tries.');=0A=
					return;=0A=
				}=0A=
=0A=
				xhr.responseText =3D doc.body ? doc.body.innerHTML : null;=0A=
				xhr.responseXML =3D doc.XMLDocument ? doc.XMLDocument : doc;=0A=
				xhr.getResponseHeader =3D function(header){=0A=
					var headers =3D {'content-type': opts.dataType};=0A=
					return headers[header];=0A=
				};=0A=
=0A=
				if (opts.dataType =3D=3D 'json' || opts.dataType =3D=3D 'script') {=0A=
					// see if user embedded response in textarea=0A=
					var ta =3D doc.getElementsByTagName('textarea')[0];=0A=
					if (ta)=0A=
						xhr.responseText =3D ta.value;=0A=
					else {=0A=
						// account for browsers injecting pre around json response=0A=
						var pre =3D doc.getElementsByTagName('pre')[0];=0A=
						if (pre)=0A=
							xhr.responseText =3D pre.innerHTML;=0A=
					}=0A=
				}=0A=
				else if (opts.dataType =3D=3D 'xml' && !xhr.responseXML && =
xhr.responseText !=3D null) {=0A=
					xhr.responseXML =3D toXml(xhr.responseText);=0A=
				}=0A=
				data =3D $.httpData(xhr, opts.dataType);=0A=
			}=0A=
			catch(e){=0A=
				ok =3D false;=0A=
				$.handleError(opts, xhr, 'error', e);=0A=
			}=0A=
=0A=
			// ordering of these callbacks/triggers is odd, but that's how $.ajax =
does it=0A=
			if (ok) {=0A=
				opts.success(data, 'success');=0A=
				if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);=0A=
			}=0A=
			if (g) $.event.trigger("ajaxComplete", [xhr, opts]);=0A=
			if (g && ! --$.active) $.event.trigger("ajaxStop");=0A=
			if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');=0A=
=0A=
			// clean up=0A=
			setTimeout(function() {=0A=
				$io.remove();=0A=
				xhr.responseXML =3D null;=0A=
			}, 100);=0A=
		};=0A=
=0A=
		function toXml(s, doc) {=0A=
			if (window.ActiveXObject) {=0A=
				doc =3D new ActiveXObject('Microsoft.XMLDOM');=0A=
				doc.async =3D 'false';=0A=
				doc.loadXML(s);=0A=
			}=0A=
			else=0A=
				doc =3D (new DOMParser()).parseFromString(s, 'text/xml');=0A=
			return (doc && doc.documentElement && doc.documentElement.tagName =
!=3D 'parsererror') ? doc : null;=0A=
		};=0A=
	};=0A=
};=0A=
=0A=
/**=0A=
 * ajaxForm() provides a mechanism for fully automating form submission.=0A=
 *=0A=
 * The advantages of using this method instead of ajaxSubmit() are:=0A=
 *=0A=
 * 1: This method will include coordinates for <input type=3D"image" /> =
elements (if the element=0A=
 *	is used to submit the form).=0A=
 * 2. This method will include the submit element's name/value data (for =
the element that was=0A=
 *	used to submit the form).=0A=
 * 3. This method binds the submit() method to the form for you.=0A=
 *=0A=
 * The options argument for ajaxForm works exactly as it does for =
ajaxSubmit.  ajaxForm merely=0A=
 * passes the options argument along after properly binding events for =
submit elements and=0A=
 * the form itself.=0A=
 */=0A=
$.fn.ajaxForm =3D function(options) {=0A=
	return this.ajaxFormUnbind().bind('submit.form-plugin', function() {=0A=
		$(this).ajaxSubmit(options);=0A=
		return false;=0A=
	}).bind('click.form-plugin', function(e) {=0A=
		var target =3D e.target;=0A=
		var $el =3D $(target);=0A=
		if (!($el.is(":submit,input:image"))) {=0A=
			// is this a child element of the submit el?  (ex: a span within a =
button)=0A=
			var t =3D $el.closest(':submit');=0A=
			if (t.length =3D=3D 0)=0A=
				return;=0A=
			target =3D t[0];=0A=
		}=0A=
		var form =3D this;=0A=
		form.clk =3D target;=0A=
		if (target.type =3D=3D 'image') {=0A=
			if (e.offsetX !=3D undefined) {=0A=
				form.clk_x =3D e.offsetX;=0A=
				form.clk_y =3D e.offsetY;=0A=
			} else if (typeof $.fn.offset =3D=3D 'function') { // try to use =
dimensions plugin=0A=
				var offset =3D $el.offset();=0A=
				form.clk_x =3D e.pageX - offset.left;=0A=
				form.clk_y =3D e.pageY - offset.top;=0A=
			} else {=0A=
				form.clk_x =3D e.pageX - target.offsetLeft;=0A=
				form.clk_y =3D e.pageY - target.offsetTop;=0A=
			}=0A=
		}=0A=
		// clear form vars=0A=
		setTimeout(function() { form.clk =3D form.clk_x =3D form.clk_y =3D =
null; }, 100);=0A=
	});=0A=
};=0A=
=0A=
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm=0A=
$.fn.ajaxFormUnbind =3D function() {=0A=
	return this.unbind('submit.form-plugin click.form-plugin');=0A=
};=0A=
=0A=
/**=0A=
 * formToArray() gathers form element data into an array of objects that =
can=0A=
 * be passed to any of the following ajax functions: $.get, $.post, or =
load.=0A=
 * Each object in the array has both a 'name' and 'value' property.  An =
example of=0A=
 * an array for a simple login form might be:=0A=
 *=0A=
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: =
'secret' } ]=0A=
 *=0A=
 * It is this array that is passed to pre-submit callback functions =
provided to the=0A=
 * ajaxSubmit() and ajaxForm() methods.=0A=
 */=0A=
$.fn.formToArray =3D function(semantic) {=0A=
	var a =3D [];=0A=
	if (this.length =3D=3D 0) return a;=0A=
=0A=
	var form =3D this[0];=0A=
	var els =3D semantic ? form.getElementsByTagName('*') : form.elements;=0A=
	if (!els) return a;=0A=
	for(var i=3D0, max=3Dels.length; i < max; i++) {=0A=
		var el =3D els[i];=0A=
		var n =3D el.name;=0A=
		if (!n) continue;=0A=
=0A=
		if (semantic && form.clk && el.type =3D=3D "image") {=0A=
			// handle image inputs on the fly when semantic =3D=3D true=0A=
			if(!el.disabled && form.clk =3D=3D el) {=0A=
				a.push({name: n, value: $(el).val()});=0A=
				a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: =
form.clk_y});=0A=
			}=0A=
			continue;=0A=
		}=0A=
=0A=
		var v =3D $.fieldValue(el, true);=0A=
		if (v && v.constructor =3D=3D Array) {=0A=
			for(var j=3D0, jmax=3Dv.length; j < jmax; j++)=0A=
				a.push({name: n, value: v[j]});=0A=
		}=0A=
		else if (v !=3D=3D null && typeof v !=3D 'undefined')=0A=
			a.push({name: n, value: v});=0A=
	}=0A=
=0A=
	if (!semantic && form.clk) {=0A=
		// input type=3D=3D'image' are not found in elements array! handle it =
here=0A=
		var $input =3D $(form.clk), input =3D $input[0], n =3D input.name;=0A=
		if (n && !input.disabled && input.type =3D=3D 'image') {=0A=
			a.push({name: n, value: $input.val()});=0A=
			a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: =
form.clk_y});=0A=
		}=0A=
	}=0A=
	return a;=0A=
};=0A=
=0A=
/**=0A=
 * Serializes form data into a 'submittable' string. This method will =
return a string=0A=
 * in the format: name1=3Dvalue1&amp;name2=3Dvalue2=0A=
 */=0A=
$.fn.formSerialize =3D function(semantic) {=0A=
	//hand off to jQuery.param for proper encoding=0A=
	return $.param(this.formToArray(semantic));=0A=
};=0A=
=0A=
/**=0A=
 * Serializes all field elements in the jQuery object into a query =
string.=0A=
 * This method will return a string in the format: =
name1=3Dvalue1&amp;name2=3Dvalue2=0A=
 */=0A=
$.fn.fieldSerialize =3D function(successful) {=0A=
	var a =3D [];=0A=
	this.each(function() {=0A=
		var n =3D this.name;=0A=
		if (!n) return;=0A=
		var v =3D $.fieldValue(this, successful);=0A=
		if (v && v.constructor =3D=3D Array) {=0A=
			for (var i=3D0,max=3Dv.length; i < max; i++)=0A=
				a.push({name: n, value: v[i]});=0A=
		}=0A=
		else if (v !=3D=3D null && typeof v !=3D 'undefined')=0A=
			a.push({name: this.name, value: v});=0A=
	});=0A=
	//hand off to jQuery.param for proper encoding=0A=
	return $.param(a);=0A=
};=0A=
=0A=
/**=0A=
 * Returns the value(s) of the element in the matched set.  For example, =
consider the following form:=0A=
 *=0A=
 *  <form><fieldset>=0A=
 *	  <input name=3D"A" type=3D"text" />=0A=
 *	  <input name=3D"A" type=3D"text" />=0A=
 *	  <input name=3D"B" type=3D"checkbox" value=3D"B1" />=0A=
 *	  <input name=3D"B" type=3D"checkbox" value=3D"B2"/>=0A=
 *	  <input name=3D"C" type=3D"radio" value=3D"C1" />=0A=
 *	  <input name=3D"C" type=3D"radio" value=3D"C2" />=0A=
 *  </fieldset></form>=0A=
 *=0A=
 *  var v =3D $(':text').fieldValue();=0A=
 *  // if no values are entered into the text inputs=0A=
 *  v =3D=3D ['','']=0A=
 *  // if values entered into the text inputs are 'foo' and 'bar'=0A=
 *  v =3D=3D ['foo','bar']=0A=
 *=0A=
 *  var v =3D $(':checkbox').fieldValue();=0A=
 *  // if neither checkbox is checked=0A=
 *  v =3D=3D=3D undefined=0A=
 *  // if both checkboxes are checked=0A=
 *  v =3D=3D ['B1', 'B2']=0A=
 *=0A=
 *  var v =3D $(':radio').fieldValue();=0A=
 *  // if neither radio is checked=0A=
 *  v =3D=3D=3D undefined=0A=
 *  // if first radio is checked=0A=
 *  v =3D=3D ['C1']=0A=
 *=0A=
 * The successful argument controls whether or not the field element =
must be 'successful'=0A=
 * (per =
http://www.w3.org/TR/html4/interact/forms.html#successful-controls).=0A=
 * The default value of the successful argument is true.  If this value =
is false the value(s)=0A=
 * for each element is returned.=0A=
 *=0A=
 * Note: This method *always* returns an array.  If no valid value can =
be determined the=0A=
 *	   array will be empty, otherwise it will contain one or more values.=0A=
 */=0A=
$.fn.fieldValue =3D function(successful) {=0A=
	for (var val=3D[], i=3D0, max=3Dthis.length; i < max; i++) {=0A=
		var el =3D this[i];=0A=
		var v =3D $.fieldValue(el, successful);=0A=
		if (v =3D=3D=3D null || typeof v =3D=3D 'undefined' || (v.constructor =
=3D=3D Array && !v.length))=0A=
			continue;=0A=
		v.constructor =3D=3D Array ? $.merge(val, v) : val.push(v);=0A=
	}=0A=
	return val;=0A=
};=0A=
=0A=
/**=0A=
 * Returns the value of the field element.=0A=
 */=0A=
$.fieldValue =3D function(el, successful) {=0A=
	var n =3D el.name, t =3D el.type, tag =3D el.tagName.toLowerCase();=0A=
	if (typeof successful =3D=3D 'undefined') successful =3D true;=0A=
=0A=
	if (successful && (!n || el.disabled || t =3D=3D 'reset' || t =3D=3D =
'button' ||=0A=
		(t =3D=3D 'checkbox' || t =3D=3D 'radio') && !el.checked ||=0A=
		(t =3D=3D 'submit' || t =3D=3D 'image') && el.form && el.form.clk !=3D =
el ||=0A=
		tag =3D=3D 'select' && el.selectedIndex =3D=3D -1))=0A=
			return null;=0A=
=0A=
	if (tag =3D=3D 'select') {=0A=
		var index =3D el.selectedIndex;=0A=
		if (index < 0) return null;=0A=
		var a =3D [], ops =3D el.options;=0A=
		var one =3D (t =3D=3D 'select-one');=0A=
		var max =3D (one ? index+1 : ops.length);=0A=
		for(var i=3D(one ? index : 0); i < max; i++) {=0A=
			var op =3D ops[i];=0A=
			if (op.selected) {=0A=
				var v =3D op.value;=0A=
				if (!v) // extra pain for IE...=0A=
					v =3D (op.attributes && op.attributes['value'] && =
!(op.attributes['value'].specified)) ? op.text : op.value;=0A=
				if (one) return v;=0A=
				a.push(v);=0A=
			}=0A=
		}=0A=
		return a;=0A=
	}=0A=
	return el.value;=0A=
};=0A=
=0A=
/**=0A=
 * Clears the form data.  Takes the following actions on the form's =
input fields:=0A=
 *  - input text fields will have their 'value' property set to the =
empty string=0A=
 *  - select elements will have their 'selectedIndex' property set to -1=0A=
 *  - checkbox and radio inputs will have their 'checked' property set =
to false=0A=
 *  - inputs of type submit, button, reset, and hidden will *not* be =
effected=0A=
 *  - button elements will *not* be effected=0A=
 */=0A=
$.fn.clearForm =3D function() {=0A=
	return this.each(function() {=0A=
		$('input,select,textarea', this).clearFields();=0A=
	});=0A=
};=0A=
=0A=
/**=0A=
 * Clears the selected form elements.=0A=
 */=0A=
$.fn.clearFields =3D $.fn.clearInputs =3D function() {=0A=
	return this.each(function() {=0A=
		var t =3D this.type, tag =3D this.tagName.toLowerCase();=0A=
		if (t =3D=3D 'text' || t =3D=3D 'password' || tag =3D=3D 'textarea')=0A=
			this.value =3D '';=0A=
		else if (t =3D=3D 'checkbox' || t =3D=3D 'radio')=0A=
			this.checked =3D false;=0A=
		else if (tag =3D=3D 'select')=0A=
			this.selectedIndex =3D -1;=0A=
	});=0A=
};=0A=
=0A=
/**=0A=
 * Resets the form data.  Causes all form elements to be reset to their =
original value.=0A=
 */=0A=
$.fn.resetForm =3D function() {=0A=
	return this.each(function() {=0A=
		// guard against an input with the name of 'reset'=0A=
		// note that IE reports the reset function as an 'object'=0A=
		if (typeof this.reset =3D=3D 'function' || (typeof this.reset =3D=3D =
'object' && !this.reset.nodeType))=0A=
			this.reset();=0A=
	});=0A=
};=0A=
=0A=
/**=0A=
 * Enables or disables any matching elements.=0A=
 */=0A=
$.fn.enable =3D function(b) {=0A=
	if (b =3D=3D undefined) b =3D true;=0A=
	return this.each(function() {=0A=
		this.disabled =3D !b;=0A=
	});=0A=
};=0A=
=0A=
/**=0A=
 * Checks/unchecks any matching checkboxes or radio buttons and=0A=
 * selects/deselects and matching option elements.=0A=
 */=0A=
$.fn.selected =3D function(select) {=0A=
	if (select =3D=3D undefined) select =3D true;=0A=
	return this.each(function() {=0A=
		var t =3D this.type;=0A=
		if (t =3D=3D 'checkbox' || t =3D=3D 'radio')=0A=
			this.checked =3D select;=0A=
		else if (this.tagName.toLowerCase() =3D=3D 'option') {=0A=
			var $sel =3D $(this).parent('select');=0A=
			if (select && $sel[0] && $sel[0].type =3D=3D 'select-one') {=0A=
				// deselect all other options=0A=
				$sel.find('option').selected(false);=0A=
			}=0A=
			this.selected =3D select;=0A=
		}=0A=
	});=0A=
};=0A=
=0A=
// helper fn for console logging=0A=
// set $.fn.ajaxSubmit.debug to true to enable debug logging=0A=
function log() {=0A=
	if ($.fn.ajaxSubmit.debug && window.console && window.console.log)=0A=
		window.console.log('[jquery.form] ' + =
Array.prototype.join.call(arguments,''));=0A=
};=0A=
=0A=
})(jQuery);=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/prive/javascript/ajaxCallback.js

// A plugin that wraps all ajax calls introducing a fixed callback =
function on ajax complete=0A=
if(!jQuery.load_handlers) {=0A=
	jQuery.load_handlers =3D new Array();=0A=
	//=0A=
	// Add a function to the list of those to be executed on ajax load =
complete=0A=
	//=0A=
	function onAjaxLoad(f) {=0A=
		jQuery.load_handlers.push(f);=0A=
	};=0A=
=0A=
	//=0A=
	// Call the functions that have been added to onAjaxLoad=0A=
	//=0A=
	function triggerAjaxLoad(root) {=0A=
		for ( var i =3D 0; i < jQuery.load_handlers.length; i++ )=0A=
			jQuery.load_handlers[i].apply( root );=0A=
	};=0A=
=0A=
	// jQuery uses _load, we use _ACBload=0A=
	jQuery.fn._ACBload =3D jQuery.fn.load;=0A=
=0A=
	jQuery.fn.load =3D function( url, params, callback ) {=0A=
=0A=
		callback =3D callback || function(){};=0A=
=0A=
		// If the second parameter was provided=0A=
		if ( params ) {=0A=
			// If it's a function=0A=
			if ( params.constructor =3D=3D Function ) {=0A=
				// We assume that it's the callback=0A=
				callback =3D params;=0A=
				params =3D null;=0A=
			}=0A=
		}=0A=
		var callback2 =3D function(res,status) =
{triggerAjaxLoad(this);callback.call(this,res,status);};=0A=
=0A=
		return this._ACBload( url, params, callback2 );=0A=
	};=0A=
=0A=
	jQuery._ACBajax =3D jQuery.ajax;=0A=
=0A=
	jQuery.ajax =3D function(type) {=0A=
		var s =3D jQuery.extend(true, {}, jQuery.ajaxSettings, type);=0A=
		var callbackContext =3D s.context || s;=0A=
		//If called by _load exit now because the callback has already been set=0A=
		if (jQuery.ajax.caller=3D=3DjQuery.fn._load) return jQuery._ACBajax( =
type);=0A=
			var orig_complete =3D s.complete || function() {};=0A=
			type.complete =3D function(res,status) {=0A=
				// Do not fire OnAjaxLoad if the dataType is not html=0A=
				var dataType =3D type.dataType;=0A=
				var ct =3D (res && (typeof res.getResponseHeader =3D=3D 'function'))=0A=
					? res.getResponseHeader("content-type"): '';=0A=
				var xml =3D !dataType && ct && ct.indexOf("xml") >=3D 0;=0A=
				orig_complete.call( callbackContext, res, status);=0A=
				if(!dataType && !xml || dataType =3D=3D "html") =
triggerAjaxLoad(document);=0A=
		};=0A=
		return jQuery._ACBajax(type);=0A=
	};=0A=
=0A=
}=0A=
=0A=
// animation du bloc cible pour faire patienter=0A=
jQuery.fn.animeajax =3D function(end) {=0A=
	this.children().css('opacity', 0.5);=0A=
	if (typeof ajax_image_searching !=3D 'undefined'){=0A=
		var i =3D (this).find('.image_loading');=0A=
		if (i.length) i.eq(0).html(ajax_image_searching);=0A=
		else this.prepend('<span =
class=3D"image_loading">'+ajax_image_searching+'</span>');=0A=
	}=0A=
	return this; // don't break the chain=0A=
}=0A=
=0A=
// s'il n'est pas totalement visible, scroller pour positionner=0A=
// le bloc cible en haut de l'ecran=0A=
// si force =3D true, scroller dans tous les cas=0A=
jQuery.fn.positionner =3D function(force) {=0A=
	var offset =3D jQuery(this).offset();=0A=
	var hauteur =3D parseInt(jQuery(this).css('height'));=0A=
	var scrolltop =3D self['pageYOffset'] ||=0A=
		jQuery.boxModel && document.documentElement[ 'scrollTop' ] ||=0A=
		document.body[ 'scrollTop' ];=0A=
	var h =3D jQuery(window).height();=0A=
	var scroll=3D0;=0A=
=0A=
	if (force || offset['top'] - 5 <=3D scrolltop)=0A=
		scroll =3D offset['top'] - 5;=0A=
	else if (offset['top'] + hauteur - h + 5 > scrolltop)=0A=
		scroll =3D Math.min(offset['top'] - 5, offset['top'] + hauteur - h + =
15);=0A=
	if (scroll)=0A=
		jQuery('html,body')=0A=
		.animate({scrollTop: scroll}, 300);=0A=
=0A=
	// positionner le curseur dans la premiere zone de saisie=0A=
	jQuery(jQuery('*', =
this).filter('input[type=3Dtext],textarea')[0]).focus();=0A=
	return this; // don't break the chain=0A=
}=0A=
=0A=
// deux fonctions pour rendre l'ajax compatible Jaws=0A=
var virtualbuffer_id=3D'spip_virtualbufferupdate';=0A=
function initReaderBuffer(){=0A=
	if (jQuery('#'+virtualbuffer_id).length) return;=0A=
	jQuery('body').append('<p =
style=3D"float:left;width:0;height:0;position:absolute;left:-5000;top:-50=
00;"><input type=3D"hidden" name=3D"'+virtualbuffer_id+'" =
id=3D"'+virtualbuffer_id+'" value=3D"0" /></p>');=0A=
}=0A=
function updateReaderBuffer(){=0A=
	var i =3D jQuery('#'+virtualbuffer_id);=0A=
	if (!i.length) return;=0A=
	// incrementons l'input hidden, ce qui a pour effet de forcer le =
rafraichissement du=0A=
	// buffer du lecteur d'ecran (au moins dans Jaws)=0A=
	i.attr('value',parseInt(i.attr('value'))+1);=0A=
}=0A=
=0A=
// rechargement ajax d'un formulaire dynamique implemente par =
formulaires/xxx.html=0A=
jQuery.fn.formulaire_dyn_ajax =3D function(target) {=0A=
	if (this.length)=0A=
		initReaderBuffer();=0A=
  return this.each(function() {=0A=
		var cible =3D target || this;=0A=
		jQuery('form:not(.noajax,.bouton_action_post)', this).each(function(){=0A=
		var leform =3D this;=0A=
		var leclk,leclk_x,leclk_y;=0A=
		jQuery(this).prepend("<input type=3D'hidden' name=3D'var_ajax' =
value=3D'form' />")=0A=
		.ajaxForm({=0A=
			beforeSubmit: function(){=0A=
				// memoriser le bouton clique, en cas de repost non ajax=0A=
				leclk =3D leform.clk;=0A=
        if (leclk) {=0A=
            var n =3D leclk.name;=0A=
            if (n && !leclk.disabled && leclk.type =3D=3D "image") {=0A=
							leclk_x =3D leform.clk_x;=0A=
							leclk_y =3D leform.clk_y;=0A=
            }=0A=
        }=0A=
				jQuery(cible).addClass('loading').animeajax();=0A=
			},=0A=
			success: function(c){=0A=
				if (c=3D=3D'noajax'){=0A=
					// le serveur ne veut pas traiter ce formulaire en ajax=0A=
					// on resubmit sans ajax=0A=
					jQuery("input[name=3Dvar_ajax]",leform).remove();=0A=
					// si on a memorise le nom et la valeur du bouton clique=0A=
					// les reinjecter dans le dom sous forme de input hidden=0A=
					// pour que le serveur les recoive=0A=
					if (leclk){=0A=
            var n =3D leclk.name;=0A=
            if (n && !leclk.disabled) {=0A=
							jQuery(leform).prepend("<input type=3D'hidden' name=3D'"+n+"' =
value=3D'"+leclk.value+"' />");=0A=
							if (leclk.type =3D=3D "image") {=0A=
								jQuery(leform).prepend("<input type=3D'hidden' name=3D'"+n+".x' =
value=3D'"+leform.clk_x+"' />");=0A=
								jQuery(leform).prepend("<input type=3D'hidden' name=3D'"+n+".y' =
value=3D'"+leform.clk_y+"' />");=0A=
							}=0A=
						}=0A=
					}=0A=
					jQuery(leform).ajaxFormUnbind().submit();=0A=
				}=0A=
				else {=0A=
					var recu =3D jQuery('<div><\/div>').html(c);=0A=
					var d =3D jQuery('div.ajax',recu);=0A=
					if (d.length)=0A=
						c =3D d.html();=0A=
					jQuery(cible)=0A=
					.removeClass('loading')=0A=
					.html(c);=0A=
					var a =3D jQuery('a:first',recu).eq(0);=0A=
					if (a.length =0A=
					  && a.is('a[name=3Dajax_ancre]')=0A=
					  && jQuery(a.attr('href'),cible).length){=0A=
						a =3D a.attr('href');=0A=
						if (jQuery(a,cible).length)=0A=
							setTimeout(function(){=0A=
							jQuery(a,cible).positionner(true);=0A=
							//a =3D a.split('#');=0A=
							//window.location.hash =3D a[1];=0A=
							},10);=0A=
					}=0A=
					else{=0A=
						jQuery(cible).positionner(false);=0A=
						if (a.length && a.is('a[name=3Dajax_redirect]')){=0A=
							a =3D a.attr('href');=0A=
							jQuery(cible).addClass('loading').animeajax();=0A=
							setTimeout(function(){=0A=
								document.location.replace(a);=0A=
							},10);=0A=
						}=0A=
					}=0A=
					// on le refait a la main ici car onAjaxLoad intervient sur une =
iframe dans IE6 et non pas sur le document=0A=
					triggerAjaxLoad(cible);=0A=
					// mettre a jour le buffer du navigateur pour aider jaws et autres =
readers=0A=
					updateReaderBuffer();=0A=
				}=0A=
			},=0A=
			iframe: jQuery.browser.msie=0A=
		})=0A=
		.addClass('noajax') // previent qu'on n'ajaxera pas deux fois le meme =
formulaire en cas de ajaxload=0A=
		;=0A=
		});=0A=
  });=0A=
}=0A=
=0A=
// permettre d'utiliser onclick=3D'return confirm('etes vous sur?');' =
sur un lien ajax=0A=
var ajax_confirm=3Dtrue;=0A=
var ajax_confirm_date=3D0;=0A=
var spip_confirm =3D window.confirm;=0A=
function _confirm(message){=0A=
	ajax_confirm =3D spip_confirm(message);=0A=
	if (!ajax_confirm) {=0A=
		var d =3D new Date();=0A=
		ajax_confirm_date =3D d.getTime();=0A=
	}=0A=
	return ajax_confirm;=0A=
}=0A=
window.confirm =3D _confirm;=0A=
=0A=
// rechargement ajax d'une noisette implementee par {ajax}=0A=
// avec mise en cache des url=0A=
var preloaded_urls =3D {};=0A=
var ajaxbloc_selecteur;=0A=
jQuery.fn.ajaxbloc =3D function() {=0A=
	if (this.length)=0A=
		initReaderBuffer();=0A=
=0A=
  return this.each(function() {=0A=
	  jQuery('div.ajaxbloc',this).ajaxbloc(); // traiter les enfants d'abord=0A=
		var blocfrag =3D jQuery(this);=0A=
=0A=
		var on_pagination =3D function(c) {=0A=
			jQuery(blocfrag)=0A=
			.html(c)=0A=
			.removeClass('loading');=0A=
			var a =3D jQuery('a:first',jQuery(blocfrag)).eq(0);=0A=
			if (a.length =0A=
			  && a.is('a[name=3Dajax_ancre]')=0A=
			  && jQuery(a.attr('href'),blocfrag).length){=0A=
			  	a =3D a.attr('href')=0A=
				setTimeout(function(){=0A=
					jQuery(a,blocfrag).positionner(true);=0A=
					//a =3D a.split('#');=0A=
					//window.location.hash =3D a[1];=0A=
				},10);=0A=
			}=0A=
			else {=0A=
				jQuery(blocfrag).positionner(false);=0A=
			}=0A=
			updateReaderBuffer();=0A=
		}=0A=
=0A=
		var ajax_env =3D (""+blocfrag.attr('class')).match(/env-([^ ]+)/);=0A=
		if (!ajax_env || ajax_env=3D=3Dundefined) return;=0A=
		ajax_env =3D ajax_env[1];=0A=
		if (ajaxbloc_selecteur=3D=3Dundefined)=0A=
			ajaxbloc_selecteur =3D '.pagination a,a.ajax';=0A=
=0A=
		jQuery(ajaxbloc_selecteur,this).not('.noajax').each(function(){=0A=
			var url =3D this.href.split('#');=0A=
			url[0] +=3D (url[0].indexOf("?")>0 ? =
'&':'?')+'var_ajax=3D1&var_ajax_env=3D'+encodeURIComponent(ajax_env);=0A=
			if (url[1])=0A=
				url[0] +=3D "&var_ajax_ancre=3D"+url[1];=0A=
			if (jQuery(this).is('.preload') && !preloaded_urls[url[0]]) {=0A=
				=
jQuery.ajax({"url":url[0],"success":function(r){preloaded_urls[url[0]]=3D=
r;}});=0A=
			}=0A=
			jQuery(this).click(function(){=0A=
				if (!ajax_confirm) {=0A=
					// on rearme pour le prochain clic=0A=
					ajax_confirm=3Dtrue;=0A=
					var d =3D new Date();=0A=
					// seule une annulation par confirm() dans les 2 secondes =
precedentes est prise en compte=0A=
					if ((d.getTime()-ajax_confirm_date)<=3D2)=0A=
						return false;=0A=
				}=0A=
				jQuery(blocfrag)=0A=
				.animeajax()=0A=
				.addClass('loading');=0A=
				if (preloaded_urls[url[0]]) {=0A=
					on_pagination(preloaded_urls[url[0]]);=0A=
					triggerAjaxLoad(document);=0A=
				} else {=0A=
					jQuery.ajax({=0A=
						url: url[0],=0A=
						success: function(c){=0A=
							on_pagination(c);=0A=
							preloaded_urls[url[0]] =3D c;=0A=
						}=0A=
					});=0A=
				}=0A=
				return false;=0A=
			});=0A=
		}).addClass('noajax'); // previent qu'on ajax pas deux fois le meme =
lien=0A=
		jQuery('form.bouton_action_post.ajax:not(.noajax)', =
this).each(function(){=0A=
			var leform =3D this;=0A=
			var url =3D jQuery(this).attr('action').split('#');=0A=
			jQuery(this)=0A=
			.prepend("<input type=3D'hidden' name=3D'var_ajax' value=3D'1' =
/><input type=3D'hidden' name=3D'var_ajax_env' value=3D'"+(ajax_env)+"' =
/>"+(url[1]?"<input type=3D'hidden' name=3D'var_ajax_ancre' =
value=3D'"+url[1]+"' />":""))=0A=
			.ajaxForm({=0A=
				beforeSubmit: function(){=0A=
					jQuery(blocfrag).addClass('loading').animeajax();=0A=
				},=0A=
				success: function(c){=0A=
					on_pagination(c);=0A=
					preloaded_urls =3D {}; // on vide le cache des urls car on a fait =
une action en bdd=0A=
					// on le refait a la main ici car onAjaxLoad intervient sur une =
iframe dans IE6 et non pas sur le document=0A=
					jQuery(blocfrag)=0A=
					.ajaxbloc();=0A=
				},=0A=
				iframe: jQuery.browser.msie=0A=
			})=0A=
			.addClass('noajax') // previent qu'on n'ajaxera pas deux fois le meme =
formulaire en cas de ajaxload=0A=
			;=0A=
		});=0A=
  });=0A=
};=0A=
=0A=
// Ajaxer les formulaires qui le demandent, au demarrage=0A=
=0A=
jQuery(function() {=0A=
	jQuery('form:not(.bouton_action_post)').parents('div.ajax')=0A=
	.formulaire_dyn_ajax();=0A=
	jQuery('div.ajaxbloc').ajaxbloc();=0A=
});=0A=
=0A=
// ... et a chaque fois que le DOM change=0A=
onAjaxLoad(function() {=0A=
	if (jQuery){=0A=
		jQuery('form:not(.bouton_action_post)', this).parents('div.ajax')=0A=
		.formulaire_dyn_ajax();=0A=
		jQuery('div.ajaxbloc', this)=0A=
		.ajaxbloc();=0A=
	}=0A=
});=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/prive/javascript/jquery.cookie.js

/**=0A=
 * Cookie plugin=0A=
 *=0A=
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)=0A=
 * Dual licensed under the MIT and GPL licenses:=0A=
 * http://www.opensource.org/licenses/mit-license.php=0A=
 * http://www.gnu.org/licenses/gpl.html=0A=
 *=0A=
 */=0A=
=0A=
/**=0A=
 * Create a cookie with the given name and value and other optional =
parameters.=0A=
 *=0A=
 * @example $.cookie('the_cookie', 'the_value');=0A=
 * @desc Set the value of a cookie.=0A=
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', =
domain: 'jquery.com', secure: true });=0A=
 * @desc Create a cookie with all available options.=0A=
 * @example $.cookie('the_cookie', 'the_value');=0A=
 * @desc Create a session cookie.=0A=
 * @example $.cookie('the_cookie', null);=0A=
 * @desc Delete a cookie by passing null as value. Keep in mind that you =
have to use the same path and domain=0A=
 *       used when the cookie was set.=0A=
 *=0A=
 * @param String name The name of the cookie.=0A=
 * @param String value The value of the cookie.=0A=
 * @param Object options An object literal containing key/value pairs to =
provide optional cookie attributes.=0A=
 * @option Number|Date expires Either an integer specifying the =
expiration date from now on in days or a Date object.=0A=
 *                             If a negative value is specified (e.g. a =
date in the past), the cookie will be deleted.=0A=
 *                             If set to null or omitted, the cookie =
will be a session cookie and will not be retained=0A=
 *                             when the the browser exits.=0A=
 * @option String path The value of the path atribute of the cookie =
(default: path of page that created the cookie).=0A=
 * @option String domain The value of the domain attribute of the cookie =
(default: domain of page that created the cookie).=0A=
 * @option Boolean secure If true, the secure attribute of the cookie =
will be set and the cookie transmission will=0A=
 *                        require a secure protocol (like HTTPS).=0A=
 * @type undefined=0A=
 *=0A=
 * @name $.cookie=0A=
 * @cat Plugins/Cookie=0A=
 * @author Klaus Hartl/klaus.hartl@stilbuero.de=0A=
 */=0A=
=0A=
/**=0A=
 * Get the value of a cookie with the given name.=0A=
 *=0A=
 * @example $.cookie('the_cookie');=0A=
 * @desc Get the value of a cookie.=0A=
 *=0A=
 * @param String name The name of the cookie.=0A=
 * @return The value of the cookie.=0A=
 * @type String=0A=
 *=0A=
 * @name $.cookie=0A=
 * @cat Plugins/Cookie=0A=
 * @author Klaus Hartl/klaus.hartl@stilbuero.de=0A=
 */=0A=
jQuery.cookie =3D function(name, value, options) {=0A=
    if (typeof value !=3D 'undefined') { // name and value given, set =
cookie=0A=
        options =3D options || {};=0A=
        if (value =3D=3D=3D null) {=0A=
            value =3D '';=0A=
            options.expires =3D -1;=0A=
        }=0A=
        var expires =3D '';=0A=
        if (options.expires && (typeof options.expires =3D=3D 'number' =
|| options.expires.toUTCString)) {=0A=
            var date;=0A=
            if (typeof options.expires =3D=3D 'number') {=0A=
                date =3D new Date();=0A=
                date.setTime(date.getTime() + (options.expires * 24 * 60 =
* 60 * 1000));=0A=
            } else {=0A=
                date =3D options.expires;=0A=
            }=0A=
            expires =3D '; expires=3D' + date.toUTCString(); // use =
expires attribute, max-age is not supported by IE=0A=
        }=0A=
        // CAUTION: Needed to parenthesize options.path and =
options.domain=0A=
        // in the following expressions, otherwise they evaluate to =
undefined=0A=
        // in the packed version for some reason...=0A=
        var path =3D options.path ? '; path=3D' + (options.path) : '';=0A=
        var domain =3D options.domain ? '; domain=3D' + (options.domain) =
: '';=0A=
        var secure =3D options.secure ? '; secure' : '';=0A=
        document.cookie =3D [name, '=3D', encodeURIComponent(value), =
expires, path, domain, secure].join('');=0A=
    } else { // only name given, get cookie=0A=
        var cookieValue =3D null;=0A=
        if (document.cookie && document.cookie !=3D '') {=0A=
            var cookies =3D document.cookie.split(';');=0A=
            for (var i =3D 0; i < cookies.length; i++) {=0A=
                var cookie =3D jQuery.trim(cookies[i]);=0A=
                // Does this cookie string begin with the name we want?=0A=
                if (cookie.substring(0, name.length + 1) =3D=3D (name + =
'=3D')) {=0A=
                    cookieValue =3D =
decodeURIComponent(cookie.substring(name.length + 1));=0A=
                    break;=0A=
                }=0A=
            }=0A=
        }=0A=
        return cookieValue;=0A=
    }=0A=
};
------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/extensions/porte_plume/javascript/xregexp-min.js

//XRegExp 1.2.0 <xregexp.com> MIT License=0A=
var =
XRegExp;if(!XRegExp){(function(){XRegExp=3Dfunction(r,l){if(XRegExp.isReg=
Exp(r)){if(l!=3D=3Dundefined){throw TypeError("can't supply flags when =
constructing one RegExp from another")}return r.addFlags("")}if(h){throw =
Error("can't call the XRegExp constructor within token definition =
functions")}var =
l=3Dl||"",k=3D[],s=3D0,p=3DXRegExp.OUTSIDE_CLASS,m=3D{hasNamedCapture:fal=
se,captureNames:[],hasFlag:function(u){if(u.length>1){throw =
SyntaxError("flag can't be more than one character")}return =
l.indexOf(u)>-1}},n,q,o,t;while(s<r.length){n=3Dj(r,s,p,m);if(n){k.push(n=
.output);s+=3DMath.max(n.matchLength,1)}else{o=3Dr.charAt(s);if(q=3Di.exe=
c.call(f[p],r.slice(s))){k.push(q[0]);s+=3Dq[0].length}else{if(o=3D=3D=3D=
"["){p=3DXRegExp.INSIDE_CLASS}else{if(o=3D=3D=3D"]"){p=3DXRegExp.OUTSIDE_=
CLASS}}k.push(o);s++}}}t=3DRegExp(k.join(""),i.replace.call(l,e,""));t._x=
regexp=3D{source:r,captureNames:m.hasNamedCapture?m.captureNames:null};re=
turn t};var =
b=3D/\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g,e=3D/[^gimy]+|(.)(?=3D[\s\S]*\1)/g=
,a=3D/()??/.exec("")[1]=3D=3D=3Dundefined,c=3Dfunction(){var =
k=3D/^/g;k.test("");return !k.lastIndex}(),d=3Dfunction(){var =
k=3D/x/g;"x".replace(k,"");return =
!k.lastIndex}(),i=3D{exec:RegExp.prototype.exec,match:String.prototype.ma=
tch,replace:String.prototype.replace,split:String.prototype.split,test:Re=
gExp.prototype.test},j=3Dfunction(s,n,r,q){var =
p=3Dg.length,l,o,k;h=3Dtrue;while(p--){o=3Dg[p];if((r&o.scope)&&(!o.trigg=
er||o.trigger.call(q))){o.pattern.lastIndex=3Dn;k=3Do.pattern.exec(s);if(=
k&&k.index=3D=3D=3Dn){l=3D{output:o.handler.call(q,k,r),matchLength:k[0].=
length};break}}}h=3Dfalse;return =
l},h=3Dfalse,f=3D{},g=3D[];XRegExp.INSIDE_CLASS=3D1;XRegExp.OUTSIDE_CLASS=
=3D2;f[XRegExp.INSIDE_CLASS]=3D/^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\d=
A-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/;f[XRegExp.OUTSIDE_CLASS]=3D=
/^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA=
-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=3D!]|[?*+]\?|{\d+(?:,\d*)?}\??)/;XRegE=
xp.addToken=3Dfunction(n,m,l,k){g.push({pattern:XRegExp(n).addFlags("g"),=
handler:m,scope:l||XRegExp.OUTSIDE_CLASS,trigger:k||null})};RegExp.protot=
ype.exec=3Dfunction(o){var =
m=3Di.exec.apply(this,arguments),l,k;if(m){if(!a&&m.length>1&&XRegExp._in=
dexOf(m,"")>-1){k=3DRegExp("^"+this.source+"$(?!\\s)",XRegExp._getNativeF=
lags(this));i.replace.call(m[0],k,function(){for(var =
p=3D1;p<arguments.length-2;p++){if(arguments[p]=3D=3D=3Dundefined){m[p]=3D=
undefined}}})}if(this._xregexp&&this._xregexp.captureNames){for(var =
n=3D1;n<m.length;n++){l=3Dthis._xregexp.captureNames[n-1];if(l){m[l]=3Dm[=
n]}}}if(!c&&this.global&&this.lastIndex>(m.index+m[0].length)){this.lastI=
ndex--}}return m};if(!c){RegExp.prototype.test=3Dfunction(l){var =
k=3Di.exec.call(this,l);if(k&&this.global&&this.lastIndex>(k.index+k[0].l=
ength)){this.lastIndex--}return =
!!k}}String.prototype.match=3Dfunction(l){if(!XRegExp.isRegExp(l)){l=3DRe=
gExp(l)}if(l.global){var =
k=3Di.match.apply(this,arguments);l.lastIndex=3D0;return k}return =
l.exec(this)};String.prototype.replace=3Dfunction(m,n){var =
o=3DXRegExp.isRegExp(m),l,k,p;if(o&&typeof =
n.valueOf()=3D=3D=3D"string"&&n.indexOf("${")=3D=3D=3D-1&&d){return =
i.replace.apply(this,arguments)}if(!o){m=3Dm+""}else{if(m._xregexp){l=3Dm=
._xregexp.captureNames}}if(typeof =
n=3D=3D=3D"function"){k=3Di.replace.call(this,m,function(){if(l){argument=
s[0]=3Dnew String(arguments[0]);for(var =
q=3D0;q<l.length;q++){if(l[q]){arguments[0][l[q]]=3Darguments[q+1]}}}if(o=
&&m.global){m.lastIndex=3Darguments[arguments.length-2]+arguments[0].leng=
th}return =
n.apply(null,arguments)})}else{p=3Dthis+"";k=3Di.replace.call(p,m,functio=
n(){var q=3Darguments;return =
i.replace.call(n,b,function(s,r,v){if(r){switch(r){case"$":return"$";case=
"&":return q[0];case"`":return =
q[q.length-1].slice(0,q[q.length-2]);case"'":return =
q[q.length-1].slice(q[q.length-2]+q[0].length);default:var =
t=3D"";r=3D+r;if(!r){return =
s}while(r>q.length-3){t=3DString.prototype.slice.call(r,-1)+t;r=3DMath.fl=
oor(r/10)}return(r?q[r]||"":"$")+t}}else{var =
u=3D+v;if(u<=3Dq.length-3){return =
q[u]}u=3Dl?XRegExp._indexOf(l,v):-1;return =
u>-1?q[u+1]:s}})})}if(o&&m.global){m.lastIndex=3D0}return =
k};String.prototype.split=3Dfunction(o,k){if(!XRegExp.isRegExp(o)){return=
 i.split.apply(this,arguments)}var =
q=3Dthis+"",m=3D[],p=3D0,n,l;if(k=3D=3D=3Dundefined||+k<0){k=3DInfinity}e=
lse{k=3DMath.floor(+k);if(!k){return[]}}o=3Do.addFlags("g");while(n=3Do.e=
xec(q)){if(o.lastIndex>p){m.push(q.slice(p,n.index));if(n.length>1&&n.ind=
ex<q.length){Array.prototype.push.apply(m,n.slice(1))}l=3Dn[0].length;p=3D=
o.lastIndex;if(m.length>=3Dk){break}}if(!n[0].length){o.lastIndex++}}if(p=
=3D=3D=3Dq.length){if(!i.test.call(o,"")||l){m.push("")}}else{m.push(q.sl=
ice(p))}return =
m.length>k?m.slice(0,k):m}})();RegExp.prototype.addFlags=3Dfunction(b){va=
r =
c=3DXRegExp(this.source,(b||"")+XRegExp._getNativeFlags(this)),a=3Dthis._=
xregexp;if(a){c._xregexp=3D{source:a.source,captureNames:a.captureNames?a=
.captureNames.slice(0):null}}return =
c};RegExp.prototype.apply=3Dfunction(b,a){return =
this.exec(a[0])};RegExp.prototype.call=3Dfunction(a,b){return =
this.exec(b)};RegExp.prototype.forEachExec=3Dfunction(e,f,c){var =
d=3Dthis.addFlags("g"),b=3D-1,a;while(a=3Dd.exec(e)){f.call(c,a,++b,e,d);=
if(!a[0].length){d.lastIndex++}}if(this.global){this.lastIndex=3D0}};RegE=
xp.prototype.validate=3Dfunction(b){var =
a=3DRegExp("^(?:"+this.source+")$(?!\\s)",XRegExp._getNativeFlags(this));=
if(this.global){this.lastIndex=3D0}return =
b.search(a)=3D=3D=3D0};XRegExp.cache=3Dfunction(c,a){var =
b=3D"/"+c+"/"+(a||"");return =
XRegExp.cache[b]||(XRegExp.cache[b]=3DXRegExp(c,a))};XRegExp.escape=3Dfun=
ction(a){return =
a.replace(/[-[\]{}()*+?.\\^$|,#\s]/g,"\\$&")};XRegExp.freezeTokens=3Dfunc=
tion(){XRegExp.addToken=3Dnull};XRegExp.isRegExp=3Dfunction(a){return =
Object.prototype.toString.call(a)=3D=3D=3D"[object =
RegExp]"};XRegExp.matchWithinChain=3Dfunction(e,a,b){var c;function =
d(g,l){var =
j=3Da[l].addFlags("g"),f=3D[],k,h;for(h=3D0;h<g.length;h++){if(b){k=3D[];=
j.forEachExec(g[h][0],function(i){i.index+=3Dg[h].index;k.push(i)})}else{=
k=3Dg[h].match(j)}if(k){f.push(k)}}f=3DArray.prototype.concat.apply([],f)=
;if(a[l].global){a[l].lastIndex=3D0}return =
l=3D=3D=3Da.length-1?f:d(f,l+1)}if(b){c=3D{"0":e,index:0}}return =
d([b?c:e],0)};XRegExp._getNativeFlags=3Dfunction(a){return(a.global?"g":"=
")+(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.stic=
ky?"y":"")};XRegExp._indexOf=3Dfunction(d,b,c){for(var =
a=3Dc||0;a<d.length;a++){if(d[a]=3D=3D=3Db){return a}}return =
-1};(function(){var =
a=3D/^(?:[?*+]|{\d+(?:,\d*)?})\??/;XRegExp.addToken(/\(\?#[^)]*\)/,functi=
on(b){return =
a.test(b.input.slice(b.index+b[0].length))?"":"(?:)"});XRegExp.addToken(/=
\((?!\?)/,function(){this.captureNames.push(null);return"("});XRegExp.add=
Token(/\(\?<([$\w]+)>/,function(b){this.captureNames.push(b[1]);this.hasN=
amedCapture=3Dtrue;return"("});XRegExp.addToken(/\\k<([\w$]+)>/,function(=
c){var b=3DXRegExp._indexOf(this.captureNames,c[1]);return =
b>-1?"\\"+(b+1)+(isNaN(c.input.charAt(c.index+c[0].length))?"":"(?:)"):c[=
0]});XRegExp.addToken(/\[\^?]/,function(b){return =
b[0]=3D=3D=3D"[]"?"\\b\\B":"[\\s\\S]"});XRegExp.addToken(/(?:\s+|#.*)+/,f=
unction(b){return =
a.test(b.input.slice(b.index+b[0].length))?"":"(?:)"},XRegExp.OUTSIDE_CLA=
SS,function(){return =
this.hasFlag("x")});XRegExp.addToken(/\./,function(){return"[\\s\\S]"},XR=
egExp.OUTSIDE_CLASS,function(){return =
this.hasFlag("s")})})();XRegExp.version=3D"1.2.0"};
------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/extensions/porte_plume/javascript/jquery.markitup_pour_spip.js

// =
-------------------------------------------------------------------------=
---=0A=
// markItUp! Universal MarkUp Engine, JQuery plugin=0A=
// v 1.1.8=0A=
// Dual licensed under the MIT and GPL licenses.=0A=
// =
-------------------------------------------------------------------------=
---=0A=
// Copyright (C) 2007-2010 Jay Salvat=0A=
// http://markitup.jaysalvat.com/=0A=
// =
-------------------------------------------------------------------------=
---=0A=
// Permission is hereby granted, free of charge, to any person obtaining =
a copy=0A=
// of this software and associated documentation files (the "Software"), =
to deal=0A=
// in the Software without restriction, including without limitation the =
rights=0A=
// to use, copy, modify, merge, publish, distribute, sublicense, and/or =
sell=0A=
// copies of the Software, and to permit persons to whom the Software is=0A=
// furnished to do so, subject to the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be =
included in=0A=
// all copies or substantial portions of the Software.=0A=
// =0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, =
EXPRESS OR=0A=
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF =
MERCHANTABILITY,=0A=
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT =
SHALL THE=0A=
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER=0A=
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, =
ARISING FROM,=0A=
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER =
DEALINGS IN=0A=
// THE SOFTWARE.=0A=
// =
-------------------------------------------------------------------------=
---=0A=
=0A=
/*=0A=
 *   Le code original de markitup 1.1.8=0A=
 *   a ete modifie pour prendre en compte=0A=
 * =0A=
 *   1) la langue utilisee dans les textarea :=0A=
 * 		- si un textarea possede un attribut lang=3D'xx' alors=0A=
 *   	  markitup n'affichera que les icones qui correspondent a cette =
langue=0A=
 * 		- on peut passer une valeur de langue par defaut a markitup (le =
textarea peut ne pas en definir)=0A=
 *   	  .markitup(set_spip,{lang:'fr'});=0A=
 * 		- une option supplementaire optionnelle 'lang' est introduite dans =
les parametres =0A=
 *   	  des boutons (markupset), par exemple : lang:['fr','es','en']=0A=
 * 		- si un bouton n'a pas ce parametre, l'icone s'affiche =0A=
 *   	  quelque soit la langue designee dans le textarea ou les =
parametres de markitup ;=0A=
 *   	  sinon, il faut que la langue soit contenue dedans pour que =
l'icone s'affiche.=0A=
 *   2) les control + shift (ou alt) + click bouton qui ne semblaient =
pas fonctionner=0A=
 *      en tout cas sous FF3/ubintu/jquery 1.2.6 a verifier chez les =
autres (opera 9.5/ubuntu ok)=0A=
 *   3) gerer des types de selections differentes : =0A=
 * 		- normales comme dans markitup (rien a faire)=0A=
 * 		- 'selectionType':'word' : aux mots le plus proche si pas de =
selection (sinon la selection)=0A=
 * 		- 'selectionType':'line' : aux lignes les plus proches=0A=
 * 		- and 'return' : ugly hack to generate list (and so on) on key =
'return' press=0A=
 *   4) forcer des actions multilignes sans avoir besoin de faire =
control+click=0A=
 * 		- 'forceMultiline':true  : force donc une insertion multiligne=0A=
 *   5) correction de la recuperation des selections d'Opera et de IE=0A=
 * 		en utilisant une autre fonction de split() qui corrige leurs bugs.=0A=
 * 		(caretOffset n'est plus necessaire)=0A=
 * 		=0A=
 */=0A=
;(function($) {=0A=
	$.fn.markItUp =3D function(settings, extraSettings) {=0A=
		var options, ctrlKey, shiftKey, altKey;=0A=
		ctrlKey =3D shiftKey =3D altKey =3D false;=0A=
=0A=
		options =3D {	id:						'',=0A=
					nameSpace:				'',=0A=
					root:					'',=0A=
					lang:					'',=0A=
					previewInWindow:		'', // 'width=3D800, height=3D600, =
resizable=3Dyes, scrollbars=3Dyes'=0A=
					previewAutoRefresh:		true,=0A=
					previewPosition:		'after',=0A=
					previewTemplatePath:	'~/templates/preview.html',=0A=
					previewParserPath:		'',=0A=
					previewParserVar:		'data',=0A=
					resizeHandle:			true,=0A=
					beforeInsert:			'',=0A=
					afterInsert:			'',=0A=
					onEnter:				{},=0A=
					onShiftEnter:			{},=0A=
					onCtrlEnter:			{},=0A=
					onTab:					{},=0A=
					markupSet:			[	{ /* set */ } ]=0A=
				};=0A=
		$.extend(options, settings, extraSettings);=0A=
=0A=
		// compute markItUp! path=0A=
		if (!options.root) {=0A=
			$('script').each(function(a, tag) {=0A=
				miuScript =3D =
$(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/);=0A=
				if (miuScript !=3D=3D null) {=0A=
					options.root =3D miuScript[1];=0A=
				}=0A=
			});=0A=
		}=0A=
=0A=
		return this.each(function() {=0A=
			var $$, textarea, levels, scrollPosition, caretPosition, =
caretEffectivePosition,=0A=
				clicked, hash, header, footer, previewWindow, template, iFrame, =
abort,=0A=
				before, after;=0A=
			$$ =3D $(this);=0A=
			textarea =3D this;=0A=
			levels =3D [];=0A=
			abort =3D false;=0A=
			scrollPosition =3D caretPosition =3D 0;=0A=
=0A=
			options.previewParserPath =3D localize(options.previewParserPath);=0A=
			options.previewTemplatePath =3D localize(options.previewTemplatePath);=0A=
=0A=
			// apply the computed path to ~/=0A=
			function localize(data, inText) {=0A=
				if (inText) {=0A=
					return 	data.replace(/("|')~\//g, "$1"+options.root);=0A=
				}=0A=
				return 	data.replace(/^~\//, options.root);=0A=
			}=0A=
=0A=
			// init and build editor=0A=
			function init() {=0A=
				id =3D ''; nameSpace =3D '';=0A=
				if (options.id) {=0A=
					id =3D 'id=3D"'+options.id+'"';=0A=
				} else if ($$.attr("id")) {=0A=
					id =3D 'id=3D"markItUp'+($$.attr("id").substr(0, =
1).toUpperCase())+($$.attr("id").substr(1))+'"';=0A=
=0A=
				}=0A=
				if (options.nameSpace) {=0A=
					nameSpace =3D 'class=3D"'+options.nameSpace+'"';=0A=
				}=0A=
				$$.wrap('<div '+nameSpace+'></div>');=0A=
				$$.wrap('<div '+id+' class=3D"markItUp"></div>');=0A=
				$$.wrap('<div class=3D"markItUpContainer"></div>');=0A=
				$$.addClass("markItUpEditor");=0A=
=0A=
				// add the header before the textarea=0A=
				header =3D $('<div =
class=3D"markItUpHeader"></div>').insertBefore($$);=0A=
				$(dropMenus(options.markupSet)).appendTo(header);=0A=
				// remove empty dropMenu=0A=
				$(header).find("li.markItUpDropMenu ul:empty").parent().remove();=0A=
				=0A=
				// add the footer after the textarea=0A=
				footer =3D $('<div class=3D"markItUpFooter"></div>').insertAfter($$);=0A=
=0A=
				// add the resize handle after textarea=0A=
				=0A=
				if (options.resizeHandle =3D=3D=3D true && $.browser.safari !=3D=3D =
true) {=0A=
					resizeHandle =3D $('<div class=3D"markItUpResizeHandle"></div>')=0A=
						.insertAfter($$)=0A=
						.bind("mousedown", function(e) {=0A=
							var h =3D $$.height(), y =3D e.clientY, mouseMove, mouseUp;=0A=
							mouseMove =3D function(e) {=0A=
								$$.css("height", Math.max(20, e.clientY+h-y)+"px");=0A=
								return false;=0A=
							};=0A=
							mouseUp =3D function(e) {=0A=
								$("html").unbind("mousemove", mouseMove).unbind("mouseup", =
mouseUp);=0A=
								return false;=0A=
							};=0A=
							$("html").bind("mousemove", mouseMove).bind("mouseup", mouseUp);=0A=
					});=0A=
					footer.append(resizeHandle);=0A=
				}=0A=
=0A=
				// listen key events=0A=
				$$.keydown(keyPressed).keyup(keyPressed);=0A=
				=0A=
				// bind an event to catch external calls=0A=
				$$.bind("insertion", function(e, settings) {=0A=
					if (settings.target !=3D=3D false) {=0A=
						get();=0A=
					}=0A=
					if (textarea =3D=3D=3D $.markItUp.focused) {=0A=
						markup(settings);=0A=
					}=0A=
				});=0A=
=0A=
				// remember the last focus=0A=
				$$.focus(function() {=0A=
					$.markItUp.focused =3D this;=0A=
				});=0A=
			}=0A=
=0A=
			// recursively build header with dropMenus from markupset=0A=
			function dropMenus(markupSet) {=0A=
				var ul =3D $('<ul></ul>'), i =3D 0;=0A=
				var lang =3D ($$.attr('lang')||options.lang);=0A=
				=0A=
				$('li:hover > ul', ul).css('display', 'block');=0A=
				$.each(markupSet, function() {=0A=
					var button =3D this, t =3D '', title, li, j;=0A=
					// pas de langue ou dans la langue ; et uniquement si langue =
autorisee=0A=
					if ((!lang || !button.lang || ($.inArray(lang, button.lang) !=3D =
-1))=0A=
						&& (!button.lang_not || ($.inArray(lang, button.lang_not) =3D=3D =
-1))) {=0A=
						title =3D (button.key) ? (button.name||'')+' =
[Ctrl+'+button.key+']' : (button.name||'');=0A=
						key   =3D (button.key) ? 'accesskey=3D"'+button.key+'"' : '';=0A=
						if (button.separator) {=0A=
							li =3D $('<li =
class=3D"markItUpSeparator">'+(button.separator||'')+'</li>').appendTo(ul=
);=0A=
						} else {=0A=
							i++;=0A=
							for (j =3D levels.length -1; j >=3D 0; j--) {=0A=
								t +=3D levels[j]+"-";=0A=
							}=0A=
							li =3D $('<li class=3D"markItUpButton markItUpButton'+t+(i)+' =
'+(button.className||'')+'"><a href=3D"" '+key+' =
title=3D"'+title+'"><b>'+(button.name||'')+'</b></a></li>')=0A=
							.bind("contextmenu", function() { // prevent contextmenu on mac =
and allow ctrl+click=0A=
								return false;=0A=
							}).click(function() {=0A=
								return false;=0A=
							}).focusin(function(){=0A=
								$$.focus();=0A=
							}).mousedown(function() {=0A=
								if (button.call) {=0A=
									eval(button.call)();=0A=
								}=0A=
								setTimeout(function() { markup(button) },1);=0A=
								return false;=0A=
							}).hover(function() {=0A=
									$('> ul', this).show();=0A=
									$(document).one('click', function() { // close dropmenu if =
click outside=0A=
											$('ul ul', header).hide();=0A=
										}=0A=
									);=0A=
								}, function() {=0A=
									$('> ul', this).hide();=0A=
								}=0A=
							).appendTo(ul);=0A=
							if (button.dropMenu) {=0A=
								levels.push(i);=0A=
								=
$(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu));=0A=
							}=0A=
						}=0A=
					}=0A=
				}); =0A=
				levels.pop();=0A=
				return ul;=0A=
			}=0A=
=0A=
			// markItUp! markups=0A=
			function magicMarkups(string) {=0A=
				if (string) {=0A=
					string =3D string.toString();=0A=
					string =3D string.replace(/\(\!\(([\s\S]*?)\)\!\)/g,=0A=
						function(x, a) {=0A=
							var b =3D a.split('|!|');=0A=
							if (altKey =3D=3D=3D true) {=0A=
								return (b[1] !=3D=3D undefined) ? b[1] : b[0];=0A=
							} else {=0A=
								return (b[1] =3D=3D=3D undefined) ? "" : b[0];=0A=
							}=0A=
						}=0A=
					);=0A=
					// [![prompt]!], [![prompt:!:value]!]=0A=
					string =3D string.replace(/\[\!\[([\s\S]*?)\]\!\]/g,=0A=
						function(x, a) {=0A=
							var b =3D a.split(':!:');=0A=
							if (abort =3D=3D=3D true) {=0A=
								return false;=0A=
							}=0A=
							value =3D prompt(b[0], (b[1]) ? b[1] : '');=0A=
							if (value =3D=3D=3D null) {=0A=
								abort =3D true;=0A=
							}=0A=
							return value;=0A=
						}=0A=
					);=0A=
					return string;=0A=
				}=0A=
				return "";=0A=
			}=0A=
=0A=
			// prepare action=0A=
			function prepare(action) {=0A=
				if ($.isFunction(action)) {=0A=
					action =3D action(hash);=0A=
				}=0A=
				return magicMarkups(action);=0A=
			}=0A=
=0A=
			// build block to insert=0A=
			function build(string) {=0A=
				openWith 	=3D prepare(clicked.openWith);=0A=
				placeHolder =3D prepare(clicked.placeHolder);=0A=
				replaceWith =3D prepare(clicked.replaceWith);=0A=
				closeWith 	=3D prepare(clicked.closeWith);=0A=
				if (replaceWith !=3D=3D "") {=0A=
					block =3D openWith + replaceWith + closeWith;=0A=
				} else if (selection =3D=3D=3D '' && placeHolder !=3D=3D '') {=0A=
					block =3D openWith + placeHolder + closeWith;=0A=
				} else {=0A=
					block =3D openWith + (string||selection) + closeWith;=0A=
				}=0A=
				return {	block:block, =0A=
							openWith:openWith, =0A=
							replaceWith:replaceWith, =0A=
							placeHolder:placeHolder,=0A=
							closeWith:closeWith=0A=
					};=0A=
			}=0A=
=0A=
=0A=
			function selectWord(){=0A=
				selectionBeforeAfter(/\s|[.,;:!=C2=A1?=C2=BF()]/);=0A=
				selectionSave();				=0A=
			}=0A=
			function selectLine(){=0A=
				selectionBeforeAfter(/\r?\n/);=0A=
				selectionSave();				=0A=
			}			=0A=
			=0A=
			function selectionRemoveLast(pattern){=0A=
					// Remove space by default=0A=
					if (!pattern) pattern =3D /\s/;=0A=
					last =3D selection[selection.length-1];=0A=
					if (last && last.match(pattern)) {=0A=
						set(caretPosition, selection.length-1);=0A=
						get();=0A=
						$.extend(hash, { caretPosition:caretPosition, =
scrollPosition:scrollPosition } );=0A=
					}				=0A=
			}=0A=
			=0A=
			function selectionBeforeAfter(pattern) {=0A=
				if (!pattern) pattern =3D /\s/;=0A=
				before =3D textarea.value.substring(0, caretEffectivePosition);=0A=
				after =3D textarea.value.substring(caretEffectivePosition + =
selection.length - fixIeBug(selection));=0A=
			=0A=
				before =3D before.split(pattern);=0A=
				after =3D after.split(pattern);			=0A=
			}=0A=
			=0A=
			function selectionSave(){=0A=
				nb_before =3D before ? before[before.length-1].length : 0;=0A=
				nb_after =3D after ? after[0].length : 0;=0A=
=0A=
				nb =3D nb_before + selection.length + nb_after - fixIeBug(selection);=0A=
				caretPosition =3D  caretPosition - nb_before;=0A=
=0A=
				set(caretPosition, nb);=0A=
				get();=0A=
				$.extend(hash, { selection:selection, caretPosition:caretPosition, =
scrollPosition:scrollPosition } );=0A=
			}=0A=
			=0A=
			// define markup to insert=0A=
			function markup(button) {=0A=
				var len, j, n, i;=0A=
				hash =3D clicked =3D button;=0A=
				get();=0A=
				=0A=
				$.extend(hash, {	line:"", =0A=
						 			root:options.root,=0A=
									textarea:textarea, =0A=
									selection:(selection||''), =0A=
									caretPosition:caretPosition,=0A=
									ctrlKey:ctrlKey, =0A=
									shiftKey:shiftKey, =0A=
									altKey:altKey=0A=
								}=0A=
							);=0A=
=0A=
				// corrections des selections pour que=0A=
				// - soit le curseur ne change pas=0A=
				// - soit on prend le mot complet (si pas de selection)=0A=
				// - soit on prend la ligne (avant, apres la selection)=0A=
				if (button.selectionType) {=0A=
=0A=
					if (button.selectionType =3D=3D "word") {=0A=
						if (!selection) {=0A=
							selectWord();=0A=
						} else {=0A=
							// win/ff add space on double click ? (hum, seems strange)=0A=
							selectionRemoveLast(/\s/);=0A=
						}=0A=
					}				=0A=
					if (button.selectionType =3D=3D "line") {=0A=
						selectLine();=0A=
					}=0A=
					// horrible chose, mais tellement plus pratique=0A=
					// car on ne peut pas de l'exerieur (json) utiliser=0A=
					// les fonctions internes de markitup=0A=
					if (button.selectionType =3D=3D "return"){=0A=
						selectionBeforeAfter(/\r?\n/);=0A=
						before_last =3D before[before.length-1];=0A=
						after =3D '';=0A=
						// gestion des listes -# et -* =0A=
						if (r =3D before_last.match(/^-([*#]+) ?(.*)$/)) {=0A=
							if (r[2]) {=0A=
								button.replaceWith =3D "\n-"+r[1]+' ';=0A=
								before_last =3D '';=0A=
							} else {=0A=
								// supprime le -* present=0A=
								// (before le fera)=0A=
								button.replaceWith =3D "\n";=0A=
							}=0A=
						} else {=0A=
							before_last =3D '';=0A=
							button.replaceWith =3D "\n";=0A=
						}=0A=
						before[before.length-1] =3D before_last;=0A=
						selectionSave();=0A=
					}=0A=
				}=0A=
				// / fin corrections=0A=
				=0A=
				// callbacks before insertion=0A=
				prepare(options.beforeInsert);=0A=
				prepare(clicked.beforeInsert);=0A=
				if (ctrlKey =3D=3D=3D true && shiftKey =3D=3D=3D true) {=0A=
					prepare(clicked.beforeMultiInsert);=0A=
				}			=0A=
				$.extend(hash, { line:1 });=0A=
=0A=
				// insertion forcee en multiligne ou ctrl+click=0A=
				if ((button.forceMultiline =3D=3D=3D true && selection.length)=0A=
				|| (ctrlKey =3D=3D=3D true && shiftKey =3D=3D=3D true)) {=0A=
					lines =3D selection.split(/\r?\n/);=0A=
					for (j =3D 0, n =3D lines.length, i =3D 0; i < n; i++) {=0A=
						if ($.trim(lines[i]) !=3D=3D '') {=0A=
							$.extend(hash, { line:++j, selection:lines[i] } );=0A=
							lines[i] =3D build(lines[i]).block;=0A=
						} else {=0A=
							lines[i] =3D "";=0A=
						}=0A=
					}=0A=
					string =3D { block:lines.join('\n')};=0A=
					start =3D caretPosition;=0A=
					len =3D string.block.length + (($.browser.opera) ? n-1 : 0);=0A=
				} else if (ctrlKey =3D=3D=3D true) {=0A=
					string =3D build(selection);=0A=
					start =3D caretPosition + string.openWith.length;=0A=
					len =3D string.block.length - string.openWith.length - =
string.closeWith.length;=0A=
					len -=3D fixIeBug(string.block);=0A=
				} else if (shiftKey =3D=3D=3D true) {=0A=
					string =3D build(selection);=0A=
					start =3D caretPosition;=0A=
					len =3D string.block.length;=0A=
					len -=3D fixIeBug(string.block);=0A=
				} else {=0A=
					string =3D build(selection);=0A=
					start =3D caretPosition + string.block.length ;=0A=
					len =3D 0;=0A=
					start -=3D fixIeBug(string.block);=0A=
				}=0A=
=0A=
				if (selection =3D=3D=3D ''){=0A=
					start +=3D fixOperaBug(string.replaceWith);=0A=
				}=0A=
				$.extend(hash, { caretPosition:caretPosition, =
scrollPosition:scrollPosition } );=0A=
=0A=
				if (string.block !=3D=3D selection && abort =3D=3D=3D false) {=0A=
					insert(string.block);=0A=
					set(start, len);=0A=
				} =0A=
=0A=
				get();=0A=
=0A=
				$.extend(hash, { line:'', selection:selection });=0A=
=0A=
				// callbacks after insertion=0A=
				if ((button.forceMultiline =3D=3D=3D true)=0A=
				|| (ctrlKey =3D=3D=3D true && shiftKey =3D=3D=3D true)) {=0A=
					prepare(clicked.afterMultiInsert);=0A=
				}=0A=
=0A=
				prepare(clicked.afterInsert);=0A=
				prepare(options.afterInsert);=0A=
=0A=
				// refresh preview if opened=0A=
				if (previewWindow && options.previewAutoRefresh) {=0A=
					refreshPreview(); =0A=
				}=0A=
				=0A=
				// reinit keyevent=0A=
				shiftKey =3D altKey =3D ctrlKey =3D abort =3D false;=0A=
				=0A=
			}=0A=
=0A=
			// Substract linefeed in Opera=0A=
			function fixOperaBug(string) {=0A=
				if ($.browser.opera) {=0A=
					return string.length - string.replace(/\n*/g, '').length;=0A=
				}=0A=
				return 0;=0A=
			}=0A=
			// Substract linefeed in IE=0A=
			function fixIeBug(string) {=0A=
				if ($.browser.msie) {=0A=
					return string.length - string.replace(/\r*/g, '').length;=0A=
				}=0A=
				return 0;=0A=
			}=0A=
				=0A=
			// add markup=0A=
			function insert(block) {	=0A=
				if (document.selection) {=0A=
					var newSelection =3D document.selection.createRange();=0A=
					newSelection.text =3D block;=0A=
				} else {=0A=
					textarea.value =3D  textarea.value.substring(0, =
caretEffectivePosition)  + block + =
textarea.value.substring(caretEffectivePosition + selection.length, =
textarea.value.length);=0A=
				}=0A=
			}=0A=
=0A=
			// set a selection=0A=
			function set(start, len) {=0A=
				if (textarea.createTextRange){=0A=
					range =3D textarea.createTextRange();=0A=
					range.collapse(true);=0A=
					range.moveStart('character', start); =0A=
					range.moveEnd('character', len); =0A=
					range.select();=0A=
				} else if (textarea.setSelectionRange ){=0A=
					textarea.setSelectionRange(start, start + len);=0A=
				}=0A=
				textarea.scrollTop =3D scrollPosition;=0A=
				textarea.focus();=0A=
			}=0A=
=0A=
			// get the selection=0A=
			function get() {=0A=
				textarea.focus();=0A=
=0A=
				scrollPosition =3D textarea.scrollTop;=0A=
				if (document.selection) {=0A=
					selection =3D document.selection.createRange().text;=0A=
					if ($.browser.msie) { // ie=0A=
						var range =3D document.selection.createRange(), rangeCopy =3D =
range.duplicate();=0A=
						rangeCopy.moveToElementText(textarea);=0A=
						caretPosition =3D -1;=0A=
						while(rangeCopy.inRange(range)) {=0A=
							rangeCopy.moveStart('character');=0A=
							caretPosition ++;=0A=
						}=0A=
						caretEffectivePosition =3D caretPosition;=0A=
					} else { // opera=0A=
						caretPosition =3D textarea.selectionStart;=0A=
						lenSelection =3D selection.length;=0A=
							// calcul du nombre reel de caracteres pour les substr()=0A=
							set(0,caretPosition);=0A=
							opBefore =3D document.selection.createRange().text;=0A=
							caretEffectivePosition =3D opBefore.length - =
fixOperaBug(opBefore);=0A=
							set(caretPosition, lenSelection);=0A=
							selection =3D document.selection.createRange().text;=0A=
					}=0A=
				} else { // gecko & webkit=0A=
					caretPosition =3D textarea.selectionStart;=0A=
					caretEffectivePosition =3D caretPosition;=0A=
					selection =3D textarea.value.substring(caretPosition, =
textarea.selectionEnd);=0A=
	=0A=
				} =0A=
				return selection;=0A=
			}=0A=
=0A=
			// open preview window=0A=
			function preview() {=0A=
				if (!previewWindow || previewWindow.closed) {=0A=
					if (options.previewInWindow) {=0A=
						previewWindow =3D window.open('', 'preview', =
options.previewInWindow);=0A=
						$(window).unload(function() {=0A=
							previewWindow.close();=0A=
						});=0A=
					} else {=0A=
						iFrame =3D $('<iframe class=3D"markItUpPreviewFrame"></iframe>');=0A=
						if (options.previewPosition =3D=3D 'after') {=0A=
							iFrame.insertAfter(footer);=0A=
						} else {=0A=
							iFrame.insertBefore(header);=0A=
						}=0A=
						previewWindow =3D iFrame[iFrame.length - 1].contentWindow || =
frame[iFrame.length - 1];=0A=
					}=0A=
				} else if (altKey =3D=3D=3D true) {=0A=
					if (iFrame) {=0A=
						iFrame.remove();=0A=
					} else {=0A=
						previewWindow.close();=0A=
					}=0A=
					previewWindow =3D iFrame =3D false;=0A=
				}=0A=
				if (!options.previewAutoRefresh) {=0A=
					refreshPreview(); =0A=
				}=0A=
				if (options.previewInWindow) {=0A=
					previewWindow.focus();=0A=
				}=0A=
			}=0A=
=0A=
			// refresh Preview window=0A=
			function refreshPreview() {=0A=
				renderPreview();=0A=
			}=0A=
=0A=
			function renderPreview() {=0A=
				var phtml;=0A=
				if (options.previewParserPath !=3D=3D '') {=0A=
					$.ajax( {=0A=
						type: 'POST',=0A=
						url: options.previewParserPath,=0A=
						data: options.previewParserVar+'=3D'+encodeURIComponent($$.val()),=0A=
						success: function(data) {=0A=
							writeInPreview( localize(data, 1) ); =0A=
						}=0A=
					} );=0A=
				} else {=0A=
					if (!template) {=0A=
						$.ajax( {=0A=
							url: options.previewTemplatePath,=0A=
							success: function(data) {=0A=
								writeInPreview( localize(data, 1).replace(/<!-- content -->/g, =
$$.val()) );=0A=
							}=0A=
						} );=0A=
					}=0A=
				}=0A=
				return false;=0A=
			}=0A=
=0A=
			function writeInPreview(data) {=0A=
				if (previewWindow.document) {			=0A=
					try {=0A=
						sp =3D previewWindow.document.documentElement.scrollTop=0A=
					} catch(e) {=0A=
						sp =3D 0;=0A=
					}	=0A=
					previewWindow.document.open();=0A=
					previewWindow.document.write(data);=0A=
					previewWindow.document.close();=0A=
					previewWindow.document.documentElement.scrollTop =3D sp;=0A=
				}=0A=
			}=0A=
						=0A=
			// set keys pressed=0A=
			function keyPressed(e) {=0A=
				if (e.type =3D=3D=3D 'keydown') {=0A=
					if (e.which =3D=3D=3D 18) {e.altKey =3D true;} // alt=0A=
					if (e.which =3D=3D=3D 17) {e.ctrlKey =3D true;} // control=0A=
					if (e.which =3D=3D=3D 16) {e.shiftKey =3D true;} // shift=0A=
				}=0A=
				=0A=
				shiftKey =3D e.shiftKey;=0A=
				altKey =3D e.altKey;=0A=
				ctrlKey =3D (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false;=0A=
=0A=
				if (e.type =3D=3D=3D 'keydown') {=0A=
					if (ctrlKey =3D=3D=3D true) {=0A=
						li =3D $("a[accesskey=3D"+String.fromCharCode(e.which)+"]", =
header).parent('li');=0A=
						if (li.length !=3D=3D 0) {=0A=
							ctrlKey =3D false;=0A=
							setTimeout(function() {=0A=
								li.triggerHandler('mousedown');=0A=
							},1);=0A=
							return false;=0A=
						}=0A=
					}=0A=
					// si opera, on s'embete pas, il cree plus de problemes qu'autre =
chose=0A=
					// car il ne prend pas en compte l'arret de ces evenements=0A=
					if (!$.browser.opera) {				=0A=
						if (e.which =3D=3D=3D 13 || e.which =3D=3D=3D 10) { // Enter key=0A=
							if (ctrlKey =3D=3D=3D true) {  // Enter + Ctrl=0A=
								ctrlKey =3D false;=0A=
								markup(options.onCtrlEnter);=0A=
								return options.onCtrlEnter.keepDefault;=0A=
							} else if (shiftKey =3D=3D=3D true) { // Enter + Shift=0A=
								shiftKey =3D false;=0A=
								markup(options.onShiftEnter);=0A=
								return options.onShiftEnter.keepDefault;=0A=
							} else { // only Enter=0A=
								markup(options.onEnter);=0A=
								return options.onEnter.keepDefault;=0A=
							}=0A=
						}=0A=
					=0A=
						if (e.which =3D=3D=3D 9) { // Tab key=0A=
							if (shiftKey =3D=3D true || ctrlKey =3D=3D true || altKey =3D=3D =
true) {=0A=
								return false; =0A=
							}=0A=
							markup(options.onTab);=0A=
							return options.onTab.keepDefault;=0A=
						}=0A=
					}=0A=
				}=0A=
			}=0A=
=0A=
			init();=0A=
		});=0A=
	};=0A=
=0A=
	$.fn.markItUpRemove =3D function() {=0A=
		return this.each(function() {=0A=
				var $$ =3D $(this).unbind().removeClass('markItUpEditor');=0A=
				=
$$.parent('div').parent('div.markItUp').parent('div').replaceWith($$);=0A=
			}=0A=
		);=0A=
	};=0A=
=0A=
	$.markItUp =3D function(settings) {=0A=
		var options =3D { target:false };=0A=
		$.extend(options, settings);=0A=
		if (options.target) {=0A=
			return $(options.target).each(function() {=0A=
				$(this).focus();=0A=
				$(this).trigger('insertion', [options]);=0A=
			});=0A=
		} else {=0A=
			$('textarea').trigger('insertion', [options]);=0A=
		}=0A=
	};=0A=
=0A=
})(jQuery);=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/extensions/porte_plume/javascript/jquery.previsu_spip.js

;(function($) {=0A=
	$.fn.previsu_spip =3D function(settings) {=0A=
		var options;=0A=
=0A=
		options =3D {=0A=
			previewParserPath:	'' ,=0A=
			previewParserVar:	'data',=0A=
			textEditer:	'Editer',=0A=
			textVoir:	'Voir'=0A=
		};=0A=
		$.extend(options, settings);=0A=
=0A=
		return this.each(function() {=0A=
			var $$, textarea, tabs, preview;=0A=
			$$ =3D $(this);=0A=
			textarea =3D this;=0A=
=0A=
			// init and build previsu buttons=0A=
			function init() {=0A=
				$$.addClass("pp_previsualisation");=0A=
				tabs =3D $('<div =
class=3D"markItUpTabs"></div>').prependTo($$.parent());=0A=
				$(tabs).append(=0A=
					'<a href=3D"#previsuVoir" class=3D"previsuVoir">' + =
options.textVoir + '</a>' +=0A=
					'<a href=3D"#previsuEditer" class=3D"previsuEditer on">' + =
options.textEditer + '</a>'=0A=
				);=0A=
				=0A=
				preview =3D $('<div =
class=3D"markItUpPreview"></div>').insertAfter(tabs);=0A=
				preview.hide();=0A=
				=0A=
				$('.previsuVoir').click(function(){=0A=
					mark =3D $(this).parent().parent();=0A=
					objet =3D =
mark.parents('.formulaire_spip')[0].className.match(/formulaire_editer_(\=
w+)/);=0A=
					champ =3D mark.parents('li')[0].className.match(/editer_(\w+)/);=0A=
					$(mark).find('.markItUpPreview').height(=0A=
						  $(mark).find('.markItUpHeader').height()=0A=
						+ $(mark).find('.markItUpEditor').height()=0A=
						+ $(mark).find('.markItUpFooter').height()=0A=
					);=0A=
					$(mark).find('.markItUpHeader').hide();=0A=
					$(mark).find('.markItUpEditor').hide();=0A=
					$(mark).find('.markItUpFooter').hide();=0A=
					$(this).addClass('on').next().removeClass('on');=0A=
					$(mark).find('.markItUpPreview').show()=0A=
						.addClass('ajaxLoad')=0A=
						.html(renderPreview(=0A=
							$(mark).find('textarea.pp_previsualisation').val(),=0A=
							champ[1].toUpperCase(),=0A=
							objet[1])=0A=
						)=0A=
						.removeClass('ajaxLoad');=0A=
					return false;=0A=
				});=0A=
				$('.previsuEditer').click(function(){=0A=
					mark =3D $(this).parent().parent();=0A=
					$(mark).find('.markItUpPreview').hide();=0A=
					$(mark).find('.markItUpHeader').show();=0A=
					$(mark).find('.markItUpEditor').show();=0A=
					$(mark).find('.markItUpFooter').show();=0A=
					$(this).addClass('on').prev().removeClass('on');=0A=
					return false;=0A=
				});=0A=
			}=0A=
=0A=
=0A=
			function renderPreview(val, champ, objet) {	=0A=
				var phtml;=0A=
				if (options.previewParserPath !=3D=3D '') {=0A=
					$.ajax( {=0A=
						type: 'POST',=0A=
						async: false,=0A=
						url: options.previewParserPath,=0A=
						data: 'champ=3D'+champ=0A=
							+'&objet=3D'+objet=0A=
							+'&' + options.previewParserVar+'=3D'+encodeURIComponent(val),=0A=
						success: function(data) {=0A=
							phtml =3D data; =0A=
						}=0A=
					} );=0A=
				}=0A=
				return phtml;=0A=
			}=0A=
	=0A=
			init();=0A=
		});=0A=
	};=0A=
})(jQuery);=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/spip.php?page=porte_plume_start.js&lang=en

=0A=
=0A=
=0A=
barre_outils_edition =3D =
{"nameSpace":"edition","previewAutoRefresh":false,"onEnter":{"keepDefault=
":false,"selectionType":"return","replaceWith":"\n"}=0A=
,"onShiftEnter":{"keepDefault":false,"replaceWith":"\n_ "}=0A=
,"onCtrlEnter":{"keepDefault":false,"replaceWith":"\n\n"}=0A=
,"onTab":{"keepDefault":false,"replaceWith":"	"}=0A=
,"markupSet":[{"name":"Turn into a =
{{{subheading}}}","key":"H","className":"outil_header1","openWith":"\n{{{=
","closeWith":"}}}\n","selectionType":"line"}=0A=
,{"name":"{{Bold}}","key":"B","className":"outil_bold","replaceWith":func=
tion(h){ return espace_si_accolade(h, '{{', =
'}}');},"selectionType":"word"}=0A=
,{"name":"{Italic}","key":"I","className":"outil_italic","replaceWith":fu=
nction(h){ return espace_si_accolade(h, '{', =
'}');},"selectionType":"word"}=0A=
,{"name":"Set =
list","className":"outil_liste_ul","replaceWith":function(h){ return =
outil_liste(h, =
'*');},"selectionType":"line","forceMultiline":true,"dropMenu":[{"id":"li=
ste_ol","name":"Set numbered =
list","className":"outil_liste_ol","replaceWith":function(h){ return =
outil_liste(h, =
'#');},"display":true,"selectionType":"line","forceMultiline":true}=0A=
,{"id":"indenter","name":"Indent a =
line","className":"outil_indenter","replaceWith":function(h){return =
outil_indenter(h);},"display":true,"selectionType":"line","forceMultiline=
":true}=0A=
,{"id":"desindenter","name":"Unindent a =
line","className":"outil_desindenter","replaceWith":function(h){return =
outil_desindenter(h);},"display":true,"selectionType":"line","forceMultil=
ine":true}=0A=
]=0A=
}=0A=
,{"separator":"---------------"}=0A=
,{"name":"Turn into a =
[hyperlink->http://...]","key":"L","className":"outil_link","openWith":"[=
","closeWith":"->[![Please enter the target of your hyperlink (you may =
give an internet URL in the form http://www.mysite.com or else simply =
the number of an article on this site).]!]]"}=0A=
,{"name":"Turn into a =
[[Footnote]]","className":"outil_notes","openWith":"[[","closeWith":"]]",=
"selectionType":"word"}=0A=
,{"separator":"---------------"}=0A=
,{"name":"<quote>Quote a =
message</quote>","key":"Q","className":"outil_quote","openWith":"\n<quote=
>","closeWith":"</quote>\n","selectionType":"word"}=0A=
,{"name":"Place between =ABdouble =
quotes=AB","className":"outil_guillemets","openWith":"=AB","closeWith":"=BB=
","lang":["fr","eo","cpf","ar","es"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between &#8220;single =
quotes&#8220;","className":"outil_guillemets_simples","openWith":"&#8220;=
","closeWith":"&#8221;","lang":["fr","eo","cpf","ar","es"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between =ABdouble =
quotes=AB","className":"outil_guillemets_de","openWith":"&#8222;","closeW=
ith":"&#8220;","lang":["bg","de","pl","hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between &#8220;single =
quotes&#8220;","className":"outil_guillemets_de_simples","openWith":"&sbq=
uo;","closeWith":"&#8216;","lang":["bg","de","pl","hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between =ABdouble =
quotes=AB","className":"outil_guillemets_simples","openWith":"&#8220;","c=
loseWith":"&#8221;","lang_not":["fr","eo","cpf","ar","es","bg","de","pl",=
"hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between &#8220;single =
quotes&#8220;","className":"outil_guillemets_uniques","openWith":"&#8216;=
","closeWith":"&#8217;","lang_not":["fr","eo","cpf","ar","es","bg","de","=
pl","hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"separator":"---------------"}=0A=
,{"name":"Insert special =
characters","className":"outil_caracteres","dropMenu":[{"id":"A_grave","n=
ame":"Insert a capital A with grave accent: =
=C0","className":"outil_a_maj_grave","replaceWith":"=C0","display":true,"=
lang":["fr","eo","cpf"]=0A=
}=0A=
,{"id":"E_aigu","name":"Insert a capital E with acute accent: =
=C9","className":"outil_e_maj_aigu","replaceWith":"=C9","display":true,"l=
ang":["fr","eo","cpf"]=0A=
}=0A=
,{"id":"E_grave","name":"Insert capital E =
grave","className":"outil_e_maj_grave","replaceWith":"=C8","display":true=
,"lang":["fr","eo","cpf"]=0A=
}=0A=
,{"id":"aelig","name":"Insert =
=E6","className":"outil_aelig","replaceWith":"=E6","display":true,"lang":=
["fr","eo","cpf"]=0A=
}=0A=
,{"id":"AElig","name":"Insert =
=C6","className":"outil_aelig_maj","replaceWith":"=C6","display":true,"la=
ng":["fr","eo","cpf"]=0A=
}=0A=
,{"id":"oe","name":"Insert an oe-ligature: =
&#339;","className":"outil_oe","replaceWith":"&#339;","display":true,"lan=
g":["fr"]=0A=
}=0A=
,{"id":"OE","name":"Insert a capital OE-ligature: =
&#338;","className":"outil_oe_maj","replaceWith":"&#338;","display":true,=
"lang":["fr"]=0A=
}=0A=
,{"id":"Ccedil","name":"Insert capital C =
cedilla","className":"outil_ccedil_maj","replaceWith":"=C7","display":tru=
e,"lang":["fr","eo","cpf"]=0A=
}=0A=
,{"id":"uppercase","name":"Convert to upper =
case","className":"outil_uppercase","replaceWith":function(markitup) { =
return markitup.selection.toUpperCase() =
},"display":true,"lang":["fr","en"]=0A=
}=0A=
,{"id":"lowercase","name":"Convert to lower =
case","className":"outil_lowercase","replaceWith":function(markitup) { =
return markitup.selection.toLowerCase() =
},"display":true,"lang":["fr","en"]=0A=
}=0A=
]=0A=
}=0A=
]=0A=
}=0A=
=0A=
=0A=
 =0A=
				// remplace ou cree -* ou -** ou -# ou -##=0A=
				function outil_liste(h, c) {=0A=
					if ((s =3D h.selection) && (r =3D s.match(/^-([*#]+) (.*)$/)))	 {=0A=
						r[1] =3D r[1].replace(/[#*]/g, c);=0A=
						s =3D '-'+r[1]+' '+r[2];=0A=
					} else {=0A=
						s =3D '-' + c + ' '+s;=0A=
					}=0A=
					return s;=0A=
				}=0A=
=0A=
				// indente des -* ou -#=0A=
				function outil_indenter(h) {=0A=
					if (s =3D h.selection) {=0A=
						if (s.substr(0,2)=3D=3D'-*') {=0A=
							s =3D '-**' + s.substr(2);=0A=
						} else if (s.substr(0,2)=3D=3D'-#') {=0A=
							s =3D '-##' + s.substr(2);=0A=
						} else {=0A=
							s =3D '-* ' + s;=0A=
						}=0A=
					}=0A=
					return s;=0A=
				}=0A=
						=0A=
				// desindente des -* ou -** ou -# ou -##=0A=
				function outil_desindenter(h){=0A=
					if (s =3D h.selection) {=0A=
						if (s.substr(0,3)=3D=3D'-**') {=0A=
							s =3D '-*' + s.substr(3);=0A=
						} else if (s.substr(0,3)=3D=3D'-* ') {=0A=
							s =3D s.substr(3);=0A=
						} else if (s.substr(0,3)=3D=3D'-##') {=0A=
							s =3D '-#' + s.substr(3);=0A=
						} else if (s.substr(0,3)=3D=3D'-# ') {=0A=
							s =3D s.substr(3);=0A=
						}=0A=
					}=0A=
					return s;=0A=
				}=0A=
				=0A=
				// ajouter un espace avant, apres un {qqc} pour ne pas que=0A=
				// gras {{}} suivi de italique {} donnent {{{}}}, mais { {{}} }=0A=
				function espace_si_accolade(h, openWith, closeWith){=0A=
					if (s =3D h.selection) {=0A=
						// accolade dans la selection=0A=
						if (s.charAt(0)=3D=3D'{') {=0A=
							return openWith + ' ' + s + ' ' + closeWith;=0A=
						}=0A=
						// accolade avant la selection=0A=
						else if (c =3D h.textarea.selectionStart) {=0A=
							if (h.textarea.value.charAt(c-1) =3D=3D '{') {=0A=
								return ' ' + openWith + s + closeWith + ' ';=0A=
							}=0A=
						}=0A=
					}=0A=
					return openWith + s + closeWith;=0A=
				} =0A=
				=0A=
=0A=
barre_outils_forum =3D =
{"nameSpace":"forum","previewAutoRefresh":false,"onEnter":{"keepDefault":=
false,"selectionType":"return","replaceWith":"\n"}=0A=
,"onShiftEnter":{"keepDefault":false,"replaceWith":"\n_ "}=0A=
,"onCtrlEnter":{"keepDefault":false,"replaceWith":"\n\n"}=0A=
,"onTab":{"keepDefault":false,"replaceWith":"	"}=0A=
,"markupSet":[{"name":"{{Bold}}","key":"B","className":"outil_bold","repl=
aceWith":function(h){ return espace_si_accolade(h, '{{', =
'}}');},"selectionType":"word"}=0A=
,{"name":"{Italic}","key":"I","className":"outil_italic","replaceWith":fu=
nction(h){ return espace_si_accolade(h, '{', =
'}');},"selectionType":"word"}=0A=
,{"separator":"---------------"}=0A=
,{"name":"Turn into a =
[hyperlink->http://...]","key":"L","className":"outil_link","openWith":"[=
","closeWith":"->[![Please enter the target of your hyperlink (you may =
give an internet URL in the form http://www.mysite.com or else simply =
the number of an article on this site).]!]]"}=0A=
,{"separator":"---------------"}=0A=
,{"name":"<quote>Quote a =
message</quote>","key":"Q","className":"outil_quote","openWith":"\n<quote=
>","closeWith":"</quote>\n","selectionType":"word"}=0A=
,{"name":"Place between =ABdouble =
quotes=AB","className":"outil_guillemets","openWith":"=AB","closeWith":"=BB=
","lang":["fr","eo","cpf","ar","es"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between &#8220;single =
quotes&#8220;","className":"outil_guillemets_simples","openWith":"&#8220;=
","closeWith":"&#8221;","lang":["fr","eo","cpf","ar","es"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between =ABdouble =
quotes=AB","className":"outil_guillemets_de","openWith":"&#8222;","closeW=
ith":"&#8220;","lang":["bg","de","pl","hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between &#8220;single =
quotes&#8220;","className":"outil_guillemets_de_simples","openWith":"&sbq=
uo;","closeWith":"&#8216;","lang":["bg","de","pl","hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between =ABdouble =
quotes=AB","className":"outil_guillemets_simples","openWith":"&#8220;","c=
loseWith":"&#8221;","lang_not":["fr","eo","cpf","ar","es","bg","de","pl",=
"hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"name":"Place between &#8220;single =
quotes&#8220;","className":"outil_guillemets_uniques","openWith":"&#8216;=
","closeWith":"&#8217;","lang_not":["fr","eo","cpf","ar","es","bg","de","=
pl","hr","src"]=0A=
,"selectionType":"word"}=0A=
,{"separator":"---------------"}=0A=
]=0A=
}=0A=
=0A=
=0A=
 =0A=
				// remplace ou cree -* ou -** ou -# ou -##=0A=
				function outil_liste(h, c) {=0A=
					if ((s =3D h.selection) && (r =3D s.match(/^-([*#]+) (.*)$/)))	 {=0A=
						r[1] =3D r[1].replace(/[#*]/g, c);=0A=
						s =3D '-'+r[1]+' '+r[2];=0A=
					} else {=0A=
						s =3D '-' + c + ' '+s;=0A=
					}=0A=
					return s;=0A=
				}=0A=
=0A=
				// indente des -* ou -#=0A=
				function outil_indenter(h) {=0A=
					if (s =3D h.selection) {=0A=
						if (s.substr(0,2)=3D=3D'-*') {=0A=
							s =3D '-**' + s.substr(2);=0A=
						} else if (s.substr(0,2)=3D=3D'-#') {=0A=
							s =3D '-##' + s.substr(2);=0A=
						} else {=0A=
							s =3D '-* ' + s;=0A=
						}=0A=
					}=0A=
					return s;=0A=
				}=0A=
						=0A=
				// desindente des -* ou -** ou -# ou -##=0A=
				function outil_desindenter(h){=0A=
					if (s =3D h.selection) {=0A=
						if (s.substr(0,3)=3D=3D'-**') {=0A=
							s =3D '-*' + s.substr(3);=0A=
						} else if (s.substr(0,3)=3D=3D'-* ') {=0A=
							s =3D s.substr(3);=0A=
						} else if (s.substr(0,3)=3D=3D'-##') {=0A=
							s =3D '-#' + s.substr(3);=0A=
						} else if (s.substr(0,3)=3D=3D'-# ') {=0A=
							s =3D s.substr(3);=0A=
						}=0A=
					}=0A=
					return s;=0A=
				}=0A=
				=0A=
				// ajouter un espace avant, apres un {qqc} pour ne pas que=0A=
				// gras {{}} suivi de italique {} donnent {{{}}}, mais { {{}} }=0A=
				function espace_si_accolade(h, openWith, closeWith){=0A=
					if (s =3D h.selection) {=0A=
						// accolade dans la selection=0A=
						if (s.charAt(0)=3D=3D'{') {=0A=
							return openWith + ' ' + s + ' ' + closeWith;=0A=
						}=0A=
						// accolade avant la selection=0A=
						else if (c =3D h.textarea.selectionStart) {=0A=
							if (h.textarea.value.charAt(c-1) =3D=3D '{') {=0A=
								return ' ' + openWith + s + closeWith + ' ';=0A=
							}=0A=
						}=0A=
					}=0A=
					return openWith + s + closeWith;=0A=
				} =0A=
				=0A=
=0A=
=0A=
;(function($){=0A=
=0A=
// 2 fonctions pour appeler le porte plume reutilisables pour d'autres =
plugins=0A=
// on envoie dedans la selection jquery qui doit etre effectuee=0A=
// ce qui evite des appels direct a markitup, aucazou on change de lib =
un jour=0A=
$.fn.barre_outils =3D function(nom, settings) {=0A=
	options =3D {=0A=
		lang:'en'=0A=
	};=0A=
	$.extend(options, settings);=0A=
=0A=
	return $(this)=0A=
		.not('.markItUpEditor, .no_barre')=0A=
		.markItUp(eval('barre_outils_' + nom), {lang:options.lang});=0A=
};=0A=
=0A=
$.fn.barre_previsualisation =3D function(settings) {=0A=
	options =3D {=0A=
		previewParserPath:"index.php?action=3Dporte_plume_previsu", // ici une =
url relative pour prive/public=0A=
		textEditer:"Edit",=0A=
		textVoir:"Preview"=0A=
	};=0A=
	$.extend(options, settings);=0A=
=0A=
	return $(this)=0A=
		.not('.pp_previsualisation, .no_previsualisation')=0A=
		.previsu_spip(options);=0A=
};=0A=
=0A=
$(window).load(function(){=0A=
	// ajoute les barres d'outils markitup=0A=
	function barrebouilles(){=0A=
		// fonction generique appliquee aux classes CSS :=0A=
		// inserer_barre_forum, inserer_barre_edition, inserer_previsualisation=0A=
		$('.formulaire_spip =
textarea.inserer_barre_forum').barre_outils('forum');=0A=
		$('.formulaire_spip =
textarea.inserer_barre_edition').barre_outils('edition');=0A=
		$('.formulaire_spip =
textarea.inserer_previsualisation').barre_previsualisation();=0A=
		// fonction specifique aux formulaires de SPIP :=0A=
		// barre de forum=0A=
		$('textarea.textarea_forum').barre_outils('forum');=0A=
		 =0A=
		$('.formulaire_forum textarea[name=3Dtexte]').barre_outils('forum');=0A=
		// barre d'edition et onglets de previsualisation=0A=
		$('.formulaire_spip textarea[name=3Dtexte]')=0A=
			.barre_outils('edition')=0A=
			.barre_previsualisation();=0A=
	}=0A=
	barrebouilles();=0A=
	onAjaxLoad(barrebouilles);=0A=
=0A=
});=0A=
})(jQuery);=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/plugins/Lecteur_multimedia/soundmanager/soundmanager2.js

/*=0A=
   SoundManager 2: Javascript Sound for the Web=0A=
   --------------------------------------------=0A=
   http://www.schillmania.com/projects/soundmanager2/=0A=
=0A=
   Copyright (c) 2007, Scott Schiller. All rights reserved.=0A=
   Code licensed under the BSD License:=0A=
   http://www.schillmania.com/projects/soundmanager2/license.txt=0A=
=0A=
   Beta V2.0b.20070201=0A=
*/=0A=
=0A=
function SoundManager(smURL,smID) {=0A=
  var self =3D this;=0A=
  this.version =3D 'V2.0b.20070201';=0A=
  this.url =3D (smURL||'soundmanager2.swf');=0A=
=0A=
  this.debugMode =3D true;           // enable debugging output =
(div#soundmanager-debug, OR console if available + configured)=0A=
  this.useConsole =3D true;          // use firebug/safari =
console.log()-type debug console if available=0A=
  this.consoleOnly =3D false;        // if console is being used, do not =
create/write to #soundmanager-debug=0A=
  this.nullURL =3D 'data/null.mp3';  // path to "null" (empty) MP3 file, =
used to unload sounds=0A=
=0A=
  this.defaultOptions =3D {=0A=
    'autoLoad': false,             // enable automatic loading =
(otherwise .load() will be called on demand with .play(), the latter =
being nicer on bandwidth - if you want to .load yourself, you also can)=0A=
    'stream': true,                // allows playing before entire file =
has loaded (recommended)=0A=
    'autoPlay': false,             // enable playing of file as soon as =
possible (much faster if "stream" is true)=0A=
    'onid3': null,                 // callback function for "ID3 data is =
added/available"=0A=
    'onload': null,                // callback function for "load =
finished"=0A=
    'whileloading': null,          // callback function for "download =
progress update" (X of Y bytes received)=0A=
    'onplay': null,                // callback for "play" start=0A=
    'whileplaying': null,          // callback during play (position =
update)=0A=
    'onstop': null,                // callback for "user stop"=0A=
    'onfinish': null,              // callback function for "sound =
finished playing"=0A=
    'onbeforefinish': null,        // callback for "before sound =
finished playing (at [time])"=0A=
    'onbeforefinishtime': 5000,    // offset (milliseconds) before end =
of sound to trigger beforefinish (eg. 1000 msec =3D 1 second)=0A=
    'onbeforefinishcomplete':null, // function to call when said sound =
finishes playing=0A=
    'onjustbeforefinish':null,     // callback for [n] msec before end =
of current sound=0A=
    'onjustbeforefinishtime':200,  // [n] - if not using, set to 0 (or =
null handler) and event will not fire.=0A=
    'multiShot': true,             // let sounds "restart" or layer on =
top of each other when played multiple times, rather than one-shot/one =
at a time=0A=
    'pan': 0,                      // "pan" settings, left-to-right, =
-100 to 100=0A=
    'volume': 100                  // self-explanatory. 0-100, the =
latter being the max.=0A=
  }=0A=
=0A=
  this.allowPolling =3D true;        // allow flash to poll for status =
update (required for "while playing", "progress" etc. to work.)=0A=
  this.enabled =3D false;=0A=
  this.o =3D null;=0A=
  this.id =3D (smID||'sm2movie');=0A=
  this.oMC =3D null;=0A=
  this.sounds =3D [];=0A=
  this.soundIDs =3D [];=0A=
  this.isIE =3D (navigator.userAgent.match(/MSIE/));=0A=
  this.isSafari =3D (navigator.userAgent.match(/safari/i));=0A=
  this.debugID =3D 'soundmanager-debug';=0A=
  this._debugOpen =3D true;=0A=
  this._didAppend =3D false;=0A=
  this._appendSuccess =3D false;=0A=
  this._didInit =3D false;=0A=
  this._disabled =3D false;=0A=
  this._hasConsole =3D (typeof console !=3D 'undefined' && typeof =
console.log !=3D 'undefined');=0A=
  this._debugLevels =3D =
!self.isSafari?['debug','info','warn','error']:['log','log','log','log'];=0A=
=0A=
  // --- public methods ---=0A=
=0A=
  this.getMovie =3D function(smID) {=0A=
    // return self.isIE?window[smID]:document[smID];=0A=
    return =
self.isIE?window[smID]:(self.isSafari?document[smID+'-embed']:document.ge=
tElementById(smID+'-embed'));=0A=
  }=0A=
=0A=
  this.loadFromXML =3D function(sXmlUrl) {=0A=
    try {=0A=
      self.o._loadFromXML(sXmlUrl);=0A=
    } catch(e) {=0A=
      self._failSafely();=0A=
      return true;=0A=
    }=0A=
  }=0A=
=0A=
  this.createSound =3D function(oOptions) {=0A=
    if (!self._didInit) throw new Error('soundManager.createSound(): Not =
loaded yet - wait for soundManager.onload() before calling sound-related =
methods');=0A=
    if (arguments.length=3D=3D2) {=0A=
      // function overloading in JS! :) ..assume simple =
createSound(id,url) use case=0A=
      oOptions =3D {'id':arguments[0],'url':arguments[1]}=0A=
    }=0A=
    var thisOptions =3D self._mergeObjects(oOptions);=0A=
    self._writeDebug('soundManager.createSound(): "<a href=3D"#" =
onclick=3D"soundManager.play(\''+thisOptions.id+'\');return false" =
title=3D"play this sound">'+thisOptions.id+'</a>" =
('+thisOptions.url+')',1);=0A=
    if (self._idCheck(thisOptions.id,true)) {=0A=
      self._writeDebug('sound '+thisOptions.id+' already defined - =
exiting',2);=0A=
      return false;=0A=
    }=0A=
    self.sounds[thisOptions.id] =3D new SMSound(self,thisOptions);=0A=
    self.soundIDs[self.soundIDs.length] =3D thisOptions.id;=0A=
    try {=0A=
      =
self.o._createSound(thisOptions.id,thisOptions.onjustbeforefinishtime);=0A=
    } catch(e) {=0A=
      self._failSafely();=0A=
      return true;=0A=
    }=0A=
    if (thisOptions.autoLoad || thisOptions.autoPlay) =
self.sounds[thisOptions.id].load(thisOptions);=0A=
    if (thisOptions.autoPlay) self.sounds[thisOptions.id].playState =3D =
1; // we can only assume this sound will be playing soon.=0A=
  }=0A=
=0A=
  this.load =3D function(sID,oOptions) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].load(oOptions);=0A=
  }=0A=
=0A=
  this.unload =3D function(sID) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].unload();=0A=
  }=0A=
=0A=
  this.play =3D function(sID,oOptions) {=0A=
    if (!self._idCheck(sID)) {=0A=
      if (typeof oOptions !=3D 'Object') oOptions =3D {url:oOptions}; // =
overloading use case: play('mySound','/path/to/some.mp3');=0A=
      if (oOptions && oOptions.url) {=0A=
        // overloading use case, creation + playing of sound: =
.play('someID',{url:'/path/to.mp3'});=0A=
        self._writeDebug('soundController.play(): attempting to create =
"'+sID+'"',1);=0A=
        oOptions.id =3D sID;=0A=
        self.createSound(oOptions);=0A=
      } else {=0A=
        return false;=0A=
      }=0A=
    }=0A=
    self.sounds[sID].play(oOptions);=0A=
  }=0A=
=0A=
  this.start =3D this.play; // just for convenience=0A=
=0A=
  this.setPosition =3D function(sID,nMsecOffset) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].setPosition(nMsecOffset);=0A=
  }=0A=
=0A=
  this.stop =3D function(sID) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self._writeDebug('soundManager.stop('+sID+')',1);=0A=
    self.sounds[sID].stop(); =0A=
  }=0A=
=0A=
  this.stopAll =3D function() {=0A=
    self._writeDebug('soundManager.stopAll()',1);=0A=
    for (var oSound in self.sounds) {=0A=
      if (self.sounds[oSound] instanceof SMSound) =
self.sounds[oSound].stop(); // apply only to sound objects=0A=
    }=0A=
  }=0A=
=0A=
  this.pause =3D function(sID) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].pause();=0A=
  }=0A=
=0A=
  this.resume =3D function(sID) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].resume();=0A=
  }=0A=
=0A=
  this.togglePause =3D function(sID) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].togglePause();=0A=
  }=0A=
=0A=
  this.setPan =3D function(sID,nPan) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].setPan(nPan);=0A=
  }=0A=
=0A=
  this.setVolume =3D function(sID,nVol) {=0A=
    if (!self._idCheck(sID)) return false;=0A=
    self.sounds[sID].setVolume(nVol);=0A=
  }=0A=
=0A=
  this.setPolling =3D function(bPolling) {=0A=
    if (!self.o || !self.allowPolling) return false;=0A=
    self._writeDebug('soundManager.setPolling('+bPolling+')');=0A=
    self.o._setPolling(bPolling);=0A=
  }=0A=
=0A=
  this.disable =3D function() {=0A=
    // destroy all functions=0A=
    if (self._disabled) return false;=0A=
    self._disabled =3D true;=0A=
    self._writeDebug('soundManager.disable(): Disabling all functions - =
future calls will return false.',1);=0A=
    for (var i=3Dself.soundIDs.length; i--;) {=0A=
      self._disableObject(self.sounds[self.soundIDs[i]]);=0A=
    }=0A=
    self.initComplete(); // fire "complete", despite fail=0A=
    self._disableObject(self);=0A=
  }=0A=
=0A=
  this.getSoundById =3D function(sID,suppressDebug) {=0A=
    if (!sID) throw new Error('SoundManager.getSoundById(): sID is =
null/undefined');=0A=
    var result =3D self.sounds[sID];=0A=
    if (!result && !suppressDebug) {=0A=
      self._writeDebug('"'+sID+'" is an invalid sound ID.',2);=0A=
      // soundManager._writeDebug('trace: '+arguments.callee.caller);=0A=
    }=0A=
    return result;=0A=
  }=0A=
=0A=
  this.onload =3D function() {=0A=
    // window.onload() equivalent for SM2, ready to create sounds etc.=0A=
    // this is a stub - you can override this in your own external =
script, eg. soundManager.onload =3D function() {}=0A=
    soundManager._writeDebug('<em>Warning</em>: soundManager.onload() is =
undefined.',2);=0A=
  }=0A=
=0A=
  this.onerror =3D function() {=0A=
    // stub for user handler, called when SM2 fails to load/init=0A=
  }=0A=
=0A=
  // --- "private" methods ---=0A=
=0A=
  this._idCheck =3D this.getSoundById;=0A=
=0A=
  this._disableObject =3D function(o) {=0A=
    for (var oProp in o) {=0A=
      if (typeof o[oProp] =3D=3D 'function' && typeof =
o[oProp]._protected =3D=3D 'undefined') o[oProp] =3D function(){return =
false;}=0A=
    }=0A=
    oProp =3D null;=0A=
  }=0A=
=0A=
  this._failSafely =3D function() {=0A=
    // exception handler for "object doesn't support this property or =
method"=0A=
    var flashCPLink =3D =
'http://www.macromedia.com/support/documentation/en/flashplayer/help/sett=
ings_manager04.html';=0A=
    var fpgssTitle =3D 'You may need to whitelist this location/domain =
eg. file:///C:/ or C:/ or mysite.com, or set ALWAYS ALLOW under the =
Flash Player Global Security Settings page. Note that this seems to =
apply only to file system viewing.';=0A=
    var flashCPL =3D '<a href=3D"'+flashCPLink+'" =
title=3D"'+fpgssTitle+'">view/edit</a>';=0A=
    var FPGSS =3D '<a href=3D"'+flashCPLink+'" title=3D"Flash Player =
Global Security Settings">FPGSS</a>';=0A=
    if (!self._disabled) {=0A=
      self._writeDebug('soundManager: JS-&gt;Flash communication failed. =
Possible causes: flash/browser security restrictions ('+flashCPL+'), =
insufficient browser/plugin support, or .swf not found',2);=0A=
      self._writeDebug('Verify that the movie path of =
<em>'+self.url+'</em> is correct (<a href=3D"'+self.url+'" title=3D"If =
you get a 404/not found, fix it!">test link</a>)',1);=0A=
      if (self._didAppend) {=0A=
        if (!document.domain) {=0A=
          self._writeDebug('Loading from local file system? =
(document.domain appears to be null, this URL path may need to be added =
to \'trusted locations\' in '+FPGSS+')',1);=0A=
          self._writeDebug('Possible security/domain restrictions =
('+flashCPL+'), should work when served by http on same domain',1);=0A=
        }=0A=
        // self._writeDebug('Note: Movie added via JS method, static =
object/embed in-page markup method may work instead.');=0A=
      }=0A=
      self.disable();=0A=
    }=0A=
  }=0A=
=0A=
  this._createMovie =3D function(smID,smURL) {=0A=
    if (self._didAppend && self._appendSuccess) return false; // ignore =
if already succeeded=0A=
    if (window.location.href.indexOf('debug=3D1')+1) self.debugMode =3D =
true; // allow force of debug mode via URL=0A=
    self._didAppend =3D true;=0A=
    var html =3D ['<object =
classid=3D"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" =
codebase=3D"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swf=
lash.cab#version=3D8,0,0,0" width=3D"16" height=3D"16" =
id=3D"'+smID+'"><param name=3D"movie" value=3D"'+smURL+'"><param =
name=3D"quality" value=3D"high"><param name=3D"allowScriptAccess" =
value=3D"always" /></object>','<embed name=3D"'+smID+'-embed" =
id=3D"'+smID+'-embed" src=3D"'+smURL+'" width=3D"1" height=3D"1" =
quality=3D"high" allowScriptAccess=3D"always" =
pluginspage=3D"http://www.macromedia.com/go/getflashplayer" =
type=3D"application/x-shockwave-flash"></embed>'];=0A=
    var toggleElement =3D '<div id=3D"'+self.debugID+'-toggle" =
style=3D"position:fixed;_position:absolute;right:0px;bottom:0px;_top:0px;=
width:1.2em;height:1.2em;line-height:1.2em;margin:2px;padding:0px;text-al=
ign:center;border:1px solid =
#999;cursor:pointer;background:#fff;color:#333;z-index:706" =
title=3D"Toggle SM2 debug console" =
onclick=3D"soundManager._toggleDebug()">-</div>';=0A=
    var debugHTML =3D '<div id=3D"'+self.debugID+'" =
style=3D"display:'+(self.debugMode && =
((!self._hasConsole||!self.useConsole)||(self.useConsole && =
self._hasConsole && =
!self.consoleOnly))?'block':'none')+';opacity:0.85"></div>';=0A=
    var appXHTML =3D 'soundManager._createMovie(): appendChild/innerHTML =
set failed. Serving application/xhtml+xml MIME type? Browser may be =
enforcing strict rules, not allowing write to innerHTML. (PS: If so, =
this means your commitment to XML validation is going to break stuff =
now, because this part isn\'t finished yet. ;))';=0A=
=0A=
    var sHTML =3D '<div =
style=3D"position:absolute;left:-256px;top:-256px;width:1px;height:1px" =
class=3D"movieContainer">'+html[self.isIE?0:1]+'</div>'+(self.debugMode =
&& ((!self._hasConsole||!self.useConsole)||(self.useConsole && =
self._hasConsole && !self.consoleOnly)) && =
!document.getElementById(self.debugID)?'x'+debugHTML+toggleElement:'');=0A=
=0A=
    var oTarget =3D =
(document.body?document.body:document.getElementsByTagName('div')[0]);=0A=
    if (oTarget) {=0A=
      self.oMC =3D document.createElement('div');=0A=
      self.oMC.className =3D 'movieContainer';=0A=
      // "hide" flash movie=0A=
      self.oMC.style.position =3D 'absolute';=0A=
      self.oMC.style.left =3D '-256px';=0A=
      self.oMC.style.width =3D '1px';=0A=
      self.oMC.style.height =3D '1px';=0A=
      try {=0A=
        oTarget.appendChild(self.oMC);=0A=
        self.oMC.innerHTML =3D html[self.isIE?0:1];=0A=
        self._appendSuccess =3D true;=0A=
      } catch(e) {=0A=
        // may fail under app/xhtml+xml - has yet to be tested=0A=
        throw new Error(appXHTML);=0A=
      }=0A=
      if (!document.getElementById(self.debugID) && =
((!self._hasConsole||!self.useConsole)||(self.useConsole && =
self._hasConsole && !self.consoleOnly))) {=0A=
        var oDebug =3D document.createElement('div');=0A=
        oDebug.id =3D self.debugID;=0A=
        oDebug.style.display =3D (self.debugMode?'block':'none');=0A=
        if (self.debugMode) {=0A=
          try {=0A=
            var oD =3D document.createElement('div');=0A=
            oTarget.appendChild(oD);=0A=
            oD.innerHTML =3D toggleElement;=0A=
          } catch(e) {=0A=
            throw new Error(appXHTML);=0A=
          }=0A=
        }=0A=
        oTarget.appendChild(oDebug);=0A=
      }=0A=
      oTarget =3D null;=0A=
    }=0A=
    self._writeDebug('-- SoundManager 2 Version =
'+self.version.substr(1)+' --',1);=0A=
    self._writeDebug('soundManager._createMovie(): trying to load <a =
href=3D"'+smURL+'" title=3D"Test this link =
(404=3Dbad)">'+smURL+'</a>',1);=0A=
  }=0A=
=0A=
  this._writeDebug =3D function(sText,sType) {=0A=
    if (!self.debugMode) return false;=0A=
    if (self._hasConsole && self.useConsole) {=0A=
      console[self._debugLevels[sType]||'log'](sText); // firebug et al=0A=
      if (self.useConsoleOnly) return true;=0A=
    }=0A=
    var sDID =3D 'soundmanager-debug';=0A=
    try {=0A=
      var o =3D document.getElementById(sDID);=0A=
      if (!o) return false;=0A=
      var p =3D document.createElement('div');=0A=
      p.innerHTML =3D sText;=0A=
      // o.appendChild(p); // top-to-bottom=0A=
      o.insertBefore(p,o.firstChild); // bottom-to-top=0A=
    } catch(e) {=0A=
      // oh well=0A=
    }=0A=
    o =3D null;=0A=
  }=0A=
  this._writeDebug._protected =3D true;=0A=
=0A=
  this._writeDebugAlert =3D function(sText) { alert(sText); }=0A=
=0A=
  if (window.location.href.indexOf('debug=3Dalert')+1) {=0A=
    self.debugMode =3D true;=0A=
    self._writeDebug =3D self._writeDebugAlert;=0A=
  }=0A=
=0A=
  this._toggleDebug =3D function() {=0A=
    var o =3D document.getElementById(self.debugID);=0A=
    var oT =3D document.getElementById(self.debugID+'-toggle');=0A=
    if (!o) return false;=0A=
    if (self._debugOpen) {=0A=
      // minimize=0A=
      oT.innerHTML =3D '+';=0A=
      o.style.display =3D 'none';=0A=
    } else {=0A=
      oT.innerHTML =3D '-';=0A=
      o.style.display =3D 'block';=0A=
    }=0A=
    self._debugOpen =3D !self._debugOpen;=0A=
  }=0A=
=0A=
  this._toggleDebug._protected =3D true;=0A=
=0A=
  this._debug =3D function() {=0A=
    self._writeDebug('soundManager._debug(): sounds by id/url:',0);=0A=
    for (var i=3D0,j=3Dself.soundIDs.length; i<j; i++) {=0A=
      self._writeDebug(self.sounds[self.soundIDs[i]].sID+' | =
'+self.sounds[self.soundIDs[i]].url,0);=0A=
    }=0A=
  }=0A=
=0A=
  this._mergeObjects =3D function(oMain,oAdd) {=0A=
    // non-destructive merge=0A=
    var o1 =3D oMain;=0A=
    var o2 =3D (typeof oAdd =3D=3D 'undefined'?self.defaultOptions:oAdd);=0A=
    for (var o in o2) {=0A=
      if (typeof o1[o] =3D=3D 'undefined') o1[o] =3D o2[o];=0A=
    }=0A=
    return o1;=0A=
  }=0A=
=0A=
  this.createMovie =3D function(sURL) {=0A=
    if (sURL) self.url =3D sURL;=0A=
    self._initMovie();=0A=
  }=0A=
=0A=
  this._initMovie =3D function() {=0A=
    // attempt to get, or create, movie=0A=
    if (self.o) return false; // pre-init may have fired this function =
before window.onload(), may already exist=0A=
    self.o =3D self.getMovie(self.id); // try to get flash movie (inline =
markup)=0A=
    if (!self.o) {=0A=
      // try to create=0A=
      self._createMovie(self.id,self.url);=0A=
      self.o =3D self.getMovie(self.id);=0A=
    }=0A=
    if (self.o) {=0A=
      self._writeDebug('soundManager._initMovie(): Got =
'+self.o.nodeName+' element ('+(self._didAppend?'created via JS':'static =
HTML')+')',1);=0A=
    }=0A=
  }=0A=
=0A=
  this.initComplete =3D function() {=0A=
    if (self._didInit) return false;=0A=
    self._didInit =3D true;=0A=
    self._writeDebug('-- SoundManager 2 '+(self._disabled?'failed to =
load':'loaded')+' ('+(self._disabled?'security/load error':'OK')+') =
--',1);=0A=
    if (self._disabled) {=0A=
      self._writeDebug('soundManager.initComplete(): calling =
soundManager.onerror()',1);=0A=
      self.onerror.apply(window);=0A=
      return false;=0A=
    }=0A=
    self._writeDebug('soundManager.initComplete(): calling =
soundManager.onload()',1);=0A=
    try {=0A=
      // call user-defined "onload", scoped to window=0A=
      self.onload.apply(window);=0A=
    } catch(e) {=0A=
      // something broke (likely JS error in user function)=0A=
      self._writeDebug('soundManager.onload() threw an exception: =
'+e.message,2);=0A=
      throw e; // (so browser/console gets message)=0A=
    }=0A=
    self._writeDebug('soundManager.onload() complete',1);=0A=
  }=0A=
=0A=
  this.init =3D function() {=0A=
    // called after onload()=0A=
    // self._initMovie();=0A=
    // event cleanup=0A=
    if (window.removeEventListener) {=0A=
      window.removeEventListener('load',self.beginInit,false);=0A=
    } else if (window.detachEvent) {=0A=
      window.detachEvent('onload',self.beginInit);=0A=
    }=0A=
    try {=0A=
      self.o._externalInterfaceTest(); // attempt to talk to Flash=0A=
      self._writeDebug('Flash ExternalInterface call (JS -&gt; Flash) =
succeeded.',1);=0A=
      if (!self.allowPolling) self._writeDebug('Polling =
(whileloading/whileplaying support) is disabled.',1);=0A=
      self.setPolling(true);=0A=
      self.enabled =3D true;=0A=
    }  catch(e) {=0A=
      self._failSafely();=0A=
      self.initComplete();=0A=
      return false;=0A=
    }=0A=
    self.initComplete();=0A=
  }=0A=
=0A=
  this.beginDelayedInit =3D function() {=0A=
    setTimeout(self.beginInit,200);=0A=
  }=0A=
=0A=
  this.beginInit =3D function() {=0A=
    self.createMovie(); // ensure creation if not already done=0A=
    self._initMovie();=0A=
    setTimeout(self.init,1000); // some delay required, otherwise =
JS<->Flash/ExternalInterface communication fails under non-IE (?!)=0A=
  }=0A=
=0A=
  this.destruct =3D function() {=0A=
    if (self.isSafari) {=0A=
      /* --=0A=
        Safari 1.3.2 (v312.6)/OSX 10.3.9 and perhaps newer will crash if =
a sound is actively loading when user exits/refreshes/leaves page=0A=
       (Apparently related to ExternalInterface making calls to an =
unloading/unloaded page?)=0A=
       Unloading sounds (detaching handlers and so on) may help to =
prevent this=0A=
      -- */=0A=
      for (var i=3Dself.soundIDs.length; i--;) {=0A=
        if (self.sounds[self.soundIDs[i]].readyState =3D=3D 1) =
self.sounds[self.soundIDs[i]].unload();=0A=
      }=0A=
    }=0A=
    self.disable();=0A=
    // self.o =3D null;=0A=
    // self.oMC =3D null;=0A=
  }=0A=
=0A=
}=0A=
=0A=
function SMSound(oSM,oOptions) {=0A=
  var self =3D this;=0A=
  var sm =3D oSM;=0A=
  this.sID =3D oOptions.id;=0A=
  this.url =3D oOptions.url;=0A=
  this.options =3D sm._mergeObjects(oOptions);=0A=
  this.id3 =3D {=0A=
   /* =0A=
    Name/value pairs set via Flash when available - see reference for =
names:=0A=
    =
http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/ww=
help.htm?context=3DLiveDocs_Parts&file=3D00001567.html=0A=
    (eg., this.id3.songname or this.id3['songname'])=0A=
   */=0A=
  }=0A=
=0A=
  self.resetProperties =3D function(bLoaded) {=0A=
    self.bytesLoaded =3D null;=0A=
    self.bytesTotal =3D null;=0A=
    self.position =3D null;=0A=
    self.duration =3D null;=0A=
    self.durationEstimate =3D null;=0A=
    self.loaded =3D false;=0A=
    self.loadSuccess =3D null;=0A=
    self.playState =3D 0;=0A=
    self.paused =3D false;=0A=
    self.readyState =3D 0; // 0 =3D uninitialised, 1 =3D loading, 2 =3D =
failed/error, 3 =3D loaded/success=0A=
    self.didBeforeFinish =3D false;=0A=
    self.didJustBeforeFinish =3D false;=0A=
  }=0A=
=0A=
  self.resetProperties();=0A=
=0A=
  // --- public methods ---=0A=
=0A=
  this.load =3D function(oOptions) {=0A=
    self.loaded =3D false;=0A=
    self.loadSuccess =3D null;=0A=
    self.readyState =3D 1;=0A=
    self.playState =3D (oOptions.autoPlay||false); // if autoPlay, =
assume "playing" is true (no way to detect when it actually starts in =
Flash unless onPlay is watched?)=0A=
    var thisOptions =3D sm._mergeObjects(oOptions);=0A=
    if (typeof thisOptions.url =3D=3D 'undefined') thisOptions.url =3D =
self.url;=0A=
    try {=0A=
      sm._writeDebug('loading '+thisOptions.url,1);=0A=
      =
sm.o._load(self.sID,thisOptions.url,thisOptions.stream,thisOptions.autoPl=
ay,thisOptions.whileloading?1:0);=0A=
    } catch(e) {=0A=
      sm._writeDebug('SMSound().load(): JS-&gt;Flash communication =
failed.',2);=0A=
    }=0A=
  }=0A=
=0A=
  this.unload =3D function() {=0A=
    // Flash 8/AS2 can't "close" a stream - fake it by loading an empty =
MP3=0A=
    sm._writeDebug('SMSound().unload()');=0A=
    self.setPosition(0); // reset current sound positioning=0A=
    sm.o._unload(self.sID,self.nullURL);=0A=
    // reset load/status flags=0A=
    self.resetProperties();=0A=
  }=0A=
=0A=
  this.play =3D function(oOptions) {=0A=
    if (!oOptions) oOptions =3D {};=0A=
=0A=
    // --- TODO: make event handlers specified via oOptions only apply =
to this instance of play() (eg. onfinish applies but will reset to =
default on finish)=0A=
    if (oOptions.onfinish) self.options.onfinish =3D oOptions.onfinish;=0A=
    if (oOptions.onbeforefinish) self.options.onbeforefinish =3D =
oOptions.onbeforefinish;=0A=
    if (oOptions.onjustbeforefinish) self.options.onjustbeforefinish =3D =
oOptions.onjustbeforefinish;=0A=
    // ---=0A=
=0A=
    var thisOptions =3D sm._mergeObjects(oOptions);=0A=
    if (self.playState =3D=3D 1) {=0A=
      // var allowMulti =3D typeof =
oOptions.multiShot!=3D'undefined'?oOptions.multiShot:sm.defaultOptions.mu=
ltiShot;=0A=
      var allowMulti =3D thisOptions.multiShot;=0A=
      if (!allowMulti) {=0A=
        sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing? =
(one-shot)',1);=0A=
        return false;=0A=
      } else {=0A=
        sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing =
(multi-shot)',1);=0A=
      }=0A=
    }=0A=
    if (!self.loaded) {=0A=
      if (self.readyState =3D=3D 0) {=0A=
        sm._writeDebug('SMSound.play(): .play() before load request. =
Attempting to load "'+self.sID+'"',1);=0A=
        // try to get this sound playing ASAP=0A=
        thisOptions.stream =3D true;=0A=
        thisOptions.autoPlay =3D true;=0A=
        // TODO: need to investigate when false, double-playing=0A=
        // if (typeof oOptions.autoPlay=3D=3D'undefined') =
thisOptions.autoPlay =3D true; // only set autoPlay if unspecified here=0A=
        self.load(thisOptions); // try to get this sound playing ASAP=0A=
      } else if (self.readyState =3D=3D 2) {=0A=
        sm._writeDebug('SMSound.play(): Could not load "'+self.sID+'" - =
exiting',2);=0A=
        return false;=0A=
      } else {=0A=
        sm._writeDebug('SMSound.play(): "'+self.sID+'" is loading - =
attempting to play..',1);=0A=
      }=0A=
    } else {=0A=
      sm._writeDebug('SMSound.play(): "'+self.sID+'"');=0A=
    }=0A=
    if (self.paused) {=0A=
      self.resume();=0A=
    } else {=0A=
      self.playState =3D 1;=0A=
      self.position =3D (thisOptions.offset||0);=0A=
      if (thisOptions.onplay) thisOptions.onplay.apply(self);=0A=
      self.setVolume(thisOptions.volume);=0A=
      self.setPan(thisOptions.pan);=0A=
      if (!thisOptions.autoPlay) {=0A=
        sm._writeDebug('starting sound '+self.sID);=0A=
        sm.o._start(self.sID,thisOptions.loop||1,self.position); // =
TODO: verify !autoPlay doesn't cause issue=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  this.start =3D this.play; // just for convenience=0A=
=0A=
  this.stop =3D function(bAll) {=0A=
    if (self.playState =3D=3D 1) {=0A=
      self.playState =3D 0;=0A=
      self.paused =3D false;=0A=
      if (sm.defaultOptions.onstop) sm.defaultOptions.onstop.apply(self);=0A=
      sm.o._stop(self.sID);=0A=
    }=0A=
  }=0A=
=0A=
  this.setPosition =3D function(nMsecOffset) {=0A=
    // sm._writeDebug('setPosition('+nMsecOffset+')');=0A=
    =
sm.o._setPosition(self.sID,nMsecOffset/1000,self.paused||!self.playState)=
; // if paused or not playing, will not resume (by playing)=0A=
  }=0A=
=0A=
  this.pause =3D function() {=0A=
    if (self.paused) return false;=0A=
    sm._writeDebug('SMSound.pause()');=0A=
    self.paused =3D true;=0A=
    sm.o._pause(self.sID);=0A=
  }=0A=
=0A=
  this.resume =3D function() {=0A=
    if (!self.paused) return false;=0A=
    sm._writeDebug('SMSound.resume()');=0A=
    self.paused =3D false;=0A=
    sm.o._pause(self.sID); // flash method is toggle-based (pause/resume)=0A=
  }=0A=
=0A=
  this.togglePause =3D function() {=0A=
    // if playing, pauses - if paused, resumes playing.=0A=
    sm._writeDebug('SMSound.togglePause()');=0A=
    if (!self.playState) {=0A=
      // self.setPosition();=0A=
      self.play({offset:self.position/1000});=0A=
      return false;=0A=
    }=0A=
    if (self.paused) {=0A=
      sm._writeDebug('SMSound.togglePause(): resuming..');=0A=
      self.resume();=0A=
    } else {=0A=
      sm._writeDebug('SMSound.togglePause(): pausing..');=0A=
      self.pause();=0A=
    }=0A=
  }=0A=
=0A=
  this.setPan =3D function(nPan) {=0A=
    if (typeof nPan =3D=3D 'undefined') nPan =3D 0;=0A=
    sm.o._setPan(self.sID,nPan);=0A=
    self.options.pan =3D nPan;=0A=
  }=0A=
=0A=
  this.setVolume =3D function(nVol) {=0A=
    if (typeof nVol =3D=3D 'undefined') nVol =3D 100;=0A=
    sm.o._setVolume(self.sID,nVol);=0A=
    self.options.volume =3D nVol;=0A=
  }=0A=
=0A=
  // --- "private" methods called by Flash ---=0A=
=0A=
  this._whileloading =3D function(nBytesLoaded,nBytesTotal,nDuration) {=0A=
    self.bytesLoaded =3D nBytesLoaded;=0A=
    self.bytesTotal =3D nBytesTotal;=0A=
    self.duration =3D nDuration;=0A=
    self.durationEstimate =3D =
parseInt((self.bytesTotal/self.bytesLoaded)*self.duration); // estimate =
total time (will only be accurate with CBR MP3s.)=0A=
    if (self.readyState !=3D 3 && self.options.whileloading) =
self.options.whileloading.apply(self);=0A=
    // soundManager._writeDebug('duration/durationEst: '+self.duration+' =
/ '+self.durationEstimate);=0A=
  }=0A=
=0A=
  this._onid3 =3D function(oID3PropNames,oID3Data) {=0A=
    // oID3PropNames: string array (names)=0A=
    // ID3Data: string array (data)=0A=
    sm._writeDebug('SMSound()._onid3(): "'+this.sID+'" ID3 data =
received.');=0A=
    var oData =3D [];=0A=
    for (var i=3D0,j=3DoID3PropNames.length; i<j; i++) {=0A=
      oData[oID3PropNames[i]] =3D oID3Data[i];=0A=
       sm._writeDebug(oID3PropNames[i]+': '+oID3Data[i]);=0A=
    }=0A=
    self.id3 =3D sm._mergeObjects(self.id3,oData);=0A=
    if (self.options.onid3) self.options.onid3.apply(self);=0A=
  }=0A=
=0A=
  this._whileplaying =3D function(nPosition) {=0A=
    if (isNaN(nPosition) || nPosition =3D=3D null) return false; // =
Flash may return NaN at times=0A=
    self.position =3D nPosition;=0A=
    if (self.playState =3D=3D 1) {=0A=
      if (self.options.whileplaying) =
self.options.whileplaying.apply(self); // flash may call after actual =
finish=0A=
      if (self.loaded && self.options.onbeforefinish && =
self.options.onbeforefinishtime && !self.didBeforeFinish && =
self.duration-self.position <=3D self.options.onbeforefinishtime) {=0A=
        sm._writeDebug('duration-position &lt;=3D onbeforefinishtime: =
'+self.duration+' - '+self.position+' &lt=3D =
'+self.options.onbeforefinishtime+' =
('+(self.duration-self.position)+')');=0A=
        self._onbeforefinish();=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  this._onload =3D function(bSuccess) {=0A=
    bSuccess =3D (bSuccess=3D=3D1?true:false);=0A=
    sm._writeDebug('SMSound._onload(): "'+self.sID+'"'+(bSuccess?' =
loaded.':' failed to load (or loaded from cache - weird bug) - [<a =
href=3D"'+self.url+'">test URL</a>]'));=0A=
    self.loaded =3D bSuccess;=0A=
    self.loadSuccess =3D bSuccess;=0A=
    self.readyState =3D bSuccess?3:2;=0A=
    if (self.options.onload) self.options.onload.apply(self);=0A=
  }=0A=
=0A=
  this._onbeforefinish =3D function() {=0A=
    if (!self.didBeforeFinish) {=0A=
      self.didBeforeFinish =3D true;=0A=
      if (self.options.onbeforefinish) =
self.options.onbeforefinish.apply(self);=0A=
    }=0A=
  }=0A=
=0A=
  this._onjustbeforefinish =3D function(msOffset) {=0A=
    // msOffset: "end of sound" delay actual value (eg. 200 msec, value =
at event fire time was 187)=0A=
    if (!self.didJustBeforeFinish) {=0A=
      self.didJustBeforeFinish =3D true;=0A=
      soundManager._writeDebug('SMSound._onjustbeforefinish()');=0A=
      if (self.options.onjustbeforefinish) =
self.options.onjustbeforefinish.apply(self);;=0A=
    }=0A=
  }=0A=
=0A=
  this._onfinish =3D function() {=0A=
    // sound has finished playing=0A=
    sm._writeDebug('SMSound._onfinish(): "'+self.sID+'" finished =
playing');=0A=
    self.playState =3D 0;=0A=
    self.paused =3D false;=0A=
    if (self.options.onfinish) self.options.onfinish.apply(self);=0A=
    if (self.options.onbeforefinishcomplete) =
self.options.onbeforefinishcomplete.apply(self);=0A=
    // reset some state items=0A=
    self.setPosition(0);=0A=
    self.didBeforeFinish =3D false;=0A=
    self.didJustBeforeFinish =3D false;=0A=
  }=0A=
=0A=
}=0A=
=0A=
var soundManager =3D new SoundManager();=0A=
=0A=
// attach onload handler=0A=
if (window.addEventListener) {=0A=
  window.addEventListener('load',soundManager.beginDelayedInit,false);=0A=
  window.addEventListener('beforeunload',soundManager.destruct,false);=0A=
} else if (window.attachEvent) {=0A=
  window.attachEvent('onload',soundManager.beginInit);=0A=
  window.attachEvent('beforeunload',soundManager.destruct);=0A=
} else {=0A=
  // no add/attachevent support - safe to assume no JS->Flash either.=0A=
  soundManager.onerror();=0A=
  soundManager.disable();=0A=
}
------=_NextPart_000_0059_01CC34AB.6D9E88E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.alterinfos.org/plugins/Lecteur_multimedia/player_enclosure.js

/*=0A=
	Appelee par le body onload, cette fonction affiche les players mp3 et =
genere les playlistes associees=0A=
	Auteur : BoOz <booz CHEZ rezo POINT net>=0A=
	Licence : GNU/GPL=0A=
=0A=
	compatibilite firefox par Vincent Ramos <www-lansargues CHEZ kailaasa =
POINT net> et erational <http://www.erational.org>=0A=
*=0A=
* Fonctionne avec jQuery.=0A=
**/=0A=
=0A=
var track_index =3D 0;=0A=
var playa=3D'';=0A=
=0A=
//tableau des mp3 de la page=0A=
mp3Array =3D new Array();=0A=
=0A=
function Player_init(url_player) {=0A=
=0A=
soundManager.onload =3D function() {=0A=
  // soundManager is initialised, ready to use. Create a sound for this =
demo page.=0A=
  soundManager.createSound('aDrumSound',url_player);=0A=
  }=0A=
  =0A=
}=0A=
=0A=
=0A=
$(document).ready(function(){=0A=
=0A=
//mettre le player aflax en bas de page=0A=
//$("#aflax_obj_0").appendTo("body");=0A=
=0A=
/*=0A=
soundManager.onload =3D function() {=0A=
  // soundManager is initialised, ready to use. Create a sound for this =
demo page.=0A=
soundManager.debugMode =3D false;             // disable debug mode=0A=
soundManager.defaultOptions.volume =3D 80;    // set global default =
volume=0A=
}=0A=
*/=0A=
=0A=
=0A=
var aff=3D $("a[@rel=3D'enclosure'][@href$=3Dmp3]").size();=0A=
=0A=
	//$("body").css({background:"#FF0000"});=0A=
	playa  =3D  '<div id=3D"musicplayer" style=3D"">' +=0A=
	         '</div>';=0A=
			=0A=
			$('body').append(playa);=0A=
			$('div#musicplayer').css({position:"fixed",top:"10px", =
right:"10px",width:"0",height:"0"});=0A=
	=0A=
=0A=
	$("a[@rel=3D'enclosure'][@href$=3Dmp3]").each(=0A=
		function(i) {	 =0A=
				// we store mp3 links in an array=0A=
				mp3Array.push(this.href);=0A=
				//demarrer le lecteur lors d'un click=0A=
				$(this).click(=0A=
		             function(e)=0A=
		             {=0A=
		                 e.preventDefault();=0A=
		                 player_play(i);=0A=
		             }=0A=
		         );=0A=
		         //a passer en .ajoute_musicplayer()	=0A=
				$(this).before('<span class=3D"play_">play</span>&nbsp;');=0A=
		}=0A=
	);=0A=
=0A=
=0A=
=0A=
	$("span.play_").each(=0A=
	function(i) {=0A=
	 =0A=
		$(this).toggle(=0A=
			             function(e){ =0A=
			             player_play(i) 						=0A=
						 },function(e){=0A=
						 player_stop();=0A=
						 }		=0A=
			         );=0A=
	=0A=
	}=0A=
	);=0A=
=0A=
=0A=
	//pas de boutons play dans la playliste=0A=
	$(".playliste").find("span").remove();=0A=
=0A=
	$(".playliste li").hover(function(){=0A=
	  $(this).addClass("over");=0A=
	},function(){=0A=
	  $(this).removeClass("over");=0A=
	});	=0A=
=0A=
=0A=
});=0A=
=0A=
=0A=
// .play() plugin jquery=0A=
=0A=
function player_play(i){=0A=
	track_index =3D i ;=0A=
	player_stop();=0A=
	$("span.play_:eq("+i+")").html("stop").addClass("play_on");		=0A=
	$(".playliste li:eq("+i+")").addClass("play_on");=0A=
	if(soundManager.url !=3D 'undefined'){=0A=
		soundManager.createSound({=0A=
	  	id:'son_'+i,url:mp3Array[i],=0A=
	 	onfinish:function(){console.log(this.sID+' finished =
playing'),player_play(i+1)},     =0A=
  onid3:function(){console.log(this.id3['songname'])},                =0A=
  onload:function(){console.log(this.sID+' finished loading')},          =
    =0A=
  //'whileloading': null,          // callback function for "download =
progress update" (X of Y bytes received)=0A=
  //'onplay': null,                // callback for "play" start=0A=
  //'whileplaying': null,          // callback during play (position =
update)=0A=
  //'onstop': null,                // callback for "user stop"=0A=
  //'onbeforefinish': null,        // callback for "before sound =
finished playing (at [time])"=0A=
  //'onbeforefinishtime': 5000,    // offset (milliseconds) before end =
of sound to trigger beforefinish..=0A=
  //'onbeforefinishcomplete':null, // function to call when said sound =
finishes playing=0A=
  //'onjustbeforefinish':null,     // callback for [n] msec before end =
of current sound=0A=
  //'onjustbeforefinishtime':200,  // [n] - if not using, set to 0 (or =
null handler) and event will not fire.=0A=
  //'multiShot': true,             // let sounds "restart" or layer on =
top of each other when played multiple times..=0A=
  //'pan': 0,                      // "pan" settings, left-to-right, =
-100 to 100=0A=
  'volume': 100    	=0A=
	 	 });=0A=
	  =0A=
	  	//$("span#now_playing").html(i+"("+mp3Array[i]+")"+track_index);=0A=
	  	//$("span#now_playing").append("son_"+i.id3.artist);=0A=
		=
file1=3D(mp3Array[track_index].split("/"))[(mp3Array[track_index].split("=
/")).length-1];=0A=
		file1 =3D file1.replace(/(%20)/g,' ');=0A=
		file1 =3D file1.substr(0,55);=0A=
		file1 =3D file1.replace(/(.mp3)/g,' ');=0A=
		file1 =3D file1.replace(/(_|-)/g,' ');=0A=
		//$("img[@alt=3D'play']").attr()=0A=
		$("#now_playing").html(file1) ;=0A=
	    soundManager.play('son_'+i,{volume:100}) ;=0A=
	}else{=0A=
	=0A=
	//Ajouter le musicplayer=0A=
	playlist=3D'';=0A=
	deb=3D0;=0A=
	for(j=3Di; j < mp3Array.length ; j++) {=0A=
		if(deb > 0){=0A=
// Modification du code original. Voir ci-dessous.=0A=
			playlist =3D playlist + '|' + mp3Array[j];=0A=
// Fin modification=0A=
		}else{=0A=
			playlist =3D mp3Array[j];=0A=
			deb=3D1;=0A=
		}=0A=
	}=0A=
=0A=
$("#musicplayer").html('<object '+=0A=
	'type=3D"application/x-shockwave-flash" '+=0A=
	'data=3D"'+musicplayerurl+'" '+=0A=
	'width=3D"1" height=3D"1" align=3D"middle">'+=0A=
	'<param name=3D"FlashVars" value=3D"song_url=3D'+playlist+'" />'+=0A=
	'<param name=3D"wmode" value=3D"transparent" />'+=0A=
	'<param name=3D"movie" value=3D"'+musicplayerurl+'" />'+=0A=
	'</object>');=0A=
// Fin modification=0A=
=0A=
}=0A=
=0A=
}=0A=
	=0A=
=0A=
=0A=
function player_stop(){=0A=
=0A=
						//reinit d'un autre play=0A=
						=0A=
						$("span.play_on").html('play');=0A=
						$("span.play_on").removeClass("play_on");=0A=
						=0A=
						$(".playliste li.play_on").removeClass("play_on");=0A=
						//stop le musicplayer en flash < 8=0A=
						soundManager.stopAll();=0A=
						$("#musicplayer").html('');=0A=
						$("#now_playing").html('');=0A=
}	=0A=
=0A=
=0A=
	=0A=
	function player_next()=0A=
	{	=0A=
		=0A=
		track_index++;=0A=
		=
//file1=3D(mp3Array[track_index].split("/"))[(mp3Array[track_index].split=
("/")).length-1];=0A=
		//$("#now_playing").html(file1) ;=0A=
		player_play(track_index);=0A=
		=0A=
	}=0A=
	=0A=
=0A=
	=0A=
	function player_prev()=0A=
	{	=0A=
		track_index--;	=0A=
		=
//file1=3D(mp3Array[track_index].split("/"))[(mp3Array[track_index].split=
("/")).length-1];=0A=
		//$("#now_playing").html(file1) ;=0A=
		player_play(track_index);=0A=
		=0A=
	}=0A=
=0A=
=0A=
	=0A=
	=0A=
//player one pix	=0A=
=0A=
var ap_instances =3D new Array();=0A=
=0A=
function ap_stopAll(playerID) {=0A=
	for(var i =3D 0;i<ap_instances.length;i++) {=0A=
		try {=0A=
			if(ap_instances[i] !=3D playerID) =
document.getElementById("audioplayer" + =
ap_instances[i].toString()).SetVariable("closePlayer", 1);=0A=
			else document.getElementById("audioplayer" + =
ap_instances[i].toString()).SetVariable("closePlayer", 0);=0A=
		} catch( errorObject ) {=0A=
			// stop any errors=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
function ap_registerPlayers() {=0A=
	var objectID;=0A=
	var objectTags =3D document.getElementsByTagName("object");=0A=
	for(var i=3D0;i<objectTags.length;i++) {=0A=
		objectID =3D objectTags[i].id;=0A=
		if(objectID.indexOf("audioplayer") =3D=3D 0) {=0A=
			ap_instances[i] =3D objectID.substring(11, objectID.length);=0A=
		}=0A=
	}=0A=
}=0A=
=0A=
var ap_clearID =3D setInterval( ap_registerPlayers, 100 );=0A=
=0A=
=0A=
function play() {=0A=
    document.monFlash.SetVariable("player:jsPlay", "");=0A=
}=0A=
function pause() {=0A=
    document.monFlash.SetVariable("player:jsPause", "");=0A=
}=0A=
function stop() {=0A=
    document.monFlash.SetVariable("player:jsStop", "");=0A=
}=0A=
function volume(n) {=0A=
    document.monFlash.SetVariable("player:jsVolume", n);=0A=
}=0A=

------=_NextPart_000_0059_01CC34AB.6D9E88E0--

