From: <Windows Internet Explorer 8ÀÌ ÀúÀå>
Subject: php.js - php.js
Date: Sat, 29 May 2010 23:06:04 +0900
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CAFF83.83AF68B0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5931

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://phpjs.org/pages/home

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>php.js - php.js</TITLE>
<META content=3D"text/html; charset=3DUTF-8" =
http-equiv=3DContent-Type><LINK rel=3Dicon=20
type=3Dimage/x-icon href=3D"/favicon.ico"><LINK rel=3D"shortcut icon"=20
type=3Dimage/x-icon href=3D"/favicon.ico"><LINK rel=3Dstylesheet =
type=3Dtext/css=20
href=3D"http://phpjs.org/ccss/3ea69d7506dd62394b0375d028f916d2_1272025843=
.css">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://phpjs.org/cjs/5d882a7eda2cac6ddb2e76c0627566de_1269425632.j=
s"></SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
if (window.jQuery) {var $j =3D jQuery.noConflict();}=0A=
//]]>=0A=
</SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18904"></HEAD>
<BODY onload=3Dsh_highlightDocument();>
<DIV id=3Dcontainer class=3Dcontainer_16>
<DIV id=3Dheader1 class=3D"grid_16 alpha omega">
<UL id=3Dnavigation>
  <LI class=3Dhome><A href=3D"http://phpjs.org/pages/home" =
target=3D"">Home</A></LI>
  <LI class=3Dindex><A href=3D"http://phpjs.org/functions/index"=20
  target=3D"">Functions</A></LI>
  <LI class=3Dindex><A href=3D"http://phpjs.org/packages/index"=20
  target=3D"">Packages</A></LI>
  <LI class=3Dconfigure><A href=3D"http://phpjs.org/packages/configure"=20
  target=3D"">Compile</A></LI>
  <LI class=3Dindex><A href=3D"http://phpjs.org/authors/index"=20
  target=3D"">Authors</A></LI>
  <LI class=3Dlicense><A href=3D"http://phpjs.org/pages/license"=20
  target=3D"">License</A></LI>
  <LI class=3Dfaq><A href=3D"http://wiki.github.com/kvz/phpjs/faq" =
target=3D_new>Wiki=20
  / Faq</A></LI>
  <LI class=3Ddevelop><A href=3D"http://phpjs.org/pages/develop"=20
  target=3D"">Develop!</A></LI></UL></DIV>
<DIV class=3Dclear></DIV>
<DIV id=3Dheader2 class=3D"grid_16 alpha omega">Use PHP functions in=20
JavaScript</DIV>
<DIV class=3Dclear></DIV>
<DIV id=3Dheader3 class=3D"grid_16 alpha omega"></DIV>
<DIV class=3Dclear></DIV>
<DIV id=3Dcontent class=3D"grid_12 alpha">
<DIV class=3D"messages empty"></DIV>
<H1 class=3Dfirst>php.js</H1>
<P><IMG=20
style=3D"POSITION: relative; PADDING-BOTTOM: 6px; PADDING-LEFT: 6px; =
PADDING-RIGHT: 6px; FLOAT: right; TOP: -15px; PADDING-TOP: 6px"=20
alt=3D"php.js Logo" src=3D"http://phpjs.org/img/phpjs.png"> php.js is an =
open source=20
project that brings high-level PHP functions to low-level JavaScript =
platforms=20
such as web browsers, browser extensions ( Mozilla/Firefox, Chrome ), =
AIR, and=20
<A title=3D"Server-side JavaScript"=20
href=3D"http://en.wikipedia.org/wiki/Server-side_JavaScript">SSJS</A> =
engines like=20
V8 ( <A title=3D"nodje.js uses the V8 engine"=20
href=3D"http://nodejs.org/">node.js</A>, <A title=3D"v8cgi uses the V8 =
engine"=20
href=3D"http://code.google.com/p/v8cgi/">v8cgi</A> ), Rhino, and =
SpiderMonkey ( <A=20
title=3D"couchdb uses the SpiderMonkey engine"=20
href=3D"http://couchdb.apache.org/">CouchDB</A> ) <BR><BR>If you want to =
perform=20
high-level operations on these platforms, you probably need to write JS =
that=20
combines its lower-level functions and build it up until you have =
something=20
useful like: <A=20
href=3D"http://phpjs.org/functions/strip_tags:535">strip_tags()</A>, <A=20
href=3D"http://phpjs.org/functions/strtotime:554">strtotime()</A>, <A=20
href=3D"http://phpjs.org/functions/number_format:481">number_format()</A>=
, <A=20
href=3D"http://phpjs.org/functions/wordwrap:581">wordwrap()</A>. </P>
<P>That's what we are doing for you. </P>
<P>Pure JavaScript so additional components required. <BR>To use php.js =
you can=20
either: </P>
<UL>
  <LI>Copy-Paste one of our <A=20
  href=3D"http://phpjs.org/functions/index">Functions</A> : ) </LI>
  <LI><A href=3D"http://phpjs.org/pages/home#comment_101883">Clone</A> =
our <A=20
  href=3D"http://github.com/kvz/phpjs">Git repo</A> and include the =
functions you=20
  need </LI>
  <LI><A href=3D"http://phpjs.org/packages/configure">Customize</A> a =
(CommonJS)=20
  package. Come back &amp; have it upgraded later on. </LI>
  <LI>Download the <A=20
  href=3D"http://phpjs.org/packages/view/php.default.min.js">default =
package</A>=20
  (big--use for study only) </LI></UL>
<P><STRONG>PHP</STRONG> is a language with many high-level functions and =
while=20
they're not always implemented as consistently as we'd like (mostly to =
blame on=20
its underlying C parts), it has a huge following familiar with its =
syntax so it=20
makes sense to pick its API as a reference<STRONG>.</STRONG> Eliminating =
the=20
need for our own <A href=3D"http://php.net/">documentation</A>, thus =
making life=20
easier, we hope. </P>
<P>We recognize <STRONG>JS</STRONG> - on the other hand - has beautiful =
language=20
features, and we encourage you to <A=20
href=3D"http://www.youtube.com/watch?v=3DhQVTIJBZook">learn them</A>. =
Never let=20
php.js be an excuse <U>not to</U>. <BR>For the same reason, we're not =
porting=20
entire language or control structures of PHP; we stick with the =
functions. </P>
<P>That said, we think of it as a <STRONG>challenge</STRONG> to port =
everything=20
and decided to also port low-level PHP functions like <A=20
href=3D"http://phpjs.org/functions/strpos:545">strpos</A> even though it =
may have=20
a JavaScript counterpart (<A=20
href=3D"https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Ob=
jects/String/IndexOf">String.indexOf</A>).=20
<BR>Cause besides the intellectual challenge for us, porting more also =
opens up=20
php.js to all kinds of <A =
href=3D"http://www.harmony-framework.com/">thought=20
excercises</A> and study purposes. <BR>And so we leave it up to the =
developer to=20
<A href=3D"http://phpjs.org/packages/configure">decide what to take from =
this=20
resource</A>. <BR>And what not. </P>
<H1>Featured Functions</H1>
<P><A =
href=3D"http://phpjs.org/functions/date:380">date()</A><BR>Date-formattin=
g,=20
just like you know it from PHP<BR><BR><A=20
href=3D"http://phpjs.org/functions/base64_decode:357">base64_decode()</A>=
<BR>Safe=20
&amp; easy data transport, decode messages in JavaScript that were =
encoded by=20
PHP.<BR><BR></P>
<H1>The History of php.js</H1>
<P>Kevin van Zonneveld was once working as developer on a project with a =
lot of=20
client (JS) / server (PHP) interaction, and found himself coding PHP =
functions=20
(like base64_decode &amp; urldecode) in JavaScript to smoothen data =
transport=20
between the two languages. </P>
<P>He stored the stored the functions in a file called <EM>php.js</EM> =
which was=20
included in the project. But even when the project was done, it remained =
fun=20
trying to port PHP functions to JavaScript, and so the library grew. =
<BR>There=20
was a technological challenge in trying to recreate functions such as =
date, or=20
sprintf. </P>
<P>Eventually Kevin decided to share the little library on his blog, =
triggering=20
the enthusiasm of a lot of developers worldwide. The project was open =
sourced in=20
2008, and many people contributed their own functions in the comments =
sections=20
of <A=20
href=3D"http://kevin.vanzonneveld.net/techblog/article/phpjs_licensing/">=
Kevin's=20
blog</A>. </P>
<P>To try and maintain quality, examples from original PHP documentation =
were=20
taken and added as unit tests in the header of each function. These are =
the same=20
bits of code you can see under the Example section for any function. =
<BR>As bugs=20
are reported, more test cases are added to avoid regression. </P>
<P>It was decided that the library deserved a bigger home and a face of =
its own,=20
and so the php.js core team (which at that time consisted of Michael =
White,=20
Felix Geisend=C3=B6rfer, Philip Peterson and Kevin) developed the <A=20
href=3D"http://phpjs.org/">phpjs.org website</A>. </P>
<P>Different core members have come &amp; gone but there has always been =
a <A=20
href=3D"http://phpjs.org/authors/index#core">select group</A> pushing =
the project=20
forward. </P>
<P>Late 2008 <A=20
href=3D"http://kevin.vanzonneveld.net/techblog/article/phpjs_namespaced/#=
comment_2105">Brett=20
Zamir started</A> contributing and did't stop. In April 2009 he was =
responsible=20
for over <A href=3D"http://phpjs.org/authors/brett-zamir:190">245</A> =
different=20
PHP functions and has had many ideas considering php.js' future. </P>
<P>Because the library became too big to include at once, and having =
users=20
copy-paste functions to their projects proved tedious, Kevin started =
working on=20
a <A href=3D"http://phpjs.org/packages/configure">compiler</A> that =
allows=20
programmers to select ONLY the functions they need, and wrap them up in =
a single=20
customized <EM>php.js</EM> file.<BR>This took away overhead and even =
allowed for=20
easy upgrading. </P>
<P>In September 2009 we moved the development of the project to <A=20
href=3D"http://github.com/kvz/phpjs/">GitHub</A>. <BR>This opened up a =
lot of=20
features to help colaboration in development. </P>
<P>Gaining popularity in the <A title=3D"Server-side JavaScript"=20
href=3D"http://en.wikipedia.org/wiki/Server-side_JavaScript">SSJS</A> =
world mostly=20
due to <A title=3D"Evented I/O for V8 javascript."=20
href=3D"http://nodejs.org/">node.js</A> people needing functions such as =
<A=20
href=3D"http://phpjs.org/functions/html_entity_decode:424">html_entity_de=
code</A>,=20
we received a lot of requests for a <A=20
title=3D"javascript: not just for browsers any more!"=20
href=3D"http://commonjs.org/">CommonJS</A> compatible library and in =
April 2010=20
the <A href=3D"http://phpjs.org/packages/configure">compiler</A> took =
it's first=20
steps to support it. </P>
<P>And that's where we are now. </P>
<P>We are still trying to port and perfect functions.<BR>Want to help =
out &amp;=20
become a part of our history? Why not add a comment with new or better=20
code?<BR>It is that easy. </P>
<P></P>
<H1 class=3D"first icon comments">Comments</H1><A =
name=3Dcomment_add></A>
<DIV id=3DAddComment>
<P></P>
<FIELDSET>
<FORM id=3Dform1108796743 onsubmit=3D"event.returnValue =3D false; =
return false;"=20
method=3Dpost action=3D/commentor/comments/add>
<FIELDSET style=3D"DISPLAY: none"><INPUT value=3DPOST type=3Dhidden=20
name=3D_method></FIELDSET>
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
Event.observe('form1108796743', 'submit', function(event) { =
jQuery("#Post").attr("disabled", "disabled"); ; new =
Ajax.Updater('AddComment','/commentor/comments/add', {asynchronous:true, =
evalScripts:true, onComplete:function(request, json) =
{Element.hide('commentSaved');}, onLoading:function(request) =
{Element.show('commentSaved');}, onLoaded:function(request) =
{jQuery.scrollTo("#AddComment", "slow", {offset: {top: -30, left: 0}}) =
}, parameters:Form.serialize('form1108796743'), =
requestHeaders:['X-Update', 'AddComment']}) }, false);=0A=
//]]>=0A=
</SCRIPT>
<LEGEND>Add Comment</LEGEND><INPUT id=3DCommentControllerName =
value=3Dpages=20
type=3Dhidden name=3Ddata[Comment][controller_name]><INPUT=20
id=3DCommentControllerAction value=3Dhome type=3Dhidden=20
name=3Ddata[Comment][controller_action]><INPUT id=3DCommentControllerId =
value=3D0=20
type=3Dhidden name=3Ddata[Comment][controller_id]>
<DIV class=3D"input text"><LABEL for=3DCommentName>Name</LABEL><INPUT =
id=3DCommentName=20
maxLength=3D60 type=3Dtext name=3Ddata[Comment][name]></DIV>
<DIV class=3D"input text"><LABEL for=3DCommentEmail>Email</LABEL><INPUT=20
id=3DCommentEmail maxLength=3D60 type=3Dtext =
name=3Ddata[Comment][email]></DIV>
<DIV class=3D"input text"><LABEL =
for=3DCommentWebsite>Website</LABEL><INPUT=20
id=3DCommentWebsite maxLength=3D255 type=3Dtext =
name=3Ddata[Comment][website]></DIV>
<DIV class=3Dreally_required>
<DIV class=3D"input text"><LABEL for=3DCommentTitle>Title</LABEL><INPUT=20
id=3DCommentTitle type=3Dtext name=3Ddata[Comment][title]></DIV></DIV>
<DIV class=3D"input textarea"><LABEL =
for=3DCommentContent>Content</LABEL><TEXTAREA id=3DCommentContent =
rows=3D6 cols=3D30 name=3Ddata[Comment][content]></TEXTAREA></DIV>Use:=20
<BR><PRE><STRONG>[CODE]</STRONG>
your_stuff('here');
<STRONG>[/CODE]</STRONG>
</PRE>for proper code formatting<BR><SPAN style=3D"DISPLAY: none; FLOAT: =
right"=20
id=3DcommentSaved><IMG alt=3D""=20
src=3D"http://phpjs.org/commentor/img/ajax_loading.gif"> </SPAN>By =
submitting code=20
here you are allowing us to use it in php.js hence dual licensing it =
under the=20
MIT and GPL licenses<BR>
<DIV class=3Dsubmit><INPUT id=3DPost value=3DPost =
type=3Dsubmit></DIV></FORM></FIELDSET>
<P></P></DIV><A name=3Dcomments></A>
<DIV id=3DAllComments>
<DIV class=3Dcomment><A name=3Dcomment_102519></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/42855f3d37844a64ddb5cfc95a856eee?s=3D=
48&amp;d=3Didenticon"><BR>David<BR><SPAN=20
class=3Dcomment_date>Mar 4th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_102519"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Hello,<=
BR><BR>Your=20
website is nice but it's a nightmare to access with an IE.<BR><BR>I =
think=20
there's a solution according =
to:<BR><BR>http://aralbalkan.com/912<BR><BR>Thanks=20
for your good functions.<BR></P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_101883></A>
<P class=3Dcomment_author><A =
href=3D"http://kevin.vanzonneveld.net/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://kevin.vanzonneveld.net/">Kevin van Zonneveld</A><BR><SPAN =

class=3Dcomment_date>Mar 1st <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_101883"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@ Dino =
B.:=20
Placing it on a CDN would encourage the use of the default package in=20
production. While in fact we are trying to stimulate people to use only =
the=20
functions they need. Either by compiling, or just copy-pasting some of =
our=20
functions.<BR>Please never hotlink GitHub's raw sources. As you can =
achieve the=20
same thing (only without using up their bandwidth) by doing:<BR><BR>$ cd =

/my/web/app/webroot/js/<BR>$ git clone=20
git://github.com/kvz/phpjs.git<BR><BR>from now, to update phpjs, you can =
do=20
a:<BR><BR>$ cd /my/web/app/webroot/js/phpjs; git pull;<BR><BR>and to use =

functions you can=20
include:<BR><BR>/js/phpjs/functions/array/is_array.js<BR>/js/phpjs/functi=
ons/datetime/strtotime.js<BR><BR>in=20
your webpages.<BR><BR><BR><BR><BR></P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_101254></A>
<P class=3Dcomment_author><A href=3D"http://www.baltimoresun.com/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/b2f1343602276a53a7fe8f4ec1c2e07f?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://www.baltimoresun.com/">Dino B.</A><BR><SPAN =
class=3Dcomment_date>Feb=20
23rd <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_101254"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Is =
there a=20
consideration to place this library on a CDN somewhere? Secondly, is =
hotlinking=20
to the functions (their github locations) encouraged, prohibited, or a =
gray=20
area?</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100791></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
20th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100791"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;I =
added the test=20
files (converted to JavaScript) at=20
http://github.com/kvz/phpjs/tree/master/_workbench/tokenizer/tokenizer_te=
sts/ .=20
Some of them need php.js functions added and there may be some =
imperfections in=20
the PHP-to-JS conversion process (I corrected some of them that Harmony=20
Framework missed, though it seemed to do a pretty good job). We'll also =
need to=20
consider the best way to parse the test files, run the JavaScript, and =
test=20
against the expected results...</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100787></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
20th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100787"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Marco:=
 I'm=20
sorry if I get carried away sometimes; sorry for too much information; I =
forget=20
who I've talked to about these things. And don't be afraid to ask =
questions for=20
anything. <BR><BR>Yes, I went back to your constant values; that's good =
we use=20
the latest. <BR><BR>I agree finishing token_get_all() and testing it is =
a good=20
idea; I just started the php-to-js code for fun and to test the concept =
a=20
little. <BR><BR>As far as testing, that is exactly what we can use the =
"phpt"=20
files are for. They are test files in the PHP source code. They are =
written in=20
PHP (though with some blocks indicating what is being tested, what the =
result is=20
expected to be, etc.) and my idea was to use a PHP-to-JavaScript =
converter so we=20
could use those tests against all of our functions. These tests for=20
token_get_all can be found in the PHP source code at =
/ext/tokenizer/tests/ .=20
Again, until we have our own converter, we can try=20
http://www.harmony-framework.com/ for converting those "phpt" files into =

JavaScript.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100784></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Feb 20th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100784"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett:=
 You must=20
clarify me something, remember that i'm new to this project, i've no =
experience=20
in community work (and related tools such as Github), i'm italian and i =
speak a=20
medium-level english and right now i'm tired so be patient:).<BR><BR>You =
talk=20
about ".phpt" files where can i find them and what do you mean by =
adapting them=20
to Javascript form?<BR><BR>For the Php parser i think we should finish =
to fix=20
the token_get_all with lots of tests, improve its performance, create =
some=20
guidelines about the implementation of the parser and then build it on =
the token=20
extension.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100783></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Feb 20th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100783"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett:=
 You are=20
doing a very good work. <BR><BR>I get the constants value from PHP 5.3 =
so i=20
think that when the function will be released you must change their =
value=20
according to the last version of PHP.<BR><BR>For the \r\n problem i =
agree with=20
you to make the \r optional, i forgot that it's present only on=20
Windows.<BR><BR>Right now i'm very busy at work, but when i'll finish (i =
hope=20
soon) i'll be glad to help you with everything.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100739></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
19th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100739"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Marco:=
 As I=20
think I may have mentioned before, I have modified your functions to =
follow our=20
coding standards and also support IE since you cannot do str[3] in =
IE--string=20
characters can only be accessed by str.charAt(3). (Annoying, but =
true.)<BR><BR>I=20
believe I also fixed a problem with one of your variables not being =
declared and=20
thus global. <BR><BR>I also added a HEREDOC test. There was some work to =
be done=20
with HEREDOC handling but that is now fixed, so again, please apply my =
changes=20
first before you work on the code again:=20
http://github.com/kvz/phpjs/tree/master/_workbench/tokenizer . <BR><BR>I =
also=20
renamed token.js to token_get_all.js and renamed what I think used to be =

"test.min.js" to a more descriptive =
"file_get_contents.min.js".<BR><BR>As far as=20
\r\n, shouldn't such checks be \r?\n since \r is only Windows? I made =
the \r=20
optional.<BR><BR>Also, I needed to temporarily add different values for =
the=20
constants to compare on my system (5.2.6) which uses different numeric =
values=20
for the constants... What version of PHP are you using? 5.3 or 6? I've =
kept my=20
own values in the comments but just now reverted to your values since it =
appears=20
you are using a later edition of PHP.<BR><BR>I also added some =
additional test=20
files, and supplemented your test with var_export(), but I really think =
we need=20
to have a greater interaction between PHP and JS to summarize in a line =
exactly=20
what differed between the PHP version and the JS version (with maybe the =
PHP=20
producing the value which JS checks against its own). <BR><BR>I'd also =
really=20
like to adapt all of the ".phpt" test files in the PHP source to make =
sure=20
token_get_all.js is parsing PHP perfectly. I think this is a very =
important=20
function you've made, so I hope we can prove to ourselves and others =
that this=20
is really robust. <BR><BR>Also, I added a feature to token_get_all.js so =
that if=20
the user has "this.php_js.phpParser" defined (though maybe I should make =
it=20
settable via this.php_js.ini so that people can use ini_set() instead), =
that=20
object's methods will be called with arguments indicating information =
about each=20
segment currently being parsed (they'll also need token_name.js in such =
a case;=20
see http://github.com/kvz/phpjs/tree/master/_experimental/tokenizer ). =
Although=20
someone can do this with the return results of token_get_all(), it will =
be=20
faster (and live) to work during the original parsing. And I only need =
to add a=20
couple of lines of code to get this functionality.<BR><BR>See =
PHPTokenizer.js=20
for a skeleton object that can be used as the "this.php_js.phpParser" =
and see=20
PHPToJS.js for an early beginning at a PHP-to-JavaScript translator =
which can=20
also be used as an example of such a parser object. We might also get =
some ideas=20
if not code from the Harmony Framework (at =
http://www.harmony-framework.com/ )=20
about how to finish making such a translator.<BR><BR>I am a little busy =
to work=20
on this now, but would you be interested in adapting the ".phpt" files =
into=20
JavaScript form to make sure all of the tests are working? It'd be great =
to be=20
able to run the tests, and if not showing a diff, at least just =
summarizing=20
which line is failing and how many lines in the test are failing. =
Normally for=20
other functions, I think it'd already be ready for release, but I think =
this one=20
is of the nature that it really should be fully systematically tested =
first.=20
Then, we can maybe use it to convert other ".phpt" files into =
JavaScript! :) Or=20
we could just use Harmony Framework for now, though phpt files also have =
some=20
non-JS blocks we'd need to parse as well...<BR><BR>Anyhow, some really=20
incredible work, thank you again!!!</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100046></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Feb 15th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100046"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett:=
 Ok let=20
me know if you find some bug</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100039></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
15th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100039"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Marco,=
 I did=20
receive your original email, so no need to send it again. Again, please =
see=20
http://github.com/kvz/phpjs/raw/master/_workbench/tokenizer/ as I have =
made=20
modifications of your code there to follow our standards. I'd appreciate =
it if=20
you could use those versions if you make any further changes. This seems =
like=20
some extremely impressive work, but I'd like to study it more carefully =
and=20
maybe compare it to the EBNF out there, etc.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100031></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Feb 15th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100031"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett:=
 i did=20
not receive your email, if you want to try again i will send you back =
the test=20
suite that i've builded. Anyway to create this function i haven't looked =
at any=20
source, i've tested it with a lot of scripts untill i've solved every =
bug. I've=20
tested the result of the original php function, on a 200kb script, with =
the one=20
returned by the js function and the result was exactly the same. The =
only=20
functionality that i haven't tested is the HEREDOC.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100030></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Feb 15th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100030"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett:=
 i did=20
not receive your email, if you want to try again i will send you back =
the test=20
suite that i've builded. Anyway to create this function i haven't looked =
at any=20
source, i've tested it with a lot of scripts untill i've solved every =
bug. I've=20
tested the result of the original php function (on a 200kb script) with =
the one=20
returned by the js function and the result was exactly the same. The =
only=20
functionality that i haven't tested is the HEREDOC.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100024></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
15th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100024"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Marco:=
=20
Actually, please see=20
http://github.com/kvz/phpjs/raw/master/_workbench/tokenizer/token_get_all=
.js for=20
the latest of your function instead</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100023></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
15th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100023"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Marco:=
 I sent=20
you an email in reply a few days ago. I haven't gotten any reply to it.=20
<BR><BR>FYI, just now I made more changes to bring your token.js (now =
changed to=20
token_get_all.js and available at=20
http://github.com/kvz/phpjs/raw/fdecb6087c5843e498a63b4e96ae5b6c063e2624/=
_workbench/tokenizer/token_get_all.js=20
) more up to our coding standards (see=20
http://wiki.github.com/kvz/phpjs/developerguidelines ) and I also caught =
a few=20
bugs, now fixed. But I still haven't taken a good look at the =
code.<BR><BR>Out=20
of curiosity, how did you write this code? Did you look at the C source, =
use=20
someone's EBNF, or what?<BR><BR>Please see lines 513, 642, 691 for =
whether those=20
are accidental assignments or not. As maybe the most important coding =
standard,=20
please don't do inline assignments, as it is unclear whether it is =
deliberate or=20
not; assign the variable in a separate line.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_100004></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Feb 15th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_100004"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett:=
 Have you=20
received my email?</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_99719></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Feb=20
13th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_99719"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@LEx: =
Yes, that=20
is a possibility, but there are a couple of reasons we don't take that=20
approach:<BR><BR>1) Adding methods to the built-in object's prototypes =
can=20
conflict with other libraries or code, adding a kind of omni-global. The =

problems can occur if other libraries try to add functions of the same =
name to=20
the prototype, or, more insidiously, cause problems for those iterating =
over=20
such object (or array, etc.) properties. Yes, when iterating over object =

properties, the user should always filter out functions or ignore =
properties=20
which are on the prototype, but many people (and libraries--including =
many of=20
the functions still in our library) do not do this filtering, either =
because=20
they don't know about the need for it, or because they don't want to use =

libraries that intrude in this way. See =
http://www.jslint.com/lint.html#forin or=20
http://javascript.crockford.com/code.html#for%20statement<BR><BR>2) We =
also want=20
to make at least one version familiar and easy to PHP developers, though =
that=20
doesn't prevent us from making other versions like the namespaced =
version, but=20
it could add some difficulty to maintenance.<BR><BR>One way around this =
might be=20
to use our own wrappers for things like arrays.<BR><BR>For example, we =
might=20
change our function array() (different from the built-in JavaScript =
Array()=20
object) so that when someone does:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>var a =3D =
array();</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>they can also =
use:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE =
class=3Dsh_javascript>a.in_array(...)</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>Implementing =
object-style versions=20
that didn't add to the built-in prototypes might work, even though they =
would=20
require things like strings to also have wrappers created for them, thus =
not=20
being as convenient, and, even with this, there is still the problem of=20
iterating properties.<BR><BR>And we could have a version for users who =
didn't=20
care about problems from adding to the native object's =
prototypes.<BR><BR>Either=20
of these would definitely change the regular PHP API as the input =
argument would=20
be removed, but other users could still use the regular version if they=20
wished.<BR><BR>One other potential advantage of the wrapper approach =
would be=20
that other chaining methods could exist, for example, functions that =
don't=20
return arrays could be combined with those that do into a long=20
chain:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE =
class=3Dsh_javascript>arr.returnArrays().shift(...).map(...).push(...);</=
PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>As I recall Kevin isn't =
interested=20
in making such a version part of the regular compiler, but we could host =

alternative versions if someone is interested in maintaining them or =
writing=20
code to automate conversions on the server side.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_99684></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/d3dfb56e75c4dce2caa08fa41732afa4?s=3D=
48&amp;d=3Didenticon"><BR>LEx<BR><SPAN=20
class=3Dcomment_date>Feb 12th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_99684"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Why =
you dont use=20
prototype to inherit and expand native Javascript object like Array, =
Date or=20
String. It wouldnt be better to use [1,2,3].in_array(1) rather than=20
in_array(1,[1,2,3])? Javascritp is prototype based language. In other =
hand it=20
can downgrade performance... but still why dont use this approach?</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98439></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Jan=20
31st <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98439"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Marco:=
 Sorry=20
for the delayed reply... Have you seen =
http://www.php.net/manual/en/tokens.php=20
and also the comments there? There's some reference to whitespace as a=20
tokens...</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98397></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=3D=
48&amp;d=3Didenticon"><BR>Marco=20
Marchi=C3=B2<BR><SPAN class=3Dcomment_date>Jan 28th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98397"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Hi, =
i'm trying=20
to create the token_get_all function and i need help on a little =
problem. <BR>Do=20
you know when whitespaces (\t,\n,\r and spaces) are considrered tokens? =
<BR>The=20
orignal PHP function get only some of them but i can't understand which=20
ones.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98382></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>Jan=20
27th <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98382"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@cynosu=
re: Hi!=20
Don't mean to be unfriendly, but I imagine Kevin would prefer we limit=20
discussion here to php.js functions. But really quickly, it appears that =
IE may=20
be (mistakenly) considering the XML Declaration at the beginning of the =
document=20
as though it were a node (probably considering it a processing =
instruction which=20
it is not, even though it looks like one)--the declaration info should =
only be=20
available to the DOM as document.xmlVersion, document.xmlEncoding and=20
document.xmlStandalone , though browser support is unfortunately limited =
even in=20
Firefox; see =
http://brettz9.blogspot.com/2009/04/xml-dom-support-test.html ).=20
Thankfully, you can still make cross-browser code here in testing =
whether the=20
nodeName of a "processing instruction" is "xml"; since processing =
instructions=20
cannot be "xml", you would know it is the bogus IE one and can be=20
avoided.<BR><BR>You could confirm IE indeed treats it this way by =
printing out=20
the nodeType as well; see https://developer.mozilla.org/en/nodeType for =
the=20
codes. Also, your example is not recursive, as if it were, you would =
also need=20
to check whether the node were an element and then recurse on its =
children;=20
currently you are only iterating through the top level nodes. Maybe this =
was a=20
simplified example...</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98380></A>
<P class=3Dcomment_author><A href=3D"http://devblog.hu/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/e8b545ad2f7e3cf6233134d330dd03de?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://devblog.hu/">cynosure</A><BR><SPAN =
class=3Dcomment_date>Jan 27th <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98380"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Hi!<BR>=
<BR>I'm=20
working now on an xml parser (not yet on a php type XML API object), but =
I fount=20
a new funny difference between IE6-8 and any other browsers.<BR><BR>I =
have a=20
simple XML:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript><?xml =
version=3D"1.0" encoding=3D"UTF-8"?>
<MAIN>
    <RESPONSE>
        <AGE>6</AGE>
    </RESPONSE>
    <REDIRECT>
    </REDIRECT>
</MAIN>
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>When I try to loop the =
elements in=20
a recursive way, the code above works different in these =
browsers:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript><BR>
xml2Array =3D function(xml)<BR>
{<BR>
    var nodecount =3D xml.childNodes.length;<BR>
    if(nodecount &gt; 0)<BR>
    {<BR>
        var log =3D '';<BR>
        var arr =3D new Array();<BR>
        for(var i=3D0;i<NODECOUNT;I++)<BR>
        {<BR>
            log =3D log + i + ' -&gt; ' + xml.childNodes[i].nodeName + =
'<BR>';<BR>
        }<BR>
        document.getElementById('foo').innerHTML =3D log;<BR>
    }<BR>
    else<BR>
    {<BR>
        var arr =3D false;<BR>
    }<BR>
    return arr;<BR>
}<BR>
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>In IE writes out:<BR>0 =
-&gt;=20
xml<BR>1 -&gt; main<BR><BR>In other browsers:<BR>0 -&gt; main<BR></P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98123></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>30 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98123"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Interes=
ting=20
about the delete operator. I knew it didn't work with variables, and =
imagined it=20
wouldn't work on some built-in objects, but nice to know that=20
formally.<BR><BR>Nice set of examples. It's supposed to get even weirder =
in IE=20
as far as ordering if you use an object and with properties inherited =
from the=20
prototype. It's sad that what may be the most usable scripting if not=20
programming language in the world is the least updated. I can live with =
most of=20
JavaScript's other quirks, even the ease of making accidental globals, =
but this=20
one should plain and simply just be fixed in the spec and reality.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98122></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>30 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98122"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Interes=
ting=20
about the delete operator. I knew it didn't work with variables, and =
imagined it=20
wouldn't work on some built-in objects, but nice to know that=20
formally.<BR><BR>Nice set of examples. It's supposed to get even weirder =
in IE=20
as far as ordering if you use an object and with properties inherited =
from the=20
prototype. It's sad that what may be the most usable scripting if not=20
programming language in the world is the least updated. I can live with =
most of=20
JavaScript's other quirks, even the ease of making accidental globals, =
but this=20
one should plain and simply just be fixed in the spec and reality.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98115></A>
<P class=3Dcomment_author><A href=3D"http://devblog.hu/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/e8b545ad2f7e3cf6233134d330dd03de?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://devblog.hu/">cynosure</A><BR><SPAN =
class=3Dcomment_date>29 Dec '09 <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98115"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brett =
Zamir:=20
The delete method have an other issue, it can't remove an element if it =
have a=20
DontDelete=20
attribute.<BR><BR>https://developer.mozilla.org/en/Core_JavaScript_1.5_Re=
ference/Operators/Special_Operators/delete_Operator<BR><BR>In=20
the other hand, associative arrays works in IE6 too, but this is not =
really an=20
array, this is an object, so .splice won't work in any =
browsers:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>var foobar =3D new =
Array();
foobar['x'] =3D 'a';
foobar['y'] =3D 'b';
alert(foobar['x'] + ' ' + foobar['y']); // writes "a b"
// and the problems:
alert(foobar.splice('x',1)); // does nothing, writes empty window
alert(foobar.splice(0,1)); // does nothing too
alert(foobar['x'] + ' ' + foobar['y']); // writes "a b" again
// with delete:
delete foobar['x'];
alert(foobar['x'] + ' ' + foobar['y']); // writes "undefined b"
for(var key in foobar) { alert(key); } // writes "y"
// let's test the element orders
foobar['x'] =3D 'c';
alert(foobar['x'] + ' ' + foobar['y']); // writes "c b", its ok
for(var key in foobar) { alert(key); } // writes "x" and "y" in IE6-8, =
"y" and "x" in all other browsers
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>I know, this is exactly =
what you=20
wrote, I only made a test to everyone who wants to know how it =
works.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98111></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>29 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98111"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@cynosu=
re: Looks=20
like someone else here tried something similar:=20
http://phpjs.org/functions/array_pop:329#comment_354 .<BR><BR>As far as =
a=20
reference to an array, whatever value you pass in to a function, if it =
is an=20
array or object, its elements can be acted on by reference and in fact =
only by=20
reference unless you manually make a copy (though you cannot replace the =
whole=20
object with something else, or that does make a copy). So, we could =
adapt your=20
function to work by reference (though still breaking the PHP API which =
only uses=20
one argument):<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>function =
unset(array,index) {
    if (typeof array =3D=3D=3D 'object' &amp;&amp; typeof array.length =
=3D=3D 'number') {
        array.splice(index, 1); // Using the delete operator will =
replace the old value
        // with "undefined" in its old slot, but we also want to remove =
the slot itself,
        // so with arrays (in IE too), we can safely use splice().
    }
    else { // Objects
        delete array[index]; // For object properties, this works pretty =
well, except potentially in IE where
        // the property will thankfully no longer be iterated, but it =
has the annoying feature (for
        // the sake of our using objects to imitate PHP associative =
arrays) that if you later try to
        // add back a value with the same property name, it will put =
your new value in the old
        // iteration position.  So IE does not truly delete the =
property, though it may appear that way.
        // All other popular browser implementation seem to truly delete =
the property (and iterate
        // in order), at least if it is not an inherited property, but =
the latest ES spec wasn't able
        // to persuade IE to change this behavior
    }
}</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>See the 2nd comment =
above for the=20
potential problems with this though. Basically in IE, simple objects as=20
associative arrays just won't work perfectly. It is very disappointing. =
You can=20
get around this by creating an object which wraps your data, but that =
can get=20
quite ugly. Otherwise, you just have to keep your keys in one array and =
values=20
in another array.<BR><BR>This is not to speak of our other challenge =
here of=20
trying to work with only one argument in unset(). JavaScript does not =
allow us=20
to get the container object or array if we only know the property. Our=20
experimental version of unset() (at=20
http://github.com/kvz/phpjs/blob/master/_experimental/var/unset.js ), =
allows us=20
to pass in a single argument, but it is a (necessarily) very bad =
solution as it=20
relies on eval(), and only works on globals passed in as strings. That's =
a huge=20
compromise just to work with a single argument, so practically speaking, =
your=20
solution is probably better (though with the above-mentioned =
caveats).<BR><BR>A=20
similar problem occurs with trying to imitate PHP's extract() and =
compact(). We=20
don't have a way in JavaScript (unless we exclusively work with globals) =
to say=20
use the arguments object to obtain or set the local variables of the =
caller (we=20
can only get access to those variables explicitly passed in as =
arguments, and=20
only by reference if they are objects or arrays).<BR><BR>I think these =
may well=20
be the biggest challenges for php.js trying to follow the PHP API. </P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98110></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>29 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98110"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@cynosu=
re: Looks=20
like someone else here tried something similar:=20
http://phpjs.org/functions/array_pop:329#comment_354 .<BR><BR>As far as =
a=20
reference to an array, whatever value you pass in to a function, if it =
is an=20
array or object, its elements can be acted on by reference and in fact =
only by=20
reference unless you manually make a copy (though you cannot replace the =
whole=20
object with something else, or that does make a copy). So, we could =
adapt your=20
function to work by reference (though still breaking the PHP API which =
only uses=20
one argument):<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>function =
unset(array,index) {
    if (typeof array =3D=3D=3D 'object' &amp;&amp; typeof array.length =
=3D=3D 'number') {
        array.splice(index, 1); // Using the delete operator will =
replace the old value
        // with "undefined" in its old slot, but we also want to remove =
the slot itself,
        // so with arrays (in IE too), we can safely use splice().
    }
    else { // Objects
        delete array[index]; // For object properties, this works pretty =
well, except potentially in IE where
        // the property will thankfully no longer be iterated, but it =
has the annoying feature (for
        // the sake of our using objects to imitate PHP associative =
arrays) that if you later try to
        // add back a value with the same property name, it will put =
your new value in the old
        // iteration position.  So IE does not truly delete the =
property, though it may appear that way.
        // All other popular browser implementation seem to truly delete =
the property (and iterate
        // in order), at least if it is not an inherited property, but =
the latest ES spec wasn't able
        // to persuade IE to change this behavior
    }
}</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>See the 2nd comment =
above for the=20
potential problems with this though. Basically in IE, simple objects as=20
associative arrays just won't work perfectly. It is very disappointing. =
You can=20
get around this by creating an object which wraps your data, but that =
can get=20
quite ugly. Otherwise, you just have to keep your keys in one array and =
values=20
in another array.<BR><BR>This is not to speak of our other challenge =
here of=20
trying to work with only one argument in unset(). JavaScript does not =
allow us=20
to get the container object or array if we only know the property. Our=20
experimental version of unset() (at=20
http://github.com/kvz/phpjs/blob/master/_experimental/var/unset.js ), =
allows us=20
to pass in a single argument, but it is a (necessarily) very bad =
solution as it=20
relies on eval(), and only works on globals passed in as strings. That's =
a huge=20
compromise just to work with a single argument, so practically speaking, =
your=20
solution is probably better (though with the above-mentioned =
caveats).<BR><BR>A=20
similar problem occurs with trying to imitate PHP's extract() and =
compact(). We=20
don't have a way in JavaScript (unless we exclusively work with globals) =
to say=20
use the arguments object to obtain or set the local variables of the =
caller (we=20
can only get access to those variables explicitly passed in as =
arguments, and=20
only by reference if they are objects or arrays).<BR><BR>I think these =
may well=20
be the biggest challenges for php.js trying to follow the PHP API. </P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98109></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>29 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98109"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@cynosu=
re: Looks=20
like someone else here tried something similar:=20
http://phpjs.org/functions/array_pop:329#comment_354 .<BR><BR>As far as =
a=20
reference to an array, whatever value you pass in to a function, if it =
is an=20
array or object, its elements can be acted on by reference and in fact =
only by=20
reference unless you manually make a copy (though you cannot replace the =
whole=20
object with something else, or that does make a copy). So, we could =
adapt your=20
function to work by reference (though still breaking the PHP API which =
only uses=20
one argument):<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>function =
unset(array,index) {
    if (typeof array =3D=3D=3D 'object' &amp;&amp; typeof array.length =
=3D=3D 'number') {
        array.splice(index, 1); // Using the delete operator will =
replace the old value
        // with "undefined" in its old slot, but we also want to remove =
the slot itself,
        // so with arrays (in IE too), we can safely use splice().
    }
    else { // Objects
        delete array[index]; // For object properties, this works pretty =
well, except potentially in IE where
        // the property will thankfully no longer be iterated, but it =
has the annoying feature (for
        // the sake of our using objects to imitate PHP associative =
arrays) that if you later try to
        // add back a value with the same property name, it will put =
your new value in the old
        // iteration position.  So IE does not truly delete the =
property, though it may appear that way.
        // All other popular browser implementation seem to truly delete =
the property (and iterate
        // in order), at least if it is not an inherited property, but =
the latest ES spec wasn't able
        // to persuade IE to change this behavior
    }
}</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>See the 2nd comment =
above for the=20
potential problems with this though. Basically in IE, simple objects as=20
associative arrays just won't work perfectly. It is very disappointing. =
You can=20
get around this by creating an object which wraps your data, but that =
can get=20
quite ugly. Otherwise, you just have to keep your keys in one array and =
values=20
in another array.<BR><BR>This is not to speak of our other challenge =
here of=20
trying to work with only one argument in unset(). JavaScript does not =
allow us=20
to get the container object or array if we only know the property. Our=20
experimental version of unset() (at=20
http://github.com/kvz/phpjs/blob/master/_experimental/var/unset.js ), =
allows us=20
to pass in a single argument, but it is a (necessarily) very bad =
solution as it=20
relies on eval(), and only works on globals passed in as strings. That's =
a huge=20
compromise just to work with a single argument, so practically speaking, =
your=20
solution is probably better (though with the above-mentioned =
caveats).<BR><BR>A=20
similar problem occurs with trying to imitate PHP's extract() and =
compact(). We=20
don't have a way in JavaScript (unless we exclusively work with globals) =
to say=20
use the arguments object to obtain or set the local variables of the =
caller (we=20
can only get access to those variables explicitly passed in as =
arguments, and=20
only by reference if they are objects or arrays).<BR><BR>I think these =
may well=20
be the biggest challenges for php.js trying to follow the PHP API. </P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98108></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>29 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98108"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@cynosu=
re: Looks=20
like someone else here tried something similar:=20
http://phpjs.org/functions/array_pop:329#comment_354 . <BR><BR>As far as =
a=20
reference to an array, whatever value you pass in to a function, if it =
is an=20
array or object, its elements can be acted on by reference and in fact =
only by=20
reference unless you manually make a copy (though you cannot replace the =
whole=20
object with something else, or that does make a copy). So, we could =
adapt your=20
function to work by reference (though still breaking the PHP API which =
only uses=20
one argument):<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>function =
unset(array,index) {
    if (typeof array =3D=3D=3D 'object' &amp;&amp; typeof array.length =
!=3D=3D 'undefined') {
        array.splice(index, 1); // Using the delete operator will =
replace the old value=20
        // with "undefined" in its old slot, but we also want to remove =
the slot itself,=20
        // so with arrays (in IE too), we can safely use splice().
    }
    else { // Objects
        delete array[index]; // For object properties, this works pretty =
well, except potentially in IE where=20
        // the property will thankfully no longer be iterated, but it =
has the annoying feature (for=20
        // the sake of our using objects to imitate PHP associative =
arrays) that if you later try to=20
        // add back a value with the same property name, it will put =
your new value in the old=20
        // iteration position.  So IE does not truly delete the =
property, though it may appear that way.
        // All other popular browser implementation seem to truly delete =
the property (and iterate=20
        // in order), at least if it is not an inherited property, but =
the latest ES spec wasn't able=20
        // to persuade IE to change this behavior
    }
}</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>See the 2nd comment =
above for the=20
potential problems with this though. Basically in IE, simple objects as=20
associative arrays just won't work perfectly. It is very disappointing. =
You can=20
get around this by creating an object which wraps your data, but that =
can get=20
quite ugly. Otherwise, you just have to keep your keys in one array and =
values=20
in another array.<BR><BR>This is not to speak of our other challenge =
here of=20
trying to work with only one argument in unset(). JavaScript does not =
allow us=20
to get the container object or array if we only know the property. Our=20
experimental version of unset() (at=20
http://github.com/kvz/phpjs/blob/master/_experimental/var/unset.js ), =
allows us=20
to pass in a single argument, but it is a (necessarily) very bad =
solution as it=20
relies on eval(), and only works on globals passed in as strings. That's =
a huge=20
compromise just to work with a single argument, so practically speaking, =
your=20
solution is probably better (though with the above-mentioned =
caveats).<BR><BR>A=20
similar problem occurs with trying to imitate PHP's extract() and =
compact(). We=20
don't have a way in JavaScript (unless we exclusively work with globals) =
to say=20
use the arguments object to obtain or set the local variables of the =
caller (we=20
can only get access to those variables explicitly passed in as =
arguments, and=20
only by reference if they are objects or arrays).<BR><BR>I think these =
may well=20
be the biggest challenges for php.js trying to follow the PHP API.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98106></A>
<P class=3Dcomment_author><A href=3D"http://devblog.hu/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/e8b545ad2f7e3cf6233134d330dd03de?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://devblog.hu/">cynosure</A><BR><SPAN =
class=3Dcomment_date>28 Dec '09 <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98106"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Hi!<BR>=
<BR>In JS=20
can you give a reference to an array in a function call? I need an =
unset() like=20
function what can cut off an element from an array with a given index ( =
like=20
unset(foo['bar']; )<BR><BR>My workaround is this:<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>function =
unset(array,index)
{
    var newarr =3D new Array();

    for(var i in array)
    {
        if(i !=3D index) newarr[i] =3D array[i];
    }

    return newarr;
}
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>I know this is not the =
exact way=20
how php's unset works, 'cos it gives only a reference to the array, and =
handles=20
single variables as well as multiple variables too, but I think this can =
be=20
usefull for those JS beginners like me, who wants to unset an element =
from an=20
array. The delete method is buggy for me, or I don't understand how it =
works=20
well.<BR><BR>Thanks!</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98044></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>23 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98044"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;I =
misspoke in=20
saying that the case in the switch is superfluous. It will indeed =
convert "\\0"=20
to "\u0000" as in PHP. In any case, as I mentioned, you should add an =
extra '0'=20
to the sequence (and don't add a backslash).</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98043></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>23 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98043"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brant:=
 Sorry,=20
the case in the switch is not superfluous as it will turn "\\0" into =
"\u0000"=20
(as does PHP in double or single quotes). In any case, the rest of what =
I said=20
still applies: don't add a backslash to "\u", just add an extra 0 at the =

end.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98042></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>23 Dec=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98042"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@Brant:=
 Thanks=20
for letting us know. Fixed in Git. It really should be '\u0000' (was =
missing a=20
zero), but it won't really make a difference either way because =
JavaScript=20
already treats "\0" as "\u0000". So that case in the switch is =
superfluous=20
(though I've kept it just to reflect what PHP does). FYI, "\u" is used =
to=20
introduce a four-hexadecimal digit sequence in place of a Unicode=20
character--esp. useful if you have to use non-printable characters or =
non-ASCII=20
characters.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98037></A>
<P class=3Dcomment_author><A =
href=3D"http://www.brantmessenger.com/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/900f6b38eb25cf0ea8ad22f1a1a14e89?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://www.brantmessenger.com/">Brant Messenger</A><BR><SPAN=20
class=3Dcomment_date>22 Dec '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98037"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;IE7 =
Issue.=20
Search for '\u000' and replace with '\\u000'.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_98036></A>
<P class=3Dcomment_author><A =
href=3D"http://www.brantmessenger.com/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/900f6b38eb25cf0ea8ad22f1a1a14e89?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://www.brantmessenger.com/">Brant Messenger</A><BR><SPAN=20
class=3Dcomment_date>22 Dec '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_98036"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;In a =
custom=20
"wscs.namespaced.min.js" package IE7 found an error.<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>return =
false;},stripslashes:function(str){return(str+'').replace(/\\(.?)/g,funct=
ion(s,n1){switch(n1){case'\\':return'\\';case'0':return'\u000';case'':ret=
urn'';default:return n1;}});},stristr:function(haystack,needle,bool){var =
pos=3D0;haystack+=3D'';pos=3Dhaystack.toLowerCase().indexOf((needle+'').t=
oLowerCase());if(pos=3D=3D-1){return false;}else{if(bool){return =
haystack.substr(0,pos);}else{return =
haystack.slice(pos);}}},strlen:function(string){var str=3Dstring+'';var =
i=3D0,chr=3D'',lgth=3D0;var getWholeChar=3Dfunction(str,i){var =
code=3Dstr.charCodeAt(i);var =
next=3D'',prev=3D'';if(0xD800&lt;=3Dcode&amp;&amp;code&lt;=3D0xDBFF){if(s=
tr.length&lt;=3D(i+1)){throw'High surrogate without following low =
surrogate';}
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>Resolution:<BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript><BR>
return =
false;},stripslashes:function(str){return(str+'').replace(/\\(.?)/g,funct=
ion(s,n1){switch(n1){case'\\':return'\\';case'0':return'\\u000';case'':re=
turn'';default:return =
n1;}});},stristr:function(haystack,needle,bool){var =
pos=3D0;haystack+=3D'';pos=3Dhaystack.toLowerCase().indexOf((needle+'').t=
oLowerCase());if(pos=3D=3D-1){return false;}else{if(bool){return =
haystack.substr(0,pos);}else{return =
haystack.slice(pos);}}},strlen:function(string){var str=3Dstring+'';var =
i=3D0,chr=3D'',lgth=3D0;var getWholeChar=3Dfunction(str,i){var =
code=3Dstr.charCodeAt(i);var =
next=3D'',prev=3D'';if(0xD800&lt;=3Dcode&amp;&amp;code&lt;=3D0xDBFF){if(s=
tr.length&lt;=3D(i+1)){throw'High surrogate without following low =
surrogate';}<BR>
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment><BR><BR>Notice the difference =
'\u000' -&gt;=20
'\\u000'</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_97771></A>
<P class=3Dcomment_author><A =
href=3D"http://kevin.vanzonneveld.net/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://kevin.vanzonneveld.net/">Kevin van Zonneveld</A><BR><SPAN =

class=3Dcomment_date>14 Dec '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_97771"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@ =
cynosure: Yip!=20
Thanks for thinking of us though ; )</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_97667></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/e8b545ad2f7e3cf6233134d330dd03de?s=3D=
48&amp;d=3Didenticon"><BR>cynosure<BR><SPAN=20
class=3Dcomment_date>3 Dec '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_97667"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Sorry, =
I didn't=20
saw that you found it already ;)</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_97664></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/e8b545ad2f7e3cf6233134d330dd03de?s=3D=
48&amp;d=3Didenticon"><BR>cynosure<BR><SPAN=20
class=3Dcomment_date>3 Dec '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_97664"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Hey =
Kevin, there=20
are some md5() functions for JS around the web, for example=20
this:<BR><BR>http://www.webtoolkit.info/javascript-md5.html<BR><BR>It's =
fast, I=20
use it in a CRAM (challenge-response authentication) API.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_97632></A>
<P class=3Dcomment_author><A =
href=3D"http://kevin.vanzonneveld.net/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://kevin.vanzonneveld.net/">Kevin van Zonneveld</A><BR><SPAN =

class=3Dcomment_date>29 Nov '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_97632"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Thanks =
Danny,=20
I've added a favicon : )</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_97588></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/adc202852230bc4fef8fe5896960b8c3?s=3D=
48&amp;d=3Didenticon"><BR>Nizam<BR><SPAN=20
class=3Dcomment_date>25 Nov '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_97588"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Hi=20
Brett,<BR><BR>I really found this function very useful. If you don't =
have it,=20
please consider this. thank=20
you.<BR><BR>http://www.finefrog.com/2009/01/31/convert-a-mysql-date-strin=
g-into-javascript-date-object/<BR><BR></P>
<P style=3D"CLEAR: both"><PRE class=3Dsh_javascript>function =
parse_date(datetime /* YYYY-MM-DD HH:mm:ss */)
{ =20
	var date =3D new Date(); =20
	var parts =3D String(datetime).split(/[- :]/); =20

	date.setFullYear(parts[0]); =20
	date.setMonth(parts[1] - 1); =20
	date.setDate(parts[2]); =20
	date.setHours(parts[3]); =20
	date.setMinutes(parts[4]); =20
	date.setSeconds(parts[5]); =20
	date.setMilliseconds(0); =20

	return date; =20
}
</PRE>
<P style=3D"CLEAR: both" class=3Dcomment></P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_97572></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/f93cdced9c9b863a7d9e4b9988886015?s=3D=
48&amp;d=3Didenticon"><BR>Danny=20
Wilkerson<BR><SPAN class=3Dcomment_date>23 Nov '09 <A=20
title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_97572"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;the =
website icon=20
is missing "favicon.ico"</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96986></A>
<P class=3Dcomment_author><A href=3D"http://brett-zamir.me/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://brett-zamir.me/">Brett Zamir</A><BR><SPAN =
class=3Dcomment_date>26 Oct=20
'09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96986"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@peta: =
Besides=20
what Michael and Kevin said, if you can find the time to help us in =
borrowing=20
those features from other frameworks that you speak of--without =
sacrificing the=20
full PHP API that we've attempted to follow (in some cases, we have had =
to take=20
a performance hit in some functions in order to support all of the =
potential PHP=20
arguments)--then we're all for it. But as stated by Michael, we are, for =
better=20
or worse, committed to following the PHP API (except in cases where we =
can use=20
our own "ini" to configure function behavior)...</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96971></A>
<P class=3Dcomment_author><A =
href=3D"http://kevin.vanzonneveld.net/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://kevin.vanzonneveld.net/">Kevin van Zonneveld</A><BR><SPAN =

class=3Dcomment_date>25 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96971"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@ =
Michael White:=20
Thanks for chiming in Michael!<BR><BR>I would like to add that we're not =
in the=20
business of porting language features. We're in the business of porting=20
functions. Although JavaScript seriously kicks ass as a language, =
there's just=20
no easy way to do higher level stuff like:<BR><BR>md5(), strip_tags(),=20
strtotime(), number_format(), wordwrap()<BR><BR>That's were we come in. =
Please=20
take a function you need (I'm sure the day will come you'll find a use =
for us if=20
you're doing PHP &amp; JS professionally) and be on your way.<BR><BR>At =
least=20
that's how I look at it.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96903></A>
<P class=3Dcomment_author><A href=3D"http://getsprink.com/"><IMG =
class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/b7be0fed2434a667c616869f64fb8636?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://getsprink.com/">Michael White</A><BR><SPAN =
class=3Dcomment_date>20=20
Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96903"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@peta =
I believe=20
you may be missing the entire point of PHPJS. There are many PHP =
developers out=20
there who feel much more "at home" with the PHP language than they do =
with=20
JavaScript. While there are many other frameworks out there, a developer =
who's=20
primary language is PHP may not have a chance to really learn one or =
more of=20
those frameworks, especially on a project with a tight timeline. PHPJS =
is *not*=20
meant to be a replacement for something like jQuery or Prototype but =
rather an=20
additional asset. Frameworks like jQuery and Prototype are designed for=20
manipulating the DOM, sending and receiving data, and other common =
client-side=20
tasks. PHPJS used alongside one of the other frameworks would provide =
easier=20
data manipulation functions at the developers fingertips rather. I'm not =
exactly=20
a JS novice but I still find PHP's functions for string manipulation to =
be much=20
more user friendly than JavaScript's - not to mention that even for the=20
unfriendly stuff, the www.php.net documentation outshines any single =
resource=20
for JavaScript documentation that I've ever come across.<BR><BR>Is there =
some=20
way we can make it more clear that the purpose of PHPJS is not to =
replace=20
frameworks like jQuery and Prototype but rather to assist people who are =
already=20
familiar with PHP and need to use JavaScript for whatever reason.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96891></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/68f75482b8a9df3c3206edba8ab52123?s=3D=
48&amp;d=3Didenticon"><BR>peta<BR><SPAN=20
class=3Dcomment_date>19 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96891"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Sorry, =
but where=20
on earth are reasonable reasons to mimic ugly language constructs like =
those of=20
PHP in JS? Most real-life functionalities being used by an average js =
developer=20
are already implemented more cleverly and performant by one of the JS =
Frameworks=20
being out there. Frankly, the idea behind PHPJS sounds nice, but a =
closer look=20
at the sources and the performance of typical operations offered by =
PHPJS=20
(tested most array, string and typechecking functionalities) sobers up =
very=20
quickly.<BR><BR>Instead of continuing to follow a half-baked concept, =
I'd look=20
to where langauge constructs of PHP might complement exisitng frameworks =
in a=20
smart way, and implement these for one/more existing frameworks.=20
<BR><BR>.peta</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96880></A>
<P class=3Dcomment_author><IMG class=3Davatar_big=20
title=3D"Goto gravatar.com to get a customized picture" alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/abc5c275005235311b78a3e8c4906ff8?s=3D=
48&amp;d=3Didenticon"><BR>cltc<BR><SPAN=20
class=3Dcomment_date>18 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96880"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Thanks!=
You saved=20
my life...</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96821></A>
<P class=3Dcomment_author><A href=3D"http://www.my-picz.co.cc/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/8905a0600815477ecfd8a1bca19cdb80?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://www.my-picz.co.cc/">http://www.my-picz.co.cc/</A><BR><SPAN=
=20
class=3Dcomment_date>15 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96821"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;I'm =
trying to=20
use the "array_walk_rucursive"-function,<BR>but really don't know, how =
to make=20
it work on my array.<BR>Couldn't you add a sample function (other than=20
"void()"),<BR>to explain the idea of that function more =
understandable?</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96752></A>
<P class=3Dcomment_author><A =
href=3D"http://www.daytondailynews.com/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/cbf415d23b49283a9dbd557ce8464a56?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://www.daytondailynews.com/">Gerald</A><BR><SPAN =
class=3Dcomment_date>12=20
Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96752"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;Thank =
you! I=20
wasted hours trying to find js equivalents for php functions then trying =
to=20
create my own equivalents. I'm glad I found you! You saved me hours of =
more=20
wasted time! :)</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96698></A>
<P class=3Dcomment_author><A =
href=3D"http://www.smart-webmaster.com/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/0b6852d76285ea13b4713f274b97d9fd?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://www.smart-webmaster.com/">Website Design =
Egypt</A><BR><SPAN=20
class=3Dcomment_date>10 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96698"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;I find =
it smart=20
and clever idea. I love it. I am going to give a try and spend extra =
time then=20
post again.<BR><BR>Thanks.</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96616></A>
<P class=3Dcomment_author><A =
href=3D"http://kevin.vanzonneveld.net/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://kevin.vanzonneveld.net/">Kevin van Zonneveld</A><BR><SPAN =

class=3Dcomment_date>8 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96616"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@ Jeff =
&amp; The=20
JavaScript BUG: Yeah didn't quite get that sorry ; )</P>
<P class=3Dcomment_break></P></DIV>
<DIV class=3Dcomment><A name=3Dcomment_96608></A>
<P class=3Dcomment_author><A =
href=3D"http://kevin.vanzonneveld.net/"><IMG=20
class=3Davatar_big title=3D"Goto gravatar.com to get a customized =
picture"=20
alt=3DGravatar=20
src=3D"http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D=
48&amp;d=3Didenticon"></A><BR><A=20
href=3D"http://kevin.vanzonneveld.net/">Kevin van Zonneveld</A><BR><SPAN =

class=3Dcomment_date>8 Oct '09 <A title=3D"Permalink to this comment"=20
href=3D"http://phpjs.org/pages/home#comment_96608"><IMG class=3Dicon =
alt=3DPermalink=20
align=3Dmiddle =
src=3D"http://phpjs.org/commentor/img/world_link.png"></A></SPAN></P>
<P class=3Dcomment><IMG alt=3Dq align=3Dtop=20
src=3D"http://phpjs.org/commentor/img/quote_left.png">&nbsp;&nbsp;@ =
Roland=20
Hentschel: Our examples are also used for unit testing. Hence the=20
strangeness.<BR>Please refer to the official PHP documentation for more =
details=20
on how to operate these functions. </P>
<P class=3Dcomment_break></P></DIV></DIV></DIV>
<DIV id=3Dsidebar1 class=3D"grid_4 alpha omega">
<DIV class=3Droundedcornr_box_854891>
<DIV class=3Droundedcornr_top_854891>
<DIV></DIV></DIV>
<DIV class=3Droundedcornr_content_854891>
<H1 class=3D"first icon download">Download</H1>
<CENTER><A title=3D"Download the default package. Not namespaced. =
Minified. "=20
href=3D"http://phpjs.org/packages/download/308/name:php.default.min.js"><=
IMG=20
style=3D"BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px"=20
alt=3DDownload src=3D"http://phpjs.org/img/down.png"> </A></CENTER>
<P>There is a wide <A href=3D"http://phpjs.org/packages/index">variety =
of=20
packages</A> if the default doesn't suit you. <BR>You can also <A=20
href=3D"http://phpjs.org/packages/configure">compile your own</A> =
package to avoid=20
any overhead. <!--=0A=
    The <b>normal</b> packages are just a collection of standalone =
functions, making it easy to address=0A=
    them. With the <b>namespaced</b> packages, the functions are =
contained in one object, making it=0A=
    easier to avoid naming conficts and to extend, overrule, or modify =
PHP.JS to your own wishes.=0A=
    <br>=0A=
=0A=
--></P><!--=0A=
<h1>Confused?</h1>=0A=
<p>=0A=
    And just want to use PHP.JS?=0A=
    Go for the php.min.js version. <br>=0A=
    It delivers the best trade-off between size, speed &amp; compatibilty=0A=
</p>=0A=
-->
<SCRIPT type=3Dtext/javascript>=0A=
    var dzone_style =3D '1'=0A=
    digg_bgcolor =3D '#ffffff';=0A=
var dzone_url =3D 'http://phpjs.org/functions/index';=0A=
digg_url =3D 'http://phpjs.org/functions/index';=0A=
reddit_url =3D 'http://phpjs.org/functions/index';=0A=
</SCRIPT>

<H1 class=3D"first icon social">Support us</H1>
<DIV style=3D"MARGIN-TOP: -5px; MARGIN-BOTTOM: 10px"=20
class=3Droundedcornr_box_995391>
<DIV class=3Droundedcornr_top_995391>
<DIV></DIV></DIV>
<DIV style=3D"TEXT-ALIGN: center; COLOR: #1f1f1f" id=3Dsocial_container=20
class=3Droundedcornr_content_995391>
<P style=3D"TEXT-ALIGN: center; MARGIN: 4px 0px; CLEAR: both">spread the =
word:=20
<BR><BR></P>
<DIV style=3D"MARGIN: 13px 0px 0px; FLOAT: left">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://widgets.dzone.com/widgets/zoneit.js"></SCRIPT>
</DIV>
<DIV style=3D"MARGIN: 0px 7px; FLOAT: left">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.ohloh.net/p/13436/widgets/project_users.js?style=3Dblue=
"></SCRIPT>
</DIV>
<DIV style=3D"MARGIN: 5px 0px 0px; FLOAT: left">
<SCRIPT type=3Dtext/javascript =
src=3D"http://digg.com/tools/diggthis.js"></SCRIPT>
</DIV>
<DIV style=3D"CLEAR: both"></DIV>
<P style=3D"TEXT-ALIGN: center; MARGIN: 4px 0px; CLEAR: both"><BR><A=20
style=3D"COLOR: black" class=3Dretweet href=3D"http://phpjs.org/">Use =
any PHP function=20
in JavaScript</A><BR><BR></P>
<DIV style=3D"MARGIN: 13px 0px 0px"><BR>These kind folks have already =
donated:=20
Nitin Gupta, @nikosdion, Anonymous, Anonymous and Shawn Houser. =
<BR>&lt;your=20
name here&gt; <BR><BR><A =
href=3D"http://www.pledgie.com/campaigns/5962"><IMG=20
border=3D0=20
alt=3D"Click here to lend your support to: phpjs and make a donation at =
www.pledgie.com !"=20
src=3D"http://www.pledgie.com/campaigns/5962.png?skin_name=3Dchrome"></A>=
=20
</DIV></DIV>
<DIV class=3Droundedcornr_bottom_995391>
<DIV></DIV></DIV></DIV>
<H1 class=3D"icon feeds">RSS</H1>
<UL class=3D"icons feeds">
  <LI><A href=3D"http://phpjs.org/comments/index.rss">Comments</A></LI>
  <LI><A =
href=3D"http://phpjs.org/functions/index.rss">Functions</A></LI></UL>
<H1 class=3D"icon tweets">Tweets</H1>
<UL class=3D"icons tweets">
  <LI style=3D"LIST-STYLE-IMAGE: url(/img/identica_icon16x16.png)"><A=20
  href=3D"http://identi.ca/brettz9">Brett</A></LI>
  <LI><A href=3D"http://twitter.com/phpjs">php.js</A></LI>
  <LI><A href=3D"http://twitter.com/kvz">Kevin</A></LI></UL>
<H1 class=3D"icon comments">Comments</H1>
<UL class=3D"icons comments">
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4ba8011f7f0b56c8ceb267c859578097?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Scott Baker"=20
  href=3D"http://phpjs.org/functions/852:852#comment_114031">This may be =
nit=20
  picky, but I've seen version nu...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/558:558#comment_113860">@dazz: By =
the way, in=20
  addition to my comments j...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/558:558#comment_113857">@dazz: Most =
of the=20
  code length (which is code w...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/5b786a918c434eb9de8b734096e9dd66?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by dazz"=20
  href=3D"http://phpjs.org/functions/558:558#comment_113718">wtF?? This =
Function=20
  is veryyy looooong</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/b9e61137e0c36fd637528f70a119176d?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by jmweb"=20
  href=3D"http://phpjs.org/functions/347:347#comment_113485">Note that =
the=20
  array_unshift() implementation gi...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/b9ae828a16a91f27f12e98c9cb6e8bbb?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Devan =
Penner-Woelk"=20
  href=3D"http://phpjs.org/functions/540:540#comment_113469">Due to the =
script,=20
  when using the 'Packed' comp...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/5d9d27378b303b4d44fb47292e53bd55?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by James =
'Skateside' Long"=20
  href=3D"http://phpjs.org/functions/399:399#comment_113200">Blast! =
Sorry for the=20
  double-post but I've just ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/5d9d27378b303b4d44fb47292e53bd55?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by James =
'Skateside' Long"=20
  href=3D"http://phpjs.org/functions/399:399#comment_113199">Hi guys =
This is my=20
  first contribution to php.j...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/acf41fc6e83c514cd1afdb05d414b723?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by test"=20
  href=3D"http://phpjs.org/functions/426:426#comment_113137">&lt;?php =
echo 'hello=20
  admin!'; ?&gt;</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/239373c6ffb410d75e75e5737a40e0b2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by droope"=20
  href=3D"http://phpjs.org/functions/484:484#comment_112364">Hi. I keep =
getting "i=20
  is not defined". Perhaps...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/774:774#comment_112278">@ Serg: =
This function=20
  has dependencies. You'll ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/5f2c1a780775048b4f9793aa5e79b7d0?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Serg"=20
  href=3D"http://phpjs.org/functions/774:774#comment_112268">when i used =
your code=20
  I had an error ; &lt;&lt;Error:...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3f009d72559f51e7e454b16e5d0687a1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by abc"=20
  =
href=3D"http://phpjs.org/functions/454:454#comment_112221">puriyala</A> =
</LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/f19f7e81746559bcf53f876296168cb0?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Cue"=20
  href=3D"http://phpjs.org/functions/391:391#comment_112015">This throws =
an error=20
  in Firefox 3.6.3. Works fi...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/324:324#comment_112011">@JeromeM: =
Can you=20
  provide some sample data wher...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/e5e2348f1ae05698878c449e48f6e3c5?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by JeromeM"=20
  href=3D"http://phpjs.org/functions/324:324#comment_112010">Doesn't =
seem to work=20
  on Safari 4 .. Neither on ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/437:437#comment_112008">@Mathias =
Bynens:=20
  php.js, in order to support us...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Mathias Bynens"=20
  href=3D"http://phpjs.org/functions/437:437#comment_112007">Wow, WTF! =
What=E2=80=99s=20
  wrong with: function isArr...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/54836c1cb72abbe20f4cb170ff048241?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Th=C3=A9riault"=20
  href=3D"http://phpjs.org/functions/571:571#comment_111154">@mscdex: I =
don't=20
  think PHP sessions can be unse...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/edb4a8148e13b761ca46d971136e54b9?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by mscdex"=20
  href=3D"http://phpjs.org/functions/571:571#comment_111153">I'm having =
the same=20
  problem as Alind (this func...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/354:354#comment_111067">@Adam =
Wallner: I see=20
  now I hadn't looked carefu...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/354:354#comment_111064">@Adam =
Wallner:=20
  Argh...Yes, you are right, and t...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/748546f84724b4c64ec158e6cb4fe29e?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Adam Wallner"=20
  href=3D"http://phpjs.org/functions/354:354#comment_111055">It doesn't =
work in=20
  Firefox 3.6 (I haven't teste...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/525:525#comment_110406">Regarding =
the second=20
  test case, str_pad on my s...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/525:525#comment_110401">@Kevin van =
Zonneveld:=20
  Thanks for your feedback....</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/525:525#comment_110344">Hey there =
Rafal, My=20
  second testcase returned: ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  =
href=3D"http://phpjs.org/functions/378:378#comment_110188">http://phpjs.o=
rg/functions/378:378#comment_110188</A>=20
  </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  =
href=3D"http://phpjs.org/functions/364:364#comment_110187">http://phpjs.o=
rg/functions/364:364#comment_110187</A>=20
  </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/a6bb8f8465f0fbcb2467828c0e6bd3b3?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Diplom@t"=20
  href=3D"http://phpjs.org/functions/378:378#comment_110160">"You can =
still handle=20
  the functions in the same...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/a6bb8f8465f0fbcb2467828c0e6bd3b3?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Diplom@t"=20
  href=3D"http://phpjs.org/functions/364:364#comment_110146">Function =
didn't work=20
  for me when i've tried to ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/525:525#comment_110109">Oh, sorry, =
I=20
  shouldn't also accept empty string...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/525:525#comment_110103">My approach =
to=20
  str_pad function str_pad(input, ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/569:569#comment_110068">@Jerry: A =
nice idea,=20
  but that only works with E...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/b9e61137e0c36fd637528f70a119176d?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Jerry"=20
  href=3D"http://phpjs.org/functions/569:569#comment_110025">I prefer =
this=20
  slightly modified version as repl...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/b9e61137e0c36fd637528f70a119176d?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Jerry"=20
  href=3D"http://phpjs.org/functions/427:427#comment_109986">Very nice - =
I think I=20
  will use your modificatio...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/427:427#comment_109975">Sorry for =
the double=20
  comment, but now the code ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/427:427#comment_109972">@Jerry: =
very short=20
  and clean solution. I just m...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/b9e61137e0c36fd637528f70a119176d?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Jerry"=20
  href=3D"http://phpjs.org/functions/427:427#comment_109893">Here is my =
simple=20
  implementation of htmlspecial...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/a29a70789f229c3e4cf62e6073c2accc?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Graci Granados"=20
  href=3D"http://phpjs.org/functions/481:481#comment_109524">Thanks =
Brother,=20
  congratulation!!!</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/528:528#comment_109299">@ =
Rafa=C5=82 Kukawski: It=20
  is, thanks! http://github...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/528:528#comment_109296">I forgot to =
cast the=20
  input value to string, ple...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/528:528#comment_109292">@ =
Rafa=C5=82 Kukawski:=20
  Excellent work! Tests pass, ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/528:528#comment_109291">@ =
Rafa=C5=82 Kukawski:=20
  Excellent work! Tests pass, ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/380:380#comment_109290">@ =
Rafa=C5=82 Kukawski: I=20
  think I agree. As long as ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Kevin van =
Zonneveld"=20
  href=3D"http://phpjs.org/functions/359:359#comment_109288">@ =
Rafa=C5=82 Kukawski:=20
  Looking good! http://github....</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/528:528#comment_109272">My =
proposition (uses=20
  the conditional operator) ...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/380:380#comment_109265">IMO in U() =
we should=20
  do Math.floor instead of M...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafal Kukawski"=20
  href=3D"http://phpjs.org/functions/380:380#comment_109260">My =
proposition for=20
  checking for leap years woul...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/c1860dc81c1d9902f1965260c626532f?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Rafa=C5=82 =
Kukawski"=20
  href=3D"http://phpjs.org/functions/359:359#comment_109185">I think, it =
would be=20
  better to handle arguments...</A> </LI>
  <LI=20
  style=3D"LIST-STYLE-IMAGE: =
url(http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=3D1=
6&d=3Didenticon)"><A=20
  style=3D"TEXT-DECORATION: none" title=3D"A comment by Brett Zamir"=20
  href=3D"http://phpjs.org/functions/502:502#comment_109147">@Yen-Wei =
Liu: Thank=20
  you for the report! I've ma...</A> </LI></UL>
<H1 class=3D"icon companies">Who uses php.js</H1>
<UL class=3D"icons companies">
  <LI><A href=3D"http://www.ext4yii.com/">Ext for Yii</A></LI>
  <LI><A=20
  =
href=3D"http://github.com/ry/node/blob/1107a1bd1e367d3056b8c3975c2026b740=
2e9f61/lib/multipart.js#L174-200">node.js</A></LI>
  <LI><A href=3D"http://www.shaniatwain.com/">ShaniaTwain.com</A></LI>
  <LI><A href=3D"http://getsprink.com/KillBugs">KillBugs</A></LI>
  <LI><A href=3D"http://www.xsoftware.com.mx/">XSoftware =
Corporation</A></LI>
  <LI><A href=3D"http://twipho.net/">TwiPho</A></LI>
  <LI><A href=3D"http://www.mediacode.pt/">mediacode</A></LI>
  <LI><A href=3D"http://getsprink.com/">Sprink</A></LI>
  <LI><A href=3D"http://www.harmony-framework.com/">Harmony =
Framework</A></LI></UL>
<P>If you use php.js, <A href=3D"http://phpjs.org/pages/contact">let us =
know</A>=20
and get linked. </P>
<H1 class=3D"first icon progress">Progress</H1>
<DIV class=3Dside_progress>
<DIV style=3D"WIDTH: 137px; HEIGHT: 10px" class=3DbarContainer>
<DIV style=3D"BACKGROUND-COLOR: #77ff6f; WIDTH: 112px; HEIGHT: 4px"=20
class=3D"barInside green" title=3DComplete><A=20
href=3D"http://phpjs.org/functions/index"></A></DIV>
<DIV style=3D"BACKGROUND-COLOR: #ff6f75; WIDTH: 12px; HEIGHT: 4px"=20
class=3D"barInside red" title=3DUnported><A=20
href=3D"http://phpjs.org/unported/index#unported"></A></DIV></DIV><SMALL>=
php.js is=20
complete for <A=20
href=3D"http://phpjs.org/statistics/index">82%</A></SMALL></DIV><BR>
<H1 class=3D"first icon project">php.js on</H1>
<DIV style=3D"MARGIN-TOP: -5px; MARGIN-BOTTOM: 10px"=20
class=3Droundedcornr_box_995391>
<DIV class=3Droundedcornr_top_995391>
<DIV></DIV></DIV>
<DIV style=3D"TEXT-ALIGN: center; COLOR: #1f1f1f" id=3Dsocial_container=20
class=3Droundedcornr_content_995391>
<P style=3D"TEXT-ALIGN: center; MARGIN: 4px 0px; CLEAR: both"><A=20
title=3D"Discuss php.js' future at Google Groups"=20
href=3D"http://groups.google.com/group/phpjs"><IMG=20
alt=3D"Discuss php.js' future at Google Groups"=20
src=3D"http://phpjs.org/img/googlegroups.gif" width=3D140 =
height=3D30></A> <BR><A=20
title=3D"Help improve php.js on github" =
href=3D"https://github.com/kvz/phpjs"><IMG=20
alt=3D"Help improve php.js on github" =
src=3D"http://phpjs.org/img/github.png"></A>=20
<BR><BR>
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.ohloh.net/p/13436/widgets/project_thin_badge.js"></SCRI=
PT>
<BR></P></DIV>
<DIV class=3Droundedcornr_bottom_995391>
<DIV></DIV></DIV></DIV>
<CENTER><BR><IMG=20
style=3D"BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; =
BORDER-RIGHT: 0px"=20
alt=3D"Powered by php.js" =
src=3D"http://phpjs.org/img/phpjs_powered.gif"> <BR><A=20
title=3Dstats href=3D"http://phpjs.org/statistics/index">Stats</A> =
<BR></CENTER><BR>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P></DIV>
<DIV class=3Droundedcornr_bottom_854891>
<DIV></DIV></DIV></DIV></DIV>
<DIV class=3Dclear></DIV>
<DIV id=3Dfooter class=3D"grid_16 alpha"></DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
            var gaJsHost =3D (("https:" =3D=3D =
document.location.protocol) ? "https://ssl." : "http://www.");=0A=
            document.write(unescape("%3Cscript src=3D'" + gaJsHost + =
"google-analytics.com/ga.js' type=3D'text/javascript'%3E%3C/script%3E"));=0A=
        </SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
            var pageTracker =3D _gat._getTracker("UA-63083-7");=0A=
            pageTracker._trackPageview();=0A=
        </SCRIPT>
<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><=
BR><BR><BR><BR><BR><BR><!-- 0.2436s --></BODY></HTML>

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/img/phpjs.png

[encoded data, 18240 characters]
/g/0mFPWKYf3kQAAAABJRU5ErkJggg==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/commentor/img/ajax_loading.gif

R0lGODlhIwAjAMQAAP////f39+/v7+bm5t7e3tbW1s7OzsXFxb29vbW1ta2traWlpZycnJSUlIyM
jISEhHt7e3Nzc2tra2NjY1paWlJSUkpKSkJCQjo6OjExMSkpKRkZGRAQEAAAAP///wAAACH/C05F
VFNDQVBFMi4wAwEAAAAh+QQFBAAeACwAAAAAIwAjAAAF5CAgjmRpnmiqrmzrvnAsz3Rto4Fwm4EY
LIweQHcTKAiAQOPRI0QKRcYiEGA4qI8K9HZoGAIOSOBgCdIGBeLCMUgoBJSJjsBAxAiKRSFAQBCV
BwMKGRsNQi8DBwsJhyQVGxMKjTCJk0kPjDI5AlQqBAcICFstBQqmmScFGh0dHBaWKAIEBQQDKQEK
DxEQCTMBA5Y/o5oDoZYCHB1PMgIHCQacwCPACRStDTEDBrYABQg5wAgGIg4YYjQCogEGB3wI3J2+
oD0G42PfN2Pc7D2JRDb/+In4t8MHwYIIEypcyLChQ4YhAAAh+QQFBAAeACwIAAgAEwATAAAFlqAn
jiKSjAFJBscgLos4NIQ6JggAKLHXSDWbp6CoLRgeg0ShGwkIKQ9iITggPJFHaqA4eAYIRK0a9SwK
0spl0TQkvEIJJnIlCdDCRk4lEJIGBgcHRn4jBBkciROFKgkNDg51jCJBJJU2ARocD4xNAQsGCBMc
Gz2FAxwZKQwVDYVwEhwOI02MAxsceJMeOgwaJ7skCX0jIQAh+QQFBAAeACwAAAAAAQABAAAFA6AX
AgAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwJAAcAEgAVAAAFjqAnjmJAnihgHChq
CACAJKMyoMHBeggSJ40baoC4zTwFB6IlOiwLhkCDMUIYUAUSgiA4RCZLAXPkoDQOsfFosVNjDYaB
QiRmWjaaDMTdXDAYbWMJQnwiGBoOBEwmIwVeGhhzKAJ+BBsXIgoSVCcEAxkbAw8enEwAARkaYqlu
AqliChlLY64aQrNjAT2MKCEAIfkEBQQAHgAsBwAIABQAFAAABZqgJ45jUQBkqorGgQqIsKqteCjy
TLbAsBg6UoBA8CgSIoGhGGQNAoXG4zAaNBcPxalJQhS4KwGhUCQgRYHZQGKxVBpgD8CQUCiAYEQT
pZpcGFYrBgw5HgkEBg4XFHoqFx10CwMZFCIIDwl8IwscFAQXGR4NGQo6BBocRRUYHgIWGEwqBxoP
HgEWoYYXVCsBCTIBqzkHaVwHvCshACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcA
CAAVABQAAAWaoCeOpDECZKqKgRcY7bqanoHI6+EKSIHjCJ2oMPidCgIPQbHwGUkIBoLwJAEM1Opq
QBgkC0yjwBGRRBQokfdXOASzo0MjqTrQUwQIpwM/QSYJKQoaHRUKHgtQSgwTEUIeDRcPSRQcHgiB
FREiB1IkdAkaEgMUGAILFoE4AxkaRRIVLRIURTIGGQ0iExWcEzQyBzGwI05PV78rIQAh+QQFBAAe
ACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAgAFAAUAAAFlaAnjmRBnmgqCip6kEGbDnJqvmJA
sLVIDwgEoTc6JAy0k05VSIoKiSgipgoIaIFKZ8tBVBeNBgORkEwkDt6sYECSBosUwJRybDiqxuOg
TmTwCAUKIwAHAwMJDw10CxUNMRIaBQcIAmhPCgYjVAcZDx4REx5lOCoWGCIPER4Bqi0FFwwiEBIx
Bg9DKpqpEVS5PQUFACohACH5BAUEAB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcACAAUABQA
AAWRoCeOpEGeaCoGKmqOQlvKXgId4usR6DA+HA6kQDsxMB0Nr0hSTHxFAgJxIABogpiEI9rgVAiF
2ICARCANVovAjsESKoKaNGBkMqrEojA/WDYSHgMIJAVZBwsKSwoSCyIOFx4FJg4LVwQHRCgVDQIO
EAEHDi9XJwISFAIADA4iDJ1xEwoiDa2SDFA0rCO5NGwtIQAh+QQFBAAeACwAAAAAAQABAAAFA6AX
AgAh+QQFBAAeACwHAAgAEwAUAAAFj6AnisNonqeBLWg7GpwmtAENcc8s6ifyGKJMp1DyIFqNjecx
UEiKLpGi4slATcBW4hkdDQ6HbHd048TELtah8XCwxqjAsXXdKSyWuuiAILwmGBBABzUiBDUFCQgl
CBAJIgsTBAQFAQpzAwZ1BREsCwweBQt+Lg8QNQpvCAqFJwMQc6mGjy6kHrI7cB4DeiIhACH5BAUE
AB4ALAAAAAABAAEAAAUDoBcCACH5BAUEAB4ALAcABwASABUAAAWXoCeOI0GQaBpUl5CSRZV4QrYN
71hoWBBkGpdISAI4No2BhoNLHRijy8YQmQwOpJMC2BAgIh5fgJZKSDYWYg4FWZMMhkLT7XHYeAW6
wrBgLGZ0KQZjgR4IEhFqJIAeBQ8UDQUCeSNzIwcNCCIJDwMDJwgGawSZAQgzBAiWIwELDSIHmh6x
OQyiAKciV4oeAHO0IwB0ArweIQAh+QQFBAAeACwAAAAAAQABAAAFA6AXAgAh+QQFBAAeACwHAAcA
EAAVAAAFjKAnjuMwkKgnjFJVosSEeMGVrcc1j8TlehVMIIDh7EaMzMKDuTE4k4DHsCiIKJnCI0LY
cE6ehMWyPDxGgshyZL5MUqID6uCAowsEwsouWlTGFAR8HgUJCglHgyNWigF0dXYzBAwPCoJgcAUK
BnELAgKYcAObHgdyfIYiBQcAdgIJjAanrq0AsoojQyghACH5BAUEAB4ALAAAAAABAAEAAAUDoBcC
ACH5BAUEAB4ALAcACAAUABQAAAWYoCeKwQhF5aiqA3SIlDVW7yoOlCRKlVhtNZtHYUkIKBfPYoNa
FRADUUTWeAwyGYHHAFmIDhIJImBorBIFB6cDSZUnEGEA08k0UiPDQrsSTB58HgEDhEIqAHgIERES
VoY2BAcIBwaPlh5Rl04KCnhnKwMJDFCelgMIBAAeT3hBNqoeAggFIgiaX7ZblZoBB5lbqoG3wzbC
KyEAIfkEBQQAHgAsBwAHABUAEwAABZygJ46jIJBoSjZPqa6GGEmBZ0zx60Gt90QiSSb3QkgOHskk
kMj0UAOkyCEhLBiey2X0SIwMLKRVAPAEHggCY8N5egiKB6OGAmwtC1UhQScFIgt9JAKCKQUICQkx
Bw2NCycqBhsdlBgBAwUGBgRlKgMPExMSgSSdKmQvBAgIOqwoAgeKkDopBgMiMbOutCgGSLe8IlIe
SKbBI1LAKCEAIfkEBQQAHgAsAAAAAAEAAQAABQOgFwIAIfkEBQQAHgAsAAAAAAEAAQAABQOgFwIA
IfkECQQAHgAsAAAAACMAIwAABbWgJ45kaZ5oqq5s675wLM90baPBvS6MTgoKgqjxEBEihZuAsRAx
HKJHJXk7NAwBB8RzsPRqBYFo4RgkFALKxMhAxAiKBdXtAXgah4Eis2nIBgcLCSgVGxMKNYAoD4Mz
AgI5KgQHCAhULQUKmgmRJgUaIhwWLwIEBQQDKQEKDxEQCXYxnSUBcjapKAIcHUg+JgkUHRx+YB6z
Iw4YEMc2QiMBzDB0HgbGvifR19rb3N3e3+Dh4ikhADs=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/42855f3d37844a64ddb5cfc95a856eee?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADMElEQVRoge2ZT0hUURTGv3kOoTCk
KIguUigmioz+bCRoWkSLpk1F/yYQJVoURgptphIiAsdskRghEYTMphkXgW7sjzALqYESzIWEtSha
FYGhJNSi8baQO7yZd++758y8R5v3wSz0fXf8nXe87368ExJCCCg01BfH0sJr1SWHjp67ioamFmTH
Bqr2p2d/kb5DKqy7cOLCTdztP0aCOX8lVfzZVATXb5Klu7BzXww79h5kwcQTfUj0Dnrmp0hbALDR
BSqMCYrrp8q1AF0XdDA6KK6fJWHQh/lZ0R2LFD9PH94wLSlqOjPK9nPl2gHA2YWGphbyzalvbGb7
qfry8T1Grp8xd0AIZxcod+rNy4zoObSZ7Tfp89K8uJ88XWTRPkbtkl2Q54J89MUTfUp//lUWjwcv
QYj1ivy6Oz45nsJC/kXJ70kFAM5zQQelg+H6TeDsAsq7oIIywXD8JnB2AYD6dJZQ9Y3Nxn8Dip8K
LhXqjkUcWYibbfyWG4+jA15nlWpl4qnZ077pts4c7ehEbV0Ei3M5/0kVovCEdWYpueE40bf/ZBQr
y9+r8lN5LDezfVG1qZEjDk/YZLYvAvzfE1wey6+sUqm4PFZ2bADPsw+MZnno+C0uj0VZRMkqXorD
U3KQJXoHWVlF1+7Vnz888VN4Ss6BxbkcausiiHZ0GuEB4M/vNeUHUL7oYPspPI6TmJtt/JaJRxnm
5KHyv+Gl3HiCLOSngixkXxRkIaKCLKRTkIUYCrJQkIU8lIlH+V5Ipdb27Tjek8SjOxcd17yckV2+
9QQHjpwlfQ9AeDMnwTsPn4Jl1TgK8HpGNpUeLv4tikr2QDl4V/899FwbQdu23QiFNkYJk+NDWhhT
dqL411aX0doWxZatu0gFODpQfsd14mYnjp/VBTkoSHbtF/mZCVEo/HUdMFDHTNOZUdZYyu7vjkVE
fmbCuEYIIUAFl/J7Rma/oRSmcCr9jrxhAH5W4cju//b1E97mnhmfSGEOPGAeF0mVHzpUv12UvWCc
UqrEzU6VZi3ZBTdVVIAblNuMjOOXmkoPY329oOWouAAVFGVGxvED5i6wZmQ6KMC7GZlKbnvhH/ht
rarMrhqgAAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/commentor/img/world_link.png

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANPSURBVBgZBcHdT1tlAMDh3zltORT6Ob4m
tWDGMpgiU8LcEooJyiaEGbNkCkaNCVfeGP4Dr7zBG42J3hiVZInTeTMvFAPBYRhmGDBjEYaAMhht
VzraUjin5+M95/V5FCklAAAA4wtjfcCHwHmgAfADh8Ci9OSXn/d9+ysAAIAipQRgfGHMD0wC115P
DmjxYANloxbDBuGaCHLMZqeEK9wZIdy3vh76/hhAkVIyvjAWAG731D/XeznZT9nUsLDZKitUSY0D
w0MKmyAGWWuepczSfeGIl79789ahCgBMdted6U0191BwbRxVQQiViqjCoIqCpbFvBtk7DNASeome
k+1dtuXcAPAVL+2mgE/eOXPF97erk6VCxRMcmyEKVoCyCZvpIw51HS1+gBLd5GJ9B7Nrf566vji5
4rsw9uKnrzVf6FR8QbKqANnIU26I5ZyPiqmylj7Gqy6itf6DFdkk7xXxF10665Lq8sP1E37gfDKS
4J6RIV+t8qyvDQ/Bzr6NaVaInpSUT0yz5ZXAksSExmbeYuCZbhxLPO8H6mr8tewYGfYtg3DNKUp2
mGLRI9pg0hg3yLsvULZW0OQRR08OKJRqCAXDOLaI+aWUiiLBtspIkvgDLlN3HZRgiOyWQJURmhsq
hI/6KKcdTJZw7G2QEiGE4neFVyjb5USdL0a4+hw7aQ9lZ502nvB0Yx3rd7LcpwNHFZzzVuloaSOT
q2Zx/gGeJct+4Yi/HhZ2E6drksyk59H/OKY7mGBk5D10Xadtbw///CK6A++PXqO6KkA2m2V5eZlo
Nm75ukbOHqzub789fDql3p6ZJb4f4sobV/nos6+4deM629v/0daSwDrM89vsLDd/vEnRyNLfd4ni
bimgfjP8w7RtOb9Mr/1O+CBINBwFIHZxCMO0GB0dJZVKMTQ0xODgIKZVwdduAhCLxlQ/gGM5785t
3rtTT6SLfA4A4+5PKNJjYmKC2tpaAHRdR3qwMvXIGP6AmnQ6bSpSSgAGv3glbKTNnyP/xlOv9g4o
iUSSgOojl8uxsbGBpmm0trbS1NSEI5zS3qM95ubmHitSSgAA2tvbfY399eOhx5GPmxubq7UqTVFQ
eKCsllyfu90pus4qKFiW5WYymbyu61f/B/q4pKqmYKY6AAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/commentor/img/quote_left.png

iVBORw0KGgoAAAANSUhEUgAAABAAAAASBAMAAACgFUNZAAAAJFBMVEUAAADS0tLIyMjg4ODx8fHq
6urd3d3W1tb19fXj4+Pu7u7ExMTEKhjtAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ
cwAACxMAAAsTAQCanBgAAAAHdElNRQfXBQ4OMx12I1qXAAAAR0lEQVQI12NgwADSu3dDCOIYggxg
Qno3WCsDQzaIASKsQQwQEb07AEIw7TZgABPMuwUYwASH9k4GCLEIpBpEsFQzwAiQa1gAl+wjN8Dr
ggwAAAAASUVORK5CYII=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/3210e1be3e4059b93c4a88309e2183a2?s=48&d=identicon

[encoded data, 5624 characters]
RU5ErkJggg==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/b2f1343602276a53a7fe8f4ec1c2e07f?s=48&d=identicon

/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK
DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAMAAw
AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E
AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG
R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz
tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A
/U8ciuJ+KHxY0T4V6Sl3qspknl+WC0i5lmb0WuF+MH7YHwy+Di3trrHiO1bV4Pk/s6F903m/wrtr
5h/4W5ZeOdbXxh4gW7v7ydf9Ft7WBpYrNf7n+9XNXqeyibUqftZHqt98Zfid41lmltRZ+FtKf5oI
tjPdr/vP92udtn+Jli0U8XxH1O5lXduiu9vlP/47XlVl41uPGHjfXYNXufEOj6B8i6e+n6ZKzv8A
J8+7b/tVoJ/ZNhrPh3/hFNT8Z39/57Jff23BKluy7P8Aarz+atKPNzHfyU+bl5T3nwV+0b4r8IzR
W3xDs7a7sC2z+1tMR1VP95Wr6b0vUrXV7CC8s5luLaZdySIeGFfKFzbRXtq8E6q8TrtdH/irrv2R
fEF5bw+JvB92zNHo1yr2kj/xRS/N/WtsNiZVfdkY4mhGHvRPz5/4Kl/AG/8ACHxys/iBbWskuhav
JE11Mi/Kku/p/wB84r6t+Fv9mXngDQbm0itvKls4n+VV/uV9gfEH4deH/ih4dudE8RadDqOnzrtZ
JVzivhfxT8ENK/Zu8Q3uliXxHquiXsDS6Tb6f8/lMv3kZtny/wAFb4mj7ZEUK/sj1PdBAn3o0SgX
kD/dnj/76r5t8ADT/D9/aa58RdS1TWvCWotKi2/3/ssu/wCVflre8FeA7LXfjVpGoTWs+heFtdke
1s7TzfmtlVN3m/7z15scN/eO/wCs/wB095376s/A27V/j/cwRyfd0qXzUT+9vT71cX8VPDOn/Dbx
Jo+m+EfFt7q+sXU6+bplw6y28UH/AC1Ztv3Wq14L8YxfC3492F7qK+To+t2rW8t3/BFP8mzd/s7a
qlT9lW5ZE1antaPun2vwRXzz8ffjGZpLjwR4WK3Gu3Eey6uh9yzibhvm/vV3P7QPxPtPhX8O77Up
Lpbe9mxb2n95pW+Ufzr5x8B+H20jTPtV4zXOsX7faLy4f77StXfia3so+6cWGo+1kW9C8K2ei6Ha
af5SzJF8+9/4n/ieq/jPwNY+NbCK2u57uz8pvNilspfKlVv9+uioNeBzfaPb5TC8N+CdK8M+bLaQ
b7uX/W3c3zyy/wC81aGsadY6jZvBqcEVza/xJMvyVernPiFojeIfCGpafHH50s8e1YvNaLd/wJar
45jt7p//2Q==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/4c750582e23fcf068bdde51cc50416d1?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACTklEQVRoge2Zv04bQRCHf7McojCy
gAIjRUipjGhcIYq8AcIvEFEiQZH3iERDn+eweIVUNECHEJKpYhoSUBxFgtsU0aDT3c7OnX3/VvCV
d3vn+ea3vhvZdPR8YeHgkDaxa1Yzx49fLl3LcWK2sUKLuddLfFsYZI6N7RRf4xvneiPd6MzeI7ZO
t9oZxRPxnCjwA39xbn9WUlARxnaKKzyJ50UBoB0p+LoPKAJNp6B1H1AEgGZT0LoPANEX8xGjeII7
/HEu4BR2KftEysOJ2Z7pOq37G1jCPq0jGlAXg4UuLu2jKHJm77FjV2CIChfierTmQeo+F75D/+uJ
+IRPZN4UiuLqfrpwJkpfLIlwCnWQ7L5UOJMRYFwidTyRuPta4YwowCRF6hA4t79wSJtq4QxJs5A0
21RN0dlJfQ+0neAF1O+Aj7JG63m2a/AJBC8w1xaqgqKzU+sEin4X3vYWkuLuCrctuj4PcwkUjbuK
N3vwW4isbclvJwrSSzD4BIIXeJ+FmiZ4gaiMX4+bJPgEghd4n4WqXJ+H4LdQ7llobKf4bh/w2Xwo
5YOlp9+QeuhTB1u0nOs+6hYa2ylG8QRXeMIBlVO8jz51cBrfoo8OhqaniogCycIBYA2L+ERr5Vbr
YIuW0UcH1/idSyQjkC6c2aN1RDP8PzALQ9PDaXwLAKrIq4BUOFBf95lkCowkEvkKZ+rsPpNMIUla
JJL+AWfS3a9rdnKlkIRF1PdAE91nhqanrvEK1L3303AKPrwCTXaf0VIQBZruPqOlIAq0ofuML4V/
QScWLFAym2sAAAAASUVORK5CYII=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/18ed1c51c6ba202f761bf7e8f80fd38f?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAD90lEQVRogc2YT0gbQRTGvyRLsJJU
q8U/QW1sA+Yg1lIorRbanMyhVCmFCl5aKJQeSq+9tGihoDePHkRPgl6KeEpOCkUP0pZKFRJRTFES
lIpWTVGppgeddbK7MzuTXRO/07J5k/y+92bevqwjk8lkoFE6mUBsoEd7m6mypnvwP3kJh9MpvGY1
MoqNmajufnWoHV5/EN76oND3KEY3U5PjwiC5wANAbbgTAHQmvP4gFof74PE3wBfqMDWiM5BOJvAn
PicEkSs8kZEJb30QHn8D9hJxISO6XxbNvlV4otpwJypa2rLu+UId6jUxEh/qxe5KTLc+69dFs28X
PJHWBKkCLZYRB32Il0b6TQ3YDU9rNTKqbqvdlRgWh/uYsWRrqQbMOk/R1WpUP3yMK413zgXeSPGh
Xuwl4twY9RCz9n4hwIl8oQ5uFYBTA0Z7v5DgRHRHYkkBsrN/EcBpmVVBIdm/aOBEZlVwrEbGMsXV
dRcOnBavIzm+vn+um4V4rfLbhxe6exUtbXB7S7EWHRMC4sXf/jhsuIY1O+lGCdk+X9HSpvZuAKYm
ZOOJWLNTFqVV+MrWMGrantkWr5XR2KGSWoHfnJvB+nSECyUbL2pCsQM+8XkQOJ1IKlvDqGwNAzjb
HrLxIiaAk+3kevfmdbcM/NHBPhNmZ3kBLncRPHUBeOoCcLmLUFRZIxXvqQsIcZQEGnF0sA9FdjBz
e0vV6397OyoM0eHutnqteC5nfSYbb6bacCcU2d5PymzHVjGKL7/ZIsVj+JcyFxOHu9tMeNn4czfA
guLByMaLytLssBYdU9uhCIxsvIhyrgANBZwcQBEY2XgzWTYAUJ1EEEY2nifLBvI1C7Fk6QzkexYy
Us4GCjULaZXTFir0LGTJAA/GjgecrJyrkVGpBbKzkJXZyUzr0xG4uq57u48O9lESaBRaFB/8pJsg
d5YXABhXZ2dpXireF2oXhl+Ljp1sIfI3je4QPBV6FiLwAHUG7DDBg7FrFqLhAU0b3ZiJQuZM5HsW
0sIDBl0o10qc9yxkBA8w3gsBQP3TVyhruiv05YVQOpnA5vcv7CdxamoCmePjfDIJKZ1MYGmkH7GB
HlyqqmU/yPZ/p7A1P3thqpBOJpCaHFffortLylF+6z7/SZyamij4O1MtOFHVg0dwuhS+gUJWgQUO
nGUfEJiF8l0FHjgRyT4AOG90vUWx7xozmFSBSHZ2ktH6dASxgR4uPJ19AFBKG5pR2tCM7fgPpCbH
8Tf5S7eIroLsc0IGXmScprMPUFuIZ0R7Fuw2IQqvzX6WASKWEVIFIrtMiMID+uwDnENsZIQ+C4B1
EzLwRtkHBLoQbWTr56zu81xNyMADxtkHgP+M2z4SE4QrqwAAAABJRU5ErkJggg==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/d3dfb56e75c4dce2caa08fa41732afa4?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEQElEQVRogbVZMW/cNhh9lHiUjbqO
h6JBlmT01i4t4D+QTL7N/Qn5B81eIMiUsemSDt2LZChcGHCzF6nTofBUZ2uHBgFaNHV8dxZFiR3u
pJNEUuLHkx5wgPDEo95Hik9PFHt/eV+jhcnkLpQ6g9b/GbzW76DUqwYfRbcRRTetPGN7EMkUcXyn
fZkGivwNpPwRUXwHMn1mnBfJkZXnNvHJ1hdQV2dWvsjfQKlfAazrFskUEfvYyl8vvsFifo44/sRa
SCm8/O/O9n0AMMQKcc/KNwooRbqKAoAovgXOP6tGO4pug/NPl505eADI8/NGIQyiIdxHrI2PKOLX
HR0CYMvjZNrL16H1u9XvcnWLGndwJVYkR708p4oH1rNQFG8bo+zigeWMiGTa4Lf5PnJ1ASmPkeev
rWKBnpm4XnyvbUjTUytfIld/6Sw77+VnVw91lv3W2ZfWWqvsdz2fPSZpSdNTzZU6MxesuAuV/YJM
vjBG5YOdx8sDJsD0lnG+zTO2B8b2zHbtv7FdMHYDs6sHzvMyfW7w3GaVQtxDJl8YNlqHlCfQxVts
8y87+fbi7XMhFyaTA2h9GeZCbRTFP1DZzwBy5OoCMd/v5G2FdLmQC0EuZIOUJwDy1fFxL1+Hrwu5
QHIhG9ajvESev0auLsCij6x8iRAX6ioCWM4Ep4gHmqO85o7BoptW3ia8jpjvBxVSFsEW86eakm2K
4k+vC4TCtdjbKBc/F+KQnG3GBNW1eGi2GRu+rhUBm2UbYPXssOSWIdr3uRYHwrJNXUzdBGyZPaS9
r2tVDzIhDlHov42OXLxNjCt8UdpTXat6kIEJMDiyjY0HwKIbJsd2Ud52Ie2p2amaAd9s0zi3Grly
JLPsJdLr7+B6uvq0J7sQEJZt2qIY2+0UT23v60IcMDPM9kqoi7eLYr3iQ9qXLgRs2V0oNNtYLuUl
3re9twtRs83YoLoQm8++1pTs0c5HQ4Pzz0n7TnyoN6ahQM1mlY0O8cY0BKjZLGp3EPLGNHQWomSz
agZC35jGyEKUbMY3eWMaIwutz/lls4iaPRrcCFlofcIvm23kQmNkoaqtZzbb2IXGyEKUbGZ8H+jL
Hm5Rw2UhSjbb2IXWGCYLUbPZRi40BqjZjKXpqS4XVR2zqwfWzV3qvg0AUrZx7TvtfPjU4LLsJSKZ
PoOUP3WKqWO52B9hMX+CPP/DKvx68S3m86+g1KvG07OESKZO3helgy1faFr25l+Ix77NCPtOdfut
shB1Jkr4ZKdN951c4oHW9wHKTFBca5N9py7xRgH1IijC62i7VomQfac+8QDARXJkHXHGdjGZHBj8
Yv4kLDt5flNzuc1kcmDo6XQhmT638lQXqvqTJ5DyB/M6Dr4ucjnydr7ThbrWBCU7he47uW4bkgv1
uZOPC4V8U/MRD3i6kI33dSFqton5vrd4o4C6WBdPdSFqtuH6X2/xAPA/VS3XGrlC1dkAAAAASUVO
RK5CYII=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/e8b545ad2f7e3cf6233134d330dd03de?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADAklEQVRoge2aT2jTUBzHvwmpWO1a
1krNdIW5oVKqbhQFURmIp4ng2EVQD55lJ6/ehIEXb6IICh5ksEsZHnQHL/7Fw5gdUwrKSP0zW6Vz
DUrb2dp4GIlpl9e8X9oMHPlAIeT9+t7398L75Ut/FZ4qtzS1soTlUhatCG3dhd7gII70XrAcn1oY
R7labDmHmUvJB5b3n2Vvg6JHXC4pOLP/Gk4NXEFkW59l4HDfZYzGr0NdzXMLdApVj6RWvkJZeY3+
8DHEQkl8VueQzqVQq//GoDyKPd1HIQgiCiUFX9Q3ridA1SMBwHx+2hiIhZKIhZLQtDoEQTQmTudS
rovXoegRzVmbMQdv1O7rUPQYd+fz09C0uuWEG7n7Orx6JP2iVl+FhjqEfzkZ1P5UjOuphXHLSc8d
vEkS+DBzFeWayhzn1WOMHpLPQhSkdcEAMNQzZlyXq0XLD5VyTW05D68eEQC2b4lgb2SYuZjcFYcc
iJNFOoWiRwQasy2UFDxZvIGZ9xPI/8wYXzJn7TYUPZKebaGkIJ1LNVSbmQ8TkANxDPWMGVnnf2Xg
JlQ9wsuPd7VStWhbJuVAHHJXnFmRWNaABct67NtxEhQ9gqZpGmUBKxLREfh93ZhdmnQlHmBvkPUx
J5CIjjQYPDtR1Hg71hdZAs1iDuw8jcO7z3csngfHCTSLsRNFjefFUQIsMSxR1HgK5DNgJ8YsCgDK
1RVSPPVMSFRv8/bbI+7J/b4gSYzfF2RWG5Z3kqg+Rt8hfcdYLP54gefZOwA0UvxA+ITluO6dmnF0
BmaXJls+iWbx1HgKjqsQSxRLDDWel7beA82i7MRQ43lo+02snwm/L8glhhpvR9sJAGulcg0+MdT4
VnheyPNCnhci4rYXoiJRvUciyr+QEy9E9WbMJ8DyHm57IWpp9bwQrxjPCzH4772QQO2Rvfv+2HK8
Uz9s9YePez0yr0fWLl6PrJlN1SOjeicWLG9zf+4iSQ+5R8aC1fNy2lPzemSbtkfmNq73yFhPolN/
t3n16R6pR/YXnh5O/WPoofkAAAAASUVORK5CYII=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/900f6b38eb25cf0ea8ad22f1a1a14e89?s=48&d=identicon

[encoded data, 5776 characters]

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/adc202852230bc4fef8fe5896960b8c3?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADt0lEQVRogc1ZP0wTURj/3XFQSCvy
RwIMJCWhkpiGRGQwDgKLpLMbg3EiJgYW42BCJE4ObBgHXZRB48Dk0jAVFjZYxEFtYgNJLRbEtlct
vXLnYO64P+/d3TvuevwSkvbue7/3vu/1ve/H93HzhacKCJjvvo9E2zDpFRGLxWWUZdG1vV/8PG1A
WtxwTe4FfvFTHchKOXyrf/dlkiD5qQ4A7qJUaBSxWlpDRa4yT+4Hv2A3WI0S6bdaaBSxXt3ETm0X
CojHyBF+8Ns6APyPUqLnbAI/Fu4nP6coima1WlrDdu2TxaiTj2mfK3LVFfGQMIhUbBrJyKj2LAh+
ww7MRCeJnrNcj6SFB8lvcGBA6MN4e5IYpfMsPEh+yy00E50EB455gse9D2wXHxS/xQE1SkHBb35i
HvAaJbfwk594jQ4IfbjER4mHa6J9DAeNIvYbPwzPFw6WDN/7W67gWuQqKrJItDdDtc/82SK+p+UL
20xMwr6Ux6OeOcx1zWJIGCQu5F7nXTzpfYifjUNmexpoWdsxkZlxcHqIndouJjrGkIyMYvfkC9Ji
BnVFwkx0EuPtSfAcjz0pj8/1rwDAbE8CLWtbHFAzoZ22Wa9uahMnI6NIRkYhKzJ47mxD02LGsz0N
5qxtcIAlhet3QYV+MeZostrTQNoFwau20UfVDFI0We1pMO+C8PzoJZP2eP37PQCgrkjUcSdK3fLM
rf1K/zPtM0k7ZaUcFovL2nfeafFDwiDmumYtmfBO9DZauBbimFRsyvKM1R6g54uyLGp/1FvITtt0
85dxs+M6bSgSbcMYaY0jK+U82atwo52oecBO2+ijuSfl8er4HVZ+vTH8i6iPKqu9Hk5ZmzkPqNHc
k/JIixnD7fHi+C1GWuNIxaa0qB6dHjPZm+G0CxytrKI/THp8KH9E6bTieO2NtMaRaIujJFeY7FOx
acu7QqMI2mVD/QnRKgZ1RUJZrtguBgAqsoiaUme2J0HVZiQw14XC0kI0UM8ATXuEpYWYHQDI2gNo
rhZy0mae6kLN0EKB1YVUBKWFWLWZwKo9VASlhVi1mSEcbrSHiqC0EKs281QXapYWMi/ct7pQM7WQ
Cpo2sxxip10IWgvZ7QIJhuKuCjvtcavjRqBaKF3dIL6naTPmutDW320i0Xl7XlkpZxt93+pCNITV
U/PNgbB6ahYHwu55sfJ7qgvREEZPzXNdiIZm99S4hcKScpF6Xqz8ghvt0cyeFyu/p7qQiovQU/NU
F9Ij7J7aufNA2D01XxJZmD21f+oW3du7NEqTAAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/f93cdced9c9b863a7d9e4b9988886015?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADqklEQVRogc1ZMU9TURQ+fb0xhg4k
zSOtBHUxcYIF/BGMzsXJtEmnAtGtxJJ0147KqKwkLiSOMkkaB2VgM7EyFHwBB2QwL8UB7/Pe+865
99y2r/BNcDk95zucc8/7Xk/u692lSzAQVisgSiH02x3zT1BuNtBzH4TVCtzZWE2dn+3swtHqC9Se
4iNczs0PzdRW0HMurOTXN532Ztx8fXq2RRkXFhcgKEzB+d5+clZaq6HnYyE/GFjtsbgBZny2sws/
37wDgKv/eLnZSAWlzsNqBT0HABClcCjyNj75+vRsyzQ+Wt+E84+fIChMQWFxQcu8tFYj/yPSD1Wh
8739xKcPeRuf/Maz5y3TWDpUA8oPyeBmErcfPnCWW/X55/sRm7yNj1DLGkenKYf9doe8yBIiLAKG
mdoKetnj4+jqByMWAEC0tQ3R1jbqT/vsv7j5J19+tLDSUKDaQC2xipOXW9rvrjazAatOvj4928JK
w0nCbAMzOTMBzlTxIQ+DAeTUB1m52Uja43BpGeKTCPcmEQRoG6h+Du49QslLUBfZxHyvi9oHqlG/
3UnGFQtEUNPPqORt9tqDDOB/G1x8PoDB7wuWYwzSjzmdhiV/6/4cap87ef32clRtkzVsFQyoJ+pN
gav9AgBaFlw3OHcnUaOUyrRJWTkZTFATzNeeo500OW0m4ZKyWUPGk7ywi596H5DG8XGkkR/1PWBY
yHgiLKJTKMDmvgiLaPlMDTQpxMcRqtMAAISrTNdFWsLVxkI9NMtkJjdpmOSxNk7uQL/dQbWNLYnD
pWU0cBydouc+9tQIFWFR46lfYou2AUgn4RR7JlGmvY92Sk0hCpOaPr7CD03A5iRriFKYSHAOAvPA
93ubccNX1mgJjEu3jwqfJLQW8vneBiBbLcTVZloCHO0xSXC0WeoSu7THpOHSZqlLLI0p7ZE1fLWZ
97fTWcNXm2kJcLTHJOCjzZIEuNpDRZZaiKvNhI28awplpYUSMLSZuCkPL1/IJHLUjuzX+w9jUY9x
dDqWO0Tt5thaiIKrguP6yobyw9JCFLjtl2US5I6MmiQqfLTTMDs1Fd47Ms7l5ey8RtmpUbHYOzIO
XDsvNQE1Ce5OzZVE4NqRhdUKzPe6MN/rwtwr/IXGpp18tU252UjiYa3ltSNDW+tSn7rDrlapndq3
x0/JdZfXjkwt8SibdDUJ7k7Nhw+5I5PgknfZA4DXTo3LR1sxDbNJZ5MHSLUfFlfdanL4eL+RZaWd
KLnh4vMXQ+HX6F5xhcIAAAAASUVORK5CYII=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/b7be0fed2434a667c616869f64fb8636?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC40lEQVRoge1ZwW4SURQ9UEh/YBgW
kJi2MX5Bo+nCvYmC/AKEfoALW9LupFJN/AEI/QViP8FE02iMa6PUmEwTO+UDrCTFhT4YZt59cy8M
zDThrMidC3POmztnDvNSL15+Hx02tuBHs9WHrk5he+cM7tUfdv/Pbw/ZvQBw5+67QK1SspHunFyg
2eoHDlL1pKBSsvHm9T2kAZpsUkUo8mtrqX8CgNsjwksewEQAkHwRfvIAkPE3dU4utF9WdcmNHSV0
5AEg9evy90j3hdarH2jsbQTqj59+0Z7g04cHIkKPSp8xGAwDdZ2TVUo2eqeutp7J2+vaE/ROXVhW
NrDiEqs0YTAYsn5LrbxfwJQLUYh79qmx0boQhbhEcMgDCBcALF8ElzygcSEKlDtFDQl5AEiNRiOt
C0myTb1agG2v4+j4fCH9AJ2d2FfARMbrVGGkpP1hYN0DXDK7tSIO9jcj6+dgZgFeMr23l2h3HSMp
aT8XM42Qn8yz519xc4Mxod1aEcBkPKT9CxVgIqMIeEm57rWoXyois71zpj1AZRt16QHgajAck1Fw
3evx55yVnTrG6afchspOGWm2Ma1aFKNVKee156Wy00z3QBSjYuqXYObngI6UiYy0n4u5ngNHx+dT
90QYGWk/B3M/idXK5qwsi4y0PwxzCwAmTsIlI+03YZWFVllolYUiJB/FA04sQJo96p4TLSILSbMZ
eQWo7LHoLCS11lufheb6U3+wvxmYXRMZab8X1KivslDcWUg7Qu2ug/KTHPwvfttdh/Rq6Z4XNaL1
akH7Eu3j+/sBPoBmhCiSJvJR4rCxhXq1wO6fEhA3eQWJiLGApJBX4IpIA8kjr8ARkaFIdrrO0t5I
mxC2J6fdI+t0HVTKeVi+LANA6wQAnZ0oUNmm2eprF47aJwvskbX/r3y9ViTJ6sDd8wqDWnG/iMbe
BiwrG6izXGjZoGZfVw91objAFWF0objBEUG6UFJAuZCq/wVtcuRVVkMb3wAAAABJRU5ErkJggg==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/68f75482b8a9df3c3206edba8ab52123?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAFuUlEQVRogc1aXUxURxg9LNikXZsG
qwR/KJF2RbMJEB+gjdmozRpY2gdSoA/K+oMNlFhMBA2UaNK0FUJLTdTYUKJN7NpqIUTbqtRSinFb
Ayaygpso20oqSkBaatKoD5Zl+oBze39m7swsaj1v994z955vvtnvO8wQd3j3PtIf7MVA8AJk0Hkn
IsWjqPaVWN6dlLIAhwc6kTBrloW/ZvYSqfe6stzI9RfC0R/sxScdR9DUEUCGJ1tJnAzW11Va7q3d
8TZTvAxcWW6839qMT38+jqHwIBwDwQvoD/Yi05PzSALJ9OQY3peUsgC5/sIZCX8l/1XcGh7BmUA7
HADwRf1+wwcfdiD6LKjOvlk4xVcfNyM6OQl4nS7idbrIpXM9hIVL53pIVd46QnmxoipvHVm7dCX5
5/59Wx79TsWKAnL+VBeTM3b9Jsl9bhnxOl1EC6Aqb53ti2kgseLSuR5y8tBRIc9OOMWed3Zqgcan
PfX8ewBwa3gEmZ5sJKcuYqYyOXUR4hPicWDHh0hOXcjlRUJh9Ad7sdidDmC6CiWnLkSmJwcvZSxD
nMNhu2Tu3bmL3BL+b+TW8AiaKt4FmZqavkEjEWWh8+gJsubZdAOXtex2FpWRTctzSXRykhBChHwz
vE4Xad17UGr2vU4XMUwHrUhm/HjsG3xUVvNf1A+4231+VPtKtDGRUBg9Hd24MTiEs+2nDe9g8Xlo
qWtE275DzNk/E2g33LPkU1+ReOL1uD3+JyZGxzEVjSKgG3uk8QCmolFbvmoQWuXRIcE8UN8X7MSn
pKehpGYLVhXmwxEfr80+hTkLZr4MWuoaAQDFWzczZ58ZADCdBd+GMaZ4npCAKXPAdBZiEc4K4uav
v1tmHwDiCCFE5YUsr1JUWYo58+dpHxPBjp/hyVbyTswMqKCoshTlDbXatSgIEX99XSW2+/yGe3bd
274oC2AWU7x1M8rqa2bEV/ZOwsLMqNNep4s01zZwOa17DxpqtQqfkOmuTa9F3TumAOzEsESp8Clk
vZNyADJi9KJU+RSy3skh6oyRUBg/tX6nXc+ZP4+/Hk1ITJqrzKd6Mj058G0oFg+KxdvYeRUKvXdS
5at4J4Mb/eHL4+gP9mpuMxIKo6WuEX9P3EbKkjQsdqcjUL8fF7t+wdOzn4E7ZzlzUswdXJXP08OC
pYzKehue4eLZD1U+Sw8LWiNT9TZUFDBdz2XEqPBlLUiCqrfhiUpMmmsrXpav6p0SPr/4PfPBB22f
Ga4joTAC9ftxY3DIwv1r9A8AEIqX4ScmzUVDaTUaSqu1eywvRPUIvRAl6peTHo/bC5n1cAMQCWeJ
oWubF4QMn3oh6kipF+Lp4Zq5idFxTIyOS4vXi2IZOhU+ax+Jq0fUKM6f6iIVKwqkjRnFo/JCZj3S
XogOfFK8ENUjDGCw7zLp+vpb5kdE6Dx6QpmvB7UvdhAG8Li9kCpsAxjsu6ytNZoFem0nymzMVPiq
sP2T8knwQiJwA5D1QnpRMl5IhS8DbiP7v7yQKuK8TpdlX8iV5cbqN19ndlTZMzLaOe/duSu1z2PX
+YsqSzExNo7utpOWZ8wM+OsqtdMQ2c0qnpCmjoCSt2GJL2+oxfDVazjbftqSMUsAriy3Jl7kbeyE
U6h6G5Z4AHhh6YtYVZhvyYLlR+w3nSqKNqso7LyTkrdhiKcoqdliPSDR1+qKFQXcemv2KjyYvQqF
rLcReafdG7cZuIYARGdTKraACqOQ9TYi73T9ym+GJgmZ2acDd2/cJhRu9k56yHibnUVlZLDvsi1H
nwWIZp8Kl231Zu+kCqrHLhB9FhyAsfJQDF+9hvpNVXgr+zV0t52Uajh2Z2Sq6OnoxhbPG9hVXI5I
KGx4RisS8KAK6StPLMIpZM7IVMELhFYkB539mQgH5LzTwwyEZiHu2J4Wcm3gCrPLscCzEruKyy1N
KSU9DbxtGx5k/93mZd9qrCzMx7+g6psiigPBiQAAAABJRU5ErkJggg==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/abc5c275005235311b78a3e8c4906ff8?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACO0lEQVRoge2ZvU7DMBSFj6NMKVLV
p+Bn68/Yii5ISO0OA30BBhZeAwYYeAE68ABFQmKhasdSNsRbVJXarGFADo0dx775cTrk2+Icwbm5
sXOrwy7uHgIQeLm9ocjJXN4/SmuDdhONgxrG07l0zy3UTQ4M2k2M+r3wWizCsW2Igmh+2Gnh6rQb
0Ti7YvFm0roNGgc1aa3ueWCMhdcuoG6Trn1Fw//fsNMCAMy+f/D09o4g+N+2blybAGC12cau24YX
Ufc8yTwAuKo2xaFaL5rVZgsAknkAcHVtEtd7J0c2PIfoXmN3d1Fsk659RaN6vXeLCL8D4+kcjDHJ
pGrdBkmnEPcT+Q6oTJZhHvh7eJPFMryOPYXKMEZB9xqzIIfHO1kspWM3T30SmTswWSwjm0pniqrX
kWkWEs28fn7h+WOWm96E1AWIZnSmqHpTUhWgMqMyRdVTIO8BnZldUwCUP0RUeuqeIBfA5xIT1r5P
+ttUPZCiAP6E+BNT0T0+xPX5GRzHIemppNoDo34Pg3ZTa4abp+oppD6FVKZUZqh6UzJ9B0RTOjNU
vQmZv8R8T6x938gMVa8jl2GOj72mZqj6JKpZqJqFqlmISDUL5agHqlko2Uw1CxlQzUJlz0IsLiNL
yqTKyMiSkDpQdqhBJdI/k0xq34gUYJJJ2cI0s4u8QiaZlA0omZ20B/Y11FBldrHHaFImVTTUzG7v
TiFqZhcpwCSTsgEls4sUYJJJ2cI0s3PEm7pMyiYmmd3enUJUfgGhUg9999Rg+QAAAABJRU5ErkJg
gg==

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/8905a0600815477ecfd8a1bca19cdb80?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEyElEQVRogb1ZTUxcVRT+GKaLKQwQ
dcgQM0ZHxNAaOk2qRtJp05SYAGmiNJAuTIq7LkqISZuWdq1jl6gbSTRdKiaYGNPOYroZGtTEOK/E
H9oItTLIKANpmdhZta8Let/cd9+9797zYPhWvMOZN985597vfu9Ng23bNggYyE7hZmnJFUs0tSHR
3Ia5f//yxH8bvmh030K5iIyVw3TfKIUOQqRsABOpPk/sXM8xXD74tjSuQ6FcxEjuKo5+/xmyxQUq
HYSpH0jHkzgcTzpTSDS14b1XDmFPqFEa9yOesXKBSPNwFdByVT7u2yOX0LG3xbmeSPVhMDsFYKvL
e0KNvnEZ8cEX9qFUrfiSM+FDngBQm8K9yoary6o4T5x1fLJ3CKe73sD15T+QsXKw1leCUAlWALDV
7T8frHm6LMZ1S6U/0Y3+RLdTCBWBC0jHk8hYOYz/8K0rnmhqg3XyvHNdqla0SwUA4pEo4pEomQdZ
hXioFImfSn+iG/kTY/j6+Gmknn3ek7/rKsRDpUgyiEvFWl/B+NzMtlWogT/IVh9uSpPaI81obJAP
a7a05CjP5Fvv4v1X3zT6YtXm3Rz92PnbhE8D9SSWYSA7hXuVDVgnz0ul0w9iIXwBRrB3APnVRfvL
hR+3dY9rf/9up7/7hPy5MNXbLP9/39OEs/vT6IhElQePKv/yz9do3ebA5DnMn54M53qOobM1Jo2L
snl2fxofvT7oXOtIUfNVxNnmDzElYWBKoor7kRl77Qg+PDRgTF6XLxKXyW0IcOu56G1kcRkZHSlq
vkh8fuMf6YEYBujeRkWGJwXUlgc1nxE38U7OQWbqbXRkRFKr1Qopn+qdnAJMvU0Hwa/EiN4mFomS
vZPLSqgUiZ8KGzPrmApfLRZwZnYaj2GT8u+PZjyWg4c4IVcBpt5GV4RInpoPmHsnj8HxUx6xiE9/
zRuRCZLPF5I/MQYA0qXlKYBNQfdMKyOlI0PNlxUi2nKpnVYpkooUsLUBTchQ80WISys0kJ3CrOCF
0vGksS0GtqRyrVoxJkPNL5SL+GbJcsXYRMI3n/r5w/EkJlJ9SHP2wQS74YUyVg5LlXUMvdTjeS5x
rlghsomYkqmHFyqUi8gWF3DnwRpm7s57/u/ZxP9VKyg93NQWslteiH9TceXWDTyyH8sL6GqN4Ysj
p/DTOx9gOJnynYiJt+FJUfMZWPcZZFMId7XGcOHAcen6AmpLi+2RenshHrL3RFdu3XBxDbdHoojv
bVE+tDOwpVVvL8RQKBdxtKMTk71DrhxrfQUzd+cxnEwBgF6FxAmxx8Z6eaFTLx8EUFOeM/t6Xc0d
n5txKZJzkImF+C2tenshfu3z3ZbFlSrENrNqadXTC6mURxZ3JqDbzKoigFpnTbyQLl+lPJ0tz0nj
WhUyLWKnvJBKeV5sfkYaJ7/Y6r/+uZ1fXSS/gOLxy9qyPb1Y2NY9GMgtD2I5RGSsnPRUDYLAr9eD
FqLzNlQE+o2MB++dTNysqCR+e8+ET+AJULwTg4m3oYL8AwfVO/ETMfE2VJALoHonBlNvQwW5AKp3
YjD1NnUvQFWI39KieJttFXB75JI0qT3SrLwB751UHVQpj06RTPi4ClBJpQymFoTqbfgpmPDZcRUS
QfU21GX0BPRyhJ/JvhMyAAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/cbf415d23b49283a9dbd557ce8464a56?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADA0lEQVRogcVZMYsTQRR+l1sEjZyI
h41YCNoEbISgHFikuzuU61PYBESutEtn5cKBxVVWWxp/gEVSGasrkl9x5R3BQGQRxNzaOMvs7Hsz
783O5L5y9svM+7LvzX4zb6soigIMzLIx/Ei/msPQOdqDV5/e1cZDYpqOoDfss/ktc8AW/OHJ22bR
MTDPJjBNR2x+RYAr+NZ2TW8USERUIsovlzXCpoNXoETMsnFlPNEfqtybZxMAuL7gFVQcKi4zQ3rD
flWATs4Xq2sNXkGJaN+/WwlejdcEKDIAiII/efymNtY52oP27k65mI7js1O4/X8dHd3Bfo2fL1bo
mvNsUheAvSYfmOmHicDgSmNznooAM3gzB32DN4PiijDTGJunFEBtofliBVfrK3Y6UYXvIwJb15yn
ZQteugu5+L1hH7qDfdZcAHQN6vNsHz58/iFE8MvzCxb/0cun8Cf/DQ+ePYEb7ZusuW3zbGFeSIpZ
Nob8csmuFSnfBnQblUC6a4Xa5RQafaWwXcvmYaR8DrwFUIVv8zASPhdeAqhgqKCkfAnENeAKRg8K
oO5hXHxpTZACbN6GC8rD2PjTdCTyTuw3IPU2sfkKrBrAvI3tixqbLxJg8zbYIrH5IgFSbxObj6Ig
8O3952L9d009ruD7xy/R+b8ufqLPyCJu7+6wjZz0BOfLx0AK4O7Lsb2Q4ndev0CfW/+C0N6mKR+D
8x2G8jah+CZYSdjU24Tm62B/iX29TSy+Aing+OyUWGjMntzHC3UHB2jB3rp3B/0NKQAzTgD824Wm
XogLr/NAbC8kgfeJLLYX4qLRmTi2F+Kg8a2E9DY79O13Iu1JUUFN05HI23QHB2y+7eawFeJqA4B/
MJd8pGz8Mv0ki7sQwttw+HrtlO+Q25Nyoam30cHp2VWKmNOT4sA1Dxecnl1tF3L1pKQipN7GhGvX
SqQ9KUoA5Z0AQORtMNhOcIm0J0WB8k5N4UrjRB/k9KQ2CU7PrqwBbk9qU+D27CrRhuptNYWkZ8f2
QiHaQRxIG47/ABZySudPJGsvAAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.gravatar.com/avatar/0b6852d76285ea13b4713f274b97d9fd?s=48&d=identicon

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEuUlEQVRoge2Zy28bRRzHv15Hdh5+
KLZju3ZkK06JYydpHSWtBKkrILk0CdAHQuodIcQfAIJTTkhckDghcUFcECrlwKOFQykoASkF2kAS
2lK7aZvUrfKoNkpMmhVRwyHMej27szPj9oLkOSXr7858vvPzznw963jz7S93IdDiMT+CwRbMzt0z
fZY/0gmf141z314V6UpaH4/5EQp58MdsyfRZg8jNI8NpbG//gzNnZyxhxkd79P95ULJ6ABgZTiMU
bMHsXAm71HQzDRDwbCaKKzNLOHN2xnQzDXM0v98WSlZPOLKZKADgQF/cVAWTASM4AGF4HpSsnrSR
4XTl7+e7TFXQDdDgtcCzoGT1RiYjTzjsNVWhwQr8ceBpqI1NTUpvNGGcff0aVQXF52uEz9doEpbL
mgkeAHxeNxeGNI/HLa0nzTj7V2aWMDlVBFCpAmnOdOaFiV9+vYNSaR2hkEc3k0wG4HY5USiuVg1S
KK7C7XIimQzYwpAK3ijI6Uk7efwg2to8lv1Ewl5MX7q9Z2Aof3oCANbW/gZtpFYT9NdPVh+P+TE+
1svsJ5vdh5XVMpaXNysGSKON9PXGpEywnh0Z/cnjB7F0V7Xt5/ChJKYv3TYbsDIyMJBAW6iFa4IF
L6OPx/yIxfzcfgKtzWhqcsEhGiUy3RG4XA2W2/nYsSw8HrftoKL6A30xzM3fE+rn0GDC2oBdVnnv
3RdN1yanisLLJU//1jtfma7Z8Zh2YtmsMjlVrNLwTMjqeTyKnfhofj/GjmWFYaZ+uolvzv/5xPQi
PApLzDNBw/CgZPWiPIqdmHUTC4YFJauX4XF8fW5+V+bhA8QyPAGR/aED8J8LI48im1U2NjVhfbms
SetleZzh6MiETFZ54/U8NG0Hi4uqrb4/145XXu5Huisspf/wo5+lspMC7H0lyNfDTkw2l/HRHr3c
djCK4qhJL8Ojr0Ksm1jxgAVFw9SqF+VR7G7iZRsaigVTq16Ex7QTkxVDNNuQFaNc1mxhatXzeCxP
JcjKIRKogMqvNB5MrXo7nnoWqmehehaqZyF2q2chAZ56FuLB1KqvZ6H/SxZyfPzJ9O6168v2lP+1
vt59mJu/b7r+JN+RZboj0LQdLNx6INSXomk7tnHBOGhTk8vy+vhoDzd2iOqvXV9GpjuC1159BqmO
ILc/Z7b3pYnnnn0K0YjXdPZpHHTo6Q58/sXvVSWkd0zWabasvlBcRTTixakTOaQ6glDVLajrD60N
DOVPT6jqFk6dyFl2RgY9/91V3C2tM2F4ULJ6chDcn2vH4ECCaWTPwPpDpDqC6M+1V3VGBlXVrarZ
52UVGkpWT5tIJgMItDZbGtGP11V1C4MDCb2zaNSnD2qcfdF3ZFb9iOh5R/i0EX0ZXbj1ADcX1tCZ
Cukv3Iix3y4v6v/X+s7rcfRWecrrccPrbazeBy58/xc6U6Eq4cUfC3j0qPLkkqXPaNKq0ZuOqJ5u
dMVXVjZx4eIN/U1llQFjFQDz7IuaoOFl9VbwNDhppp3YWAV69kVMsGBk9QSeBc40QKoQaG22nH07
KF52EtXnj3Ti8GACn352mQnONADsVSEU8jBn3wpKNDvx9OmuMDY2tvH+Bz8IHev8C5sgsQgCq+Vx
AAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/img/down.png

[encoded data, 5776 characters]
Pz4/9kvW69OGAAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.pledgie.com/campaigns/5962.png?skin_name=chrome

[encoded data, 11932 characters]
QmCC

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/img/googlegroups.gif

R0lGODlhjQAeAPcAAHonIQRkBHtqMxQydz5Pd5wGAbwLA5gjFZgyJbEsILg/M9QnEZR2Dt9FL51M
R4ZfWrtZTqRkXpVtaKp1b9NYRtNiVetrV8d1a+R6ayeuLj67Qk2bUUO9SWeAZ3Wod0/FVq2GA7yS
BaKKONeoAd62C8usN9++MvrWMYOFfqycZbWmety/TdaCePiId8exZ+vPTP/iUfDXc/3qcgkzkhg/
lAU2pgkuuwY8thE1vBc6vxs9vytKjxhHrihTskRdklppiHJ5i01ts2F7txs9wB9BwRJKxSRFwytK
xDFPxitcwzVSxzhcxzZUyDlWyTxZyTZp1UBdx0BcykZiy0plzE5qzVFrzlVzz1x0z0183lZw0Fp0
0Vp50WB30mR802h+03uCmG+CrXaNv2WGzXiTz2SB02qD1G2J1mmO3XGG1XOJ1niM13uO2H6R2Xua
3FiJ6maV73We8ImXiZCYj4+NkZeYlruMh6qVlKCdnI+ZsaKho6Omr6uqr7ynpa+vs7e3uPKXicm7
jMijn/epncetq/m1q5LZluHPh/nwmMvAtPHBuvnvrYOV2oaa3Iyd3Y+g3pWn0pKi37++wrS8z4Gh
5oik4JWl4Jmm4Jqq4py17Iyv85+996Gv46Wy5Km25a2656i+7bS/6bTA2rbB6rvF67/I7LfM9sbG
xtDLx9rSy8XJ1M7P08zT2d/Z0dXW2fDLxf7JwP3SzOHc2v/d2Mfhyffuzufj3/nm38PM7cvN7s3T
79jc4svT8MPW+tTX8dTb89ne8+Df4eHf9Nzi9Nrk+OXj5Onm5ePq5eHk7enl6uPt7Ozq6vvu6uH3
4Of45/r25v/+4eLl9ejl9uXp9eTt+uvt+fDv8PPv+e3y9+/98O/z/vTy8/j29f359fT1+vv2+/b5
/f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAACNAB4A
AAj+AMEJHPiNFyZKbShp8nVtoMOHECNKnAiOWaFCHDYYo8ixo8ePICF++4QliBAwYIL0KPJkkq+Q
MCU2m/UhQAdl3GLq3MkT3LQzPfBEOsWKFSo/YG7coJGqp85qNTsgc0q1asRpbnbcQQRMG7ec22rp
mUEgUk6rHrHVRKENrVun2eDQQGGqWkRdX/K08vaWo9oAbPsKhlkqCQE/bSN+IxaL78OvHb+eDfk3
zrbHkwdrFvgNzgwgsWAuE4QBg4U/riI+MxTjxQsZtCL6KlWKV6mDocBh4xDA8kBbf0y3SCRQWeKH
viwtanTrm6hL38BR6/ZNGDWH1H4J6+bw2/Xu373+g+sm7Nd37L/MCxyGZcCd4x5hUbgQaNCFBQtY
XB6oyIQLRIi4MAIJhjiUzSRjUCLGE0kkAUYk3jTDWxyOvUIBC4PUkcACGHjTii4PfVOJEVJ4YcUR
S0jBSHRcMKKGEZUIZM0iRxhhRBSeDORLE9I4tIsTDQnThCVV1HhEI451A4kSNiIBSUFPDOBHZhzJ
0kAEqeiSTDKBGGDABfyRkEKWxPgCyAghAMIZHEEQpYoQN+zgRy0RatAbX1ZOsAow0yCyQAGBgOPY
QKMY4YljuBDRyEBWDLEIQ4J6cQQn0PTCxhCdCNSLEdA4dIsR1/1iwxGQ9BLMJkYsItAmk0LzSyX+
OSyiSRIDRAISNy0kcAcw0YHzzQUGFIAIOM+cAIIex5x1zQojgBBaYV+wchkwT9QgRE7N2EkhOC0g
oEcyAiWSAAAS7OdQF2g81MgUvVJxhUOiDJGLQ4soYQ04m3Y60C1H3PtLDqA45IkRv4DDRboDLWIE
HEVICZJ8APjRq0Cw/BnBN4eQIICtDilCAggqfJMJD1+YO0mcwFSkrTe2NICAKdwQgkEFE8zhhzIQ
TQHJQ50o4RgViw6URhcPQXPEKPhy6mm/4Pyi9EDdOMEJOI0c8ZJA0txCSREz4AESIQ0AYMpD21hg
AADTyDCCAK085IwJIYhwzBs1fDEZLw2jonL+b9+84rIdLNBnyiq6VDPxQF2U8RAj7ApEhSMO6fyQ
N1JckrS+AvHrrxHCPGTFotRoYcQWkMwLTilF1PCDuQN5w0smmvCiCSXTCLIAABw7lCsAq8AwAgOq
PHZCCGy7cYMPdgnECw0E6M2MtuD4fQAfsajSCjGsP0SKEZ30iosRmwz0OEFSWJKz+fkuvXnnDm3B
iEDejMKGFEZU4cs0SSzV1EPDPBLGGG4oAvJsVwA+QOQPZ9NFDEjAgNwJhBswAIEAkPGJGtTgEQM5
ww7oUIu9xQEcFStAHa6hjUFNRA02KJEVjKCGQY1vIFlgw0Os4YRMpW9fTHMa++A3hRhxB37+vagC
FMDRBqUEAT6+UgYrUoGFGfzAGIn40wQOx60DPGAYimiWCoTHABQggxthmMEM2sCLNgThDqfgy/Pu
tIwGGAABDenIL8pnCTYw5yEvFEgllPBDgWzvJb4wQo8G0gkj+IsIV8PaEUjRDS0gbSC5wAE4jpG/
G4TBhILixjXo9gOcUMAABwjNQLgRNjpcwxkliBvOBvIMjeXBLsvYAxDA4AYe5AEV+2EGb+TAFxZ4
6QJUisgoMLUdTIIjj+Awmhp+CA0nkEEg0DCC5TJ3BB34ywZUYN830hAF6lTBCYMEBySOIJBU9EAp
YhiGSNzgRJyhIgEFgMAyHoiBA6DgFDn+QUUIQOCCszzjBQyYQ/AEso1ihKJaYJgMMzJwJ3BUQwFe
qkAilmGLRKQGIt2Ygg1spIQppGEUvZJC0AYiCiM4IQ1lOMIUojGQRgyBC2rQQhO8AKqmEaEKSPAC
N49wC4H8wglHKIMaijQ1gZjCBzOoQQ/aUIppZOMaw8AEDwbwg2IIBBEOKIACWPCHCkDgDpFYJTgQ
IQIQlIA1K0gBWOHzjWE84QY8GEOvChGAunrALq3IagEMkAAFXIAVmPzGIhz5i1t4AhJdGMLOwNEJ
XEBEGJAoQxo60UdfiWINXoDEL6IBnaZxjhRsKAMkdigdTpihDI3oxUOIMQcf0GAGPOj+QRBMIoQv
zGEPq/xGK+wggQjUYRCmUEXyOKMKOqQgBYBARHCPU0YxiCEIO7hBDcTAF2X44Q558INVwaELOzzg
u3YwBTAwuYsjhLOlSqAiVXTIE27UwhR70IMe+iAJVcQiFsBQhgmvAQxd6AIYxTCmQ1tBOF0gwzHZ
yEQSwuAHU5yiD0GwIAYdigxkFOM412iFKqxHDGPuAlPf6JU3pLEFLvSFvVQ5C2Q4EsyImPAbmugB
EE4RC+NwgxVCqIEPkAiTbzTiRlsoQxeKlAXSWkUYTDDyZnoyjTfQ4A7bHYguikAAUfbEF5xgxBoW
YYlbCJgq4lmyVdw6gz1AJBs9+IFglcXM5jZ7ZBrVCsI0ukOJHeQhym7Os54fIgka1CAJlKjNJ84Q
hD2kcc+IRjQ3IvGDHfQgCSbBwylQweNEW1rMsYhEH/rgB6KM99KgzjM3tFGNapQw1KhOtapXzepW
cyQgADs=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/img/github.png

[encoded data, 4180 characters]
YII=

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://phpjs.org/img/phpjs_powered.gif

R0lGODlhUAAPAMIAAP8AAImOeXd7tImOef////////8AAAAAACH5BAEAAAAALAAAAABQAA8AAAOX
GLrc/jDKSRe4OOvNu/9gqABCaZ5oegJD675wLM80DIxqrgts7f9A1y1A2hlNvaByKcSVCFAT4fmM
ppKuQragZXoHw6JgOqaWz+RVrNv9fsNS6xhKpquwrTbX7YWbpWZpV1l5MG18QH5ngGg6WHt5kIhB
ikc7eJOIlZY5mJlum5yDn5lhAKeoqaqrrK2ur7CwFbO0tbYOCQA7

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: text/css;
	charset="ks_c_5601-1987"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://phpjs.org/ccss/3ea69d7506dd62394b0375d028f916d2_1272025843.css

TD.actions {
	TEXT-ALIGN: center; WHITE-SPACE: nowrap
}
TD.actions A {
	MARGIN: 0px 6px
}
.cake-sql-log TABLE {
	BACKGROUND: #f4f4f4
}
.cake-sql-log TD {
	TEXT-ALIGN: left; PADDING-BOTTOM: 4px; PADDING-LEFT: 8px; =
PADDING-RIGHT: 8px; PADDING-TOP: 4px
}
DIV.paging {
	MARGIN-BOTTOM: 2em; BACKGROUND: #fff; COLOR: #ccc
}
DIV.paging DIV.disabled {
	DISPLAY: inline; COLOR: #ddd
}
DIV.paging SPAN.current {
	COLOR: #000
}
FIELDSET {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 16px; MARGIN-TOP: 30px; PADDING-LEFT: 20px; =
PADDING-RIGHT: 20px; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px =
solid; PADDING-TOP: 16px
}
FIELDSET LEGEND {
	BACKGROUND: #fff; COLOR: #e32; FONT-SIZE: 160%; FONT-WEIGHT: 700
}
FIELDSET FIELDSET {
	PADDING-BOTTOM: 16px; MARGIN-TOP: 0px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; MARGIN-BOTTOM: 20px; PADDING-TOP: 16px
}
FIELDSET FIELDSET LEGEND {
	FONT-SIZE: 120%; FONT-WEIGHT: 400
}
FIELDSET FIELDSET DIV {
	MARGIN: 0px 20px; CLEAR: left
}
FORM DIV {
	PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
MARGIN-BOTTOM: 1em; CLEAR: both; VERTICAL-ALIGN: text-top; PADDING-TOP: =
0.5em
}
FORM DIV.input {
	COLOR: #444
}
FORM DIV.required {
	COLOR: #333; FONT-WEIGHT: 700
}
FORM DIV.submit {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN-TOP: 10px; MARGIN-LEFT: =
140px; CLEAR: both; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
LABEL {
	PADDING-RIGHT: 20px; DISPLAY: block; FONT-SIZE: 110%
}
INPUT {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; WIDTH: 100%; PADDING-RIGHT: =
2px; FONT-FAMILY: "frutiger linotype", "lucida grande", verdana, =
sans-serif; CLEAR: both; FONT-SIZE: 140%; PADDING-TOP: 2px
}
TEXTAREA {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; WIDTH: 100%; PADDING-RIGHT: =
2px; FONT-FAMILY: "frutiger linotype", "lucida grande", verdana, =
sans-serif; CLEAR: both; FONT-SIZE: 140%; PADDING-TOP: 2px
}
SELECT {
	CLEAR: both; FONT-SIZE: 120%; VERTICAL-ALIGN: text-bottom
}
SELECT[multiple=3Dmultiple] {
	WIDTH: 100%
}
OPTION {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; FONT-SIZE: =
120%; PADDING-TOP: 0px
}
INPUT[type=3Dcheckbox] {
	MARGIN: 0px 6px 7px 2px; WIDTH: auto; FLOAT: left; CLEAR: left
}
INPUT[type=3Dradio] {
	MARGIN: 0px 3px 7px 0px; WIDTH: auto; FLOAT: left
}
DIV.radio LABEL {
	MARGIN: 0px 0px 6px 20px
}
INPUT[type=3Dsubmit] {
	PADDING-BOTTOM: 2px; PADDING-LEFT: 5px; WIDTH: auto; PADDING-RIGHT: =
5px; DISPLAY: inline; FONT-SIZE: 110%; VERTICAL-ALIGN: bottom; =
PADDING-TOP: 2px
}
DIV.message {
	MARGIN: 1em 0px; COLOR: #900; CLEAR: both; FONT-SIZE: 140%; =
FONT-WEIGHT: 700
}
DIV.error-message {
	COLOR: #900; CLEAR: both; FONT-WEIGHT: 700
}
P.error {
	PADDING-BOTTOM: 0.8em; LINE-HEIGHT: 140%; BACKGROUND-COLOR: #e32; =
MARGIN: 1em 0px; PADDING-LEFT: 0.8em; PADDING-RIGHT: 0.8em; FONT-FAMILY: =
Courier, monospace; COLOR: #fff; FONT-SIZE: 120%; PADDING-TOP: 0.8em
}
P.error EM {
	LINE-HEIGHT: 140%; COLOR: #000; FONT-WEIGHT: 400
}
.notice {
	PADDING-BOTTOM: 0.8em; LINE-HEIGHT: 140%; MARGIN: 1em 0px; =
PADDING-LEFT: 0.8em; PADDING-RIGHT: 0.8em; DISPLAY: block; FONT-FAMILY: =
Courier, monospace; BACKGROUND: #fc0; COLOR: #000; FONT-SIZE: 120%; =
PADDING-TOP: 0.8em
}
.success {
	BACKGROUND: green; COLOR: #fff
}
DIV.actions UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
DIV.actions LI {
	LINE-HEIGHT: 2em; LIST-STYLE-TYPE: none; MARGIN: 0px 2em 0px 0px; =
DISPLAY: inline; WHITE-SPACE: nowrap
}
DIV.actions UL LI A {
	BACKGROUND: #fff; COLOR: #003d4c; TEXT-DECORATION: none
}
DIV.actions UL LI A:hover {
	COLOR: #333; TEXT-DECORATION: underline
}
DIV.related {
	DISPLAY: block; CLEAR: both
}
PRE {
	PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; BACKGROUND: =
#f0f0f0; COLOR: #000; PADDING-TOP: 1em
}
PRE.cake-debug {
	POSITION: relative; LINE-HEIGHT: 140%; MARGIN-TOP: 1em; BACKGROUND: =
#fc0; FONT-SIZE: 120%; OVERFLOW: auto
}
DIV.cake-stack-trace {
	BORDER-BOTTOM: #fc0 4px dotted; POSITION: relative; BORDER-LEFT: #fc0 =
4px dotted; PADDING-BOTTOM: 6px; LINE-HEIGHT: 140%; MARGIN: 0px; =
PADDING-LEFT: 6px; PADDING-RIGHT: 6px; BACKGROUND: #fff; COLOR: #333; =
FONT-SIZE: 120%; OVERFLOW: auto; BORDER-TOP: #fc0 4px dotted; =
BORDER-RIGHT: #fc0 4px dotted; PADDING-TOP: 6px
}
DIV.cake-code-dump PRE {
	POSITION: relative; OVERFLOW: auto
}
DIV.cake-stack-trace PRE {
	PADDING-BOTTOM: 1em; BACKGROUND-COLOR: #f0f0f0; MARGIN: 0px; =
PADDING-LEFT: 1em; PADDING-RIGHT: 1em; COLOR: #000; OVERFLOW: auto; =
PADDING-TOP: 1em
}
DIV.cake-code-dump PRE {
	PADDING-BOTTOM: 1em; BACKGROUND-COLOR: #f0f0f0; MARGIN: 0px; =
PADDING-LEFT: 1em; PADDING-RIGHT: 1em; COLOR: #000; OVERFLOW: auto; =
PADDING-TOP: 1em
}
DIV.cake-code-dump PRE {
	PADDING-BOTTOM: 4px; LINE-HEIGHT: 15px; MARGIN: 4px 2px; PADDING-LEFT: =
4px; PADDING-RIGHT: 4px; CLEAR: both; FONT-SIZE: 12px; OVERFLOW: auto; =
PADDING-TOP: 4px
}
DIV.cake-code-dump PRE CODE {
	PADDING-BOTTOM: 4px; LINE-HEIGHT: 15px; MARGIN: 4px 2px; PADDING-LEFT: =
4px; PADDING-RIGHT: 4px; CLEAR: both; FONT-SIZE: 12px; OVERFLOW: auto; =
PADDING-TOP: 4px
}
DIV.cake-code-dump SPAN.code-highlight {
	PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #ff0; PADDING-LEFT: 4px; =
PADDING-RIGHT: 4px; PADDING-TOP: 4px
}
DIV.code-coverage-results DIV.code-line {
	PADDING-LEFT: 5px; DISPLAY: block; MARGIN-LEFT: 10px
}
DIV.code-coverage-results DIV.uncovered SPAN.content {
	BACKGROUND: #ecc
}
DIV.code-coverage-results DIV.covered SPAN.content {
	BACKGROUND: #cec
}
DIV.code-coverage-results DIV.ignored SPAN.content {
	COLOR: #aaa
}
DIV.code-coverage-results SPAN.line-num {
	TEXT-ALIGN: right; WIDTH: 20px; DISPLAY: block; FLOAT: left; COLOR: =
#666; MARGIN-RIGHT: 5px
}
DIV.code-coverage-results SPAN.line-num STRONG {
	COLOR: #666
}
DIV.code-coverage-results DIV.start {
	BORDER-BOTTOM: #aaa 0px solid; BORDER-LEFT: #aaa 1px solid; MARGIN-TOP: =
30px; BORDER-TOP: #aaa 1px solid; BORDER-RIGHT: #aaa 1px solid; =
PADDING-TOP: 5px
}
DIV.code-coverage-results DIV.end {
	BORDER-BOTTOM: #aaa 1px solid; BORDER-LEFT: #aaa 1px solid; =
PADDING-BOTTOM: 5px; MARGIN-BOTTOM: 30px; BORDER-TOP: #aaa 0px solid; =
BORDER-RIGHT: #aaa 1px solid
}
DIV.code-coverage-results DIV.realstart {
	MARGIN-TOP: 0px
}
DIV.code-coverage-results P.note {
	PADDING-BOTTOM: 5px; MARGIN: 5px 0px 10px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; COLOR: #bbb; FONT-SIZE: 10px; PADDING-TOP: 5px
}
DIV.code-coverage-results SPAN.result-bad {
	COLOR: #a00
}
DIV.code-coverage-results SPAN.result-ok {
	COLOR: #fa0
}
DIV.code-coverage-results SPAN.result-good {
	COLOR: #0a0
}
A {
	COLOR: #578f3e
}
LI {
	VERTICAL-ALIGN: middle
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
FORM DIV.submit {
	MARGIN-LEFT: 20px
}
INPUT[type=3Dsubmit] {
	FONT-SIZE: 120%
}
INPUT {
	WIDTH: 80%; FONT-SIZE: 100%
}
TEXTAREA {
	WIDTH: 80%; FONT-SIZE: 100%
}
FIELDSET LEGEND {
	COLOR: #2e234f; FONT-SIZE: 100%
}
DIV.message {
	BORDER-BOTTOM: #000 2px solid; BORDER-LEFT: #000 2px solid; MARGIN: 1em =
0px; COLOR: #2e234f; CLEAR: both; FONT-SIZE: 110%; BORDER-TOP: #000 2px =
solid; FONT-WEIGHT: 700; BORDER-RIGHT: #000 2px solid
}
DIV.message > .success {
	BORDER-BOTTOM: #360 2px solid; BORDER-LEFT: #360 2px solid; =
BACKGROUND-COLOR: #cf9; COLOR: #360; BORDER-TOP: #360 2px solid; =
BORDER-RIGHT: #360 2px solid
}
DIV.message > .failure {
	BORDER-BOTTOM: red 2px solid; BORDER-LEFT: red 2px solid; =
BACKGROUND-COLOR: #ffdfdf; COLOR: red; BORDER-TOP: red 2px solid; =
BORDER-RIGHT: red 2px solid
}
#content P {
	PADDING-LEFT: 8px
}
.content P {
	PADDING-LEFT: 8px
}
#sidebar1 H1 {
	COLOR: #fff; FONT-SIZE: 12pt; FONT-WEIGHT: 700
}
#sidebar2 H1 {
	COLOR: #fff; FONT-SIZE: 12pt; FONT-WEIGHT: 700
}
#content-sub H1 {
	COLOR: #fff; FONT-SIZE: 12pt; FONT-WEIGHT: 700
}
#sidebar1 H2 {
	FONT-SIZE: 10pt
}
#sidebar2 H2 {
	FONT-SIZE: 10pt
}
#content-sub H2 {
	FONT-SIZE: 10pt
}
#content-sub H2 {
	COLOR: #3fabef
}
.small {
	FONT-SIZE: 80%
}
.success_message {
	BORDER-BOTTOM: #6c3 1px solid; BORDER-LEFT: #6c3 1px solid; =
PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#cfc; COLOR: #000; BORDER-TOP: #6c3 1px solid; FONT-WEIGHT: 700; =
BORDER-RIGHT: #6c3 1px solid; PADDING-TOP: 8px
}
.failure_message {
	BORDER-BOTTOM: #c33 1px solid; BORDER-LEFT: #c33 1px solid; =
PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#fcc; COLOR: #000; BORDER-TOP: #c33 1px solid; FONT-WEIGHT: 700; =
BORDER-RIGHT: #c33 1px solid; PADDING-TOP: 8px
}
.neutral_message {
	BORDER-BOTTOM: #3d3263 1px solid; BORDER-LEFT: #3d3263 1px solid; =
PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#d5d4de; COLOR: #383838; BORDER-TOP: #3d3263 1px solid; FONT-WEIGHT: =
700; BORDER-RIGHT: #3d3263 1px solid; PADDING-TOP: 8px
}
IMG.absmiddle {
	MARGIN-BOTTOM: 0.25em; VERTICAL-ALIGN: middle
}
IMG.icon {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 16px; HEIGHT: 16px; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
.up {
	MARGIN-TOP: -5px
}
.first {
	PADDING-TOP: 0px
}
H1.icon {
	PADDING-LEFT: 23px; BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: =
0px 3px
}
H1.author {
	BACKGROUND-IMAGE: url(/img/famfamfam/user.png)
}
H1.comments {
	BACKGROUND-IMAGE: url(/img/famfamfam/comment.png)
}
H1.progress {
	BACKGROUND-IMAGE: url(/img/famfamfam/flag_green.png)
}
H1.feeds {
	BACKGROUND-IMAGE: url(/img/rss.png)
}
H1.tweets {
	BACKGROUND-IMAGE: url(/img/twitter_icon16x16.png)
}
H1.authors {
	BACKGROUND-IMAGE: url(/img/famfamfam/group.png)
}
H1.download {
	BACKGROUND-IMAGE: url(/img/famfamfam/package_go.png)
}
H1.function {
	BACKGROUND-IMAGE: url(/img/famfamfam/page_white_code.png)
}
H1.company {
	BACKGROUND-IMAGE: url(/img/famfamfam/user_suit.png)
}
H1.news-item {
	BACKGROUND-IMAGE: url(/img/famfamfam/newspaper.png)
}
H1.social {
	BACKGROUND-IMAGE: url(/img/famfamfam/world.png)
}
H1.project {
	BACKGROUND-IMAGE: url(/img/famfamfam/information.png)
}
UL.icons {
	MARGIN-TOP: -15px
}
UL.authors > LI {
	LIST-STYLE-IMAGE: url(/img/famfamfam/user.png)
}
UL.comments > LI {
	LIST-STYLE-IMAGE: url(/img/famfamfam/comment.png)
}
UL.downloads > LI {
	LIST-STYLE-IMAGE: url(/img/famfamfam/package_go.png)
}
UL.functions > LI {
	LIST-STYLE-IMAGE: url(/img/famfamfam/page_white_code.png)
}
UL.companies > LI {
	LIST-STYLE-IMAGE: url(/img/famfamfam/user_suit.png)
}
UL.news-items > LI {
	LIST-STYLE-IMAGE: url(/img/famfamfam/newspaper_go.png)
}
UL.feeds > LI {
	LIST-STYLE-IMAGE: url(/img/rss.png)
}
UL.tweets > LI {
	LIST-STYLE-IMAGE: url(/img/twitter_icon16x16.png)
}
BLOCKQUOTE.exclamation {
	BORDER-BOTTOM: #3d3263 2px solid; BORDER-LEFT: #3d3263 2px solid; =
PADDING-BOTTOM: 15px; MARGIN: 15px; PADDING-LEFT: 15px; PADDING-RIGHT: =
15px; BACKGROUND: #d5d4de; COLOR: #383838; BORDER-TOP: #3d3263 2px =
solid; BORDER-RIGHT: #3d3263 2px solid; PADDING-TOP: 15px
}
.sourcecode {
	FONT-FAMILY: Consolas, "Courier New", Courier, mono, serif
}
.comment_code {
	WIDTH: 550px; FLOAT: none; MARGIN-LEFT: 50px; CLEAR: both; FONT-SIZE: =
0.5em
}
TEXTAREA.sourcecode {
	WIDTH: 99%; HEIGHT: 200px
}
DIV.ruler {
	BORDER-BOTTOM: #3d3263 1px solid; BORDER-LEFT: 0px; WIDTH: 99%; CLEAR: =
both; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
P.side_comments {
	COLOR: #454545; FONT-SIZE: 90%
}
DIV.comment {
	COLOR: #454545
}
TEXTAREA.comment {
	WIDTH: 78%; FLOAT: left
}
#sidebar1 A {
	COLOR: #fff
}
#sidebar2 A {
	COLOR: #fff
}
#content-sub A {
	COLOR: #fff
}
#sidebar1 A:hover {
	COLOR: #fff
}
#sidebar2 A:hover {
	COLOR: #fff
}
#content-sub A:hover {
	COLOR: #fff
}
#sidebar1 A:visited {
	COLOR: #8f8f8f
}
#sidebar2 A:visited {
	COLOR: #8f8f8f
}
#content-sub A:visited {
	COLOR: #8f8f8f
}
#sidebar1 A:active {
	COLOR: #8f8f8f
}
#sidebar2 A:active {
	COLOR: #8f8f8f
}
#content-sub A:active {
	COLOR: #8f8f8f
}
.success_message {
	BORDER-BOTTOM: #6c3 1px solid; BORDER-LEFT: #6c3 1px solid; =
PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#cfc; COLOR: #000; BORDER-TOP: #6c3 1px solid; FONT-WEIGHT: 700; =
BORDER-RIGHT: #6c3 1px solid; PADDING-TOP: 8px
}
.failure_message {
	BORDER-BOTTOM: #c33 1px solid; BORDER-LEFT: #c33 1px solid; =
PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#fcc; COLOR: #000; BORDER-TOP: #c33 1px solid; FONT-WEIGHT: 700; =
BORDER-RIGHT: #c33 1px solid; PADDING-TOP: 8px
}
.neutral_message {
	BORDER-BOTTOM: #3d3263 1px solid; BORDER-LEFT: #3d3263 1px solid; =
PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: =
#d5d4de; COLOR: #383838; BORDER-TOP: #3d3263 1px solid; FONT-WEIGHT: =
700; BORDER-RIGHT: #3d3263 1px solid; PADDING-TOP: 8px
}
TABLE.decoda_code {
	MARGIN: 4px; CLEAR: both
}
INPUT[type=3Dsubmit].comment {
	WIDTH: 18%; FLOAT: right
}
IMG.avatar_big {
	MAX-WIDTH: 50px; MAX-HEIGHT: 50px
}
P.comment_author {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; MARGIN: 11px 0px 4px; =
PADDING-LEFT: 4px; WIDTH: 100px; PADDING-RIGHT: 4px; FLOAT: left; =
FONT-SIZE: 90%; BORDER-TOP: #e3e3e3 1px dashed; BORDER-RIGHT: #e3e3e3 =
1px dashed; PADDING-TOP: 4px
}
SPAN.comment_date {
	TEXT-TRANSFORM: uppercase; FONT-SIZE: 90%; FONT-WEIGHT: 400
}
DIV.really_required {
	DISPLAY: none
}
P.comment {
	MARGIN: 11px 0px 4px 8px; WIDTH: 520px; FLOAT: left; OVERFLOW: auto
}
#AllComments {
	WIDTH: 700px; MAX-WIDTH: 700px; OVERFLOW: hidden
}
P.comment_break {
	CLEAR: both
}
HTML {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BODY {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DIV {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SPAN {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
APPLET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
OBJECT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
IFRAME {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H1 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H2 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H3 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H4 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H5 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
H6 {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
P {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BLOCKQUOTE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
PRE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
A {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
ABBR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
ACRONYM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
ADDRESS {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BIG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CITE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CODE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DEL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DFN {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
EM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
FONT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
INS {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
KBD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
Q {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
S {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SAMP {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SMALL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
STRIKE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
STRONG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SUB {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
SUP {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
VAR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
B {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
U {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
I {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CENTER {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
DD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
OL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
UL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
LI {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
FIELDSET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
FORM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
LABEL {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
LEGEND {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TABLE {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
CAPTION {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TBODY {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TFOOT {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
THEAD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TH {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; =
OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; FONT-SIZE: 100%; VERTICAL-ALIGN: baseline; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px
}
BODY {
	LINE-HEIGHT: 1
}
OL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
UL {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
BLOCKQUOTE {
	QUOTES: none
}
Q {
	QUOTES: none
}
BLOCKQUOTE:before {
	CONTENT: none
}
BLOCKQUOTE:after {
	CONTENT: none
}
Q:before {
	CONTENT: none
}
Q:after {
	CONTENT: none
}
:focus {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: 0px
}
INS {
	TEXT-DECORATION: none
}
DEL {
	TEXT-DECORATION: line-through
}
TABLE {
	BORDER-SPACING: 0; BORDER-COLLAPSE: collapse
}
.container_12 {
	WIDTH: 960px; MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}
.container_16 {
	WIDTH: 960px; MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}
.grid_1 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_2 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_3 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_4 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_5 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_6 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_7 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_8 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_9 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_10 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_11 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_12 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_13 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_14 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_15 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.grid_16 {
	DISPLAY: inline; FLOAT: left; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px
}
.container_12 .grid_3 {
	WIDTH: 220px
}
.container_16 .grid_4 {
	WIDTH: 220px
}
.container_12 .grid_6 {
	WIDTH: 460px
}
.container_16 .grid_8 {
	WIDTH: 460px
}
.container_12 .grid_9 {
	WIDTH: 700px
}
.container_16 .grid_12 {
	WIDTH: 700px
}
.container_12 .grid_12 {
	WIDTH: 940px
}
.container_16 .grid_16 {
	WIDTH: 940px
}
.alpha {
	MARGIN-LEFT: 0px
}
.omega {
	MARGIN-RIGHT: 0px
}
.container_12 .grid_1 {
	WIDTH: 60px
}
.container_12 .grid_2 {
	WIDTH: 140px
}
.container_12 .grid_4 {
	WIDTH: 300px
}
.container_12 .grid_5 {
	WIDTH: 380px
}
.container_12 .grid_7 {
	WIDTH: 540px
}
.container_12 .grid_8 {
	WIDTH: 620px
}
.container_12 .grid_10 {
	WIDTH: 780px
}
.container_12 .grid_11 {
	WIDTH: 860px
}
.container_16 .grid_1 {
	WIDTH: 40px
}
.container_16 .grid_2 {
	WIDTH: 100px
}
.container_16 .grid_3 {
	WIDTH: 160px
}
.container_16 .grid_5 {
	WIDTH: 280px
}
.container_16 .grid_6 {
	WIDTH: 340px
}
.container_16 .grid_7 {
	WIDTH: 400px
}
.container_16 .grid_9 {
	WIDTH: 520px
}
.container_16 .grid_10 {
	WIDTH: 580px
}
.container_16 .grid_11 {
	WIDTH: 640px
}
.container_16 .grid_13 {
	WIDTH: 760px
}
.container_16 .grid_14 {
	WIDTH: 820px
}
.container_16 .grid_15 {
	WIDTH: 880px
}
.container_12 .prefix_3 {
	PADDING-LEFT: 240px
}
.container_16 .prefix_4 {
	PADDING-LEFT: 240px
}
.container_12 .prefix_6 {
	PADDING-LEFT: 480px
}
.container_16 .prefix_8 {
	PADDING-LEFT: 480px
}
.container_12 .prefix_9 {
	PADDING-LEFT: 720px
}
.container_16 .prefix_12 {
	PADDING-LEFT: 720px
}
.container_12 .prefix_1 {
	PADDING-LEFT: 80px
}
.container_12 .prefix_2 {
	PADDING-LEFT: 160px
}
.container_12 .prefix_4 {
	PADDING-LEFT: 320px
}
.container_12 .prefix_5 {
	PADDING-LEFT: 400px
}
.container_12 .prefix_7 {
	PADDING-LEFT: 560px
}
.container_12 .prefix_8 {
	PADDING-LEFT: 640px
}
.container_12 .prefix_10 {
	PADDING-LEFT: 800px
}
.container_12 .prefix_11 {
	PADDING-LEFT: 880px
}
.container_16 .prefix_1 {
	PADDING-LEFT: 60px
}
.container_16 .prefix_2 {
	PADDING-LEFT: 120px
}
.container_16 .prefix_3 {
	PADDING-LEFT: 180px
}
.container_16 .prefix_5 {
	PADDING-LEFT: 300px
}
.container_16 .prefix_6 {
	PADDING-LEFT: 360px
}
.container_16 .prefix_7 {
	PADDING-LEFT: 420px
}
.container_16 .prefix_9 {
	PADDING-LEFT: 540px
}
.container_16 .prefix_10 {
	PADDING-LEFT: 600px
}
.container_16 .prefix_11 {
	PADDING-LEFT: 660px
}
.container_16 .prefix_13 {
	PADDING-LEFT: 780px
}
.container_16 .prefix_14 {
	PADDING-LEFT: 840px
}
.container_16 .prefix_15 {
	PADDING-LEFT: 900px
}
.container_12 .suffix_3 {
	PADDING-RIGHT: 240px
}
.container_16 .suffix_4 {
	PADDING-RIGHT: 240px
}
.container_12 .suffix_6 {
	PADDING-RIGHT: 480px
}
.container_16 .suffix_8 {
	PADDING-RIGHT: 480px
}
.container_12 .suffix_9 {
	PADDING-RIGHT: 720px
}
.container_16 .suffix_12 {
	PADDING-RIGHT: 720px
}
.container_12 .suffix_1 {
	PADDING-RIGHT: 80px
}
.container_12 .suffix_2 {
	PADDING-RIGHT: 160px
}
.container_12 .suffix_4 {
	PADDING-RIGHT: 320px
}
.container_12 .suffix_5 {
	PADDING-RIGHT: 400px
}
.container_12 .suffix_7 {
	PADDING-RIGHT: 560px
}
.container_12 .suffix_8 {
	PADDING-RIGHT: 640px
}
.container_12 .suffix_10 {
	PADDING-RIGHT: 800px
}
.container_12 .suffix_11 {
	PADDING-RIGHT: 880px
}
.container_16 .suffix_1 {
	PADDING-RIGHT: 60px
}
.container_16 .suffix_2 {
	PADDING-RIGHT: 120px
}
.container_16 .suffix_3 {
	PADDING-RIGHT: 180px
}
.container_16 .suffix_5 {
	PADDING-RIGHT: 300px
}
.container_16 .suffix_6 {
	PADDING-RIGHT: 360px
}
.container_16 .suffix_7 {
	PADDING-RIGHT: 420px
}
.container_16 .suffix_9 {
	PADDING-RIGHT: 540px
}
.container_16 .suffix_10 {
	PADDING-RIGHT: 600px
}
.container_16 .suffix_11 {
	PADDING-RIGHT: 660px
}
.container_16 .suffix_13 {
	PADDING-RIGHT: 780px
}
.container_16 .suffix_14 {
	PADDING-RIGHT: 840px
}
.container_16 .suffix_15 {
	PADDING-RIGHT: 900px
}
.clear {
	WIDTH: 0px; DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: =
both; OVERFLOW: hidden
}
.clearfix:after {
	LINE-HEIGHT: 0; WIDTH: 0px; DISPLAY: block; HEIGHT: 0px; VISIBILITY: =
hidden; CLEAR: both; FONT-SIZE: 0px; CONTENT: ' '
}
.clearfix {
	DISPLAY: block
}
* HTML .clearfix {
	HEIGHT: 1%
}
BODY {
	FONT: 13px/1.5 Helvetica, Arial, "Liberation Sans", FreeSans, =
sans-serif
}
A:focus {
	OUTLINE-STYLE: dotted; OUTLINE-COLOR: invert; OUTLINE-WIDTH: 1px
}
HR {
	BORDER-BOTTOM: #ccc 0px solid; BORDER-LEFT: #ccc 0px solid; HEIGHT: =
0px; CLEAR: both; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 0px =
solid
}
H1 {
	FONT-SIZE: 25px
}
H2 {
	FONT-SIZE: 23px
}
H3 {
	FONT-SIZE: 21px
}
H4 {
	FONT-SIZE: 19px
}
H5 {
	FONT-SIZE: 17px
}
H6 {
	FONT-SIZE: 15px
}
OL {
	LIST-STYLE-TYPE: decimal
}
UL {
	LIST-STYLE-TYPE: square
}
LI {
	MARGIN-LEFT: 30px
}
P {
	MARGIN-BOTTOM: 20px
}
DL {
	MARGIN-BOTTOM: 20px
}
HR {
	MARGIN-BOTTOM: 20px
}
H1 {
	MARGIN-BOTTOM: 20px
}
H2 {
	MARGIN-BOTTOM: 20px
}
H3 {
	MARGIN-BOTTOM: 20px
}
H4 {
	MARGIN-BOTTOM: 20px
}
H5 {
	MARGIN-BOTTOM: 20px
}
H6 {
	MARGIN-BOTTOM: 20px
}
OL {
	MARGIN-BOTTOM: 20px
}
UL {
	MARGIN-BOTTOM: 20px
}
PRE {
	MARGIN-BOTTOM: 20px
}
TABLE {
	MARGIN-BOTTOM: 20px
}
ADDRESS {
	MARGIN-BOTTOM: 20px
}
FIELDSET {
	MARGIN-BOTTOM: 20px
}
BODY {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; FONT-FAMILY: Stratum2 Medium DISABLED, Helvetica Neue, Helvetica, =
sans-serif; BACKGROUND: #1c092e; FONT-SIZE: 1em; PADDING-TOP: 0px
}
P {
	TEXT-ALIGN: left; LINE-HEIGHT: 1.5em; PADDING-LEFT: 2px; PADDING-RIGHT: =
2px; VERTICAL-ALIGN: top
}
DIV#container {
	MARGIN-LEFT: 0px
}
DIV#header1 {
	PADDING-LEFT: 10px; BACKGROUND: url(/img/logosmall.jpg) #1c092e =
no-repeat 10px 11px; HEIGHT: 74px
}
DIV#header2 {
	PADDING-LEFT: 6px; FONT-FAMILY: "Trebuchet MS", sans-serif; BACKGROUND: =
url(/img/topbar_gradient.png) #fff repeat-x left top; HEIGHT: 20px; =
COLOR: #2e234f; FONT-SIZE: 10pt; FONT-WEIGHT: 700
}
DIV#header3 {
	PADDING-LEFT: 16px; BACKGROUND: #1c092e; HEIGHT: 10px
}
DIV#content {
	PADDING-LEFT: 16px; BACKGROUND: #fff; PADDING-TOP: 16px
}
DIV#sidebar1 {
	BACKGROUND: #3d3263; HEIGHT: auto; COLOR: #fff; FONT-SIZE: 9pt
}
DIV#sidebar1 UL {
	MARGIN-LEFT: 35px
}
DIV#sidebar1 UL LI {
	MARGIN-LEFT: -4px
}
DIV#sidebar2 {
	BACKGROUND: #2e234f; COLOR: #fff
}
UL#navigation {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px 0px 0px 4px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FLOAT: right; TOP: 20px; =
LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
UL#navigation LI {
	MARGIN: 0px 0.15em; DISPLAY: inline; FLOAT: left
}
UL#navigation LI A {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; LINE-HEIGHT: 30px; =
BACKGROUND-COLOR: #1c092e; MARGIN: 0px; OUTLINE-STYLE: none; =
OUTLINE-COLOR: invert; PADDING-LEFT: 15px; OUTLINE-WIDTH: medium; =
PADDING-RIGHT: 15px; DISPLAY: block; FONT-FAMILY: Verdana, Arial, =
sans-serif; HEIGHT: 35px; COLOR: #fff; FONT-SIZE: 10px; CURSOR: pointer; =
TEXT-DECORATION: none; PADDING-TOP: 40px
}
UL#navigation LI A:hover {
	BACKGROUND-IMAGE: url(/img/hover.jpg)
}
UL#navigation LI A.select {
	BACKGROUND-IMAGE: url(/img/select.jpg)
}
UL#navigation LI.home {
	POSITION: absolute; BACKGROUND-COLOR: transparent; WIDTH: 140px; TOP: =
-4px; LEFT: 0px
}
UL#navigation LI.home A {
	BACKGROUND-COLOR: transparent; COLOR: transparent
}
#content H1 {
	COLOR: #2e234f; FONT-WEIGHT: 700
}
.content H1 {
	COLOR: #2e234f; FONT-WEIGHT: 700
}
#content H2 {
	COLOR: #2e234f
}
.content H2 {
	COLOR: #2e234f
}
#content H3 {
	COLOR: #3d3263
}
.content H3 {
	COLOR: #3d3263
}
.roundedcornr_box_995391 {
	BACKGROUND: #fff
}
.roundedcornr_top_995391 DIV {
	BACKGROUND: url(/img/roundedcornr_995391_tl.png) no-repeat left top
}
.roundedcornr_top_995391 {
	BACKGROUND: url(/img/roundedcornr_995391_tr.png) no-repeat right top
}
.roundedcornr_bottom_995391 DIV {
	BACKGROUND: url(/img/roundedcornr_995391_bl.png) no-repeat left bottom
}
.roundedcornr_bottom_995391 {
	BACKGROUND: url(/img/roundedcornr_995391_br.png) no-repeat right bottom
}
.roundedcornr_box_854891 {
	BACKGROUND: #3d3263
}
.roundedcornr_top_854891 DIV {
	BACKGROUND: url(/img/roundedcornr_854891_tl.png) no-repeat left top
}
.roundedcornr_top_854891 {
	BACKGROUND: url(/img/roundedcornr_854891_tr.png) no-repeat right top
}
.roundedcornr_bottom_854891 DIV {
	BACKGROUND: url(/img/roundedcornr_854891_bl.png) no-repeat left bottom
}
.roundedcornr_bottom_854891 {
	BACKGROUND: url(/img/roundedcornr_854891_br.png) no-repeat right bottom
}
UL#navigation LI.home A:hover {
	BACKGROUND-IMAGE: none; BACKGROUND-COLOR: transparent; COLOR: =
transparent
}
UL#navigation LI.home A.selected {
	BACKGROUND-IMAGE: none; BACKGROUND-COLOR: transparent; COLOR: =
transparent
}
.roundedcornr_top_995391 DIV {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_top_995391 {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_bottom_995391 DIV {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_bottom_995391 {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_top_854891 DIV {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_top_854891 {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_bottom_854891 DIV {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_bottom_854891 {
	WIDTH: 100%; HEIGHT: 8px; FONT-SIZE: 1px
}
.roundedcornr_content_995391 {
	MARGIN: 0px 8px
}
.roundedcornr_content_854891 {
	MARGIN: 0px 8px
}
.barContainer {
	BORDER-BOTTOM: #4f4f4f 1px solid; BORDER-LEFT: #4f4f4f 1px solid; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
BORDER-TOP: #4f4f4f 1px solid; BORDER-RIGHT: #4f4f4f 1px solid; =
PADDING-TOP: 0px
}
.barInside {
	TEXT-ALIGN: center; PADDING-BOTTOM: 2px; MARGIN: 1px; PADDING-LEFT: =
2px; PADDING-RIGHT: 2px; FLOAT: left; COLOR: #4f4f4f; FONT-SIZE: 80%; =
VERTICAL-ALIGN: middle; PADDING-TOP: 2px
}
.barInside A {
	COLOR: #4f4f4f
}
.green.barInside {
	BACKGROUND-COLOR: green
}
.red.barInside {
	BACKGROUND-COLOR: red
}
PRE.sh_sourceCode {
	BACKGROUND-COLOR: #fff; FONT-STYLE: normal; COLOR: #696969; =
FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_type {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_comment {
	FONT-STYLE: italic; COLOR: #1326a2; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_number {
	FONT-STYLE: normal; COLOR: #b0f; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_preproc {
	FONT-STYLE: normal; COLOR: #470000; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_function {
	FONT-STYLE: normal; COLOR: #000; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_keyword {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_date {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_time {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_file {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_variable {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_difflines {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_selector {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_property {
	FONT-STYLE: normal; COLOR: #696969; FONT-WEIGHT: 700
}
PRE.sh_sourceCode .sh_string {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_regexp {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_specialchar {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_url {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_ip {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_name {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_oldfile {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_newfile {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}
PRE.sh_sourceCode .sh_value {
	FONT-STYLE: normal; COLOR: #080; FONT-WEIGHT: 400
}

------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://phpjs.org/cjs/5d882a7eda2cac6ddb2e76c0627566de_1269425632.js

/* prototype.js (73%) */=0A=
var =
Prototype=3D{Version:'1.6.0.3',Browser:{IE:!!(window.attachEvent&&navigat=
or.userAgent.indexOf('Opera')=3D=3D=3D-1),Opera:navigator.userAgent.index=
Of('Opera')>-1,WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1,Geck=
o:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('K=
HTML')=3D=3D=3D-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile=
.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!doc=
ument.querySelector,ElementExtensions:!!window.HTMLElement,SpecificElemen=
tExtensions:document.createElement('div')['__proto__']&&document.createEl=
ement('div')['__proto__']!=3D=3Ddocument.createElement('form')['__proto__=
']},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',JSONFilter:/^\/\=
*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){retu=
rn x}};if(Prototype.Browser.MobileSafari)=0A=
Prototype.BrowserFeatures.SpecificElementExtensions=3Dfalse;var =
Class=3D{create:function(){var =
parent=3Dnull,properties=3D$A(arguments);if(Object.isFunction(properties[=
0]))=0A=
parent=3Dproperties.shift();function =
klass(){this.initialize.apply(this,arguments);}=0A=
Object.extend(klass,Class.Methods);klass.superclass=3Dparent;klass.subcla=
sses=3D[];if(parent){var =
subclass=3Dfunction(){};subclass.prototype=3Dparent.prototype;klass.proto=
type=3Dnew subclass;parent.subclasses.push(klass);}=0A=
for(var i=3D0;i<properties.length;i++)=0A=
klass.addMethods(properties[i]);if(!klass.prototype.initialize)=0A=
klass.prototype.initialize=3DPrototype.emptyFunction;klass.prototype.cons=
tructor=3Dklass;return =
klass;}};Class.Methods=3D{addMethods:function(source){var =
ancestor=3Dthis.superclass&&this.superclass.prototype;var =
properties=3DObject.keys(source);if(!Object.keys({toString:true}).length)=0A=
properties.push("toString","valueOf");for(var =
i=3D0,length=3Dproperties.length;i<length;i++){var =
property=3Dproperties[i],value=3Dsource[property];if(ancestor&&Object.isF=
unction(value)&&value.argumentNames().first()=3D=3D"$super"){var =
method=3Dvalue;value=3D(function(m){return function(){return =
ancestor[m].apply(this,arguments)};})(property).wrap(method);value.valueO=
f=3Dmethod.valueOf.bind(method);value.toString=3Dmethod.toString.bind(met=
hod);}=0A=
this.prototype[property]=3Dvalue;}=0A=
return this;}};var =
Abstract=3D{};Object.extend=3Dfunction(destination,source){for(var =
property in source)=0A=
destination[property]=3Dsource[property];return =
destination;};Object.extend(Object,{inspect:function(object){try{if(Objec=
t.isUndefined(object))return'undefined';if(object=3D=3D=3Dnull)return'nul=
l';return object.inspect?object.inspect():String(object);}catch(e){if(e =
instanceof RangeError)return'...';throw e;}},toJSON:function(object){var =
type=3Dtypeof =
object;switch(type){case'undefined':case'function':case'unknown':return;c=
ase'boolean':return object.toString();}=0A=
if(object=3D=3D=3Dnull)return'null';if(object.toJSON)return =
object.toJSON();if(Object.isElement(object))return;var =
results=3D[];for(var property in object){var =
value=3DObject.toJSON(object[property]);if(!Object.isUndefined(value))=0A=
results.push(property.toJSON()+': '+value);}=0A=
return'{'+results.join(', ')+'}';},toQueryString:function(object){return =
$H(object).toQueryString();},toHTML:function(object){return =
object&&object.toHTML?object.toHTML():String.interpret(object);},keys:fun=
ction(object){var keys=3D[];for(var property in object)=0A=
keys.push(property);return keys;},values:function(object){var =
values=3D[];for(var property in object)=0A=
values.push(object[property]);return =
values;},clone:function(object){return =
Object.extend({},object);},isElement:function(object){return!!(object&&ob=
ject.nodeType=3D=3D1);},isArray:function(object){return =
object!=3Dnull&&typeof object=3D=3D"object"&&'splice'in object&&'join'in =
object;},isHash:function(object){return object instanceof =
Hash;},isFunction:function(object){return typeof =
object=3D=3D"function";},isString:function(object){return typeof =
object=3D=3D"string";},isNumber:function(object){return typeof =
object=3D=3D"number";},isUndefined:function(object){return typeof =
object=3D=3D"undefined";}});Object.extend(Function.prototype,{argumentNam=
es:function(){var =
names=3Dthis.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].rep=
lace(/\s+/g,'').split(',');return =
names.length=3D=3D1&&!names[0]?[]:names;},bind:function(){if(arguments.le=
ngth<2&&Object.isUndefined(arguments[0]))return this;var =
__method=3Dthis,args=3D$A(arguments),object=3Dargs.shift();return =
function(){return =
__method.apply(object,args.concat($A(arguments)));}},bindAsEventListener:=
function(){var =
__method=3Dthis,args=3D$A(arguments),object=3Dargs.shift();return =
function(event){return =
__method.apply(object,[event||window.event].concat(args));}},curry:functi=
on(){if(!arguments.length)return this;var =
__method=3Dthis,args=3D$A(arguments);return function(){return =
__method.apply(this,args.concat($A(arguments)));}},delay:function(){var =
__method=3Dthis,args=3D$A(arguments),timeout=3Dargs.shift()*1000;return =
window.setTimeout(function(){return =
__method.apply(__method,args);},timeout);},defer:function(){var =
args=3D[0.01].concat($A(arguments));return =
this.delay.apply(this,args);},wrap:function(wrapper){var =
__method=3Dthis;return function(){return =
wrapper.apply(this,[__method.bind(this)].concat($A(arguments)));}},method=
ize:function(){if(this._methodized)return this._methodized;var =
__method=3Dthis;return this._methodized=3Dfunction(){return =
__method.apply(null,[this].concat($A(arguments)));};}});Date.prototype.to=
JSON=3Dfunction(){return'"'+this.getUTCFullYear()+'-'+=0A=
(this.getUTCMonth()+1).toPaddedString(2)+'-'+=0A=
this.getUTCDate().toPaddedString(2)+'T'+=0A=
this.getUTCHours().toPaddedString(2)+':'+=0A=
this.getUTCMinutes().toPaddedString(2)+':'+=0A=
this.getUTCSeconds().toPaddedString(2)+'Z"';};var =
Try=3D{these:function(){var returnValue;for(var =
i=3D0,length=3Darguments.length;i<length;i++){var =
lambda=3Darguments[i];try{returnValue=3Dlambda();break;}catch(e){}}=0A=
return =
returnValue;}};RegExp.prototype.match=3DRegExp.prototype.test;RegExp.esca=
pe=3Dfunction(str){return =
String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g,'\\$1');};var =
PeriodicalExecuter=3DClass.create({initialize:function(callback,frequency=
){this.callback=3Dcallback;this.frequency=3Dfrequency;this.currentlyExecu=
ting=3Dfalse;this.registerCallback();},registerCallback:function(){this.t=
imer=3DsetInterval(this.onTimerEvent.bind(this),this.frequency*1000);},ex=
ecute:function(){this.callback(this);},stop:function(){if(!this.timer)ret=
urn;clearInterval(this.timer);this.timer=3Dnull;},onTimerEvent:function()=
{if(!this.currentlyExecuting){try{this.currentlyExecuting=3Dtrue;this.exe=
cute();}finally{this.currentlyExecuting=3Dfalse;}}}});Object.extend(Strin=
g,{interpret:function(value){return =
value=3D=3Dnull?'':String(value);},specialChar:{'\b':'\\b','\t':'\\t','\n=
':'\\n','\f':'\\f','\r':'\\r','\\':'\\\\'}});Object.extend(String.prototy=
pe,{gsub:function(pattern,replacement){var =
result=3D'',source=3Dthis,match;replacement=3Darguments.callee.prepareRep=
lacement(replacement);while(source.length>0){if(match=3Dsource.match(patt=
ern)){result+=3Dsource.slice(0,match.index);result+=3DString.interpret(re=
placement(match));source=3Dsource.slice(match.index+match[0].length);}els=
e{result+=3Dsource,source=3D'';}}=0A=
return =
result;},sub:function(pattern,replacement,count){replacement=3Dthis.gsub.=
prepareReplacement(replacement);count=3DObject.isUndefined(count)?1:count=
;return this.gsub(pattern,function(match){if(--count<0)return =
match[0];return =
replacement(match);});},scan:function(pattern,iterator){this.gsub(pattern=
,iterator);return =
String(this);},truncate:function(length,truncation){length=3Dlength||30;t=
runcation=3DObject.isUndefined(truncation)?'...':truncation;return =
this.length>length?this.slice(0,length-truncation.length)+truncation:Stri=
ng(this);},strip:function(){return =
this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return =
this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return =
this.replace(new =
RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){va=
r matchAll=3Dnew RegExp(Prototype.ScriptFragment,'img');var =
matchOne=3Dnew =
RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).ma=
p(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},=
evalScripts:function(){return =
this.extractScripts().map(function(script){return =
eval(script)});},escapeHTML:function(){var =
self=3Darguments.callee;self.text.data=3Dthis;return =
self.div.innerHTML;},unescapeHTML:function(){var div=3Dnew =
Element('div');div.innerHTML=3Dthis.stripTags();return =
div.childNodes[0]?(div.childNodes.length>1?$A(div.childNodes).inject('',f=
unction(memo,node){return =
memo+node.nodeValue}):div.childNodes[0].nodeValue):'';},toQueryParams:fun=
ction(separator){var =
match=3Dthis.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return =
match[1].split(separator||'&').inject({},function(hash,pair){if((pair=3Dp=
air.split('=3D'))[0]){var key=3DdecodeURIComponent(pair.shift());var =
value=3Dpair.length>1?pair.join('=3D'):pair[0];if(value!=3Dundefined)valu=
e=3DdecodeURIComponent(value);if(key in =
hash){if(!Object.isArray(hash[key]))hash[key]=3D[hash[key]];hash[key].pus=
h(value);}=0A=
else hash[key]=3Dvalue;}=0A=
return hash;});},toArray:function(){return =
this.split('');},succ:function(){return this.slice(0,this.length-1)+=0A=
String.fromCharCode(this.charCodeAt(this.length-1)+1);},times:function(co=
unt){return count<1?'':new =
Array(count+1).join(this);},camelize:function(){var =
parts=3Dthis.split('-'),len=3Dparts.length;if(len=3D=3D1)return =
parts[0];var =
camelized=3Dthis.charAt(0)=3D=3D'-'?parts[0].charAt(0).toUpperCase()+part=
s[0].substring(1):parts[0];for(var i=3D1;i<len;i++)=0A=
camelized+=3Dparts[i].charAt(0).toUpperCase()+parts[i].substring(1);retur=
n camelized;},capitalize:function(){return =
this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();},underscore=
:function(){return =
this.gsub(/::/,'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\=
d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();},dasherize:function=
(){return this.gsub(/_/,'-');},inspect:function(useDoubleQuotes){var =
escapedString=3Dthis.gsub(/[\x00-\x1f\\]/,function(match){var =
character=3DString.specialChar[match[0]];return =
character?character:'\\u00'+match[0].charCodeAt().toPaddedString(2,16);})=
;if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';retur=
n"'"+escapedString.replace(/'/g,'\\\'')+"'";},toJSON:function(){return =
this.inspect(true);},unfilterJSON:function(filter){return =
this.sub(filter||Prototype.JSONFilter,'#{1}');},isJSON:function(){var =
str=3Dthis;if(str.blank())return =
false;str=3Dthis.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(=
/^[,:{}\[\]0-9.\-+Eaeflnr-u =
\n\r\t]*$/).test(str);},evalJSON:function(sanitize){var =
json=3Dthis.unfilterJSON();try{if(!sanitize||json.isJSON())return =
eval('('+json+')');}catch(e){}=0A=
throw new SyntaxError('Badly formed JSON string: =
'+this.inspect());},include:function(pattern){return =
this.indexOf(pattern)>-1;},startsWith:function(pattern){return =
this.indexOf(pattern)=3D=3D=3D0;},endsWith:function(pattern){var =
d=3Dthis.length-pattern.length;return =
d>=3D0&&this.lastIndexOf(pattern)=3D=3D=3Dd;},empty:function(){return =
this=3D=3D'';},blank:function(){return/^\s*$/.test(this);},interpolate:fu=
nction(object,pattern){return new =
Template(this,pattern).evaluate(object);}});if(Prototype.Browser.WebKit||=
Prototype.Browser.IE)Object.extend(String.prototype,{escapeHTML:function(=
){return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');},un=
escapeHTML:function(){return =
this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;=
/g,'>');}});String.prototype.gsub.prepareReplacement=3Dfunction(replaceme=
nt){if(Object.isFunction(replacement))return replacement;var =
template=3Dnew Template(replacement);return function(match){return =
template.evaluate(match)};};String.prototype.parseQuery=3DString.prototyp=
e.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.c=
reateElement('div'),text:document.createTextNode('')});String.prototype.e=
scapeHTML.div.appendChild(String.prototype.escapeHTML.text);var =
Template=3DClass.create({initialize:function(template,pattern){this.templ=
ate=3Dtemplate.toString();this.pattern=3Dpattern||Template.Pattern;},eval=
uate:function(object){if(Object.isFunction(object.toTemplateReplacements)=
)=0A=
object=3Dobject.toTemplateReplacements();return =
this.template.gsub(this.pattern,function(match){if(object=3D=3Dnull)retur=
n'';var before=3Dmatch[1]||'';if(before=3D=3D'\\')return match[2];var =
ctx=3Dobject,expr=3Dmatch[3];var =
pattern=3D/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=3Dpattern.exec(e=
xpr);if(match=3D=3Dnull)return before;while(match!=3Dnull){var =
comp=3Dmatch[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1];ctx=3D=
ctx[comp];if(null=3D=3Dctx||''=3D=3Dmatch[3])break;expr=3Dexpr.substring(=
'['=3D=3Dmatch[3]?match[1].length:match[0].length);match=3Dpattern.exec(e=
xpr);}=0A=
return =
before+String.interpret(ctx);});}});Template.Pattern=3D/(^|.|\r|\n)(#\{(.=
*?)\})/;var $break=3D{};var =
Enumerable=3D{each:function(iterator,context){var =
index=3D0;try{this._each(function(value){iterator.call(context,value,inde=
x++);});}catch(e){if(e!=3D$break)throw e;}=0A=
return this;},eachSlice:function(number,iterator,context){var =
index=3D-number,slices=3D[],array=3Dthis.toArray();if(number<1)return =
array;while((index+=3Dnumber)<array.length)=0A=
slices.push(array.slice(index,index+number));return =
slices.collect(iterator,context);},all:function(iterator,context){iterato=
r=3Diterator||Prototype.K;var =
result=3Dtrue;this.each(function(value,index){result=3Dresult&&!!iterator=
.call(context,value,index);if(!result)throw $break;});return =
result;},any:function(iterator,context){iterator=3Diterator||Prototype.K;=
var =
result=3Dfalse;this.each(function(value,index){if(result=3D!!iterator.cal=
l(context,value,index))=0A=
throw $break;});return =
result;},collect:function(iterator,context){iterator=3Diterator||Prototyp=
e.K;var =
results=3D[];this.each(function(value,index){results.push(iterator.call(c=
ontext,value,index));});return =
results;},detect:function(iterator,context){var =
result;this.each(function(value,index){if(iterator.call(context,value,ind=
ex)){result=3Dvalue;throw $break;}});return =
result;},findAll:function(iterator,context){var =
results=3D[];this.each(function(value,index){if(iterator.call(context,val=
ue,index))=0A=
results.push(value);});return =
results;},grep:function(filter,iterator,context){iterator=3Diterator||Pro=
totype.K;var results=3D[];if(Object.isString(filter))=0A=
filter=3Dnew =
RegExp(filter);this.each(function(value,index){if(filter.match(value))=0A=
results.push(iterator.call(context,value,index));});return =
results;},include:function(object){if(Object.isFunction(this.indexOf))=0A=
if(this.indexOf(object)!=3D-1)return true;var =
found=3Dfalse;this.each(function(value){if(value=3D=3Dobject){found=3Dtru=
e;throw $break;}});return =
found;},inGroupsOf:function(number,fillWith){fillWith=3DObject.isUndefine=
d(fillWith)?null:fillWith;return =
this.eachSlice(number,function(slice){while(slice.length<number)slice.pus=
h(fillWith);return =
slice;});},inject:function(memo,iterator,context){this.each(function(valu=
e,index){memo=3Diterator.call(context,memo,value,index);});return =
memo;},invoke:function(method){var args=3D$A(arguments).slice(1);return =
this.map(function(value){return =
value[method].apply(value,args);});},max:function(iterator,context){itera=
tor=3Diterator||Prototype.K;var =
result;this.each(function(value,index){value=3Diterator.call(context,valu=
e,index);if(result=3D=3Dnull||value>=3Dresult)=0A=
result=3Dvalue;});return =
result;},min:function(iterator,context){iterator=3Diterator||Prototype.K;=
var =
result;this.each(function(value,index){value=3Diterator.call(context,valu=
e,index);if(result=3D=3Dnull||value<result)=0A=
result=3Dvalue;});return =
result;},partition:function(iterator,context){iterator=3Diterator||Protot=
ype.K;var =
trues=3D[],falses=3D[];this.each(function(value,index){(iterator.call(con=
text,value,index)?trues:falses).push(value);});return[trues,falses];},plu=
ck:function(property){var =
results=3D[];this.each(function(value){results.push(value[property]);});r=
eturn results;},reject:function(iterator,context){var =
results=3D[];this.each(function(value,index){if(!iterator.call(context,va=
lue,index))=0A=
results.push(value);});return =
results;},sortBy:function(iterator,context){return =
this.map(function(value,index){return{value:value,criteria:iterator.call(=
context,value,index)};}).sort(function(left,right){var =
a=3Dleft.criteria,b=3Dright.criteria;return =
a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return =
this.map();},zip:function(){var =
iterator=3DPrototype.K,args=3D$A(arguments);if(Object.isFunction(args.las=
t()))=0A=
iterator=3Dargs.pop();var =
collections=3D[this].concat(args).map($A);return =
this.map(function(value,index){return =
iterator(collections.pluck(index));});},size:function(){return =
this.toArray().length;},inspect:function(){return'#<Enumerable:'+this.toA=
rray().inspect()+'>';}};Object.extend(Enumerable,{map:Enumerable.collect,=
find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAl=
l,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.a=
ll,some:Enumerable.any});function =
$A(iterable){if(!iterable)return[];if(iterable.toArray)return =
iterable.toArray();var length=3Diterable.length||0,results=3Dnew =
Array(length);while(length--)results[length]=3Diterable[length];return =
results;}=0A=
if(Prototype.Browser.WebKit){$A=3Dfunction(iterable){if(!iterable)return[=
];if(!(typeof iterable=3D=3D=3D'function'&&typeof =
iterable.length=3D=3D=3D'number'&&typeof =
iterable.item=3D=3D=3D'function')&&iterable.toArray)=0A=
return iterable.toArray();var length=3Diterable.length||0,results=3Dnew =
Array(length);while(length--)results[length]=3Diterable[length];return =
results;};}=0A=
Array.from=3D$A;Object.extend(Array.prototype,Enumerable);if(!Array.proto=
type._reverse)Array.prototype._reverse=3DArray.prototype.reverse;Object.e=
xtend(Array.prototype,{_each:function(iterator){for(var =
i=3D0,length=3Dthis.length;i<length;i++)=0A=
iterator(this[i]);},clear:function(){this.length=3D0;return =
this;},first:function(){return this[0];},last:function(){return =
this[this.length-1];},compact:function(){return =
this.select(function(value){return =
value!=3Dnull;});},flatten:function(){return =
this.inject([],function(array,value){return =
array.concat(Object.isArray(value)?value.flatten():[value]);});},without:=
function(){var values=3D$A(arguments);return =
this.select(function(value){return!values.include(value);});},reverse:fun=
ction(inline){return(inline!=3D=3Dfalse?this:this.toArray())._reverse();}=
,reduce:function(){return =
this.length>1?this:this[0];},uniq:function(sorted){return =
this.inject([],function(array,value,index){if(0=3D=3Dindex||(sorted?array=
.last()!=3Dvalue:!array.include(value)))=0A=
array.push(value);return array;});},intersect:function(array){return =
this.uniq().findAll(function(item){return =
array.detect(function(value){return =
item=3D=3D=3Dvalue});});},clone:function(){return[].concat(this);},size:f=
unction(){return =
this.length;},inspect:function(){return'['+this.map(Object.inspect).join(=
', ')+']';},toJSON:function(){var =
results=3D[];this.each(function(object){var =
value=3DObject.toJSON(object);if(!Object.isUndefined(value))results.push(=
value);});return'['+results.join(', =
')+']';}});if(Object.isFunction(Array.prototype.forEach))=0A=
Array.prototype._each=3DArray.prototype.forEach;if(!Array.prototype.index=
Of)Array.prototype.indexOf=3Dfunction(item,i){i||(i=3D0);var =
length=3Dthis.length;if(i<0)i=3Dlength+i;for(;i<length;i++)=0A=
if(this[i]=3D=3D=3Ditem)return =
i;return-1;};if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=3D=
function(item,i){i=3DisNaN(i)?this.length:(i<0?this.length+i:i)+1;var =
n=3Dthis.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1;};Array.p=
rototype.toArray=3DArray.prototype.clone;function =
$w(string){if(!Object.isString(string))return[];string=3Dstring.strip();r=
eturn string?string.split(/\s+/):[];}=0A=
if(Prototype.Browser.Opera){Array.prototype.concat=3Dfunction(){var =
array=3D[];for(var =
i=3D0,length=3Dthis.length;i<length;i++)array.push(this[i]);for(var =
i=3D0,length=3Darguments.length;i<length;i++){if(Object.isArray(arguments=
[i])){for(var j=3D0,arrayLength=3Darguments[i].length;j<arrayLength;j++)=0A=
array.push(arguments[i][j]);}else{array.push(arguments[i]);}}=0A=
return array;};}=0A=
Object.extend(Number.prototype,{toColorPart:function(){return =
this.toPaddedString(2,16);},succ:function(){return =
this+1;},times:function(iterator,context){$R(0,this,true).each(iterator,c=
ontext);return this;},toPaddedString:function(length,radix){var =
string=3Dthis.toString(radix||10);return'0'.times(length-string.length)+s=
tring;},toJSON:function(){return =
isFinite(this)?this.toString():'null';}});$w('abs round ceil =
floor').each(function(method){Number.prototype[method]=3DMath[method].met=
hodize();});function $H(object){return new Hash(object);};var =
Hash=3DClass.create(Enumerable,(function(){function =
toQueryPair(key,value){if(Object.isUndefined(value))return key;return =
key+'=3D'+encodeURIComponent(String.interpret(value));}=0A=
return{initialize:function(object){this._object=3DObject.isHash(object)?o=
bject.toObject():Object.clone(object);},_each:function(iterator){for(var =
key in this._object){var =
value=3Dthis._object[key],pair=3D[key,value];pair.key=3Dkey;pair.value=3D=
value;iterator(pair);}},set:function(key,value){return =
this._object[key]=3Dvalue;},get:function(key){if(this._object[key]!=3D=3D=
Object.prototype[key])=0A=
return this._object[key];},unset:function(key){var =
value=3Dthis._object[key];delete this._object[key];return =
value;},toObject:function(){return =
Object.clone(this._object);},keys:function(){return =
this.pluck('key');},values:function(){return =
this.pluck('value');},index:function(value){var =
match=3Dthis.detect(function(pair){return =
pair.value=3D=3D=3Dvalue;});return =
match&&match.key;},merge:function(object){return =
this.clone().update(object);},update:function(object){return new =
Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.v=
alue);return result;});},toQueryString:function(){return =
this.inject([],function(results,pair){var =
key=3DencodeURIComponent(pair.key),values=3Dpair.value;if(values&&typeof =
values=3D=3D'object'){if(Object.isArray(values))=0A=
return results.concat(values.map(toQueryPair.curry(key)));}else =
results.push(toQueryPair(key,values));return =
results;}).join('&');},inspect:function(){return'#<Hash:{'+this.map(funct=
ion(pair){return pair.map(Object.inspect).join(': ');}).join(', =
')+'}>';},toJSON:function(){return =
Object.toJSON(this.toObject());},clone:function(){return new =
Hash(this);}}})());Hash.prototype.toTemplateReplacements=3DHash.prototype=
.toObject;Hash.from=3D$H;var =
ObjectRange=3DClass.create(Enumerable,{initialize:function(start,end,excl=
usive){this.start=3Dstart;this.end=3Dend;this.exclusive=3Dexclusive;},_ea=
ch:function(iterator){var =
value=3Dthis.start;while(this.include(value)){iterator(value);value=3Dval=
ue.succ();}},include:function(value){if(value<this.start)=0A=
return false;if(this.exclusive)=0A=
return value<this.end;return value<=3Dthis.end;}});var =
$R=3Dfunction(start,end,exclusive){return new =
ObjectRange(start,end,exclusive);};var =
Ajax=3D{getTransport:function(){return Try.these(function(){return new =
XMLHttpRequest()},function(){return new =
ActiveXObject('Msxml2.XMLHTTP')},function(){return new =
ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0};Ajax.=
Responders=3D{responders:[],_each:function(iterator){this.responders._eac=
h(iterator);},register:function(responder){if(!this.include(responder))=0A=
this.responders.push(responder);},unregister:function(responder){this.res=
ponders=3Dthis.responders.without(responder);},dispatch:function(callback=
,request,transport,json){this.each(function(responder){if(Object.isFuncti=
on(responder[callback])){try{responder[callback].apply(responder,[request=
,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumera=
ble);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCoun=
t++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=3DClass=
.create({initialize:function(options){this.options=3D{method:'post',async=
hronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UT=
F-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,=
options||{});this.options.method=3Dthis.options.method.toLowerCase();if(O=
bject.isString(this.options.parameters))=0A=
this.options.parameters=3Dthis.options.parameters.toQueryParams();else =
if(Object.isHash(this.options.parameters))=0A=
this.options.parameters=3Dthis.options.parameters.toObject();}});Ajax.Req=
uest=3DClass.create(Ajax.Base,{_complete:false,initialize:function($super=
,url,options){$super(options);this.transport=3DAjax.getTransport();this.r=
equest(url);},request:function(url){this.url=3Durl;this.method=3Dthis.opt=
ions.method;var =
params=3DObject.clone(this.options.parameters);if(!['get','post'].include=
(this.method)){params['_method']=3Dthis.method;this.method=3D'post';}=0A=
this.parameters=3Dparams;if(params=3DObject.toQueryString(params)){if(thi=
s.method=3D=3D'get')=0A=
this.url+=3D(this.url.include('?')?'&':'?')+params;else =
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
params+=3D'&_=3D';}=0A=
try{var response=3Dnew =
Ajax.Response(this);if(this.options.onCreate)this.options.onCreate(respon=
se);Ajax.Responders.dispatch('onCreate',this,response);this.transport.ope=
n(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.o=
ptions.asynchronous)this.respondToReadyState.bind(this).defer(1);this.tra=
nsport.onreadystatechange=3Dthis.onStateChange.bind(this);this.setRequest=
Headers();this.body=3Dthis.method=3D=3D'post'?(this.options.postBody||par=
ams):null;this.transport.send(this.body);if(!this.options.asynchronous&&t=
his.transport.overrideMimeType)=0A=
this.onStateChange();}=0A=
catch(e){this.dispatchException(e);}},onStateChange:function(){var =
readyState=3Dthis.transport.readyState;if(readyState>1&&!((readyState=3D=3D=
4)&&this._complete))=0A=
this.respondToReadyState(this.transport.readyState);},setRequestHeaders:f=
unction(){var =
headers=3D{'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prot=
otype.Version,'Accept':'text/javascript, text/html, application/xml, =
text/xml, =
*/*'};if(this.method=3D=3D'post'){headers['Content-type']=3Dthis.options.=
contentType+=0A=
(this.options.encoding?'; =
charset=3D'+this.options.encoding:'');if(this.transport.overrideMimeType&=
&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)=0A=
headers['Connection']=3D'close';}=0A=
if(typeof this.options.requestHeaders=3D=3D'object'){var =
extras=3Dthis.options.requestHeaders;if(Object.isFunction(extras.push))=0A=
for(var i=3D0,length=3Dextras.length;i<length;i+=3D2)=0A=
headers[extras[i]]=3Dextras[i+1];else=0A=
$H(extras).each(function(pair){headers[pair.key]=3Dpair.value});}=0A=
for(var name in headers)=0A=
this.transport.setRequestHeader(name,headers[name]);},success:function(){=
var =
status=3Dthis.getStatus();return!status||(status>=3D200&&status<300);},ge=
tStatus:function(){try{return this.transport.status||0;}catch(e){return =
0}},respondToReadyState:function(readyState){var =
state=3DAjax.Request.Events[readyState],response=3Dnew =
Ajax.Response(this);if(state=3D=3D'Complete'){try{this._complete=3Dtrue;(=
this.options['on'+response.status]||this.options['on'+(this.success()?'Su=
ccess':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON=
);}catch(e){this.dispatchException(e);}=0A=
var =
contentType=3Dresponse.getHeader('Content-type');if(this.options.evalJS=3D=
=3D'force'||(this.options.evalJS&&this.isSameOrigin()&&contentType&&conte=
ntType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)=
))=0A=
this.evalResponse();}=0A=
try{(this.options['on'+state]||Prototype.emptyFunction)(response,response=
.headerJSON);Ajax.Responders.dispatch('on'+state,this,response,response.h=
eaderJSON);}catch(e){this.dispatchException(e);}=0A=
if(state=3D=3D'Complete'){this.transport.onreadystatechange=3DPrototype.e=
mptyFunction;}},isSameOrigin:function(){var =
m=3Dthis.url.match(/^\s*https?:\/\/[^\/]*/);return!m||(m[0]=3D=3D'#{proto=
col}//#{domain}#{port}'.interpolate({protocol:location.protocol,domain:do=
cument.domain,port:location.port?':'+location.port:''}));},getHeader:func=
tion(name){try{return =
this.transport.getResponseHeader(name)||null;}catch(e){return =
null}},evalResponse:function(){try{return =
eval((this.transport.responseText||'').unfilterJSON());}catch(e){this.dis=
patchException(e);}},dispatchException:function(exception){(this.options.=
onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dis=
patch('onException',this,exception);}});Ajax.Request.Events=3D['Uninitial=
ized','Loading','Loaded','Interactive','Complete'];Ajax.Response=3DClass.=
create({initialize:function(request){this.request=3Drequest;var =
transport=3Dthis.transport=3Drequest.transport,readyState=3Dthis.readySta=
te=3Dtransport.readyState;if((readyState>2&&!Prototype.Browser.IE)||ready=
State=3D=3D4){this.status=3Dthis.getStatus();this.statusText=3Dthis.getSt=
atusText();this.responseText=3DString.interpret(transport.responseText);t=
his.headerJSON=3Dthis._getHeaderJSON();}=0A=
if(readyState=3D=3D4){var =
xml=3Dtransport.responseXML;this.responseXML=3DObject.isUndefined(xml)?nu=
ll:xml;this.responseJSON=3Dthis._getResponseJSON();}},status:0,statusText=
:'',getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){t=
ry{return =
this.transport.statusText||'';}catch(e){return''}},getHeader:Ajax.Request=
.prototype.getHeader,getAllHeaders:function(){try{return =
this.getAllResponseHeaders();}catch(e){return =
null}},getResponseHeader:function(name){return =
this.transport.getResponseHeader(name);},getAllResponseHeaders:function()=
{return =
this.transport.getAllResponseHeaders();},_getHeaderJSON:function(){var =
json=3Dthis.getHeader('X-JSON');if(!json)return =
null;json=3DdecodeURIComponent(escape(json));try{return =
json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrig=
in());}catch(e){this.request.dispatchException(e);}},_getResponseJSON:fun=
ction(){var =
options=3Dthis.request.options;if(!options.evalJSON||(options.evalJSON!=3D=
'force'&&!(this.getHeader('Content-type')||'').include('application/json'=
))||this.responseText.blank())=0A=
return null;try{return =
this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrig=
in());}catch(e){this.request.dispatchException(e);}}});Ajax.Updater=3DCla=
ss.create(Ajax.Request,{initialize:function($super,container,url,options)=
{this.container=3D{success:(container.success||container),failure:(contai=
ner.failure||(container.success?null:container))};options=3DObject.clone(=
options);var =
onComplete=3Doptions.onComplete;options.onComplete=3D(function(response,j=
son){this.updateContent(response.responseText);if(Object.isFunction(onCom=
plete))onComplete(response,json);}).bind(this);$super(url,options);},upda=
teContent:function(responseText){var =
receiver=3Dthis.container[this.success()?'success':'failure'],options=3Dt=
his.options;if(!options.evalScripts)responseText=3DresponseText.stripScri=
pts();if(receiver=3D$(receiver)){if(options.insertion){if(Object.isString=
(options.insertion)){var =
insertion=3D{};insertion[options.insertion]=3DresponseText;receiver.inser=
t(insertion);}=0A=
else options.insertion(receiver,responseText);}=0A=
else =
receiver.update(responseText);}}});Ajax.PeriodicalUpdater=3DClass.create(=
Ajax.Base,{initialize:function($super,container,url,options){$super(optio=
ns);this.onComplete=3Dthis.options.onComplete;this.frequency=3D(this.opti=
ons.frequency||2);this.decay=3D(this.options.decay||1);this.updater=3D{};=
this.container=3Dcontainer;this.url=3Durl;this.start();},start:function()=
{this.options.onComplete=3Dthis.updateComplete.bind(this);this.onTimerEve=
nt();},stop:function(){this.updater.options.onComplete=3Dundefined;clearT=
imeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,=
arguments);},updateComplete:function(response){if(this.options.decay){thi=
s.decay=3D(response.responseText=3D=3Dthis.lastText?this.decay*this.optio=
ns.decay:1);this.lastText=3Dresponse.responseText;}=0A=
this.timer=3Dthis.onTimerEvent.bind(this).delay(this.decay*this.frequency=
);},onTimerEvent:function(){this.updater=3Dnew =
Ajax.Updater(this.container,this.url,this.options);}});function =
$(element){if(arguments.length>1){for(var =
i=3D0,elements=3D[],length=3Darguments.length;i<length;i++)=0A=
elements.push($(arguments[i]));return elements;}=0A=
if(Object.isString(element))=0A=
element=3Ddocument.getElementById(element);return =
Element.extend(element);}=0A=
if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=3Dfuncti=
on(expression,parentElement){var results=3D[];var =
query=3Ddocument.evaluate(expression,$(parentElement)||document,null,XPat=
hResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var =
i=3D0,length=3Dquery.snapshotLength;i<length;i++)=0A=
results.push(Element.extend(query.snapshotItem(i)));return results;};}=0A=
if(!window.Node)var =
Node=3D{};if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRI=
BUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTI=
TY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DO=
CUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12});}=0A=
(function(){var =
element=3Dthis.Element;this.Element=3Dfunction(tagName,attributes){attrib=
utes=3Dattributes||{};tagName=3DtagName.toLowerCase();var =
cache=3DElement.cache;if(Prototype.Browser.IE&&attributes.name){tagName=3D=
'<'+tagName+' name=3D"'+attributes.name+'">';delete =
attributes.name;return =
Element.writeAttribute(document.createElement(tagName),attributes);}=0A=
if(!cache[tagName])cache[tagName]=3DElement.extend(document.createElement=
(tagName));return =
Element.writeAttribute(cache[tagName].cloneNode(false),attributes);};Obje=
ct.extend(this.Element,element||{});if(element)this.Element.prototype=3De=
lement.prototype;}).call(window);Element.cache=3D{};Element.Methods=3D{vi=
sible:function(element){return =
$(element).style.display!=3D'none';},toggle:function(element){element=3D$=
(element);Element[Element.visible(element)?'hide':'show'](element);return=
 =
element;},hide:function(element){element=3D$(element);element.style.displ=
ay=3D'none';return =
element;},show:function(element){element=3D$(element);element.style.displ=
ay=3D'';return =
element;},remove:function(element){element=3D$(element);element.parentNod=
e.removeChild(element);return =
element;},update:function(element,content){element=3D$(element);if(conten=
t&&content.toElement)content=3Dcontent.toElement();if(Object.isElement(co=
ntent))return =
element.update().insert(content);content=3DObject.toHTML(content);element=
.innerHTML=3Dcontent.stripScripts();content.evalScripts.bind(content).def=
er();return =
element;},replace:function(element,content){element=3D$(element);if(conte=
nt&&content.toElement)content=3Dcontent.toElement();else =
if(!Object.isElement(content)){content=3DObject.toHTML(content);var =
range=3Delement.ownerDocument.createRange();range.selectNode(element);con=
tent.evalScripts.bind(content).defer();content=3Drange.createContextualFr=
agment(content.stripScripts());}=0A=
element.parentNode.replaceChild(content,element);return =
element;},insert:function(element,insertions){element=3D$(element);if(Obj=
ect.isString(insertions)||Object.isNumber(insertions)||Object.isElement(i=
nsertions)||(insertions&&(insertions.toElement||insertions.toHTML)))=0A=
insertions=3D{bottom:insertions};var =
content,insert,tagName,childNodes;for(var position in =
insertions){content=3Dinsertions[position];position=3Dposition.toLowerCas=
e();insert=3DElement._insertionTranslations[position];if(content&&content=
.toElement)content=3Dcontent.toElement();if(Object.isElement(content)){in=
sert(element,content);continue;}=0A=
content=3DObject.toHTML(content);tagName=3D((position=3D=3D'before'||posi=
tion=3D=3D'after')?element.parentNode:element).tagName.toUpperCase();chil=
dNodes=3DElement._getContentFromAnonymousElement(tagName,content.stripScr=
ipts());if(position=3D=3D'top'||position=3D=3D'after')childNodes.reverse(=
);childNodes.each(insert.curry(element));content.evalScripts.bind(content=
).defer();}=0A=
return =
element;},wrap:function(element,wrapper,attributes){element=3D$(element);=
if(Object.isElement(wrapper))=0A=
$(wrapper).writeAttribute(attributes||{});else =
if(Object.isString(wrapper))wrapper=3Dnew =
Element(wrapper,attributes);else wrapper=3Dnew =
Element('div',wrapper);if(element.parentNode)=0A=
element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(elem=
ent);return wrapper;},inspect:function(element){element=3D$(element);var =
result=3D'<'+element.tagName.toLowerCase();$H({'id':'id','className':'cla=
ss'}).each(function(pair){var =
property=3Dpair.first(),attribute=3Dpair.last();var =
value=3D(element[property]||'').toString();if(value)result+=3D' =
'+attribute+'=3D'+value.inspect(true);});return =
result+'>';},recursivelyCollect:function(element,property){element=3D$(el=
ement);var elements=3D[];while(element=3Delement[property])=0A=
if(element.nodeType=3D=3D1)=0A=
elements.push(Element.extend(element));return =
elements;},ancestors:function(element){return =
$(element).recursivelyCollect('parentNode');},descendants:function(elemen=
t){return =
$(element).select("*");},firstDescendant:function(element){element=3D$(el=
ement).firstChild;while(element&&element.nodeType!=3D1)element=3Delement.=
nextSibling;return =
$(element);},immediateDescendants:function(element){if(!(element=3D$(elem=
ent).firstChild))return[];while(element&&element.nodeType!=3D1)element=3D=
element.nextSibling;if(element)return[element].concat($(element).nextSibl=
ings());return[];},previousSiblings:function(element){return =
$(element).recursivelyCollect('previousSibling');},nextSiblings:function(=
element){return =
$(element).recursivelyCollect('nextSibling');},siblings:function(element)=
{element=3D$(element);return =
element.previousSiblings().reverse().concat(element.nextSiblings());},mat=
ch:function(element,selector){if(Object.isString(selector))=0A=
selector=3Dnew Selector(selector);return =
selector.match($(element));},up:function(element,expression,index){elemen=
t=3D$(element);if(arguments.length=3D=3D1)return =
$(element.parentNode);var ancestors=3Delement.ancestors();return =
Object.isNumber(expression)?ancestors[expression]:Selector.findElement(an=
cestors,expression,index);},down:function(element,expression,index){eleme=
nt=3D$(element);if(arguments.length=3D=3D1)return =
element.firstDescendant();return =
Object.isNumber(expression)?element.descendants()[expression]:Element.sel=
ect(element,expression)[index||0];},previous:function(element,expression,=
index){element=3D$(element);if(arguments.length=3D=3D1)return =
$(Selector.handlers.previousElementSibling(element));var =
previousSiblings=3Delement.previousSiblings();return =
Object.isNumber(expression)?previousSiblings[expression]:Selector.findEle=
ment(previousSiblings,expression,index);},next:function(element,expressio=
n,index){element=3D$(element);if(arguments.length=3D=3D1)return =
$(Selector.handlers.nextElementSibling(element));var =
nextSiblings=3Delement.nextSiblings();return =
Object.isNumber(expression)?nextSiblings[expression]:Selector.findElement=
(nextSiblings,expression,index);},select:function(){var =
args=3D$A(arguments),element=3D$(args.shift());return =
Selector.findChildElements(element,args);},adjacent:function(){var =
args=3D$A(arguments),element=3D$(args.shift());return =
Selector.findChildElements(element.parentNode,args).without(element);},id=
entify:function(element){element=3D$(element);var =
id=3Delement.readAttribute('id'),self=3Darguments.callee;if(id)return =
id;do{id=3D'anonymous_element_'+self.counter++}while($(id));element.write=
Attribute('id',id);return =
id;},readAttribute:function(element,name){element=3D$(element);if(Prototy=
pe.Browser.IE){var =
t=3DElement._attributeTranslations.read;if(t.values[name])return =
t.values[name](element,name);if(t.names[name])name=3Dt.names[name];if(nam=
e.include(':')){return(!element.attributes||!element.attributes[name])?nu=
ll:element.attributes[name].value;}}=0A=
return =
element.getAttribute(name);},writeAttribute:function(element,name,value){=
element=3D$(element);var =
attributes=3D{},t=3DElement._attributeTranslations.write;if(typeof =
name=3D=3D'object')attributes=3Dname;else =
attributes[name]=3DObject.isUndefined(value)?true:value;for(var attr in =
attributes){name=3Dt.names[attr]||attr;value=3Dattributes[attr];if(t.valu=
es[attr])name=3Dt.values[attr](element,value);if(value=3D=3D=3Dfalse||val=
ue=3D=3D=3Dnull)=0A=
element.removeAttribute(name);else if(value=3D=3D=3Dtrue)=0A=
element.setAttribute(name,name);else element.setAttribute(name,value);}=0A=
return element;},getHeight:function(element){return =
$(element).getDimensions().height;},getWidth:function(element){return =
$(element).getDimensions().width;},classNames:function(element){return =
new =
Element.ClassNames(element);},hasClassName:function(element,className){if=
(!(element=3D$(element)))return;var =
elementClassName=3Delement.className;return(elementClassName.length>0&&(e=
lementClassName=3D=3DclassName||new =
RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));},addClass=
Name:function(element,className){if(!(element=3D$(element)))return;if(!el=
ement.hasClassName(className))=0A=
element.className+=3D(element.className?' ':'')+className;return =
element;},removeClassName:function(element,className){if(!(element=3D$(el=
ement)))return;element.className=3Delement.className.replace(new =
RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return =
element;},toggleClassName:function(element,className){if(!(element=3D$(el=
ement)))return;return =
element[element.hasClassName(className)?'removeClassName':'addClassName']=
(className);},cleanWhitespace:function(element){element=3D$(element);var =
node=3Delement.firstChild;while(node){var =
nextNode=3Dnode.nextSibling;if(node.nodeType=3D=3D3&&!/\S/.test(node.node=
Value))=0A=
element.removeChild(node);node=3DnextNode;}=0A=
return element;},empty:function(element){return =
$(element).innerHTML.blank();},descendantOf:function(element,ancestor){el=
ement=3D$(element),ancestor=3D$(ancestor);if(element.compareDocumentPosit=
ion)=0A=
return(element.compareDocumentPosition(ancestor)&8)=3D=3D=3D8;if(ancestor=
.contains)=0A=
return =
ancestor.contains(element)&&ancestor!=3D=3Delement;while(element=3Delemen=
t.parentNode)=0A=
if(element=3D=3Dancestor)return true;return =
false;},scrollTo:function(element){element=3D$(element);var =
pos=3Delement.cumulativeOffset();window.scrollTo(pos[0],pos[1]);return =
element;},getStyle:function(element,style){element=3D$(element);style=3Ds=
tyle=3D=3D'float'?'cssFloat':style.camelize();var =
value=3Delement.style[style];if(!value||value=3D=3D'auto'){var =
css=3Ddocument.defaultView.getComputedStyle(element,null);value=3Dcss?css=
[style]:null;}=0A=
if(style=3D=3D'opacity')return value?parseFloat(value):1.0;return =
value=3D=3D'auto'?null:value;},getOpacity:function(element){return =
$(element).getStyle('opacity');},setStyle:function(element,styles){elemen=
t=3D$(element);var =
elementStyle=3Delement.style,match;if(Object.isString(styles)){element.st=
yle.cssText+=3D';'+styles;return =
styles.include('opacity')?element.setOpacity(styles.match(/opacity:\s*(\d=
?\.?\d*)/)[1]):element;}=0A=
for(var property in styles)=0A=
if(property=3D=3D'opacity')element.setOpacity(styles[property]);else=0A=
elementStyle[(property=3D=3D'float'||property=3D=3D'cssFloat')?(Object.is=
Undefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):property]=3Ds=
tyles[property];return =
element;},setOpacity:function(element,value){element=3D$(element);element=
.style.opacity=3D(value=3D=3D1||value=3D=3D=3D'')?'':(value<0.00001)?0:va=
lue;return =
element;},getDimensions:function(element){element=3D$(element);var =
display=3Delement.getStyle('display');if(display!=3D'none'&&display!=3Dnu=
ll)=0A=
return{width:element.offsetWidth,height:element.offsetHeight};var =
els=3Delement.style;var originalVisibility=3Dels.visibility;var =
originalPosition=3Dels.position;var =
originalDisplay=3Dels.display;els.visibility=3D'hidden';els.position=3D'a=
bsolute';els.display=3D'block';var =
originalWidth=3Delement.clientWidth;var =
originalHeight=3Delement.clientHeight;els.display=3DoriginalDisplay;els.p=
osition=3DoriginalPosition;els.visibility=3DoriginalVisibility;return{wid=
th:originalWidth,height:originalHeight};},makePositioned:function(element=
){element=3D$(element);var =
pos=3DElement.getStyle(element,'position');if(pos=3D=3D'static'||!pos){el=
ement._madePositioned=3Dtrue;element.style.position=3D'relative';if(Proto=
type.Browser.Opera){element.style.top=3D0;element.style.left=3D0;}}=0A=
return =
element;},undoPositioned:function(element){element=3D$(element);if(elemen=
t._madePositioned){element._madePositioned=3Dundefined;element.style.posi=
tion=3Delement.style.top=3Delement.style.left=3Delement.style.bottom=3Del=
ement.style.right=3D'';}=0A=
return =
element;},makeClipping:function(element){element=3D$(element);if(element.=
_overflow)return =
element;element._overflow=3DElement.getStyle(element,'overflow')||'auto';=
if(element._overflow!=3D=3D'hidden')=0A=
element.style.overflow=3D'hidden';return =
element;},undoClipping:function(element){element=3D$(element);if(!element=
._overflow)return =
element;element.style.overflow=3Delement._overflow=3D=3D'auto'?'':element=
._overflow;element._overflow=3Dnull;return =
element;},cumulativeOffset:function(element){var =
valueT=3D0,valueL=3D0;do{valueT+=3Delement.offsetTop||0;valueL+=3Delement=
.offsetLeft||0;element=3Delement.offsetParent;}while(element);return =
Element._returnOffset(valueL,valueT);},positionedOffset:function(element)=
{var =
valueT=3D0,valueL=3D0;do{valueT+=3Delement.offsetTop||0;valueL+=3Delement=
.offsetLeft||0;element=3Delement.offsetParent;if(element){if(element.tagN=
ame.toUpperCase()=3D=3D'BODY')break;var =
p=3DElement.getStyle(element,'position');if(p!=3D=3D'static')break;}}whil=
e(element);return =
Element._returnOffset(valueL,valueT);},absolutize:function(element){eleme=
nt=3D$(element);if(element.getStyle('position')=3D=3D'absolute')return =
element;var offsets=3Delement.positionedOffset();var =
top=3Doffsets[1];var left=3Doffsets[0];var =
width=3Delement.clientWidth;var =
height=3Delement.clientHeight;element._originalLeft=3Dleft-parseFloat(ele=
ment.style.left||0);element._originalTop=3Dtop-parseFloat(element.style.t=
op||0);element._originalWidth=3Delement.style.width;element._originalHeig=
ht=3Delement.style.height;element.style.position=3D'absolute';element.sty=
le.top=3Dtop+'px';element.style.left=3Dleft+'px';element.style.width=3Dwi=
dth+'px';element.style.height=3Dheight+'px';return =
element;},relativize:function(element){element=3D$(element);if(element.ge=
tStyle('position')=3D=3D'relative')return =
element;element.style.position=3D'relative';var =
top=3DparseFloat(element.style.top||0)-(element._originalTop||0);var =
left=3DparseFloat(element.style.left||0)-(element._originalLeft||0);eleme=
nt.style.top=3Dtop+'px';element.style.left=3Dleft+'px';element.style.heig=
ht=3Delement._originalHeight;element.style.width=3Delement._originalWidth=
;return element;},cumulativeScrollOffset:function(element){var =
valueT=3D0,valueL=3D0;do{valueT+=3Delement.scrollTop||0;valueL+=3Delement=
.scrollLeft||0;element=3Delement.parentNode;}while(element);return =
Element._returnOffset(valueL,valueT);},getOffsetParent:function(element){=
if(element.offsetParent)return =
$(element.offsetParent);if(element=3D=3Ddocument.body)return =
$(element);while((element=3Delement.parentNode)&&element!=3Ddocument.body=
)=0A=
if(Element.getStyle(element,'position')!=3D'static')=0A=
return $(element);return =
$(document.body);},viewportOffset:function(forElement){var =
valueT=3D0,valueL=3D0;var =
element=3DforElement;do{valueT+=3Delement.offsetTop||0;valueL+=3Delement.=
offsetLeft||0;if(element.offsetParent=3D=3Ddocument.body&&Element.getStyl=
e(element,'position')=3D=3D'absolute')break;}while(element=3Delement.offs=
etParent);element=3DforElement;do{if(!Prototype.Browser.Opera||(element.t=
agName&&(element.tagName.toUpperCase()=3D=3D'BODY'))){valueT-=3Delement.s=
crollTop||0;valueL-=3Delement.scrollLeft||0;}}while(element=3Delement.par=
entNode);return =
Element._returnOffset(valueL,valueT);},clonePosition:function(element,sou=
rce){var =
options=3DObject.extend({setLeft:true,setTop:true,setWidth:true,setHeight=
:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=3D$(source);var =
p=3Dsource.viewportOffset();element=3D$(element);var delta=3D[0,0];var =
parent=3Dnull;if(Element.getStyle(element,'position')=3D=3D'absolute'){pa=
rent=3Delement.getOffsetParent();delta=3Dparent.viewportOffset();}=0A=
if(parent=3D=3Ddocument.body){delta[0]-=3Ddocument.body.offsetLeft;delta[=
1]-=3Ddocument.body.offsetTop;}=0A=
if(options.setLeft)element.style.left=3D(p[0]-delta[0]+options.offsetLeft=
)+'px';if(options.setTop)element.style.top=3D(p[1]-delta[1]+options.offse=
tTop)+'px';if(options.setWidth)element.style.width=3Dsource.offsetWidth+'=
px';if(options.setHeight)element.style.height=3Dsource.offsetHeight+'px';=
return =
element;}};Element.Methods.identify.counter=3D1;Object.extend(Element.Met=
hods,{getElementsBySelector:Element.Methods.select,childElements:Element.=
Methods.immediateDescendants});Element._attributeTranslations=3D{write:{n=
ames:{className:'class',htmlFor:'for'},values:{}}};if(Prototype.Browser.O=
pera){Element.Methods.getStyle=3DElement.Methods.getStyle.wrap(function(p=
roceed,element,style){switch(style){case'left':case'top':case'right':case=
'bottom':if(proceed(element,'position')=3D=3D=3D'static')return =
null;case'height':case'width':if(!Element.visible(element))return =
null;var =
dim=3DparseInt(proceed(element,style),10);if(dim!=3D=3Delement['offset'+s=
tyle.capitalize()])=0A=
return dim+'px';var =
properties;if(style=3D=3D=3D'height'){properties=3D['border-top-width','p=
adding-top','padding-bottom','border-bottom-width'];}=0A=
else{properties=3D['border-left-width','padding-left','padding-right','bo=
rder-right-width'];}=0A=
return properties.inject(dim,function(memo,property){var =
val=3Dproceed(element,property);return =
val=3D=3D=3Dnull?memo:memo-parseInt(val,10);})+'px';default:return =
proceed(element,style);}});Element.Methods.readAttribute=3DElement.Method=
s.readAttribute.wrap(function(proceed,element,attribute){if(attribute=3D=3D=
=3D'title')return element.title;return proceed(element,attribute);});}=0A=
else =
if(Prototype.Browser.IE){Element.Methods.getOffsetParent=3DElement.Method=
s.getOffsetParent.wrap(function(proceed,element){element=3D$(element);try=
{element.offsetParent}=0A=
catch(e){return $(document.body)}=0A=
var =
position=3Delement.getStyle('position');if(position!=3D=3D'static')return=
 proceed(element);element.setStyle({position:'relative'});var =
value=3Dproceed(element);element.setStyle({position:position});return =
value;});$w('positionedOffset =
viewportOffset').each(function(method){Element.Methods[method]=3DElement.=
Methods[method].wrap(function(proceed,element){element=3D$(element);try{e=
lement.offsetParent}=0A=
catch(e){return Element._returnOffset(0,0)}=0A=
var =
position=3Delement.getStyle('position');if(position!=3D=3D'static')return=
 proceed(element);var =
offsetParent=3Delement.getOffsetParent();if(offsetParent&&offsetParent.ge=
tStyle('position')=3D=3D=3D'fixed')=0A=
offsetParent.setStyle({zoom:1});element.setStyle({position:'relative'});v=
ar value=3Dproceed(element);element.setStyle({position:position});return =
value;});});Element.Methods.cumulativeOffset=3DElement.Methods.cumulative=
Offset.wrap(function(proceed,element){try{element.offsetParent}=0A=
catch(e){return Element._returnOffset(0,0)}=0A=
return =
proceed(element);});Element.Methods.getStyle=3Dfunction(element,style){el=
ement=3D$(element);style=3D(style=3D=3D'float'||style=3D=3D'cssFloat')?'s=
tyleFloat':style.camelize();var =
value=3Delement.style[style];if(!value&&element.currentStyle)value=3Delem=
ent.currentStyle[style];if(style=3D=3D'opacity'){if(value=3D(element.getS=
tyle('filter')||'').match(/alpha\(opacity=3D(.*)\)/))=0A=
if(value[1])return parseFloat(value[1])/100;return 1.0;}=0A=
if(value=3D=3D'auto'){if((style=3D=3D'width'||style=3D=3D'height')&&(elem=
ent.getStyle('display')!=3D'none'))=0A=
return element['offset'+style.capitalize()]+'px';return null;}=0A=
return =
value;};Element.Methods.setOpacity=3Dfunction(element,value){function =
stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}=0A=
element=3D$(element);var =
currentStyle=3Delement.currentStyle;if((currentStyle&&!currentStyle.hasLa=
yout)||(!currentStyle&&element.style.zoom=3D=3D'normal'))=0A=
element.style.zoom=3D1;var =
filter=3Delement.getStyle('filter'),style=3Delement.style;if(value=3D=3D1=
||value=3D=3D=3D''){(filter=3DstripAlpha(filter))?style.filter=3Dfilter:s=
tyle.removeAttribute('filter');return element;}else =
if(value<0.00001)value=3D0;style.filter=3DstripAlpha(filter)+'alpha(opaci=
ty=3D'+(value*100)+')';return =
element;};Element._attributeTranslations=3D{read:{names:{'class':'classNa=
me','for':'htmlFor'},values:{_getAttr:function(element,attribute){return =
element.getAttribute(attribute,2);},_getAttrNode:function(element,attribu=
te){var node=3Delement.getAttributeNode(attribute);return =
node?node.value:"";},_getEv:function(element,attribute){attribute=3Deleme=
nt.getAttribute(attribute);return =
attribute?attribute.toString().slice(23,-2):null;},_flag:function(element=
,attribute){return =
$(element).hasAttribute(attribute)?attribute:null;},style:function(elemen=
t){return =
element.style.cssText.toLowerCase();},title:function(element){return =
element.title;}}}};Element._attributeTranslations.write=3D{names:Object.e=
xtend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attr=
ibuteTranslations.read.names),values:{checked:function(element,value){ele=
ment.checked=3D!!value;},style:function(element,value){element.style.cssT=
ext=3Dvalue?value:'';}}};Element._attributeTranslations.has=3D{};$w('colS=
pan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength =
readOnly longDesc =
frameBorder').each(function(attr){Element._attributeTranslations.write.na=
mes[attr.toLowerCase()]=3Dattr;Element._attributeTranslations.has[attr.to=
LowerCase()]=3Dattr;});(function(v){Object.extend(v,{href:v._getAttr,src:=
v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked=
:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._ge=
tEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v=
._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onf=
ocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onke=
yup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchang=
e:v._getEv});})(Element._attributeTranslations.read.values);}=0A=
else =
if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Eleme=
nt.Methods.setOpacity=3Dfunction(element,value){element=3D$(element);elem=
ent.style.opacity=3D(value=3D=3D1)?0.999999:(value=3D=3D=3D'')?'':(value<=
0.00001)?0:value;return element;};}=0A=
else =
if(Prototype.Browser.WebKit){Element.Methods.setOpacity=3Dfunction(elemen=
t,value){element=3D$(element);element.style.opacity=3D(value=3D=3D1||valu=
e=3D=3D=3D'')?'':(value<0.00001)?0:value;if(value=3D=3D1)=0A=
if(element.tagName.toUpperCase()=3D=3D'IMG'&&element.width){element.width=
++;element.width--;}else try{var n=3Ddocument.createTextNode(' =
');element.appendChild(n);element.removeChild(n);}catch(e){}=0A=
return =
element;};Element.Methods.cumulativeOffset=3Dfunction(element){var =
valueT=3D0,valueL=3D0;do{valueT+=3Delement.offsetTop||0;valueL+=3Delement=
.offsetLeft||0;if(element.offsetParent=3D=3Ddocument.body)=0A=
if(Element.getStyle(element,'position')=3D=3D'absolute')break;element=3De=
lement.offsetParent;}while(element);return =
Element._returnOffset(valueL,valueT);};}=0A=
if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=3D=
function(element,content){element=3D$(element);if(content&&content.toElem=
ent)content=3Dcontent.toElement();if(Object.isElement(content))return =
element.update().insert(content);content=3DObject.toHTML(content);var =
tagName=3Delement.tagName.toUpperCase();if(tagName in =
Element._insertionTranslations.tags){$A(element.childNodes).each(function=
(node){element.removeChild(node)});Element._getContentFromAnonymousElemen=
t(tagName,content.stripScripts()).each(function(node){element.appendChild=
(node)});}=0A=
else =
element.innerHTML=3Dcontent.stripScripts();content.evalScripts.bind(conte=
nt).defer();return element;};}=0A=
if('outerHTML'in =
document.createElement('div')){Element.Methods.replace=3Dfunction(element=
,content){element=3D$(element);if(content&&content.toElement)content=3Dco=
ntent.toElement();if(Object.isElement(content)){element.parentNode.replac=
eChild(content,element);return element;}=0A=
content=3DObject.toHTML(content);var =
parent=3Delement.parentNode,tagName=3Dparent.tagName.toUpperCase();if(Ele=
ment._insertionTranslations.tags[tagName]){var =
nextSibling=3Delement.next();var =
fragments=3DElement._getContentFromAnonymousElement(tagName,content.strip=
Scripts());parent.removeChild(element);if(nextSibling)=0A=
fragments.each(function(node){parent.insertBefore(node,nextSibling)});els=
e=0A=
fragments.each(function(node){parent.appendChild(node)});}=0A=
else =
element.outerHTML=3Dcontent.stripScripts();content.evalScripts.bind(conte=
nt).defer();return element;};}=0A=
Element._returnOffset=3Dfunction(l,t){var =
result=3D[l,t];result.left=3Dl;result.top=3Dt;return =
result;};Element._getContentFromAnonymousElement=3Dfunction(tagName,html)=
{var div=3Dnew =
Element('div'),t=3DElement._insertionTranslations.tags[tagName];if(t){div=
.innerHTML=3Dt[0]+html+t[1];t[2].times(function(){div=3Ddiv.firstChild});=
}else div.innerHTML=3Dhtml;return =
$A(div.childNodes);};Element._insertionTranslations=3D{before:function(el=
ement,node){element.parentNode.insertBefore(node,element);},top:function(=
element,node){element.insertBefore(node,element.firstChild);},bottom:func=
tion(element,node){element.appendChild(node);},after:function(element,nod=
e){element.parentNode.insertBefore(node,element.nextSibling);},tags:{TABL=
E:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],=
TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><t=
r><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]=
}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.=
tags.TBODY,TH:this.tags.TD});}).call(Element._insertionTranslations);Elem=
ent.Methods.Simulated=3D{hasAttribute:function(element,attribute){attribu=
te=3DElement._attributeTranslations.has[attribute]||attribute;var =
node=3D$(element).getAttributeNode(attribute);return!!(node&&node.specifi=
ed);}};Element.Methods.ByTag=3D{};Object.extend(Element,Element.Methods);=
if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement('=
div')['__proto__']){window.HTMLElement=3D{};window.HTMLElement.prototype=3D=
document.createElement('div')['__proto__'];Prototype.BrowserFeatures.Elem=
entExtensions=3Dtrue;}=0A=
Element.extend=3D(function(){if(Prototype.BrowserFeatures.SpecificElement=
Extensions)=0A=
return Prototype.K;var Methods=3D{},ByTag=3DElement.Methods.ByTag;var =
extend=3DObject.extend(function(element){if(!element||element._extendedBy=
Prototype||element.nodeType!=3D1||element=3D=3Dwindow)return element;var =
methods=3DObject.clone(Methods),tagName=3Delement.tagName.toUpperCase(),p=
roperty,value;if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);for=
(property in =
methods){value=3Dmethods[property];if(Object.isFunction(value)&&!(propert=
y in element))=0A=
element[property]=3Dvalue.methodize();}=0A=
element._extendedByPrototype=3DPrototype.emptyFunction;return =
element;},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtens=
ions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Elemen=
t.Methods.Simulated);}}});extend.refresh();return =
extend;})();Element.hasAttribute=3Dfunction(element,attribute){if(element=
.hasAttribute)return element.hasAttribute(attribute);return =
Element.Methods.Simulated.hasAttribute(element,attribute);};Element.addMe=
thods=3Dfunction(methods){var =
F=3DPrototype.BrowserFeatures,T=3DElement.Methods.ByTag;if(!methods){Obje=
ct.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Meth=
ods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Method=
s),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.=
Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)});}=0A=
if(arguments.length=3D=3D2){var =
tagName=3Dmethods;methods=3Darguments[1];}=0A=
if(!tagName)Object.extend(Element.Methods,methods||{});else{if(Object.isA=
rray(tagName))tagName.each(extend);else extend(tagName);}=0A=
function =
extend(tagName){tagName=3DtagName.toUpperCase();if(!Element.Methods.ByTag=
[tagName])=0A=
Element.Methods.ByTag[tagName]=3D{};Object.extend(Element.Methods.ByTag[t=
agName],methods);}=0A=
function =
copy(methods,destination,onlyIfAbsent){onlyIfAbsent=3DonlyIfAbsent||false=
;for(var property in methods){var =
value=3Dmethods[property];if(!Object.isFunction(value))continue;if(!onlyI=
fAbsent||!(property in destination))=0A=
destination[property]=3Dvalue.methodize();}}=0A=
function findDOMClass(tagName){var klass;var =
trans=3D{"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIE=
LDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory=
","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Headi=
ng","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG"=
:"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol",=
"THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR"=
:"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRA=
ME":"IFrame"};if(trans[tagName])klass=3D'HTML'+trans[tagName]+'Element';i=
f(window[klass])return =
window[klass];klass=3D'HTML'+tagName+'Element';if(window[klass])return =
window[klass];klass=3D'HTML'+tagName.capitalize()+'Element';if(window[kla=
ss])return =
window[klass];window[klass]=3D{};window[klass].prototype=3Ddocument.creat=
eElement(tagName)['__proto__'];return window[klass];}=0A=
if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(=
Element.Methods.Simulated,HTMLElement.prototype,true);}=0A=
if(F.SpecificElementExtensions){for(var tag in =
Element.Methods.ByTag){var =
klass=3DfindDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[ta=
g],klass.prototype);}}=0A=
Object.extend(Element,Element.Methods);delete =
Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.=
cache=3D{};};document.viewport=3D{getDimensions:function(){var =
dimensions=3D{},B=3DPrototype.Browser;$w('width =
height').each(function(d){var =
D=3Dd.capitalize();if(B.WebKit&&!document.evaluate){dimensions[d]=3Dself[=
'inner'+D];}else =
if(B.Opera&&parseFloat(window.opera.version())<9.5){dimensions[d]=3Ddocum=
ent.body['client'+D]}else{dimensions[d]=3Ddocument.documentElement['clien=
t'+D];}});return dimensions;},getWidth:function(){return =
this.getDimensions().width;},getHeight:function(){return =
this.getDimensions().height;},getScrollOffsets:function(){return =
Element._returnOffset(window.pageXOffset||document.documentElement.scroll=
Left||document.body.scrollLeft,window.pageYOffset||document.documentEleme=
nt.scrollTop||document.body.scrollTop);}};var =
Selector=3DClass.create({initialize:function(expression){this.expression=3D=
expression.strip();if(this.shouldUseSelectorsAPI()){this.mode=3D'selector=
sAPI';}else =
if(this.shouldUseXPath()){this.mode=3D'xpath';this.compileXPathMatcher();=
}else{this.mode=3D"normal";this.compileMatcher();}},shouldUseXPath:functi=
on(){if(!Prototype.BrowserFeatures.XPath)return false;var =
e=3Dthis.expression;if(Prototype.Browser.WebKit&&(e.include("-of-type")||=
e.include(":empty")))=0A=
return false;if((/(\[[\w-]*?:|:checked)/).test(e))=0A=
return false;return =
true;},shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.Sel=
ectorsAPI)return false;if(!Selector._div)Selector._div=3Dnew =
Element('div');try{Selector._div.querySelector(this.expression);}catch(e)=
{return false;}=0A=
return true;},compileMatcher:function(){var =
e=3Dthis.expression,ps=3DSelector.patterns,h=3DSelector.handlers,c=3DSele=
ctor.criteria,le,p,m;if(Selector._cache[e]){this.matcher=3DSelector._cach=
e[e];return;}=0A=
this.matcher=3D["this.matcher =3D function(root) {","var r =3D root, h =
=3D Selector.handlers, c =3D false, =
n;"];while(e&&le!=3De&&(/\S/).test(e)){le=3De;for(var i in =
ps){p=3Dps[i];if(m=3De.match(p)){this.matcher.push(Object.isFunction(c[i]=
)?c[i](m):new =
Template(c[i]).evaluate(m));e=3De.replace(m[0],'');break;}}}=0A=
this.matcher.push("return =
h.unique(n);\n}");eval(this.matcher.join('\n'));Selector._cache[this.expr=
ession]=3Dthis.matcher;},compileXPathMatcher:function(){var =
e=3Dthis.expression,ps=3DSelector.patterns,x=3DSelector.xpath,le,m;if(Sel=
ector._cache[e]){this.xpath=3DSelector._cache[e];return;}=0A=
this.matcher=3D['.//*'];while(e&&le!=3De&&(/\S/).test(e)){le=3De;for(var =
i in =
ps){if(m=3De.match(ps[i])){this.matcher.push(Object.isFunction(x[i])?x[i]=
(m):new Template(x[i]).evaluate(m));e=3De.replace(m[0],'');break;}}}=0A=
this.xpath=3Dthis.matcher.join('');Selector._cache[this.expression]=3Dthi=
s.xpath;},findElements:function(root){root=3Droot||document;var =
e=3Dthis.expression,results;switch(this.mode){case'selectorsAPI':if(root!=
=3D=3Ddocument){var oldId=3Droot.id,id=3D$(root).identify();e=3D"#"+id+" =
"+e;}=0A=
results=3D$A(root.querySelectorAll(e)).map(Element.extend);root.id=3DoldI=
d;return results;case'xpath':return =
document._getElementsByXPath(this.xpath,root);default:return =
this.matcher(root);}},match:function(element){this.tokens=3D[];var =
e=3Dthis.expression,ps=3DSelector.patterns,as=3DSelector.assertions;var =
le,p,m;while(e&&le!=3D=3De&&(/\S/).test(e)){le=3De;for(var i in =
ps){p=3Dps[i];if(m=3De.match(p)){if(as[i]){this.tokens.push([i,Object.clo=
ne(m)]);e=3De.replace(m[0],'');}else{return =
this.findElements(document).include(element);}}}}=0A=
var match=3Dtrue,name,matches;for(var =
i=3D0,token;token=3Dthis.tokens[i];i++){name=3Dtoken[0],matches=3Dtoken[1=
];if(!Selector.assertions[name](element,matches)){match=3Dfalse;break;}}=0A=
return match;},toString:function(){return =
this.expression;},inspect:function(){return"#<Selector:"+this.expression.=
inspect()+">";}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//=
*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:'/followin=
g-sibling::*',tagName:function(m){if(m[1]=3D=3D'*')return'';return"[local=
-name()=3D'"+m[1].toLowerCase()+"' or =
local-name()=3D'"+m[1].toUpperCase()+"']";},className:"[contains(concat('=
 ', @class, ' '), ' #{1} =
')]",id:"[@id=3D'#{1}']",attrPresence:function(m){m[1]=3Dm[1].toLowerCase=
();return new =
Template("[@#{1}]").evaluate(m);},attr:function(m){m[1]=3Dm[1].toLowerCas=
e();m[3]=3Dm[5]||m[6];return new =
Template(Selector.xpath.operators[m[2]]).evaluate(m);},pseudo:function(m)=
{var =
h=3DSelector.xpath.pseudos[m[1]];if(!h)return'';if(Object.isFunction(h))r=
eturn h(m);return new =
Template(Selector.xpath.pseudos[m[1]]).evaluate(m);},operators:{'=3D':"[@=
#{1}=3D'#{3}']",'!=3D':"[@#{1}!=3D'#{3}']",'^=3D':"[starts-with(@#{1}, =
'#{3}')]",'$=3D':"[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",'*=3D':"[contains(@#{1}, =
'#{3}')]",'~=3D':"[contains(concat(' ', @#{1}, ' '), ' #{3} =
')]",'|=3D':"[contains(concat('-', @#{1}, '-'), =
'-#{3}-')]"},pseudos:{'first-child':'[not(preceding-sibling::*)]','last-c=
hild':'[not(following-sibling::*)]','only-child':'[not(preceding-sibling:=
:* or following-sibling::*)]','empty':"[count(*) =3D 0 and =
(count(text()) =3D 0)]",'checked':"[@checked]",'disabled':"[(@disabled) =
and (@type!=3D'hidden')]",'enabled':"[not(@disabled) and =
(@type!=3D'hidden')]",'not':function(m){var =
e=3Dm[6],p=3DSelector.patterns,x=3DSelector.xpath,le,v;var =
exclusion=3D[];while(e&&le!=3De&&(/\S/).test(e)){le=3De;for(var i in =
p){if(m=3De.match(p[i])){v=3DObject.isFunction(x[i])?x[i](m):new =
Template(x[i]).evaluate(m);exclusion.push("("+v.substring(1,v.length-1)+"=
)");e=3De.replace(m[0],'');break;}}}=0A=
return"[not("+exclusion.join(" and =
")+")]";},'nth-child':function(m){return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) =
",m);},'nth-last-child':function(m){return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) =
",m);},'nth-of-type':function(m){return =
Selector.xpath.pseudos.nth("position() =
",m);},'nth-last-of-type':function(m){return =
Selector.xpath.pseudos.nth("(last() + 1 - position()) =
",m);},'first-of-type':function(m){m[6]=3D"1";return =
Selector.xpath.pseudos['nth-of-type'](m);},'last-of-type':function(m){m[6=
]=3D"1";return =
Selector.xpath.pseudos['nth-last-of-type'](m);},'only-of-type':function(m=
){var p=3DSelector.xpath.pseudos;return =
p['first-of-type'](m)+p['last-of-type'](m);},nth:function(fragment,m){var=
 =
mm,formula=3Dm[6],predicate;if(formula=3D=3D'even')formula=3D'2n+0';if(fo=
rmula=3D=3D'odd')formula=3D'2n+1';if(mm=3Dformula.match(/^(\d+)$/))=0A=
return'['+fragment+"=3D =
"+mm[1]+']';if(mm=3Dformula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=3D=
=3D"-")mm[1]=3D-1;var a=3Dmm[1]?Number(mm[1]):1;var =
b=3Dmm[2]?Number(mm[2]):0;predicate=3D"[((#{fragment} - #{b}) mod #{a} =
=3D 0) and "+"((#{fragment} - #{b}) div #{a} >=3D 0)]";return new =
Template(predicate).evaluate({fragment:fragment,a:a,b:b});}}}},criteria:{=
tagName:'n =3D h.tagName(n, r, "#{1}", c);      c =3D =
false;',className:'n =3D h.className(n, r, "#{1}", c);    c =3D =
false;',id:'n =3D h.id(n, r, "#{1}", c);           c =3D =
false;',attrPresence:'n =3D h.attrPresence(n, r, "#{1}", c); c =3D =
false;',attr:function(m){m[3]=3D(m[5]||m[6]);return new Template('n =3D =
h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c =3D =
false;').evaluate(m);},pseudo:function(m){if(m[6])m[6]=3Dm[6].replace(/"/=
g,'\\"');return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);},descendant:'c =3D "descendant";',child:'c =3D =
"child";',adjacent:'c =3D "adjacent";',laterSibling:'c =3D =
"laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adja=
cent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^=
#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|la=
st|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\=
((.*?)\))?(\b|$|(?=3D\s|[:+~>]))/,attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/,=
attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\4]*?)\4|([^=
'"][^\]]*?)))?\]/},assertions:{tagName:function(element,matches){return =
matches[1].toUpperCase()=3D=3Delement.tagName.toUpperCase();},className:f=
unction(element,matches){return =
Element.hasClassName(element,matches[1]);},id:function(element,matches){r=
eturn =
element.id=3D=3D=3Dmatches[1];},attrPresence:function(element,matches){re=
turn =
Element.hasAttribute(element,matches[1]);},attr:function(element,matches)=
{var nodeValue=3DElement.readAttribute(element,matches[1]);return =
nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6=
]);}},handlers:{concat:function(a,b){for(var i=3D0,node;node=3Db[i];i++)=0A=
a.push(node);return a;},mark:function(nodes){var =
_true=3DPrototype.emptyFunction;for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
node._countedByPrototype=3D_true;return =
nodes;},unmark:function(nodes){for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
node._countedByPrototype=3Dundefined;return =
nodes;},index:function(parentNode,reverse,ofType){parentNode._countedByPr=
ototype=3DPrototype.emptyFunction;if(reverse){for(var =
nodes=3DparentNode.childNodes,i=3Dnodes.length-1,j=3D1;i>=3D0;i--){var =
node=3Dnodes[i];if(node.nodeType=3D=3D1&&(!ofType||node._countedByPrototy=
pe))node.nodeIndex=3Dj++;}}else{for(var =
i=3D0,j=3D1,nodes=3DparentNode.childNodes;node=3Dnodes[i];i++)=0A=
if(node.nodeType=3D=3D1&&(!ofType||node._countedByPrototype))node.nodeInd=
ex=3Dj++;}},unique:function(nodes){if(nodes.length=3D=3D0)return =
nodes;var results=3D[],n;for(var i=3D0,l=3Dnodes.length;i<l;i++)=0A=
if(!(n=3Dnodes[i])._countedByPrototype){n._countedByPrototype=3DPrototype=
.emptyFunction;results.push(Element.extend(n));}=0A=
return =
Selector.handlers.unmark(results);},descendant:function(nodes){var =
h=3DSelector.handlers;for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
h.concat(results,node.getElementsByTagName('*'));return =
results;},child:function(nodes){var h=3DSelector.handlers;for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++){for(var =
j=3D0,child;child=3Dnode.childNodes[j];j++)=0A=
if(child.nodeType=3D=3D1&&child.tagName!=3D'!')results.push(child);}=0A=
return results;},adjacent:function(nodes){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++){var =
next=3Dthis.nextElementSibling(node);if(next)results.push(next);}=0A=
return results;},laterSibling:function(nodes){var =
h=3DSelector.handlers;for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
h.concat(results,Element.nextSiblings(node));return =
results;},nextElementSibling:function(node){while(node=3Dnode.nextSibling=
)=0A=
if(node.nodeType=3D=3D1)return node;return =
null;},previousElementSibling:function(node){while(node=3Dnode.previousSi=
bling)=0A=
if(node.nodeType=3D=3D1)return node;return =
null;},tagName:function(nodes,root,tagName,combinator){var =
uTagName=3DtagName.toUpperCase();var =
results=3D[],h=3DSelector.handlers;if(nodes){if(combinator){if(combinator=
=3D=3D"descendant"){for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
h.concat(results,node.getElementsByTagName(tagName));return =
results;}else nodes=3Dthis[combinator](nodes);if(tagName=3D=3D"*")return =
nodes;}=0A=
for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
if(node.tagName.toUpperCase()=3D=3D=3DuTagName)results.push(node);return =
results;}else return =
root.getElementsByTagName(tagName);},id:function(nodes,root,id,combinator=
){var =
targetNode=3D$(id),h=3DSelector.handlers;if(!targetNode)return[];if(!node=
s&&root=3D=3Ddocument)return[targetNode];if(nodes){if(combinator){if(comb=
inator=3D=3D'child'){for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
if(targetNode.parentNode=3D=3Dnode)return[targetNode];}else =
if(combinator=3D=3D'descendant'){for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
if(Element.descendantOf(targetNode,node))return[targetNode];}else =
if(combinator=3D=3D'adjacent'){for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
if(Selector.handlers.previousElementSibling(targetNode)=3D=3Dnode)=0A=
return[targetNode];}else nodes=3Dh[combinator](nodes);}=0A=
for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
if(node=3D=3DtargetNode)return[targetNode];return[];}=0A=
return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[]=
;},className:function(nodes,root,className,combinator){if(nodes&&combinat=
or)nodes=3Dthis[combinator](nodes);return =
Selector.handlers.byClassName(nodes,root,className);},byClassName:functio=
n(nodes,root,className){if(!nodes)nodes=3DSelector.handlers.descendant([r=
oot]);var needle=3D' '+className+' ';for(var =
i=3D0,results=3D[],node,nodeClassName;node=3Dnodes[i];i++){nodeClassName=3D=
node.className;if(nodeClassName.length=3D=3D0)continue;if(nodeClassName=3D=
=3DclassName||(' '+nodeClassName+' ').include(needle))=0A=
results.push(node);}=0A=
return =
results;},attrPresence:function(nodes,root,attr,combinator){if(!nodes)nod=
es=3Droot.getElementsByTagName("*");if(nodes&&combinator)nodes=3Dthis[com=
binator](nodes);var results=3D[];for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
if(Element.hasAttribute(node,attr))results.push(node);return =
results;},attr:function(nodes,root,attr,value,operator,combinator){if(!no=
des)nodes=3Droot.getElementsByTagName("*");if(nodes&&combinator)nodes=3Dt=
his[combinator](nodes);var =
handler=3DSelector.operators[operator],results=3D[];for(var =
i=3D0,node;node=3Dnodes[i];i++){var =
nodeValue=3DElement.readAttribute(node,attr);if(nodeValue=3D=3D=3Dnull)co=
ntinue;if(handler(nodeValue,value))results.push(node);}=0A=
return =
results;},pseudo:function(nodes,name,value,root,combinator){if(nodes&&com=
binator)nodes=3Dthis[combinator](nodes);if(!nodes)nodes=3Droot.getElement=
sByTagName("*");return =
Selector.pseudos[name](nodes,value,root);}},pseudos:{'first-child':functi=
on(nodes,value,root){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++){if(Selector.handlers.previou=
sElementSibling(node))continue;results.push(node);}=0A=
return results;},'last-child':function(nodes,value,root){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++){if(Selector.handlers.nextEle=
mentSibling(node))continue;results.push(node);}=0A=
return results;},'only-child':function(nodes,value,root){var =
h=3DSelector.handlers;for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))=0A=
results.push(node);return =
results;},'nth-child':function(nodes,formula,root){return =
Selector.pseudos.nth(nodes,formula,root);},'nth-last-child':function(node=
s,formula,root){return =
Selector.pseudos.nth(nodes,formula,root,true);},'nth-of-type':function(no=
des,formula,root){return =
Selector.pseudos.nth(nodes,formula,root,false,true);},'nth-last-of-type':=
function(nodes,formula,root){return =
Selector.pseudos.nth(nodes,formula,root,true,true);},'first-of-type':func=
tion(nodes,formula,root){return =
Selector.pseudos.nth(nodes,"1",root,false,true);},'last-of-type':function=
(nodes,formula,root){return =
Selector.pseudos.nth(nodes,"1",root,true,true);},'only-of-type':function(=
nodes,formula,root){var p=3DSelector.pseudos;return =
p['last-of-type'](p['first-of-type'](nodes,formula,root),formula,root);},=
getIndices:function(a,b,total){if(a=3D=3D0)return b>0?[b]:[];return =
$R(1,total).inject([],function(memo,i){if(0=3D=3D(i-b)%a&&(i-b)/a>=3D0)me=
mo.push(i);return =
memo;});},nth:function(nodes,formula,root,reverse,ofType){if(nodes.length=
=3D=3D0)return[];if(formula=3D=3D'even')formula=3D'2n+0';if(formula=3D=3D=
'odd')formula=3D'2n+1';var =
h=3DSelector.handlers,results=3D[],indexed=3D[],m;h.mark(nodes);for(var =
i=3D0,node;node=3Dnodes[i];i++){if(!node.parentNode._countedByPrototype){=
h.index(node.parentNode,reverse,ofType);indexed.push(node.parentNode);}}=0A=
if(formula.match(/^\d+$/)){formula=3DNumber(formula);for(var =
i=3D0,node;node=3Dnodes[i];i++)=0A=
if(node.nodeIndex=3D=3Dformula)results.push(node);}else =
if(m=3Dformula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=3D=3D"-")m[1]=3D=
-1;var a=3Dm[1]?Number(m[1]):1;var b=3Dm[2]?Number(m[2]):0;var =
indices=3DSelector.pseudos.getIndices(a,b,nodes.length);for(var =
i=3D0,node,l=3Dindices.length;node=3Dnodes[i];i++){for(var j=3D0;j<l;j++)=0A=
if(node.nodeIndex=3D=3Dindices[j])results.push(node);}}=0A=
h.unmark(nodes);h.unmark(indexed);return =
results;},'empty':function(nodes,value,root){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++){if(node.tagName=3D=3D'!'||no=
de.firstChild)continue;results.push(node);}=0A=
return results;},'not':function(nodes,selector,root){var =
h=3DSelector.handlers,selectorType,m;var exclusions=3Dnew =
Selector(selector).findElements(root);h.mark(exclusions);for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
if(!node._countedByPrototype)results.push(node);h.unmark(exclusions);retu=
rn results;},'enabled':function(nodes,value,root){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
if(!node.disabled&&(!node.type||node.type!=3D=3D'hidden'))=0A=
results.push(node);return =
results;},'disabled':function(nodes,value,root){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
if(node.disabled)results.push(node);return =
results;},'checked':function(nodes,value,root){for(var =
i=3D0,results=3D[],node;node=3Dnodes[i];i++)=0A=
if(node.checked)results.push(node);return =
results;}},operators:{'=3D':function(nv,v){return =
nv=3D=3Dv;},'!=3D':function(nv,v){return =
nv!=3Dv;},'^=3D':function(nv,v){return =
nv=3D=3Dv||nv&&nv.startsWith(v);},'$=3D':function(nv,v){return =
nv=3D=3Dv||nv&&nv.endsWith(v);},'*=3D':function(nv,v){return =
nv=3D=3Dv||nv&&nv.include(v);},'$=3D':function(nv,v){return =
nv.endsWith(v);},'*=3D':function(nv,v){return =
nv.include(v);},'~=3D':function(nv,v){return(' '+nv+' ').include(' '+v+' =
');},'|=3D':function(nv,v){return('-'+(nv||"").toUpperCase()+'-').include=
('-'+(v||"").toUpperCase()+'-');}},split:function(expression){var =
expressions=3D[];expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$=
)/,function(m){expressions.push(m[1].strip());});return =
expressions;},matchElements:function(elements,expression){var =
matches=3D$$(expression),h=3DSelector.handlers;h.mark(matches);for(var =
i=3D0,results=3D[],element;element=3Delements[i];i++)=0A=
if(element._countedByPrototype)results.push(element);h.unmark(matches);re=
turn =
results;},findElement:function(elements,expression,index){if(Object.isNum=
ber(expression)){index=3Dexpression;expression=3Dfalse;}=0A=
return =
Selector.matchElements(elements,expression||'*')[index||0];},findChildEle=
ments:function(element,expressions){expressions=3DSelector.split(expressi=
ons.join(','));var results=3D[],h=3DSelector.handlers;for(var =
i=3D0,l=3Dexpressions.length,selector;i<l;i++){selector=3Dnew =
Selector(expressions[i].strip());h.concat(results,selector.findElements(e=
lement));}=0A=
return(l>1)?h.unique(results):results;}});if(Prototype.Browser.IE){Object=
.extend(Selector.handlers,{concat:function(a,b){for(var =
i=3D0,node;node=3Db[i];i++)=0A=
if(node.tagName!=3D=3D"!")a.push(node);return =
a;},unmark:function(nodes){for(var i=3D0,node;node=3Dnodes[i];i++)=0A=
node.removeAttribute('_countedByPrototype');return nodes;}});}=0A=
function $$(){return Selector.findChildElements(document,$A(arguments));}=0A=
var Form=3D{reset:function(form){$(form).reset();return =
form;},serializeElements:function(elements,options){if(typeof =
options!=3D'object')options=3D{hash:!!options};else =
if(Object.isUndefined(options.hash))options.hash=3Dtrue;var =
key,value,submitted=3Dfalse,submit=3Doptions.submit;var =
data=3Delements.inject({},function(result,element){if(!element.disabled&&=
element.name){key=3Delement.name;value=3D$(element).getValue();if(value!=3D=
null&&element.type!=3D'file'&&(element.type!=3D'submit'||(!submitted&&sub=
mit!=3D=3Dfalse&&(!submit||key=3D=3Dsubmit)&&(submitted=3Dtrue)))){if(key=
 in =
result){if(!Object.isArray(result[key]))result[key]=3D[result[key]];resul=
t[key].push(value);}=0A=
else result[key]=3Dvalue;}}=0A=
return result;});return =
options.hash?data:Object.toQueryString(data);}};Form.Methods=3D{serialize=
:function(form,options){return =
Form.serializeElements(Form.getElements(form),options);},getElements:func=
tion(form){return =
$A($(form).getElementsByTagName('*')).inject([],function(elements,child){=
if(Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
elements.push(Element.extend(child));return =
elements;});},getInputs:function(form,typeName,name){form=3D$(form);var =
inputs=3Dform.getElementsByTagName('input');if(!typeName&&!name)return =
$A(inputs).map(Element.extend);for(var =
i=3D0,matchingInputs=3D[],length=3Dinputs.length;i<length;i++){var =
input=3Dinputs[i];if((typeName&&input.type!=3DtypeName)||(name&&input.nam=
e!=3Dname))=0A=
continue;matchingInputs.push(Element.extend(input));}=0A=
return =
matchingInputs;},disable:function(form){form=3D$(form);Form.getElements(f=
orm).invoke('disable');return =
form;},enable:function(form){form=3D$(form);Form.getElements(form).invoke=
('enable');return form;},findFirstElement:function(form){var =
elements=3D$(form).getElements().findAll(function(element){return'hidden'=
!=3Delement.type&&!element.disabled;});var =
firstByIndex=3Delements.findAll(function(element){return =
element.hasAttribute('tabIndex')&&element.tabIndex>=3D0;}).sortBy(functio=
n(element){return element.tabIndex}).first();return =
firstByIndex?firstByIndex:elements.find(function(element){return['input',=
'select','textarea'].include(element.tagName.toLowerCase());});},focusFir=
stElement:function(form){form=3D$(form);form.findFirstElement().activate(=
);return =
form;},request:function(form,options){form=3D$(form),options=3DObject.clo=
ne(options||{});var =
params=3Doptions.parameters,action=3Dform.readAttribute('action')||'';if(=
action.blank())action=3Dwindow.location.href;options.parameters=3Dform.se=
rialize(true);if(params){if(Object.isString(params))params=3Dparams.toQue=
ryParams();Object.extend(options.parameters,params);}=0A=
if(form.hasAttribute('method')&&!options.method)=0A=
options.method=3Dform.method;return new =
Ajax.Request(action,options);}};Form.Element=3D{focus:function(element){$=
(element).focus();return =
element;},select:function(element){$(element).select();return =
element;}};Form.Element.Methods=3D{serialize:function(element){element=3D=
$(element);if(!element.disabled&&element.name){var =
value=3Delement.getValue();if(value!=3Dundefined){var =
pair=3D{};pair[element.name]=3Dvalue;return Object.toQueryString(pair);}}=0A=
return'';},getValue:function(element){element=3D$(element);var =
method=3Delement.tagName.toLowerCase();return =
Form.Element.Serializers[method](element);},setValue:function(element,val=
ue){element=3D$(element);var =
method=3Delement.tagName.toLowerCase();Form.Element.Serializers[method](e=
lement,value);return =
element;},clear:function(element){$(element).value=3D'';return =
element;},present:function(element){return =
$(element).value!=3D'';},activate:function(element){element=3D$(element);=
try{element.focus();if(element.select&&(element.tagName.toLowerCase()!=3D=
'input'||!['button','reset','submit'].include(element.type)))=0A=
element.select();}catch(e){}=0A=
return =
element;},disable:function(element){element=3D$(element);element.disabled=
=3Dtrue;return =
element;},enable:function(element){element=3D$(element);element.disabled=3D=
false;return element;}};var Field=3DForm.Element;var =
$F=3DForm.Element.Methods.getValue;Form.Element.Serializers=3D{input:func=
tion(element,value){switch(element.type.toLowerCase()){case'checkbox':cas=
e'radio':return =
Form.Element.Serializers.inputSelector(element,value);default:return =
Form.Element.Serializers.textarea(element,value);}},inputSelector:functio=
n(element,value){if(Object.isUndefined(value))return =
element.checked?element.value:null;else =
element.checked=3D!!value;},textarea:function(element,value){if(Object.is=
Undefined(value))return element.value;else =
element.value=3Dvalue;},select:function(element,value){if(Object.isUndefi=
ned(value))=0A=
return =
this[element.type=3D=3D'select-one'?'selectOne':'selectMany'](element);el=
se{var opt,currentValue,single=3D!Object.isArray(value);for(var =
i=3D0,length=3Delement.length;i<length;i++){opt=3Delement.options[i];curr=
entValue=3Dthis.optionValue(opt);if(single){if(currentValue=3D=3Dvalue){o=
pt.selected=3Dtrue;return;}}=0A=
else =
opt.selected=3Dvalue.include(currentValue);}}},selectOne:function(element=
){var index=3Delement.selectedIndex;return =
index>=3D0?this.optionValue(element.options[index]):null;},selectMany:fun=
ction(element){var values,length=3Delement.length;if(!length)return =
null;for(var i=3D0,values=3D[];i<length;i++){var =
opt=3Delement.options[i];if(opt.selected)values.push(this.optionValue(opt=
));}=0A=
return values;},optionValue:function(opt){return =
Element.extend(opt).hasAttribute('value')?opt.value:opt.text;}};Abstract.=
TimedObserver=3DClass.create(PeriodicalExecuter,{initialize:function($sup=
er,element,frequency,callback){$super(callback,frequency);this.element=3D=
$(element);this.lastValue=3Dthis.getValue();},execute:function(){var =
value=3Dthis.getValue();if(Object.isString(this.lastValue)&&Object.isStri=
ng(value)?this.lastValue!=3Dvalue:String(this.lastValue)!=3DString(value)=
){this.callback(this.element,value);this.lastValue=3Dvalue;}}});Form.Elem=
ent.Observer=3DClass.create(Abstract.TimedObserver,{getValue:function(){r=
eturn =
Form.Element.getValue(this.element);}});Form.Observer=3DClass.create(Abst=
ract.TimedObserver,{getValue:function(){return =
Form.serialize(this.element);}});Abstract.EventObserver=3DClass.create({i=
nitialize:function(element,callback){this.element=3D$(element);this.callb=
ack=3Dcallback;this.lastValue=3Dthis.getValue();if(this.element.tagName.t=
oLowerCase()=3D=3D'form')=0A=
this.registerFormCallbacks();else=0A=
this.registerCallback(this.element);},onElementEvent:function(){var =
value=3Dthis.getValue();if(this.lastValue!=3Dvalue){this.callback(this.el=
ement,value);this.lastValue=3Dvalue;}},registerFormCallbacks:function(){F=
orm.getElements(this.element).each(this.registerCallback,this);},register=
Callback:function(element){if(element.type){switch(element.type.toLowerCa=
se()){case'checkbox':case'radio':Event.observe(element,'click',this.onEle=
mentEvent.bind(this));break;default:Event.observe(element,'change',this.o=
nElementEvent.bind(this));break;}}}});Form.Element.EventObserver=3DClass.=
create(Abstract.EventObserver,{getValue:function(){return =
Form.Element.getValue(this.element);}});Form.EventObserver=3DClass.create=
(Abstract.EventObserver,{getValue:function(){return =
Form.serialize(this.element);}});if(!window.Event)var =
Event=3D{};Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,K=
EY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KE=
Y_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}=
,relatedTarget:function(event){var =
element;switch(event.type){case'mouseover':element=3Devent.fromElement;br=
eak;case'mouseout':element=3Devent.toElement;break;default:return null;}=0A=
return Element.extend(element);}});Event.Methods=3D(function(){var =
isButton;if(Prototype.Browser.IE){var =
buttonMap=3D{0:1,1:4,2:2};isButton=3Dfunction(event,code){return =
event.button=3D=3DbuttonMap[code];};}else =
if(Prototype.Browser.WebKit){isButton=3Dfunction(event,code){switch(code)=
{case 0:return event.which=3D=3D1&&!event.metaKey;case 1:return =
event.which=3D=3D1&&event.metaKey;default:return =
false;}};}else{isButton=3Dfunction(event,code){return =
event.which?(event.which=3D=3D=3Dcode+1):(event.button=3D=3D=3Dcode);};}=0A=
return{isLeftClick:function(event){return =
isButton(event,0)},isMiddleClick:function(event){return =
isButton(event,1)},isRightClick:function(event){return =
isButton(event,2)},element:function(event){event=3DEvent.extend(event);va=
r =
node=3Devent.target,type=3Devent.type,currentTarget=3Devent.currentTarget=
;if(currentTarget&&currentTarget.tagName){if(type=3D=3D=3D'load'||type=3D=
=3D=3D'error'||(type=3D=3D=3D'click'&&currentTarget.tagName.toLowerCase()=
=3D=3D=3D'input'&&currentTarget.type=3D=3D=3D'radio'))=0A=
node=3DcurrentTarget;}=0A=
if(node.nodeType=3D=3DNode.TEXT_NODE)node=3Dnode.parentNode;return =
Element.extend(node);},findElement:function(event,expression){var =
element=3DEvent.element(event);if(!expression)return element;var =
elements=3D[element].concat(element.ancestors());return =
Selector.findElement(elements,expression,0);},pointer:function(event){var=
 =
docElement=3Ddocument.documentElement,body=3Ddocument.body||{scrollLeft:0=
,scrollTop:0};return{x:event.pageX||(event.clientX+=0A=
(docElement.scrollLeft||body.scrollLeft)-=0A=
(docElement.clientLeft||0)),y:event.pageY||(event.clientY+=0A=
(docElement.scrollTop||body.scrollTop)-=0A=
(docElement.clientTop||0))};},pointerX:function(event){return =
Event.pointer(event).x},pointerY:function(event){return =
Event.pointer(event).y},stop:function(event){Event.extend(event);event.pr=
eventDefault();event.stopPropagation();event.stopped=3Dtrue;}};})();Event=
.extend=3D(function(){var =
methods=3DObject.keys(Event.Methods).inject({},function(m,name){m[name]=3D=
Event.Methods[name].methodize();return =
m;});if(Prototype.Browser.IE){Object.extend(methods,{stopPropagation:func=
tion(){this.cancelBubble=3Dtrue},preventDefault:function(){this.returnVal=
ue=3Dfalse},inspect:function(){return"[object Event]"}});return =
function(event){if(!event)return =
false;if(event._extendedByPrototype)return =
event;event._extendedByPrototype=3DPrototype.emptyFunction;var =
pointer=3DEvent.pointer(event);Object.extend(event,{target:event.srcEleme=
nt,relatedTarget:Event.relatedTarget(event),pageX:pointer.x,pageY:pointer=
.y});return =
Object.extend(event,methods);};}else{Event.prototype=3DEvent.prototype||d=
ocument.createEvent("HTMLEvents")['__proto__'];Object.extend(Event.protot=
ype,methods);return =
Prototype.K;}})();Object.extend(Event,(function(){var =
cache=3DEvent.cache;function =
getEventID(element){if(element._prototypeEventID)return =
element._prototypeEventID[0];arguments.callee.id=3Darguments.callee.id||1=
;return element._prototypeEventID=3D[++arguments.callee.id];}=0A=
function =
getDOMEventName(eventName){if(eventName&&eventName.include(':'))return"da=
taavailable";return eventName;}=0A=
function getCacheForID(id){return cache[id]=3Dcache[id]||{};}=0A=
function getWrappersForEventName(id,eventName){var =
c=3DgetCacheForID(id);return c[eventName]=3Dc[eventName]||[];}=0A=
function createWrapper(element,eventName,handler){var =
id=3DgetEventID(element);var =
c=3DgetWrappersForEventName(id,eventName);if(c.pluck("handler").include(h=
andler))return false;var =
wrapper=3Dfunction(event){if(!Event||!Event.extend||(event.eventName&&eve=
nt.eventName!=3DeventName))=0A=
return =
false;Event.extend(event);handler.call(element,event);};wrapper.handler=3D=
handler;c.push(wrapper);return wrapper;}=0A=
function findWrapper(id,eventName,handler){var =
c=3DgetWrappersForEventName(id,eventName);return =
c.find(function(wrapper){return wrapper.handler=3D=3Dhandler});}=0A=
function destroyWrapper(id,eventName,handler){var =
c=3DgetCacheForID(id);if(!c[eventName])return =
false;c[eventName]=3Dc[eventName].without(findWrapper(id,eventName,handle=
r));}=0A=
function destroyCache(){for(var id in cache)=0A=
for(var eventName in cache[id])=0A=
cache[id][eventName]=3Dnull;}=0A=
if(window.attachEvent){window.attachEvent("onunload",destroyCache);}=0A=
if(Prototype.Browser.WebKit){window.addEventListener('unload',Prototype.e=
mptyFunction,false);}=0A=
return{observe:function(element,eventName,handler){element=3D$(element);v=
ar name=3DgetDOMEventName(eventName);var =
wrapper=3DcreateWrapper(element,eventName,handler);if(!wrapper)return =
element;if(element.addEventListener){element.addEventListener(name,wrappe=
r,false);}else{element.attachEvent("on"+name,wrapper);}=0A=
return =
element;},stopObserving:function(element,eventName,handler){element=3D$(e=
lement);var =
id=3DgetEventID(element),name=3DgetDOMEventName(eventName);if(!handler&&e=
ventName){getWrappersForEventName(id,eventName).each(function(wrapper){el=
ement.stopObserving(eventName,wrapper.handler);});return element;}else =
if(!eventName){Object.keys(getCacheForID(id)).each(function(eventName){el=
ement.stopObserving(eventName);});return element;}=0A=
var wrapper=3DfindWrapper(id,eventName,handler);if(!wrapper)return =
element;if(element.removeEventListener){element.removeEventListener(name,=
wrapper,false);}else{element.detachEvent("on"+name,wrapper);}=0A=
destroyWrapper(id,eventName,handler);return =
element;},fire:function(element,eventName,memo){element=3D$(element);if(e=
lement=3D=3Ddocument&&document.createEvent&&!element.dispatchEvent)=0A=
element=3Ddocument.documentElement;var =
event;if(document.createEvent){event=3Ddocument.createEvent("HTMLEvents")=
;event.initEvent("dataavailable",true,true);}else{event=3Ddocument.create=
EventObject();event.eventType=3D"ondataavailable";}=0A=
event.eventName=3DeventName;event.memo=3Dmemo||{};if(document.createEvent=
){element.dispatchEvent(event);}else{element.fireEvent(event.eventType,ev=
ent);}=0A=
return =
Event.extend(event);}};})());Object.extend(Event,Event.Methods);Element.a=
ddMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stop=
Observing});Object.extend(document,{fire:Element.Methods.fire.methodize()=
,observe:Element.Methods.observe.methodize(),stopObserving:Element.Method=
s.stopObserving.methodize(),loaded:false});(function(){var =
timer;function =
fireContentLoadedEvent(){if(document.loaded)return;if(timer)window.clearI=
nterval(timer);document.fire("dom:loaded");document.loaded=3Dtrue;}=0A=
if(document.addEventListener){if(Prototype.Browser.WebKit){timer=3Dwindow=
.setInterval(function(){if(/loaded|complete/.test(document.readyState))=0A=
fireContentLoadedEvent();},0);Event.observe(window,"load",fireContentLoad=
edEvent);}else{document.addEventListener("DOMContentLoaded",fireContentLo=
adedEvent,false);}}else{document.write("<script =
id=3D__onDOMContentLoaded defer =
src=3D//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=3Dfun=
ction(){if(this.readyState=3D=3D"complete"){this.onreadystatechange=3Dnul=
l;fireContentLoadedEvent();}};}})();Hash.toQueryString=3DObject.toQuerySt=
ring;var =
Toggle=3D{display:Element.toggle};Element.Methods.childOf=3DElement.Metho=
ds.descendantOf;var Insertion=3D{Before:function(element,content){return =
Element.insert(element,{before:content});},Top:function(element,content){=
return =
Element.insert(element,{top:content});},Bottom:function(element,content){=
return =
Element.insert(element,{bottom:content});},After:function(element,content=
){return Element.insert(element,{after:content});}};var $continue=3Dnew =
Error('"throw $continue" is deprecated, use "return" instead');var =
Position=3D{includeScrollOffsets:false,prepare:function(){this.deltaX=3Dw=
indow.pageXOffset||document.documentElement.scrollLeft||document.body.scr=
ollLeft||0;this.deltaY=3Dwindow.pageYOffset||document.documentElement.scr=
ollTop||document.body.scrollTop||0;},within:function(element,x,y){if(this=
.includeScrollOffsets)=0A=
return =
this.withinIncludingScrolloffsets(element,x,y);this.xcomp=3Dx;this.ycomp=3D=
y;this.offset=3DElement.cumulativeOffset(element);return(y>=3Dthis.offset=
[1]&&y<this.offset[1]+element.offsetHeight&&x>=3Dthis.offset[0]&&x<this.o=
ffset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(ele=
ment,x,y){var =
offsetcache=3DElement.cumulativeScrollOffset(element);this.xcomp=3Dx+offs=
etcache[0]-this.deltaX;this.ycomp=3Dy+offsetcache[1]-this.deltaY;this.off=
set=3DElement.cumulativeOffset(element);return(this.ycomp>=3Dthis.offset[=
1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=3Dthis.of=
fset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:functio=
n(mode,element){if(!mode)return 0;if(mode=3D=3D'vertical')=0A=
return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHe=
ight;if(mode=3D=3D'horizontal')=0A=
return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWid=
th;},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:E=
lement.Methods.positionedOffset,absolutize:function(element){Position.pre=
pare();return =
Element.absolutize(element);},relativize:function(element){Position.prepa=
re();return =
Element.relativize(element);},realOffset:Element.Methods.cumulativeScroll=
Offset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.=
viewportOffset,clone:function(source,target,options){options=3Doptions||{=
};return =
Element.clonePosition(target,source,options);}};if(!document.getElementsB=
yClassName)document.getElementsByClassName=3Dfunction(instanceMethods){fu=
nction iter(name){return name.blank()?null:"[contains(concat(' ', =
@class, ' '), ' "+name+" ')]";}=0A=
instanceMethods.getElementsByClassName=3DPrototype.BrowserFeatures.XPath?=
function(element,className){className=3DclassName.toString().strip();var =
cond=3D/\s/.test(className)?$w(className).map(iter).join(''):iter(classNa=
me);return =
cond?document._getElementsByXPath('.//*'+cond,element):[];}:function(elem=
ent,className){className=3DclassName.toString().strip();var =
elements=3D[],classNames=3D(/\s/.test(className)?$w(className):null);if(!=
classNames&&!className)return elements;var =
nodes=3D$(element).getElementsByTagName('*');className=3D' '+className+' =
';for(var =
i=3D0,child,cn;child=3Dnodes[i];i++){if(child.className&&(cn=3D' =
'+child.className+' =
')&&(cn.include(className)||(classNames&&classNames.all(function(name){re=
turn!name.toString().blank()&&cn.include(' '+name+' ');}))))=0A=
elements.push(Element.extend(child));}=0A=
return elements;};return function(className,parentElement){return =
$(parentElement||document.body).getElementsByClassName(className);};}(Ele=
ment.Methods);Element.ClassNames=3DClass.create();Element.ClassNames.prot=
otype=3D{initialize:function(element){this.element=3D$(element);},_each:f=
unction(iterator){this.element.className.split(/\s+/).select(function(nam=
e){return =
name.length>0;})._each(iterator);},set:function(className){this.element.c=
lassName=3DclassName;},add:function(classNameToAdd){if(this.include(class=
NameToAdd))return;this.set($A(this).concat(classNameToAdd).join(' =
'));},remove:function(classNameToRemove){if(!this.include(classNameToRemo=
ve))return;this.set($A(this).without(classNameToRemove).join(' =
'));},toString:function(){return $A(this).join(' =
');}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addM=
ethods();=0A=
=0A=
/* jquery.js (61%) */=0A=
(function(){var=0A=
window=3Dthis,undefined,_jQuery=3Dwindow.jQuery,_$=3Dwindow.$,jQuery=3Dwi=
ndow.jQuery=3Dwindow.$=3Dfunction(selector,context){return new =
jQuery.fn.init(selector,context);},quickExpr=3D/^[^<]*(<(.|\s)+>)[^>]*$|^=
#([\w-]+)$/,isSimple=3D/^.[^:#\[\.,]*$/;jQuery.fn=3DjQuery.prototype=3D{i=
nit:function(selector,context){selector=3Dselector||document;if(selector.=
nodeType){this[0]=3Dselector;this.length=3D1;this.context=3Dselector;retu=
rn this;}=0A=
if(typeof selector=3D=3D=3D"string"){var =
match=3DquickExpr.exec(selector);if(match&&(match[1]||!context)){if(match=
[1])=0A=
selector=3DjQuery.clean([match[1]],context);else{var =
elem=3Ddocument.getElementById(match[3]);if(elem&&elem.id!=3Dmatch[3])=0A=
return jQuery().find(selector);var =
ret=3DjQuery(elem||[]);ret.context=3Ddocument;ret.selector=3Dselector;ret=
urn ret;}}else=0A=
return jQuery(context).find(selector);}else =
if(jQuery.isFunction(selector))=0A=
return =
jQuery(document).ready(selector);if(selector.selector&&selector.context){=
this.selector=3Dselector.selector;this.context=3Dselector.context;}=0A=
return =
this.setArray(jQuery.isArray(selector)?selector:jQuery.makeArray(selector=
));},selector:"",jquery:"1.3.2",size:function(){return =
this.length;},get:function(num){return =
num=3D=3D=3Dundefined?Array.prototype.slice.call(this):this[num];},pushSt=
ack:function(elems,name,selector){var =
ret=3DjQuery(elems);ret.prevObject=3Dthis;ret.context=3Dthis.context;if(n=
ame=3D=3D=3D"find")=0A=
ret.selector=3Dthis.selector+(this.selector?" ":"")+selector;else =
if(name)=0A=
ret.selector=3Dthis.selector+"."+name+"("+selector+")";return =
ret;},setArray:function(elems){this.length=3D0;Array.prototype.push.apply=
(this,elems);return this;},each:function(callback,args){return =
jQuery.each(this,callback,args);},index:function(elem){return =
jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,=
value,type){var options=3Dname;if(typeof name=3D=3D=3D"string")=0A=
if(value=3D=3D=3Dundefined)=0A=
return =
this[0]&&jQuery[type||"attr"](this[0],name);else{options=3D{};options[nam=
e]=3Dvalue;}=0A=
return this.each(function(i){for(name in options)=0A=
jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type=
,i,name));});},css:function(key,value){if((key=3D=3D'width'||key=3D=3D'he=
ight')&&parseFloat(value)<0)=0A=
value=3Dundefined;return =
this.attr(key,value,"curCSS");},text:function(text){if(typeof =
text!=3D=3D"object"&&text!=3Dnull)=0A=
return =
this.empty().append((this[0]&&this[0].ownerDocument||document).createText=
Node(text));var =
ret=3D"";jQuery.each(text||this,function(){jQuery.each(this.childNodes,fu=
nction(){if(this.nodeType!=3D8)=0A=
ret+=3Dthis.nodeType!=3D1?this.nodeValue:jQuery.fn.text([this]);});});ret=
urn ret;},wrapAll:function(html){if(this[0]){var =
wrap=3DjQuery(html,this[0].ownerDocument).clone();if(this[0].parentNode)=0A=
wrap.insertBefore(this[0]);wrap.map(function(){var =
elem=3Dthis;while(elem.firstChild)=0A=
elem=3Delem.firstChild;return elem;}).append(this);}=0A=
return this;},wrapInner:function(html){return =
this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:func=
tion(html){return =
this.each(function(){jQuery(this).wrapAll(html);});},append:function(){re=
turn this.domManip(arguments,true,function(elem){if(this.nodeType=3D=3D1)=0A=
this.appendChild(elem);});},prepend:function(){return =
this.domManip(arguments,true,function(elem){if(this.nodeType=3D=3D1)=0A=
this.insertBefore(elem,this.firstChild);});},before:function(){return =
this.domManip(arguments,false,function(elem){this.parentNode.insertBefore=
(elem,this);});},after:function(){return =
this.domManip(arguments,false,function(elem){this.parentNode.insertBefore=
(elem,this.nextSibling);});},end:function(){return =
this.prevObject||jQuery([]);},push:[].push,sort:[].sort,splice:[].splice,=
find:function(selector){if(this.length=3D=3D=3D1){var =
ret=3Dthis.pushStack([],"find",selector);ret.length=3D0;jQuery.find(selec=
tor,this[0],ret);return ret;}else{return =
this.pushStack(jQuery.unique(jQuery.map(this,function(elem){return =
jQuery.find(selector,elem);})),"find",selector);}},clone:function(events)=
{var =
ret=3Dthis.map(function(){if(!jQuery.support.noCloneEvent&&!jQuery.isXMLD=
oc(this)){var html=3Dthis.outerHTML;if(!html){var =
div=3Dthis.ownerDocument.createElement("div");div.appendChild(this.cloneN=
ode(true));html=3Ddiv.innerHTML;}=0A=
return jQuery.clean([html.replace(/ =
jQuery\d+=3D"(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0];}else=0A=
return this.cloneNode(true);});if(events=3D=3D=3Dtrue){var =
orig=3Dthis.find("*").andSelf(),i=3D0;ret.find("*").andSelf().each(functi=
on(){if(this.nodeName!=3D=3Dorig[i].nodeName)=0A=
return;var events=3DjQuery.data(orig[i],"events");for(var type in =
events){for(var handler in =
events[type]){jQuery.event.add(this,type,events[type][handler],events[typ=
e][handler].data);}}=0A=
i++;});}=0A=
return ret;},filter:function(selector){return =
this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(ele=
m,i){return =
selector.call(elem,i);})||jQuery.multiFilter(selector,jQuery.grep(this,fu=
nction(elem){return =
elem.nodeType=3D=3D=3D1;})),"filter",selector);},closest:function(selecto=
r){var =
pos=3DjQuery.expr.match.POS.test(selector)?jQuery(selector):null,closer=3D=
0;return this.map(function(){var =
cur=3Dthis;while(cur&&cur.ownerDocument){if(pos?pos.index(cur)>-1:jQuery(=
cur).is(selector)){jQuery.data(cur,"closest",closer);return cur;}=0A=
cur=3Dcur.parentNode;closer++;}});},not:function(selector){if(typeof =
selector=3D=3D=3D"string")=0A=
if(isSimple.test(selector))=0A=
return =
this.pushStack(jQuery.multiFilter(selector,this,true),"not",selector);els=
e=0A=
selector=3DjQuery.multiFilter(selector,this);var =
isArrayLike=3Dselector.length&&selector[selector.length-1]!=3D=3Dundefine=
d&&!selector.nodeType;return this.filter(function(){return =
isArrayLike?jQuery.inArray(this,selector)<0:this!=3Dselector;});},add:fun=
ction(selector){return =
this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof =
selector=3D=3D=3D"string"?jQuery(selector):jQuery.makeArray(selector))));=
},is:function(selector){return!!selector&&jQuery.multiFilter(selector,thi=
s).length>0;},hasClass:function(selector){return!!selector&&this.is("."+s=
elector);},val:function(value){if(value=3D=3D=3Dundefined){var =
elem=3Dthis[0];if(elem){if(jQuery.nodeName(elem,'option'))=0A=
return(elem.attributes.value||{}).specified?elem.value:elem.text;if(jQuer=
y.nodeName(elem,"select")){var =
index=3Delem.selectedIndex,values=3D[],options=3Delem.options,one=3Delem.=
type=3D=3D"select-one";if(index<0)=0A=
return null;for(var =
i=3Done?index:0,max=3Done?index+1:options.length;i<max;i++){var =
option=3Doptions[i];if(option.selected){value=3DjQuery(option).val();if(o=
ne)=0A=
return value;values.push(value);}}=0A=
return values;}=0A=
return(elem.value||"").replace(/\r/g,"");}=0A=
return undefined;}=0A=
if(typeof value=3D=3D=3D"number")=0A=
value+=3D'';return this.each(function(){if(this.nodeType!=3D1)=0A=
return;if(jQuery.isArray(value)&&/radio|checkbox/.test(this.type))=0A=
this.checked=3D(jQuery.inArray(this.value,value)>=3D0||jQuery.inArray(thi=
s.name,value)>=3D0);else if(jQuery.nodeName(this,"select")){var =
values=3DjQuery.makeArray(value);jQuery("option",this).each(function(){th=
is.selected=3D(jQuery.inArray(this.value,values)>=3D0||jQuery.inArray(thi=
s.text,values)>=3D0);});if(!values.length)=0A=
this.selectedIndex=3D-1;}else=0A=
this.value=3Dvalue;});},html:function(value){return =
value=3D=3D=3Dundefined?(this[0]?this[0].innerHTML.replace(/ =
jQuery\d+=3D"(?:\d+|null)"/g,""):null):this.empty().append(value);},repla=
ceWith:function(value){return =
this.after(value).remove();},eq:function(i){return =
this.slice(i,+i+1);},slice:function(){return =
this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.=
prototype.slice.call(arguments).join(","));},map:function(callback){retur=
n this.pushStack(jQuery.map(this,function(elem,i){return =
callback.call(elem,i,elem);}));},andSelf:function(){return =
this.add(this.prevObject);},domManip:function(args,table,callback){if(thi=
s[0]){var =
fragment=3D(this[0].ownerDocument||this[0]).createDocumentFragment(),scri=
pts=3DjQuery.clean(args,(this[0].ownerDocument||this[0]),fragment),first=3D=
fragment.firstChild;if(first)=0A=
for(var i=3D0,l=3Dthis.length;i<l;i++)=0A=
callback.call(root(this[i],first),this.length>1||i>0?fragment.cloneNode(t=
rue):fragment);if(scripts)=0A=
jQuery.each(scripts,evalScript);}=0A=
return this;function root(elem,cur){return =
table&&jQuery.nodeName(elem,"table")&&jQuery.nodeName(cur,"tr")?(elem.get=
ElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.create=
Element("tbody"))):elem;}}};jQuery.fn.init.prototype=3DjQuery.fn;function=
 evalScript(i,elem){if(elem.src)=0A=
jQuery.ajax({url:elem.src,async:false,dataType:"script"});else=0A=
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(ele=
m.parentNode)=0A=
elem.parentNode.removeChild(elem);}=0A=
function now(){return+new Date;}=0A=
jQuery.extend=3DjQuery.fn.extend=3Dfunction(){var =
target=3Darguments[0]||{},i=3D1,length=3Darguments.length,deep=3Dfalse,op=
tions;if(typeof =
target=3D=3D=3D"boolean"){deep=3Dtarget;target=3Darguments[1]||{};i=3D2;}=0A=
if(typeof target!=3D=3D"object"&&!jQuery.isFunction(target))=0A=
target=3D{};if(length=3D=3Di){target=3Dthis;--i;}=0A=
for(;i<length;i++)=0A=
if((options=3Darguments[i])!=3Dnull)=0A=
for(var name in options){var =
src=3Dtarget[name],copy=3Doptions[name];if(target=3D=3D=3Dcopy)=0A=
continue;if(deep&&copy&&typeof copy=3D=3D=3D"object"&&!copy.nodeType)=0A=
target[name]=3DjQuery.extend(deep,src||(copy.length!=3Dnull?[]:{}),copy);=
else if(copy!=3D=3Dundefined)=0A=
target[name]=3Dcopy;}=0A=
return target;};var =
exclude=3D/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=3D=
document.defaultView||{},toString=3DObject.prototype.toString;jQuery.exte=
nd({noConflict:function(deep){window.$=3D_$;if(deep)=0A=
window.jQuery=3D_jQuery;return jQuery;},isFunction:function(obj){return =
toString.call(obj)=3D=3D=3D"[object =
Function]";},isArray:function(obj){return =
toString.call(obj)=3D=3D=3D"[object =
Array]";},isXMLDoc:function(elem){return =
elem.nodeType=3D=3D=3D9&&elem.documentElement.nodeName!=3D=3D"HTML"||!!el=
em.ownerDocument&&jQuery.isXMLDoc(elem.ownerDocument);},globalEval:functi=
on(data){if(data&&/\S/.test(data)){var =
head=3Ddocument.getElementsByTagName("head")[0]||document.documentElement=
,script=3Ddocument.createElement("script");script.type=3D"text/javascript=
";if(jQuery.support.scriptEval)=0A=
script.appendChild(document.createTextNode(data));else=0A=
script.text=3Ddata;head.insertBefore(script,head.firstChild);head.removeC=
hild(script);}},nodeName:function(elem,name){return =
elem.nodeName&&elem.nodeName.toUpperCase()=3D=3Dname.toUpperCase();},each=
:function(object,callback,args){var =
name,i=3D0,length=3Dobject.length;if(args){if(length=3D=3D=3Dundefined){f=
or(name in object)=0A=
if(callback.apply(object[name],args)=3D=3D=3Dfalse)=0A=
break;}else=0A=
for(;i<length;)=0A=
if(callback.apply(object[i++],args)=3D=3D=3Dfalse)=0A=
break;}else{if(length=3D=3D=3Dundefined){for(name in object)=0A=
if(callback.call(object[name],name,object[name])=3D=3D=3Dfalse)=0A=
break;}else=0A=
for(var =
value=3Dobject[0];i<length&&callback.call(value,i,value)!=3D=3Dfalse;valu=
e=3Dobject[++i]){}}=0A=
return =
object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value=
))=0A=
value=3Dvalue.call(elem,i);return typeof =
value=3D=3D=3D"number"&&type=3D=3D"curCSS"&&!exclude.test(name)?value+"px=
":value;},className:{add:function(elem,classNames){jQuery.each((className=
s||"").split(/\s+/),function(i,className){if(elem.nodeType=3D=3D1&&!jQuer=
y.className.has(elem.className,className))=0A=
elem.className+=3D(elem.className?" =
":"")+className;});},remove:function(elem,classNames){if(elem.nodeType=3D=
=3D1)=0A=
elem.className=3DclassNames!=3D=3Dundefined?jQuery.grep(elem.className.sp=
lit(/\s+/),function(className){return!jQuery.className.has(classNames,cla=
ssName);}).join(" "):"";},has:function(elem,className){return =
elem&&jQuery.inArray(className,(elem.className||elem).toString().split(/\=
s+/))>-1;}},swap:function(elem,options,callback){var old=3D{};for(var =
name in =
options){old[name]=3Delem.style[name];elem.style[name]=3Doptions[name];}=0A=
callback.call(elem);for(var name in options)=0A=
elem.style[name]=3Dold[name];},css:function(elem,name,force,extra){if(nam=
e=3D=3D"width"||name=3D=3D"height"){var =
val,props=3D{position:"absolute",visibility:"hidden",display:"block"},whi=
ch=3Dname=3D=3D"width"?["Left","Right"]:["Top","Bottom"];function =
getWH(){val=3Dname=3D=3D"width"?elem.offsetWidth:elem.offsetHeight;if(ext=
ra=3D=3D=3D"border")=0A=
return;jQuery.each(which,function(){if(!extra)=0A=
val-=3DparseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;if(extra=3D=
=3D=3D"margin")=0A=
val+=3DparseFloat(jQuery.curCSS(elem,"margin"+this,true))||0;else=0A=
val-=3DparseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});}=0A=
if(elem.offsetWidth!=3D=3D0)=0A=
getWH();else=0A=
jQuery.swap(elem,props,getWH);return Math.max(0,Math.round(val));}=0A=
return =
jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var =
ret,style=3Delem.style;if(name=3D=3D"opacity"&&!jQuery.support.opacity){r=
et=3DjQuery.attr(style,"opacity");return ret=3D=3D""?"1":ret;}=0A=
if(name.match(/float/i))=0A=
name=3DstyleFloat;if(!force&&style&&style[name])=0A=
ret=3Dstyle[name];else =
if(defaultView.getComputedStyle){if(name.match(/float/i))=0A=
name=3D"float";name=3Dname.replace(/([A-Z])/g,"-$1").toLowerCase();var =
computedStyle=3DdefaultView.getComputedStyle(elem,null);if(computedStyle)=0A=
ret=3DcomputedStyle.getPropertyValue(name);if(name=3D=3D"opacity"&&ret=3D=
=3D"")=0A=
ret=3D"1";}else if(elem.currentStyle){var =
camelCase=3Dname.replace(/\-(\w)/g,function(all,letter){return =
letter.toUpperCase();});ret=3Delem.currentStyle[name]||elem.currentStyle[=
camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var =
left=3Dstyle.left,rsLeft=3Delem.runtimeStyle.left;elem.runtimeStyle.left=3D=
elem.currentStyle.left;style.left=3Dret||0;ret=3Dstyle.pixelLeft+"px";sty=
le.left=3Dleft;elem.runtimeStyle.left=3DrsLeft;}}=0A=
return =
ret;},clean:function(elems,context,fragment){context=3Dcontext||document;=
if(typeof context.createElement=3D=3D=3D"undefined")=0A=
context=3Dcontext.ownerDocument||context[0]&&context[0].ownerDocument||do=
cument;if(!fragment&&elems.length=3D=3D=3D1&&typeof =
elems[0]=3D=3D=3D"string"){var =
match=3D/^<(\w+)\s*\/?>$/.exec(elems[0]);if(match)=0A=
return[context.createElement(match[1])];}=0A=
var =
ret=3D[],scripts=3D[],div=3Dcontext.createElement("div");jQuery.each(elem=
s,function(i,elem){if(typeof elem=3D=3D=3D"number")=0A=
elem+=3D'';if(!elem)=0A=
return;if(typeof =
elem=3D=3D=3D"string"){elem=3Delem.replace(/(<(\w+)[^>]*?)\/>/g,function(=
all,front,tag){return =
tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all=
:front+"></"+tag+">";});var =
tags=3Delem.replace(/^\s+/,"").substring(0,10).toLowerCase();var =
wrap=3D!tags.indexOf("<opt")&&[1,"<select =
multiple=3D'multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldse=
t>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<ta=
ble>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></t=
able>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody>=
<tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody>=
</tbody><colgroup>","</colgroup></table>"]||!jQuery.support.htmlSerialize=
&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=3Dwrap[1]+elem+wrap[2]=
;while(wrap[0]--)=0A=
div=3Ddiv.lastChild;if(!jQuery.support.tbody){var =
hasBody=3D/<tbody/i.test(elem),tbody=3D!tags.indexOf("<table")&&!hasBody?=
div.firstChild&&div.firstChild.childNodes:wrap[1]=3D=3D"<table>"&&!hasBod=
y?div.childNodes:[];for(var j=3Dtbody.length-1;j>=3D0;--j)=0A=
if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)=0A=
tbody[j].parentNode.removeChild(tbody[j]);}=0A=
if(!jQuery.support.leadingWhitespace&&/^\s/.test(elem))=0A=
div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstC=
hild);elem=3DjQuery.makeArray(div.childNodes);}=0A=
if(elem.nodeType)=0A=
ret.push(elem);else=0A=
ret=3DjQuery.merge(ret,elem);});if(fragment){for(var =
i=3D0;ret[i];i++){if(jQuery.nodeName(ret[i],"script")&&(!ret[i].type||ret=
[i].type.toLowerCase()=3D=3D=3D"text/javascript")){scripts.push(ret[i].pa=
rentNode?ret[i].parentNode.removeChild(ret[i]):ret[i]);}else{if(ret[i].no=
deType=3D=3D=3D1)=0A=
ret.splice.apply(ret,[i+1,0].concat(jQuery.makeArray(ret[i].getElementsBy=
TagName("script"))));fragment.appendChild(ret[i]);}}=0A=
return scripts;}=0A=
return =
ret;},attr:function(elem,name,value){if(!elem||elem.nodeType=3D=3D3||elem=
.nodeType=3D=3D8)=0A=
return undefined;var =
notxml=3D!jQuery.isXMLDoc(elem),set=3Dvalue!=3D=3Dundefined;name=3Dnotxml=
&&jQuery.props[name]||name;if(elem.tagName){var =
special=3D/href|src|style/.test(name);if(name=3D=3D"selected"&&elem.paren=
tNode)=0A=
elem.parentNode.selectedIndex;if(name in =
elem&&notxml&&!special){if(set){if(name=3D=3D"type"&&jQuery.nodeName(elem=
,"input")&&elem.parentNode)=0A=
throw"type property can't be changed";elem[name]=3Dvalue;}=0A=
if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))=0A=
return =
elem.getAttributeNode(name).nodeValue;if(name=3D=3D"tabIndex"){var =
attributeNode=3Delem.getAttributeNode("tabIndex");return =
attributeNode&&attributeNode.specified?attributeNode.value:elem.nodeName.=
match(/(button|input|object|select|textarea)/i)?0:elem.nodeName.match(/^(=
a|area)$/i)&&elem.href?0:undefined;}=0A=
return elem[name];}=0A=
if(!jQuery.support.style&&notxml&&name=3D=3D"style")=0A=
return jQuery.attr(elem.style,"cssText",value);if(set)=0A=
elem.setAttribute(name,""+value);var =
attr=3D!jQuery.support.hrefNormalized&&notxml&&special?elem.getAttribute(=
name,2):elem.getAttribute(name);return attr=3D=3D=3Dnull?undefined:attr;}=0A=
if(!jQuery.support.opacity&&name=3D=3D"opacity"){if(set){elem.zoom=3D1;el=
em.filter=3D(elem.filter||"").replace(/alpha\([^)]*\)/,"")+=0A=
(parseInt(value)+''=3D=3D"NaN"?"":"alpha(opacity=3D"+value*100+")");}=0A=
return =
elem.filter&&elem.filter.indexOf("opacity=3D")>=3D0?(parseFloat(elem.filt=
er.match(/opacity=3D([^)]*)/)[1])/100)+'':"";}=0A=
name=3Dname.replace(/-([a-z])/ig,function(all,letter){return =
letter.toUpperCase();});if(set)=0A=
elem[name]=3Dvalue;return =
elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,""=
);},makeArray:function(array){var ret=3D[];if(array!=3Dnull){var =
i=3Darray.length;if(i=3D=3Dnull||typeof =
array=3D=3D=3D"string"||jQuery.isFunction(array)||array.setInterval)=0A=
ret[0]=3Darray;else=0A=
while(i)=0A=
ret[--i]=3Darray[i];}=0A=
return ret;},inArray:function(elem,array){for(var =
i=3D0,length=3Darray.length;i<length;i++)=0A=
if(array[i]=3D=3D=3Delem)=0A=
return i;return-1;},merge:function(first,second){var =
i=3D0,elem,pos=3Dfirst.length;if(!jQuery.support.getAll){while((elem=3Dse=
cond[i++])!=3Dnull)=0A=
if(elem.nodeType!=3D8)=0A=
first[pos++]=3Delem;}else=0A=
while((elem=3Dsecond[i++])!=3Dnull)=0A=
first[pos++]=3Delem;return first;},unique:function(array){var =
ret=3D[],done=3D{};try{for(var =
i=3D0,length=3Darray.length;i<length;i++){var =
id=3DjQuery.data(array[i]);if(!done[id]){done[id]=3Dtrue;ret.push(array[i=
]);}}}catch(e){ret=3Darray;}=0A=
return ret;},grep:function(elems,callback,inv){var ret=3D[];for(var =
i=3D0,length=3Delems.length;i<length;i++)=0A=
if(!inv!=3D!callback(elems[i],i))=0A=
ret.push(elems[i]);return ret;},map:function(elems,callback){var =
ret=3D[];for(var i=3D0,length=3Delems.length;i<length;i++){var =
value=3Dcallback(elems[i],i);if(value!=3Dnull)=0A=
ret[ret.length]=3Dvalue;}=0A=
return ret.concat.apply([],ret);}});var =
userAgent=3Dnavigator.userAgent.toLowerCase();jQuery.browser=3D{version:(=
userAgent.match(/.+(?:rv|it|ra|ie)[\/: =
]([\d.]+)/)||[0,'0'])[1],safari:/webkit/.test(userAgent),opera:/opera/.te=
st(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozil=
la:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};jQu=
ery.each({parent:function(elem){return =
elem.parentNode;},parents:function(elem){return =
jQuery.dir(elem,"parentNode");},next:function(elem){return =
jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return =
jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return =
jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return =
jQuery.dir(elem,"previousSibling");},siblings:function(elem){return =
jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem)=
{return jQuery.sibling(elem.firstChild);},contents:function(elem){return =
jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.d=
ocument:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[=
name]=3Dfunction(selector){var =
ret=3DjQuery.map(this,fn);if(selector&&typeof selector=3D=3D"string")=0A=
ret=3DjQuery.multiFilter(selector,ret);return =
this.pushStack(jQuery.unique(ret),name,selector);};});jQuery.each({append=
To:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after"=
,replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=3Dfunc=
tion(selector){var ret=3D[],insert=3DjQuery(selector);for(var =
i=3D0,l=3Dinsert.length;i<l;i++){var =
elems=3D(i>0?this.clone(true):this).get();jQuery.fn[original].apply(jQuer=
y(insert[i]),elems);ret=3Dret.concat(elems);}=0A=
return =
this.pushStack(ret,name,selector);};});jQuery.each({removeAttr:function(n=
ame){jQuery.attr(this,name,"");if(this.nodeType=3D=3D1)=0A=
this.removeAttribute(name);},addClass:function(classNames){jQuery.classNa=
me.add(this,classNames);},removeClass:function(classNames){jQuery.classNa=
me.remove(this,classNames);},toggleClass:function(classNames,state){if(ty=
peof state!=3D=3D"boolean")=0A=
state=3D!jQuery.className.has(this,classNames);jQuery.className[state?"ad=
d":"remove"](this,classNames);},remove:function(selector){if(!selector||j=
Query.filter(selector,[this]).length){jQuery("*",this).add([this]).each(f=
unction(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.pa=
rentNode)=0A=
this.parentNode.removeChild(this);}},empty:function(){jQuery(this).childr=
en().remove();while(this.firstChild)=0A=
this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=3D=
function(){return this.each(fn,arguments);};});function =
num(elem,prop){return =
elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}=0A=
var =
expando=3D"jQuery"+now(),uuid=3D0,windowData=3D{};jQuery.extend({cache:{}=
,data:function(elem,name,data){elem=3Delem=3D=3Dwindow?windowData:elem;va=
r id=3Delem[expando];if(!id)=0A=
id=3Delem[expando]=3D++uuid;if(name&&!jQuery.cache[id])=0A=
jQuery.cache[id]=3D{};if(data!=3D=3Dundefined)=0A=
jQuery.cache[id][name]=3Ddata;return =
name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=3Del=
em=3D=3Dwindow?windowData:elem;var =
id=3Delem[expando];if(name){if(jQuery.cache[id]){delete =
jQuery.cache[id][name];name=3D"";for(name in jQuery.cache[id])=0A=
break;if(!name)=0A=
jQuery.removeData(elem);}}else{try{delete =
elem[expando];}catch(e){if(elem.removeAttribute)=0A=
elem.removeAttribute(expando);}=0A=
delete =
jQuery.cache[id];}},queue:function(elem,type,data){if(elem){type=3D(type|=
|"fx")+"queue";var =
q=3DjQuery.data(elem,type);if(!q||jQuery.isArray(data))=0A=
q=3DjQuery.data(elem,type,jQuery.makeArray(data));else if(data)=0A=
q.push(data);}=0A=
return q;},dequeue:function(elem,type){var =
queue=3DjQuery.queue(elem,type),fn=3Dqueue.shift();if(!type||type=3D=3D=3D=
"fx")=0A=
fn=3Dqueue[0];if(fn!=3D=3Dundefined)=0A=
fn.call(elem);}});jQuery.fn.extend({data:function(key,value){var =
parts=3Dkey.split(".");parts[1]=3Dparts[1]?"."+parts[1]:"";if(value=3D=3D=
=3Dundefined){var =
data=3Dthis.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data=3D=3D=
=3Dundefined&&this.length)=0A=
data=3DjQuery.data(this[0],key);return =
data=3D=3D=3Dundefined&&parts[1]?this.data(parts[0]):data;}else=0A=
return =
this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQu=
ery.data(this,key,value);});},removeData:function(key){return =
this.each(function(){jQuery.removeData(this,key);});},queue:function(type=
,data){if(typeof type!=3D=3D"string"){data=3Dtype;type=3D"fx";}=0A=
if(data=3D=3D=3Dundefined)=0A=
return jQuery.queue(this[0],type);return this.each(function(){var =
queue=3DjQuery.queue(this,type,data);if(type=3D=3D"fx"&&queue.length=3D=3D=
1)=0A=
queue[0].call(this);});},dequeue:function(type){return =
this.each(function(){jQuery.dequeue(this,type);});}});(function(){var =
chunker=3D/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]=
|[^[\]'"]+)+\]|\\.|[^ =
>+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,done=3D0,toString=3DObject.prototype.toS=
tring;var =
Sizzle=3Dfunction(selector,context,results,seed){results=3Dresults||[];co=
ntext=3Dcontext||document;if(context.nodeType!=3D=3D1&&context.nodeType!=3D=
=3D9)=0A=
return[];if(!selector||typeof selector!=3D=3D"string"){return results;}=0A=
var =
parts=3D[],m,set,checkSet,check,mode,extra,prune=3Dtrue;chunker.lastIndex=
=3D0;while((m=3Dchunker.exec(selector))!=3D=3Dnull){parts.push(m[1]);if(m=
[2]){extra=3DRegExp.rightContext;break;}}=0A=
if(parts.length>1&&origPOS.exec(selector)){if(parts.length=3D=3D=3D2&&Exp=
r.relative[parts[0]]){set=3DposProcess(parts[0]+parts[1],context);}else{s=
et=3DExpr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context);whil=
e(parts.length){selector=3Dparts.shift();if(Expr.relative[selector])=0A=
selector+=3Dparts.shift();set=3DposProcess(selector,set);}}}else{var =
ret=3Dseed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop()=
,parts.length=3D=3D=3D1&&context.parentNode?context.parentNode:context,is=
XML(context));set=3DSizzle.filter(ret.expr,ret.set);if(parts.length>0){ch=
eckSet=3DmakeArray(set);}else{prune=3Dfalse;}=0A=
while(parts.length){var =
cur=3Dparts.pop(),pop=3Dcur;if(!Expr.relative[cur]){cur=3D"";}else{pop=3D=
parts.pop();}=0A=
if(pop=3D=3Dnull){pop=3Dcontext;}=0A=
Expr.relative[cur](checkSet,pop,isXML(context));}}=0A=
if(!checkSet){checkSet=3Dset;}=0A=
if(!checkSet){throw"Syntax error, unrecognized expression: =
"+(cur||selector);}=0A=
if(toString.call(checkSet)=3D=3D=3D"[object =
Array]"){if(!prune){results.push.apply(results,checkSet);}else =
if(context.nodeType=3D=3D=3D1){for(var =
i=3D0;checkSet[i]!=3Dnull;i++){if(checkSet[i]&&(checkSet[i]=3D=3D=3Dtrue|=
|checkSet[i].nodeType=3D=3D=3D1&&contains(context,checkSet[i]))){results.=
push(set[i]);}}}else{for(var =
i=3D0;checkSet[i]!=3Dnull;i++){if(checkSet[i]&&checkSet[i].nodeType=3D=3D=
=3D1){results.push(set[i]);}}}}else{makeArray(checkSet,results);}=0A=
if(extra){Sizzle(extra,context,results,seed);if(sortOrder){hasDuplicate=3D=
false;results.sort(sortOrder);if(hasDuplicate){for(var =
i=3D1;i<results.length;i++){if(results[i]=3D=3D=3Dresults[i-1]){results.s=
plice(i--,1);}}}}}=0A=
return results;};Sizzle.matches=3Dfunction(expr,set){return =
Sizzle(expr,null,null,set);};Sizzle.find=3Dfunction(expr,context,isXML){v=
ar set,match;if(!expr){return[];}=0A=
for(var i=3D0,l=3DExpr.order.length;i<l;i++){var =
type=3DExpr.order[i],match;if((match=3DExpr.match[type].exec(expr))){var =
left=3DRegExp.leftContext;if(left.substr(left.length-1)!=3D=3D"\\"){match=
[1]=3D(match[1]||"").replace(/\\/g,"");set=3DExpr.find[type](match,contex=
t,isXML);if(set!=3Dnull){expr=3Dexpr.replace(Expr.match[type],"");break;}=
}}}=0A=
if(!set){set=3Dcontext.getElementsByTagName("*");}=0A=
return{set:set,expr:expr};};Sizzle.filter=3Dfunction(expr,set,inplace,not=
){var =
old=3Dexpr,result=3D[],curLoop=3Dset,match,anyFound,isXMLFilter=3Dset&&se=
t[0]&&isXML(set[0]);while(expr&&set.length){for(var type in =
Expr.filter){if((match=3DExpr.match[type].exec(expr))!=3Dnull){var =
filter=3DExpr.filter[type],found,item;anyFound=3Dfalse;if(curLoop=3D=3Dre=
sult){result=3D[];}=0A=
if(Expr.preFilter[type]){match=3DExpr.preFilter[type](match,curLoop,inpla=
ce,result,not,isXMLFilter);if(!match){anyFound=3Dfound=3Dtrue;}else =
if(match=3D=3D=3Dtrue){continue;}}=0A=
if(match){for(var =
i=3D0;(item=3DcurLoop[i])!=3Dnull;i++){if(item){found=3Dfilter(item,match=
,i,curLoop);var =
pass=3Dnot^!!found;if(inplace&&found!=3Dnull){if(pass){anyFound=3Dtrue;}e=
lse{curLoop[i]=3Dfalse;}}else =
if(pass){result.push(item);anyFound=3Dtrue;}}}}=0A=
if(found!=3D=3Dundefined){if(!inplace){curLoop=3Dresult;}=0A=
expr=3Dexpr.replace(Expr.match[type],"");if(!anyFound){return[];}=0A=
break;}}}=0A=
if(expr=3D=3Dold){if(anyFound=3D=3Dnull){throw"Syntax error, =
unrecognized expression: "+expr;}else{break;}}=0A=
old=3Dexpr;}=0A=
return curLoop;};var =
Expr=3DSizzle.selectors=3D{order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\=
u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[=
name=3D['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00=
c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=3D)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\=
u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|o=
dd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(=
?=3D[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\=
)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"}=
,attrHandle:{href:function(elem){return =
elem.getAttribute("href");}},relative:{"+":function(checkSet,part,isXML){=
var isPartStr=3Dtypeof =
part=3D=3D=3D"string",isTag=3DisPartStr&&!/\W/.test(part),isPartStrNotTag=
=3DisPartStr&&!isTag;if(isTag&&!isXML){part=3Dpart.toUpperCase();}=0A=
for(var =
i=3D0,l=3DcheckSet.length,elem;i<l;i++){if((elem=3DcheckSet[i])){while((e=
lem=3Delem.previousSibling)&&elem.nodeType!=3D=3D1){}=0A=
checkSet[i]=3DisPartStrNotTag||elem&&elem.nodeName=3D=3D=3Dpart?elem||fal=
se:elem=3D=3D=3Dpart;}}=0A=
if(isPartStrNotTag){Sizzle.filter(part,checkSet,true);}},">":function(che=
ckSet,part,isXML){var isPartStr=3Dtypeof =
part=3D=3D=3D"string";if(isPartStr&&!/\W/.test(part)){part=3DisXML?part:p=
art.toUpperCase();for(var i=3D0,l=3DcheckSet.length;i<l;i++){var =
elem=3DcheckSet[i];if(elem){var =
parent=3Delem.parentNode;checkSet[i]=3Dparent.nodeName=3D=3D=3Dpart?paren=
t:false;}}}else{for(var i=3D0,l=3DcheckSet.length;i<l;i++){var =
elem=3DcheckSet[i];if(elem){checkSet[i]=3DisPartStr?elem.parentNode:elem.=
parentNode=3D=3D=3Dpart;}}=0A=
if(isPartStr){Sizzle.filter(part,checkSet,true);}}},"":function(checkSet,=
part,isXML){var =
doneName=3Ddone++,checkFn=3DdirCheck;if(!part.match(/\W/)){var =
nodeCheck=3Dpart=3DisXML?part:part.toUpperCase();checkFn=3DdirNodeCheck;}=0A=
checkFn("parentNode",part,doneName,checkSet,nodeCheck,isXML);},"~":functi=
on(checkSet,part,isXML){var =
doneName=3Ddone++,checkFn=3DdirCheck;if(typeof =
part=3D=3D=3D"string"&&!part.match(/\W/)){var =
nodeCheck=3Dpart=3DisXML?part:part.toUpperCase();checkFn=3DdirNodeCheck;}=0A=
checkFn("previousSibling",part,doneName,checkSet,nodeCheck,isXML);}},find=
:{ID:function(match,context,isXML){if(typeof =
context.getElementById!=3D=3D"undefined"&&!isXML){var =
m=3Dcontext.getElementById(match[1]);return =
m?[m]:[];}},NAME:function(match,context,isXML){if(typeof =
context.getElementsByName!=3D=3D"undefined"){var =
ret=3D[],results=3Dcontext.getElementsByName(match[1]);for(var =
i=3D0,l=3Dresults.length;i<l;i++){if(results[i].getAttribute("name")=3D=3D=
=3Dmatch[1]){ret.push(results[i]);}}=0A=
return =
ret.length=3D=3D=3D0?null:ret;}},TAG:function(match,context){return =
context.getElementsByTagName(match[1]);}},preFilter:{CLASS:function(match=
,curLoop,inplace,result,not,isXML){match=3D" =
"+match[1].replace(/\\/g,"")+" ";if(isXML){return match;}=0A=
for(var =
i=3D0,elem;(elem=3DcurLoop[i])!=3Dnull;i++){if(elem){if(not^(elem.classNa=
me&&(" "+elem.className+" ").indexOf(match)>=3D0)){if(!inplace)=0A=
result.push(elem);}else if(inplace){curLoop[i]=3Dfalse;}}}=0A=
return false;},ID:function(match){return =
match[1].replace(/\\/g,"");},TAG:function(match,curLoop){for(var =
i=3D0;curLoop[i]=3D=3D=3Dfalse;i++){}=0A=
return =
curLoop[i]&&isXML(curLoop[i])?match[1]:match[1].toUpperCase();},CHILD:fun=
ction(match){if(match[1]=3D=3D"nth"){var =
test=3D/(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2]=3D=3D"even"&&"2n"||match[=
2]=3D=3D"odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);ma=
tch[2]=3D(test[1]+(test[2]||1))-0;match[3]=3Dtest[3]-0;}=0A=
match[0]=3Ddone++;return =
match;},ATTR:function(match,curLoop,inplace,result,not,isXML){var =
name=3Dmatch[1].replace(/\\/g,"");if(!isXML&&Expr.attrMap[name]){match[1]=
=3DExpr.attrMap[name];}=0A=
if(match[2]=3D=3D=3D"~=3D"){match[4]=3D" "+match[4]+" ";}=0A=
return =
match;},PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]=3D=3D=
=3D"not"){if(match[3].match(chunker).length>1||/^\w/.test(match[3])){matc=
h[3]=3DSizzle(match[3],null,null,curLoop);}else{var =
ret=3DSizzle.filter(match[3],curLoop,inplace,true^not);if(!inplace){resul=
t.push.apply(result,ret);}=0A=
return false;}}else =
if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return=
 true;}=0A=
return match;},POS:function(match){match.unshift(true);return =
match;}},filters:{enabled:function(elem){return =
elem.disabled=3D=3D=3Dfalse&&elem.type!=3D=3D"hidden";},disabled:function=
(elem){return elem.disabled=3D=3D=3Dtrue;},checked:function(elem){return =
elem.checked=3D=3D=3Dtrue;},selected:function(elem){elem.parentNode.selec=
tedIndex;return =
elem.selected=3D=3D=3Dtrue;},parent:function(elem){return!!elem.firstChil=
d;},empty:function(elem){return!elem.firstChild;},has:function(elem,i,mat=
ch){return!!Sizzle(match[3],elem).length;},header:function(elem){return/h=
\d/i.test(elem.nodeName);},text:function(elem){return"text"=3D=3D=3Delem.=
type;},radio:function(elem){return"radio"=3D=3D=3Delem.type;},checkbox:fu=
nction(elem){return"checkbox"=3D=3D=3Delem.type;},file:function(elem){ret=
urn"file"=3D=3D=3Delem.type;},password:function(elem){return"password"=3D=
=3D=3Delem.type;},submit:function(elem){return"submit"=3D=3D=3Delem.type;=
},image:function(elem){return"image"=3D=3D=3Delem.type;},reset:function(e=
lem){return"reset"=3D=3D=3Delem.type;},button:function(elem){return"butto=
n"=3D=3D=3Delem.type||elem.nodeName.toUpperCase()=3D=3D=3D"BUTTON";},inpu=
t:function(elem){return/input|select|textarea|button/i.test(elem.nodeName=
);}},setFilters:{first:function(elem,i){return =
i=3D=3D=3D0;},last:function(elem,i,match,array){return =
i=3D=3D=3Darray.length-1;},even:function(elem,i){return =
i%2=3D=3D=3D0;},odd:function(elem,i){return =
i%2=3D=3D=3D1;},lt:function(elem,i,match){return =
i<match[3]-0;},gt:function(elem,i,match){return =
i>match[3]-0;},nth:function(elem,i,match){return =
match[3]-0=3D=3Di;},eq:function(elem,i,match){return =
match[3]-0=3D=3Di;}},filter:{PSEUDO:function(elem,match,i,array){var =
name=3Dmatch[1],filter=3DExpr.filters[name];if(filter){return =
filter(elem,i,match,array);}else =
if(name=3D=3D=3D"contains"){return(elem.textContent||elem.innerText||"").=
indexOf(match[3])>=3D0;}else if(name=3D=3D=3D"not"){var =
not=3Dmatch[3];for(var =
i=3D0,l=3Dnot.length;i<l;i++){if(not[i]=3D=3D=3Delem){return false;}}=0A=
return true;}},CHILD:function(elem,match){var =
type=3Dmatch[1],node=3Delem;switch(type){case'only':case'first':while(nod=
e=3Dnode.previousSibling){if(node.nodeType=3D=3D=3D1)return false;}=0A=
if(type=3D=3D'first')return =
true;node=3Delem;case'last':while(node=3Dnode.nextSibling){if(node.nodeTy=
pe=3D=3D=3D1)return false;}=0A=
return true;case'nth':var =
first=3Dmatch[2],last=3Dmatch[3];if(first=3D=3D1&&last=3D=3D0){return =
true;}=0A=
var =
doneName=3Dmatch[0],parent=3Delem.parentNode;if(parent&&(parent.sizcache!=
=3D=3DdoneName||!elem.nodeIndex)){var =
count=3D0;for(node=3Dparent.firstChild;node;node=3Dnode.nextSibling){if(n=
ode.nodeType=3D=3D=3D1){node.nodeIndex=3D++count;}}=0A=
parent.sizcache=3DdoneName;}=0A=
var diff=3Delem.nodeIndex-last;if(first=3D=3D0){return =
diff=3D=3D0;}else{return(diff%first=3D=3D0&&diff/first>=3D0);}}},ID:funct=
ion(elem,match){return =
elem.nodeType=3D=3D=3D1&&elem.getAttribute("id")=3D=3D=3Dmatch;},TAG:func=
tion(elem,match){return(match=3D=3D=3D"*"&&elem.nodeType=3D=3D=3D1)||elem=
.nodeName=3D=3D=3Dmatch;},CLASS:function(elem,match){return(" =
"+(elem.className||elem.getAttribute("class"))+" =
").indexOf(match)>-1;},ATTR:function(elem,match){var =
name=3Dmatch[1],result=3DExpr.attrHandle[name]?Expr.attrHandle[name](elem=
):elem[name]!=3Dnull?elem[name]:elem.getAttribute(name),value=3Dresult+""=
,type=3Dmatch[2],check=3Dmatch[4];return =
result=3D=3Dnull?type=3D=3D=3D"!=3D":type=3D=3D=3D"=3D"?value=3D=3D=3Dche=
ck:type=3D=3D=3D"*=3D"?value.indexOf(check)>=3D0:type=3D=3D=3D"~=3D"?(" =
"+value+" =
").indexOf(check)>=3D0:!check?value&&result!=3D=3Dfalse:type=3D=3D=3D"!=3D=
"?value!=3Dcheck:type=3D=3D=3D"^=3D"?value.indexOf(check)=3D=3D=3D0:type=3D=
=3D=3D"$=3D"?value.substr(value.length-check.length)=3D=3D=3Dcheck:type=3D=
=3D=3D"|=3D"?value=3D=3D=3Dcheck||value.substr(0,check.length+1)=3D=3D=3D=
check+"-":false;},POS:function(elem,match,i,array){var =
name=3Dmatch[2],filter=3DExpr.setFilters[name];if(filter){return =
filter(elem,i,match,array);}}}};var origPOS=3DExpr.match.POS;for(var =
type in =
Expr.match){Expr.match[type]=3DRegExp(Expr.match[type].source+/(?![^\[]*\=
])(?![^\(]*\))/.source);}=0A=
var =
makeArray=3Dfunction(array,results){array=3DArray.prototype.slice.call(ar=
ray);if(results){results.push.apply(results,array);return results;}=0A=
return =
array;};try{Array.prototype.slice.call(document.documentElement.childNode=
s);}catch(e){makeArray=3Dfunction(array,results){var =
ret=3Dresults||[];if(toString.call(array)=3D=3D=3D"[object =
Array]"){Array.prototype.push.apply(ret,array);}else{if(typeof =
array.length=3D=3D=3D"number"){for(var =
i=3D0,l=3Darray.length;i<l;i++){ret.push(array[i]);}}else{for(var =
i=3D0;array[i];i++){ret.push(array[i]);}}}=0A=
return ret;};}=0A=
var =
sortOrder;if(document.documentElement.compareDocumentPosition){sortOrder=3D=
function(a,b){var =
ret=3Da.compareDocumentPosition(b)&4?-1:a=3D=3D=3Db?0:1;if(ret=3D=3D=3D0)=
{hasDuplicate=3Dtrue;}=0A=
return ret;};}else if("sourceIndex"in =
document.documentElement){sortOrder=3Dfunction(a,b){var =
ret=3Da.sourceIndex-b.sourceIndex;if(ret=3D=3D=3D0){hasDuplicate=3Dtrue;}=0A=
return ret;};}else =
if(document.createRange){sortOrder=3Dfunction(a,b){var =
aRange=3Da.ownerDocument.createRange(),bRange=3Db.ownerDocument.createRan=
ge();aRange.selectNode(a);aRange.collapse(true);bRange.selectNode(b);bRan=
ge.collapse(true);var =
ret=3DaRange.compareBoundaryPoints(Range.START_TO_END,bRange);if(ret=3D=3D=
=3D0){hasDuplicate=3Dtrue;}=0A=
return ret;};}=0A=
(function(){var form=3Ddocument.createElement("form"),id=3D"script"+(new =
Date).getTime();form.innerHTML=3D"<input name=3D'"+id+"'/>";var =
root=3Ddocument.documentElement;root.insertBefore(form,root.firstChild);i=
f(!!document.getElementById(id)){Expr.find.ID=3Dfunction(match,context,is=
XML){if(typeof context.getElementById!=3D=3D"undefined"&&!isXML){var =
m=3Dcontext.getElementById(match[1]);return =
m?m.id=3D=3D=3Dmatch[1]||typeof =
m.getAttributeNode!=3D=3D"undefined"&&m.getAttributeNode("id").nodeValue=3D=
=3D=3Dmatch[1]?[m]:undefined:[];}};Expr.filter.ID=3Dfunction(elem,match){=
var node=3Dtypeof =
elem.getAttributeNode!=3D=3D"undefined"&&elem.getAttributeNode("id");retu=
rn elem.nodeType=3D=3D=3D1&&node&&node.nodeValue=3D=3D=3Dmatch;};}=0A=
root.removeChild(form);})();(function(){var =
div=3Ddocument.createElement("div");div.appendChild(document.createCommen=
t(""));if(div.getElementsByTagName("*").length>0){Expr.find.TAG=3Dfunctio=
n(match,context){var =
results=3Dcontext.getElementsByTagName(match[1]);if(match[1]=3D=3D=3D"*")=
{var tmp=3D[];for(var =
i=3D0;results[i];i++){if(results[i].nodeType=3D=3D=3D1){tmp.push(results[=
i]);}}=0A=
results=3Dtmp;}=0A=
return results;};}=0A=
div.innerHTML=3D"<a href=3D'#'></a>";if(div.firstChild&&typeof =
div.firstChild.getAttribute!=3D=3D"undefined"&&div.firstChild.getAttribut=
e("href")!=3D=3D"#"){Expr.attrHandle.href=3Dfunction(elem){return =
elem.getAttribute("href",2);};}})();if(document.querySelectorAll)(functio=
n(){var =
oldSizzle=3DSizzle,div=3Ddocument.createElement("div");div.innerHTML=3D"<=
p =
class=3D'TEST'></p>";if(div.querySelectorAll&&div.querySelectorAll(".TEST=
").length=3D=3D=3D0){return;}=0A=
Sizzle=3Dfunction(query,context,extra,seed){context=3Dcontext||document;i=
f(!seed&&context.nodeType=3D=3D=3D9&&!isXML(context)){try{return =
makeArray(context.querySelectorAll(query),extra);}catch(e){}}=0A=
return =
oldSizzle(query,context,extra,seed);};Sizzle.find=3DoldSizzle.find;Sizzle=
.filter=3DoldSizzle.filter;Sizzle.selectors=3DoldSizzle.selectors;Sizzle.=
matches=3DoldSizzle.matches;})();if(document.getElementsByClassName&&docu=
ment.documentElement.getElementsByClassName)(function(){var =
div=3Ddocument.createElement("div");div.innerHTML=3D"<div class=3D'test =
e'></div><div =
class=3D'test'></div>";if(div.getElementsByClassName("e").length=3D=3D=3D=
0)=0A=
return;div.lastChild.className=3D"e";if(div.getElementsByClassName("e").l=
ength=3D=3D=3D1)=0A=
return;Expr.order.splice(1,0,"CLASS");Expr.find.CLASS=3Dfunction(match,co=
ntext,isXML){if(typeof =
context.getElementsByClassName!=3D=3D"undefined"&&!isXML){return =
context.getElementsByClassName(match[1]);}};})();function =
dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){var =
sibDir=3Ddir=3D=3D"previousSibling"&&!isXML;for(var =
i=3D0,l=3DcheckSet.length;i<l;i++){var =
elem=3DcheckSet[i];if(elem){if(sibDir&&elem.nodeType=3D=3D=3D1){elem.sizc=
ache=3DdoneName;elem.sizset=3Di;}=0A=
elem=3Delem[dir];var =
match=3Dfalse;while(elem){if(elem.sizcache=3D=3D=3DdoneName){match=3Dchec=
kSet[elem.sizset];break;}=0A=
if(elem.nodeType=3D=3D=3D1&&!isXML){elem.sizcache=3DdoneName;elem.sizset=3D=
i;}=0A=
if(elem.nodeName=3D=3D=3Dcur){match=3Delem;break;}=0A=
elem=3Delem[dir];}=0A=
checkSet[i]=3Dmatch;}}}=0A=
function dirCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){var =
sibDir=3Ddir=3D=3D"previousSibling"&&!isXML;for(var =
i=3D0,l=3DcheckSet.length;i<l;i++){var =
elem=3DcheckSet[i];if(elem){if(sibDir&&elem.nodeType=3D=3D=3D1){elem.sizc=
ache=3DdoneName;elem.sizset=3Di;}=0A=
elem=3Delem[dir];var =
match=3Dfalse;while(elem){if(elem.sizcache=3D=3D=3DdoneName){match=3Dchec=
kSet[elem.sizset];break;}=0A=
if(elem.nodeType=3D=3D=3D1){if(!isXML){elem.sizcache=3DdoneName;elem.sizs=
et=3Di;}=0A=
if(typeof =
cur!=3D=3D"string"){if(elem=3D=3D=3Dcur){match=3Dtrue;break;}}else =
if(Sizzle.filter(cur,[elem]).length>0){match=3Delem;break;}}=0A=
elem=3Delem[dir];}=0A=
checkSet[i]=3Dmatch;}}}=0A=
var contains=3Ddocument.compareDocumentPosition?function(a,b){return =
a.compareDocumentPosition(b)&16;}:function(a,b){return =
a!=3D=3Db&&(a.contains?a.contains(b):true);};var =
isXML=3Dfunction(elem){return =
elem.nodeType=3D=3D=3D9&&elem.documentElement.nodeName!=3D=3D"HTML"||!!el=
em.ownerDocument&&isXML(elem.ownerDocument);};var =
posProcess=3Dfunction(selector,context){var =
tmpSet=3D[],later=3D"",match,root=3Dcontext.nodeType?[context]:context;wh=
ile((match=3DExpr.match.PSEUDO.exec(selector))){later+=3Dmatch[0];selecto=
r=3Dselector.replace(Expr.match.PSEUDO,"");}=0A=
selector=3DExpr.relative[selector]?selector+"*":selector;for(var =
i=3D0,l=3Droot.length;i<l;i++){Sizzle(selector,root[i],tmpSet);}=0A=
return =
Sizzle.filter(later,tmpSet);};jQuery.find=3DSizzle;jQuery.filter=3DSizzle=
.filter;jQuery.expr=3DSizzle.selectors;jQuery.expr[":"]=3DjQuery.expr.fil=
ters;Sizzle.selectors.filters.hidden=3Dfunction(elem){return =
elem.offsetWidth=3D=3D=3D0||elem.offsetHeight=3D=3D=3D0;};Sizzle.selector=
s.filters.visible=3Dfunction(elem){return =
elem.offsetWidth>0||elem.offsetHeight>0;};Sizzle.selectors.filters.animat=
ed=3Dfunction(elem){return jQuery.grep(jQuery.timers,function(fn){return =
elem=3D=3D=3Dfn.elem;}).length;};jQuery.multiFilter=3Dfunction(expr,elems=
,not){if(not){expr=3D":not("+expr+")";}=0A=
return Sizzle.matches(expr,elems);};jQuery.dir=3Dfunction(elem,dir){var =
matched=3D[],cur=3Delem[dir];while(cur&&cur!=3Ddocument){if(cur.nodeType=3D=
=3D1)=0A=
matched.push(cur);cur=3Dcur[dir];}=0A=
return =
matched;};jQuery.nth=3Dfunction(cur,result,dir,elem){result=3Dresult||1;v=
ar num=3D0;for(;cur;cur=3Dcur[dir])=0A=
if(cur.nodeType=3D=3D1&&++num=3D=3Dresult)=0A=
break;return cur;};jQuery.sibling=3Dfunction(n,elem){var =
r=3D[];for(;n;n=3Dn.nextSibling){if(n.nodeType=3D=3D1&&n!=3Delem)=0A=
r.push(n);}=0A=
return =
r;};return;window.Sizzle=3DSizzle;})();jQuery.event=3D{add:function(elem,=
types,handler,data){if(elem.nodeType=3D=3D3||elem.nodeType=3D=3D8)=0A=
return;if(elem.setInterval&&elem!=3Dwindow)=0A=
elem=3Dwindow;if(!handler.guid)=0A=
handler.guid=3Dthis.guid++;if(data!=3D=3Dundefined){var =
fn=3Dhandler;handler=3Dthis.proxy(fn);handler.data=3Ddata;}=0A=
var =
events=3DjQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=
=3DjQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){retur=
n typeof =
jQuery!=3D=3D"undefined"&&!jQuery.event.triggered?jQuery.event.handle.app=
ly(arguments.callee.elem,arguments):undefined;});handle.elem=3Delem;jQuer=
y.each(types.split(/\s+/),function(index,type){var =
namespaces=3Dtype.split(".");type=3Dnamespaces.shift();handler.type=3Dnam=
espaces.slice().sort().join(".");var =
handlers=3Devents[type];if(jQuery.event.specialAll[type])=0A=
jQuery.event.specialAll[type].setup.call(elem,data,namespaces);if(!handle=
rs){handlers=3Devents[type]=3D{};if(!jQuery.event.special[type]||jQuery.e=
vent.special[type].setup.call(elem,data,namespaces)=3D=3D=3Dfalse){if(ele=
m.addEventListener)=0A=
elem.addEventListener(type,handle,false);else if(elem.attachEvent)=0A=
elem.attachEvent("on"+type,handle);}}=0A=
handlers[handler.guid]=3Dhandler;jQuery.event.global[type]=3Dtrue;});elem=
=3Dnull;},guid:1,global:{},remove:function(elem,types,handler){if(elem.no=
deType=3D=3D3||elem.nodeType=3D=3D8)=0A=
return;var =
events=3DjQuery.data(elem,"events"),ret,index;if(events){if(types=3D=3D=3D=
undefined||(typeof types=3D=3D=3D"string"&&types.charAt(0)=3D=3D"."))=0A=
for(var type in events)=0A=
this.remove(elem,type+(types||""));else{if(types.type){handler=3Dtypes.ha=
ndler;types=3Dtypes.type;}=0A=
jQuery.each(types.split(/\s+/),function(index,type){var =
namespaces=3Dtype.split(".");type=3Dnamespaces.shift();var =
namespace=3DRegExp("(^|\\.)"+namespaces.slice().sort().join(".*\\.")+"(\\=
.|$)");if(events[type]){if(handler)=0A=
delete events[type][handler.guid];else=0A=
for(var handle in events[type])=0A=
if(namespace.test(events[type][handle].type))=0A=
delete events[type][handle];if(jQuery.event.specialAll[type])=0A=
jQuery.event.specialAll[type].teardown.call(elem,namespaces);for(ret in =
events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.=
special[type].teardown.call(elem,namespaces)=3D=3D=3Dfalse){if(elem.remov=
eEventListener)=0A=
elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else =
if(elem.detachEvent)=0A=
elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}=0A=
ret=3Dnull;delete events[type];}}});}=0A=
for(ret in events)break;if(!ret){var =
handle=3DjQuery.data(elem,"handle");if(handle)handle.elem=3Dnull;jQuery.r=
emoveData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:fun=
ction(event,data,elem,bubbling){var =
type=3Devent.type||event;if(!bubbling){event=3Dtypeof =
event=3D=3D=3D"object"?event[expando]?event:jQuery.extend(jQuery.Event(ty=
pe),event):jQuery.Event(type);if(type.indexOf("!")>=3D0){event.type=3Dtyp=
e=3Dtype.slice(0,-1);event.exclusive=3Dtrue;}=0A=
if(!elem){event.stopPropagation();if(this.global[type])=0A=
jQuery.each(jQuery.cache,function(){if(this.events&&this.events[type])=0A=
jQuery.event.trigger(event,data,this.handle.elem);});}=0A=
if(!elem||elem.nodeType=3D=3D3||elem.nodeType=3D=3D8)=0A=
return =
undefined;event.result=3Dundefined;event.target=3Delem;data=3DjQuery.make=
Array(data);data.unshift(event);}=0A=
event.currentTarget=3Delem;var =
handle=3DjQuery.data(elem,"handle");if(handle)=0A=
handle.apply(elem,data);if((!elem[type]||(jQuery.nodeName(elem,'a')&&type=
=3D=3D"click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)=3D=3D=3D=
false)=0A=
event.result=3Dfalse;if(!bubbling&&elem[type]&&!event.isDefaultPrevented(=
)&&!(jQuery.nodeName(elem,'a')&&type=3D=3D"click")){this.triggered=3Dtrue=
;try{elem[type]();}catch(e){}}=0A=
this.triggered=3Dfalse;if(!event.isPropagationStopped()){var =
parent=3Delem.parentNode||elem.ownerDocument;if(parent)=0A=
jQuery.event.trigger(event,data,parent,true);}},handle:function(event){va=
r =
all,handlers;event=3Darguments[0]=3DjQuery.event.fix(event||window.event)=
;event.currentTarget=3Dthis;var =
namespaces=3Devent.type.split(".");event.type=3Dnamespaces.shift();all=3D=
!namespaces.length&&!event.exclusive;var =
namespace=3DRegExp("(^|\\.)"+namespaces.slice().sort().join(".*\\.")+"(\\=
.|$)");handlers=3D(jQuery.data(this,"events")||{})[event.type];for(var j =
in handlers){var =
handler=3Dhandlers[j];if(all||namespace.test(handler.type)){event.handler=
=3Dhandler;event.data=3Dhandler.data;var =
ret=3Dhandler.apply(this,arguments);if(ret!=3D=3Dundefined){event.result=3D=
ret;if(ret=3D=3D=3Dfalse){event.preventDefault();event.stopPropagation();=
}}=0A=
if(event.isImmediatePropagationStopped())=0A=
break;}}},props:"altKey attrChange attrName bubbles button cancelable =
charCode clientX clientY ctrlKey currentTarget data detail eventPhase =
fromElement handler keyCode metaKey newValue originalTarget pageX pageY =
prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement =
target toElement view wheelDelta which".split(" =
"),fix:function(event){if(event[expando])=0A=
return event;var =
originalEvent=3Devent;event=3DjQuery.Event(originalEvent);for(var =
i=3Dthis.props.length,prop;i;){prop=3Dthis.props[--i];event[prop]=3Dorigi=
nalEvent[prop];}=0A=
if(!event.target)=0A=
event.target=3Devent.srcElement||document;if(event.target.nodeType=3D=3D3=
)=0A=
event.target=3Devent.target.parentNode;if(!event.relatedTarget&&event.fro=
mElement)=0A=
event.relatedTarget=3Devent.fromElement=3D=3Devent.target?event.toElement=
:event.fromElement;if(event.pageX=3D=3Dnull&&event.clientX!=3Dnull){var =
doc=3Ddocument.documentElement,body=3Ddocument.body;event.pageX=3Devent.c=
lientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0=
);event.pageY=3Devent.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||=
0)-(doc.clientTop||0);}=0A=
if(!event.which&&((event.charCode||event.charCode=3D=3D=3D0)?event.charCo=
de:event.keyCode))=0A=
event.which=3Devent.charCode||event.keyCode;if(!event.metaKey&&event.ctrl=
Key)=0A=
event.metaKey=3Devent.ctrlKey;if(!event.which&&event.button)=0A=
event.which=3D(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));=
return event;},proxy:function(fn,proxy){proxy=3Dproxy||function(){return =
fn.apply(this,arguments);};proxy.guid=3Dfn.guid=3Dfn.guid||proxy.guid||th=
is.guid++;return =
proxy;},special:{ready:{setup:bindReady,teardown:function(){}}},specialAl=
l:{live:{setup:function(selector,namespaces){jQuery.event.add(this,namesp=
aces[0],liveHandler);},teardown:function(namespaces){if(namespaces.length=
){var =
remove=3D0,name=3DRegExp("(^|\\.)"+namespaces[0]+"(\\.|$)");jQuery.each((=
jQuery.data(this,"events").live||{}),function(){if(name.test(this.type))=0A=
remove++;});if(remove<1)=0A=
jQuery.event.remove(this,namespaces[0],liveHandler);}}}}};jQuery.Event=3D=
function(src){if(!this.preventDefault)=0A=
return new =
jQuery.Event(src);if(src&&src.type){this.originalEvent=3Dsrc;this.type=3D=
src.type;}else=0A=
this.type=3Dsrc;this.timeStamp=3Dnow();this[expando]=3Dtrue;};function =
returnFalse(){return false;}=0A=
function returnTrue(){return true;}=0A=
jQuery.Event.prototype=3D{preventDefault:function(){this.isDefaultPrevent=
ed=3DreturnTrue;var e=3Dthis.originalEvent;if(!e)=0A=
return;if(e.preventDefault)=0A=
e.preventDefault();e.returnValue=3Dfalse;},stopPropagation:function(){thi=
s.isPropagationStopped=3DreturnTrue;var e=3Dthis.originalEvent;if(!e)=0A=
return;if(e.stopPropagation)=0A=
e.stopPropagation();e.cancelBubble=3Dtrue;},stopImmediatePropagation:func=
tion(){this.isImmediatePropagationStopped=3DreturnTrue;this.stopPropagati=
on();},isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,is=
ImmediatePropagationStopped:returnFalse};var =
withinElement=3Dfunction(event){var =
parent=3Devent.relatedTarget;while(parent&&parent!=3Dthis)=0A=
try{parent=3Dparent.parentNode;}=0A=
catch(e){parent=3Dthis;}=0A=
if(parent!=3Dthis){event.type=3Devent.data;jQuery.event.handle.apply(this=
,arguments);}};jQuery.each({mouseover:'mouseenter',mouseout:'mouseleave'}=
,function(orig,fix){jQuery.event.special[fix]=3D{setup:function(){jQuery.=
event.add(this,orig,withinElement,fix);},teardown:function(){jQuery.event=
.remove(this,orig,withinElement);}};});jQuery.fn.extend({bind:function(ty=
pe,data,fn){return =
type=3D=3D"unload"?this.one(type,data,fn):this.each(function(){jQuery.eve=
nt.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var =
one=3DjQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(eve=
nt,one);return(fn||data).apply(this,arguments);});return =
this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind=
:function(type,fn){return =
this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:funct=
ion(type,data){return =
this.each(function(){jQuery.event.trigger(type,data,this);});},triggerHan=
dler:function(type,data){if(this[0]){var =
event=3DjQuery.Event(type);event.preventDefault();event.stopPropagation()=
;jQuery.event.trigger(event,data,this[0]);return =
event.result;}},toggle:function(fn){var =
args=3Darguments,i=3D1;while(i<args.length)=0A=
jQuery.event.proxy(fn,args[i++]);return =
this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=3D(this.=
lastToggle||0)%i;event.preventDefault();return =
args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function=
(fnOver,fnOut){return =
this.mouseenter(fnOver).mouseleave(fnOut);},ready:function(fn){bindReady(=
);if(jQuery.isReady)=0A=
fn.call(document,jQuery);else=0A=
jQuery.readyList.push(fn);return this;},live:function(type,fn){var =
proxy=3DjQuery.event.proxy(fn);proxy.guid+=3Dthis.selector+type;jQuery(do=
cument).bind(liveConvert(type,this.selector),this.selector,proxy);return =
this;},die:function(type,fn){jQuery(document).unbind(liveConvert(type,thi=
s.selector),fn?{guid:fn.guid+this.selector+type}:null);return =
this;}});function liveHandler(event){var =
check=3DRegExp("(^|\\.)"+event.type+"(\\.|$)"),stop=3Dtrue,elems=3D[];jQu=
ery.each(jQuery.data(this,"events").live||[],function(i,fn){if(check.test=
(fn.type)){var elem=3DjQuery(event.target).closest(fn.data)[0];if(elem)=0A=
elems.push({elem:elem,fn:fn});}});elems.sort(function(a,b){return =
jQuery.data(a.elem,"closest")-jQuery.data(b.elem,"closest");});jQuery.eac=
h(elems,function(){if(this.fn.call(this.elem,event,this.fn.data)=3D=3D=3D=
false)=0A=
return(stop=3Dfalse);});return stop;}=0A=
function =
liveConvert(type,selector){return["live",type,selector.replace(/\./g,"`")=
.replace(/ /g,"|")].join(".");}=0A=
jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isR=
eady){jQuery.isReady=3Dtrue;if(jQuery.readyList){jQuery.each(jQuery.ready=
List,function(){this.call(document,jQuery);});jQuery.readyList=3Dnull;}=0A=
jQuery(document).triggerHandler("ready");}}});var =
readyBound=3Dfalse;function =
bindReady(){if(readyBound)return;readyBound=3Dtrue;if(document.addEventLi=
stener){document.addEventListener("DOMContentLoaded",function(){document.=
removeEventListener("DOMContentLoaded",arguments.callee,false);jQuery.rea=
dy();},false);}else =
if(document.attachEvent){document.attachEvent("onreadystatechange",functi=
on(){if(document.readyState=3D=3D=3D"complete"){document.detachEvent("onr=
eadystatechange",arguments.callee);jQuery.ready();}});if(document.documen=
tElement.doScroll&&window=3D=3Dwindow.top)(function(){if(jQuery.isReady)r=
eturn;try{document.documentElement.doScroll("left");}catch(error){setTime=
out(arguments.callee,0);return;}=0A=
jQuery.ready();})();}=0A=
jQuery.event.add(window,"load",jQuery.ready);}=0A=
jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mous=
edown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,"+"chang=
e,select,submit,keydown,keypress,keyup,error").split(","),function(i,name=
){jQuery.fn[name]=3Dfunction(fn){return =
fn?this.bind(name,fn):this.trigger(name);};});jQuery(window).bind('unload=
',function(){for(var id in jQuery.cache)=0A=
if(id!=3D1&&jQuery.cache[id].handle)=0A=
jQuery.event.remove(jQuery.cache[id].handle.elem);});(function(){jQuery.s=
upport=3D{};var =
root=3Ddocument.documentElement,script=3Ddocument.createElement("script")=
,div=3Ddocument.createElement("div"),id=3D"script"+(new =
Date).getTime();div.style.display=3D"none";div.innerHTML=3D'   =
<link/><table></table><a href=3D"/a" =
style=3D"color:red;float:left;opacity:.5;">a</a><select><option>text</opt=
ion></select><object><param/></object>';var =
all=3Ddiv.getElementsByTagName("*"),a=3Ddiv.getElementsByTagName("a")[0];=
if(!all||!all.length||!a){return;}=0A=
jQuery.support=3D{leadingWhitespace:div.firstChild.nodeType=3D=3D3,tbody:=
!div.getElementsByTagName("tbody").length,objectAll:!!div.getElementsByTa=
gName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!div.g=
etElementsByTagName("link").length,style:/red/.test(a.getAttribute("style=
")),hrefNormalized:a.getAttribute("href")=3D=3D=3D"/a",opacity:a.style.op=
acity=3D=3D=3D"0.5",cssFloat:!!a.style.cssFloat,scriptEval:false,noCloneE=
vent:true,boxModel:null};script.type=3D"text/javascript";try{script.appen=
dChild(document.createTextNode("window."+id+"=3D1;"));}catch(e){}=0A=
root.insertBefore(script,root.firstChild);if(window[id]){jQuery.support.s=
criptEval=3Dtrue;delete window[id];}=0A=
root.removeChild(script);if(div.attachEvent&&div.fireEvent){div.attachEve=
nt("onclick",function(){jQuery.support.noCloneEvent=3Dfalse;div.detachEve=
nt("onclick",arguments.callee);});div.cloneNode(true).fireEvent("onclick"=
);}=0A=
jQuery(function(){var =
div=3Ddocument.createElement("div");div.style.width=3Ddiv.style.paddingLe=
ft=3D"1px";document.body.appendChild(div);jQuery.boxModel=3DjQuery.suppor=
t.boxModel=3Ddiv.offsetWidth=3D=3D=3D2;document.body.removeChild(div).sty=
le.display=3D'none';});})();var =
styleFloat=3DjQuery.support.cssFloat?"cssFloat":"styleFloat";jQuery.props=
=3D{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:style=
Float,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cel=
lspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};jQuery.fn.e=
xtend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof =
url!=3D=3D"string")=0A=
return this._load(url);var off=3Durl.indexOf(" ");if(off>=3D0){var =
selector=3Durl.slice(off,url.length);url=3Durl.slice(0,off);}=0A=
var type=3D"GET";if(params)=0A=
if(jQuery.isFunction(params)){callback=3Dparams;params=3Dnull;}else =
if(typeof =
params=3D=3D=3D"object"){params=3DjQuery.param(params);type=3D"POST";}=0A=
var =
self=3Dthis;jQuery.ajax({url:url,type:type,dataType:"html",data:params,co=
mplete:function(res,status){if(status=3D=3D"success"||status=3D=3D"notmod=
ified")=0A=
self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<scr=
ipt(.|\s)*?\/script>/g,"")).find(selector):res.responseText);if(callback)=0A=
self.each(callback,[res.responseText,status,res]);}});return =
this;},serialize:function(){return =
jQuery.param(this.serializeArray());},serializeArray:function(){return =
this.map(function(){return =
this.elements?jQuery.makeArray(this.elements):this;}).filter(function(){r=
eturn =
this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.no=
deName)||/text|hidden|password|search/i.test(this.type));}).map(function(=
i,elem){var val=3DjQuery(this).val();return =
val=3D=3Dnull?null:jQuery.isArray(val)?jQuery.map(val,function(val,i){ret=
urn{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});=
jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSe=
nd".split(","),function(i,o){jQuery.fn[o]=3Dfunction(f){return =
this.bind(o,f);};});var =
jsc=3Dnow();jQuery.extend({get:function(url,data,callback,type){if(jQuery=
.isFunction(data)){callback=3Ddata;data=3Dnull;}=0A=
return =
jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type}=
);},getScript:function(url,callback){return =
jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callba=
ck){return =
jQuery.get(url,data,callback,"json");},post:function(url,data,callback,ty=
pe){if(jQuery.isFunction(data)){callback=3Ddata;data=3D{};}=0A=
return =
jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type=
});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,setti=
ngs);},ajaxSettings:{url:location.href,global:true,type:"GET",contentType=
:"application/x-www-form-urlencoded",processData:true,async:true,xhr:func=
tion(){return window.ActiveXObject?new =
ActiveXObject("Microsoft.XMLHTTP"):new =
XMLHttpRequest();},accepts:{xml:"application/xml, =
text/xml",html:"text/html",script:"text/javascript, =
application/javascript",json:"application/json, =
text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:=
function(s){s=3DjQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSet=
tings,s));var =
jsonp,jsre=3D/=3D\?(&|$)/g,status,data,type=3Ds.type.toUpperCase();if(s.d=
ata&&s.processData&&typeof s.data!=3D=3D"string")=0A=
s.data=3DjQuery.param(s.data);if(s.dataType=3D=3D"jsonp"){if(type=3D=3D"G=
ET"){if(!s.url.match(jsre))=0A=
s.url+=3D(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=3D?";}else =
if(!s.data||!s.data.match(jsre))=0A=
s.data=3D(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=3D?";s.dataType=3D=
"json";}=0A=
if(s.dataType=3D=3D"json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre)=
)){jsonp=3D"jsonp"+jsc++;if(s.data)=0A=
s.data=3D(s.data+"").replace(jsre,"=3D"+jsonp+"$1");s.url=3Ds.url.replace=
(jsre,"=3D"+jsonp+"$1");s.dataType=3D"script";window[jsonp]=3Dfunction(tm=
p){data=3Dtmp;success();complete();window[jsonp]=3Dundefined;try{delete =
window[jsonp];}catch(e){}=0A=
if(head)=0A=
head.removeChild(script);};}=0A=
if(s.dataType=3D=3D"script"&&s.cache=3D=3Dnull)=0A=
s.cache=3Dfalse;if(s.cache=3D=3D=3Dfalse&&type=3D=3D"GET"){var =
ts=3Dnow();var =
ret=3Ds.url.replace(/(\?|&)_=3D.*?(&|$)/,"$1_=3D"+ts+"$2");s.url=3Dret+((=
ret=3D=3Ds.url)?(s.url.match(/\?/)?"&":"?")+"_=3D"+ts:"");}=0A=
if(s.data&&type=3D=3D"GET"){s.url+=3D(s.url.match(/\?/)?"&":"?")+s.data;s=
.data=3Dnull;}=0A=
if(s.global&&!jQuery.active++)=0A=
jQuery.event.trigger("ajaxStart");var =
parts=3D/^(\w+:)?\/\/([^\/?#]+)/.exec(s.url);if(s.dataType=3D=3D"script"&=
&type=3D=3D"GET"&&parts&&(parts[1]&&parts[1]!=3Dlocation.protocol||parts[=
2]!=3Dlocation.host)){var =
head=3Ddocument.getElementsByTagName("head")[0];var =
script=3Ddocument.createElement("script");script.src=3Ds.url;if(s.scriptC=
harset)=0A=
script.charset=3Ds.scriptCharset;if(!jsonp){var =
done=3Dfalse;script.onload=3Dscript.onreadystatechange=3Dfunction(){if(!d=
one&&(!this.readyState||this.readyState=3D=3D"loaded"||this.readyState=3D=
=3D"complete")){done=3Dtrue;success();complete();script.onload=3Dscript.o=
nreadystatechange=3Dnull;head.removeChild(script);}};}=0A=
head.appendChild(script);return undefined;}=0A=
var requestDone=3Dfalse;var xhr=3Ds.xhr();if(s.username)=0A=
xhr.open(type,s.url,s.async,s.username,s.password);else=0A=
xhr.open(type,s.url,s.async);try{if(s.data)=0A=
xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)=0A=
xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu=
, 01 Jan 1970 00:00:00 =
GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRe=
questHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataTy=
pe]+", */*":s.accepts._default);}catch(e){}=0A=
if(s.beforeSend&&s.beforeSend(xhr,s)=3D=3D=3Dfalse){if(s.global&&!--jQuer=
y.active)=0A=
jQuery.event.trigger("ajaxStop");xhr.abort();return false;}=0A=
if(s.global)=0A=
jQuery.event.trigger("ajaxSend",[xhr,s]);var =
onreadystatechange=3Dfunction(isTimeout){if(xhr.readyState=3D=3D0){if(iva=
l){clearInterval(ival);ival=3Dnull;if(s.global&&!--jQuery.active)=0A=
jQuery.event.trigger("ajaxStop");}}else =
if(!requestDone&&xhr&&(xhr.readyState=3D=3D4||isTimeout=3D=3D"timeout")){=
requestDone=3Dtrue;if(ival){clearInterval(ival);ival=3Dnull;}=0A=
status=3DisTimeout=3D=3D"timeout"?"timeout":!jQuery.httpSuccess(xhr)?"err=
or":s.ifModified&&jQuery.httpNotModified(xhr,s.url)?"notmodified":"succes=
s";if(status=3D=3D"success"){try{data=3DjQuery.httpData(xhr,s.dataType,s)=
;}catch(e){status=3D"parsererror";}}=0A=
if(status=3D=3D"success"){var =
modRes;try{modRes=3Dxhr.getResponseHeader("Last-Modified");}catch(e){}=0A=
if(s.ifModified&&modRes)=0A=
jQuery.lastModified[s.url]=3DmodRes;if(!jsonp)=0A=
success();}else=0A=
jQuery.handleError(s,xhr,status);complete();if(isTimeout)=0A=
xhr.abort();if(s.async)=0A=
xhr=3Dnull;}};if(s.async){var =
ival=3DsetInterval(onreadystatechange,13);if(s.timeout>0)=0A=
setTimeout(function(){if(xhr&&!requestDone)=0A=
onreadystatechange("timeout");},s.timeout);}=0A=
try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}=0A=
if(!s.async)=0A=
onreadystatechange();function success(){if(s.success)=0A=
s.success(data,status);if(s.global)=0A=
jQuery.event.trigger("ajaxSuccess",[xhr,s]);}=0A=
function complete(){if(s.complete)=0A=
s.complete(xhr,status);if(s.global)=0A=
jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.activ=
e)=0A=
jQuery.event.trigger("ajaxStop");}=0A=
return =
xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,=
e);if(s.global)=0A=
jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:functi=
on(xhr){try{return!xhr.status&&location.protocol=3D=3D"file:"||(xhr.statu=
s>=3D200&&xhr.status<300)||xhr.status=3D=3D304||xhr.status=3D=3D1223;}cat=
ch(e){}=0A=
return false;},httpNotModified:function(xhr,url){try{var =
xhrRes=3Dxhr.getResponseHeader("Last-Modified");return =
xhr.status=3D=3D304||xhrRes=3D=3DjQuery.lastModified[url];}catch(e){}=0A=
return false;},httpData:function(xhr,type,s){var =
ct=3Dxhr.getResponseHeader("content-type"),xml=3Dtype=3D=3D"xml"||!type&&=
ct&&ct.indexOf("xml")>=3D0,data=3Dxml?xhr.responseXML:xhr.responseText;if=
(xml&&data.documentElement.tagName=3D=3D"parsererror")=0A=
throw"parsererror";if(s&&s.dataFilter)=0A=
data=3Ds.dataFilter(data,type);if(typeof =
data=3D=3D=3D"string"){if(type=3D=3D"script")=0A=
jQuery.globalEval(data);if(type=3D=3D"json")=0A=
data=3Dwindow["eval"]("("+data+")");}=0A=
return data;},param:function(a){var s=3D[];function =
add(key,value){s[s.length]=3DencodeURIComponent(key)+'=3D'+encodeURICompo=
nent(value);};if(jQuery.isArray(a)||a.jquery)=0A=
jQuery.each(a,function(){add(this.name,this.value);});else=0A=
for(var j in a)=0A=
if(jQuery.isArray(a[j]))=0A=
jQuery.each(a[j],function(){add(j,this);});else=0A=
add(j,jQuery.isFunction(a[j])?a[j]():a[j]);return =
s.join("&").replace(/%20/g,"+");}});var =
elemdisplay=3D{},timerId,fxAttrs=3D[["height","marginTop","marginBottom",=
"paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddin=
gLeft","paddingRight"],["opacity"]];function genFx(type,num){var =
obj=3D{};jQuery.each(fxAttrs.concat.apply([],fxAttrs.slice(0,num)),functi=
on(){obj[this]=3Dtype;});return obj;}=0A=
jQuery.fn.extend({show:function(speed,callback){if(speed){return =
this.animate(genFx("show",3),speed,callback);}else{for(var =
i=3D0,l=3Dthis.length;i<l;i++){var =
old=3DjQuery.data(this[i],"olddisplay");this[i].style.display=3Dold||"";i=
f(jQuery.css(this[i],"display")=3D=3D=3D"none"){var =
tagName=3Dthis[i].tagName,display;if(elemdisplay[tagName]){display=3Delem=
display[tagName];}else{var elem=3DjQuery("<"+tagName+" =
/>").appendTo("body");display=3Delem.css("display");if(display=3D=3D=3D"n=
one")=0A=
display=3D"block";elem.remove();elemdisplay[tagName]=3Ddisplay;}=0A=
jQuery.data(this[i],"olddisplay",display);}}=0A=
for(var =
i=3D0,l=3Dthis.length;i<l;i++){this[i].style.display=3DjQuery.data(this[i=
],"olddisplay")||"";}=0A=
return this;}},hide:function(speed,callback){if(speed){return =
this.animate(genFx("hide",3),speed,callback);}else{for(var =
i=3D0,l=3Dthis.length;i<l;i++){var =
old=3DjQuery.data(this[i],"olddisplay");if(!old&&old!=3D=3D"none")=0A=
jQuery.data(this[i],"olddisplay",jQuery.css(this[i],"display"));}=0A=
for(var i=3D0,l=3Dthis.length;i<l;i++){this[i].style.display=3D"none";}=0A=
return this;}},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){var =
bool=3Dtypeof fn=3D=3D=3D"boolean";return =
jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arg=
uments):fn=3D=3Dnull||bool?this.each(function(){var =
state=3Dbool?fn:jQuery(this).is(":hidden");jQuery(this)[state?"show":"hid=
e"]();}):this.animate(genFx("toggle",3),fn,fn2);},fadeTo:function(speed,t=
o,callback){return =
this.animate({opacity:to},speed,callback);},animate:function(prop,speed,e=
asing,callback){var optall=3DjQuery.speed(speed,easing,callback);return =
this[optall.queue=3D=3D=3Dfalse?"each":"queue"](function(){var =
opt=3DjQuery.extend({},optall),p,hidden=3Dthis.nodeType=3D=3D1&&jQuery(th=
is).is(":hidden"),self=3Dthis;for(p in =
prop){if(prop[p]=3D=3D"hide"&&hidden||prop[p]=3D=3D"show"&&!hidden)=0A=
return =
opt.complete.call(this);if((p=3D=3D"height"||p=3D=3D"width")&&this.style)=
{opt.display=3DjQuery.css(this,"display");opt.overflow=3Dthis.style.overf=
low;}}=0A=
if(opt.overflow!=3Dnull)=0A=
this.style.overflow=3D"hidden";opt.curAnim=3DjQuery.extend({},prop);jQuer=
y.each(prop,function(name,val){var e=3Dnew =
jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))=0A=
e[val=3D=3D"toggle"?hidden?"show":"hide":val](prop);else{var =
parts=3Dval.toString().match(/^([+-]=3D)?([\d+-.]+)(.*)$/),start=3De.cur(=
true)||0;if(parts){var =
end=3DparseFloat(parts[2]),unit=3Dparts[3]||"px";if(unit!=3D"px"){self.st=
yle[name]=3D(end||1)+unit;start=3D((end||1)/e.cur(true))*start;self.style=
[name]=3Dstart+unit;}=0A=
if(parts[1])=0A=
end=3D((parts[1]=3D=3D"-=3D"?-1:1)*end)+start;e.custom(start,end,unit);}e=
lse=0A=
e.custom(start,val,"");}});return =
true;});},stop:function(clearQueue,gotoEnd){var =
timers=3DjQuery.timers;if(clearQueue)=0A=
this.queue([]);this.each(function(){for(var =
i=3Dtimers.length-1;i>=3D0;i--)=0A=
if(timers[i].elem=3D=3Dthis){if(gotoEnd)=0A=
timers[i](true);timers.splice(i,1);}});if(!gotoEnd)=0A=
this.dequeue();return =
this;}});jQuery.each({slideDown:genFx("show",1),slideUp:genFx("hide",1),s=
lideToggle:genFx("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hi=
de"}},function(name,props){jQuery.fn[name]=3Dfunction(speed,callback){ret=
urn =
this.animate(props,speed,callback);};});jQuery.extend({speed:function(spe=
ed,easing,fn){var opt=3Dtypeof =
speed=3D=3D=3D"object"?speed:{complete:fn||!fn&&easing||jQuery.isFunction=
(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!jQuery.isFuncti=
on(easing)&&easing};opt.duration=3DjQuery.fx.off?0:typeof =
opt.duration=3D=3D=3D"number"?opt.duration:jQuery.fx.speeds[opt.duration]=
||jQuery.fx.speeds._default;opt.old=3Dopt.complete;opt.complete=3Dfunctio=
n(){if(opt.queue!=3D=3Dfalse)=0A=
jQuery(this).dequeue();if(jQuery.isFunction(opt.old))=0A=
opt.old.call(this);};return =
opt;},easing:{linear:function(p,n,firstNum,diff){return =
firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*M=
ath.PI)/2)+0.5)*diff+firstNum;}},timers:[],fx:function(elem,options,prop)=
{this.options=3Doptions;this.elem=3Delem;this.prop=3Dprop;if(!options.ori=
g)=0A=
options.orig=3D{};}});jQuery.fx.prototype=3D{update:function(){if(this.op=
tions.step)=0A=
this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop=
]||jQuery.fx.step._default)(this);if((this.prop=3D=3D"height"||this.prop=3D=
=3D"width")&&this.elem.style)=0A=
this.elem.style.display=3D"block";},cur:function(force){if(this.elem[this=
.prop]!=3Dnull&&(!this.elem.style||this.elem.style[this.prop]=3D=3Dnull))=0A=
return this.elem[this.prop];var =
r=3DparseFloat(jQuery.css(this.elem,this.prop,force));return =
r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:=
function(from,to,unit){this.startTime=3Dnow();this.start=3Dfrom;this.end=3D=
to;this.unit=3Dunit||this.unit||"px";this.now=3Dthis.start;this.pos=3Dthi=
s.state=3D0;var self=3Dthis;function t(gotoEnd){return =
self.step(gotoEnd);}=0A=
t.elem=3Dthis.elem;if(t()&&jQuery.timers.push(t)&&!timerId){timerId=3Dset=
Interval(function(){var timers=3DjQuery.timers;for(var =
i=3D0;i<timers.length;i++)=0A=
if(!timers[i]())=0A=
timers.splice(i--,1);if(!timers.length){clearInterval(timerId);timerId=3D=
undefined;}},13);}},show:function(){this.options.orig[this.prop]=3DjQuery=
.attr(this.elem.style,this.prop);this.options.show=3Dtrue;this.custom(thi=
s.prop=3D=3D"width"||this.prop=3D=3D"height"?1:0,this.cur());jQuery(this.=
elem).show();},hide:function(){this.options.orig[this.prop]=3DjQuery.attr=
(this.elem.style,this.prop);this.options.hide=3Dtrue;this.custom(this.cur=
(),0);},step:function(gotoEnd){var =
t=3Dnow();if(gotoEnd||t>=3Dthis.options.duration+this.startTime){this.now=
=3Dthis.end;this.pos=3Dthis.state=3D1;this.update();this.options.curAnim[=
this.prop]=3Dtrue;var done=3Dtrue;for(var i in this.options.curAnim)=0A=
if(this.options.curAnim[i]!=3D=3Dtrue)=0A=
done=3Dfalse;if(done){if(this.options.display!=3Dnull){this.elem.style.ov=
erflow=3Dthis.options.overflow;this.elem.style.display=3Dthis.options.dis=
play;if(jQuery.css(this.elem,"display")=3D=3D"none")=0A=
this.elem.style.display=3D"block";}=0A=
if(this.options.hide)=0A=
jQuery(this.elem).hide();if(this.options.hide||this.options.show)=0A=
for(var p in this.options.curAnim)=0A=
jQuery.attr(this.elem.style,p,this.options.orig[p]);this.options.complete=
.call(this.elem);}=0A=
return false;}else{var =
n=3Dt-this.startTime;this.state=3Dn/this.options.duration;this.pos=3DjQue=
ry.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](th=
is.state,n,0,1,this.options.duration);this.now=3Dthis.start+((this.end-th=
is.start)*this.pos);this.update();}=0A=
return =
true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,_default:400},=
step:{opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},=
_default:function(fx){if(fx.elem.style&&fx.elem.style[fx.prop]!=3Dnull)=0A=
fx.elem.style[fx.prop]=3Dfx.now+fx.unit;else=0A=
fx.elem[fx.prop]=3Dfx.now;}}});if(document.documentElement["getBoundingCl=
ientRect"])=0A=
jQuery.fn.offset=3Dfunction(){if(!this[0])return{top:0,left:0};if(this[0]=
=3D=3D=3Dthis[0].ownerDocument.body)return =
jQuery.offset.bodyOffset(this[0]);var =
box=3Dthis[0].getBoundingClientRect(),doc=3Dthis[0].ownerDocument,body=3D=
doc.body,docElem=3Ddoc.documentElement,clientTop=3DdocElem.clientTop||bod=
y.clientTop||0,clientLeft=3DdocElem.clientLeft||body.clientLeft||0,top=3D=
box.top+(self.pageYOffset||jQuery.boxModel&&docElem.scrollTop||body.scrol=
lTop)-clientTop,left=3Dbox.left+(self.pageXOffset||jQuery.boxModel&&docEl=
em.scrollLeft||body.scrollLeft)-clientLeft;return{top:top,left:left};};el=
se=0A=
jQuery.fn.offset=3Dfunction(){if(!this[0])return{top:0,left:0};if(this[0]=
=3D=3D=3Dthis[0].ownerDocument.body)return =
jQuery.offset.bodyOffset(this[0]);jQuery.offset.initialized||jQuery.offse=
t.initialize();var =
elem=3Dthis[0],offsetParent=3Delem.offsetParent,prevOffsetParent=3Delem,d=
oc=3Delem.ownerDocument,computedStyle,docElem=3Ddoc.documentElement,body=3D=
doc.body,defaultView=3Ddoc.defaultView,prevComputedStyle=3DdefaultView.ge=
tComputedStyle(elem,null),top=3Delem.offsetTop,left=3Delem.offsetLeft;whi=
le((elem=3Delem.parentNode)&&elem!=3D=3Dbody&&elem!=3D=3DdocElem){compute=
dStyle=3DdefaultView.getComputedStyle(elem,null);top-=3Delem.scrollTop,le=
ft-=3Delem.scrollLeft;if(elem=3D=3D=3DoffsetParent){top+=3Delem.offsetTop=
,left+=3Delem.offsetLeft;if(jQuery.offset.doesNotAddBorder&&!(jQuery.offs=
et.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(elem.tagName)))=0A=
top+=3DparseInt(computedStyle.borderTopWidth,10)||0,left+=3DparseInt(comp=
utedStyle.borderLeftWidth,10)||0;prevOffsetParent=3DoffsetParent,offsetPa=
rent=3Delem.offsetParent;}=0A=
if(jQuery.offset.subtractsBorderForOverflowNotVisible&&computedStyle.over=
flow!=3D=3D"visible")=0A=
top+=3DparseInt(computedStyle.borderTopWidth,10)||0,left+=3DparseInt(comp=
utedStyle.borderLeftWidth,10)||0;prevComputedStyle=3DcomputedStyle;}=0A=
if(prevComputedStyle.position=3D=3D=3D"relative"||prevComputedStyle.posit=
ion=3D=3D=3D"static")=0A=
top+=3Dbody.offsetTop,left+=3Dbody.offsetLeft;if(prevComputedStyle.positi=
on=3D=3D=3D"fixed")=0A=
top+=3DMath.max(docElem.scrollTop,body.scrollTop),left+=3DMath.max(docEle=
m.scrollLeft,body.scrollLeft);return{top:top,left:left};};jQuery.offset=3D=
{initialize:function(){if(this.initialized)return;var =
body=3Ddocument.body,container=3Ddocument.createElement('div'),innerDiv,c=
heckDiv,table,td,rules,prop,bodyMarginTop=3Dbody.style.marginTop,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>';rules=3D{position:'absolute=
',top:0,left:0,margin:0,border:0,width:'1px',height:'1px',visibility:'hid=
den'};for(prop in =
rules)container.style[prop]=3Drules[prop];container.innerHTML=3Dhtml;body=
.insertBefore(container,body.firstChild);innerDiv=3Dcontainer.firstChild,=
checkDiv=3DinnerDiv.firstChild,td=3DinnerDiv.nextSibling.firstChild.first=
Child;this.doesNotAddBorder=3D(checkDiv.offsetTop!=3D=3D5);this.doesAddBo=
rderForTableAndCells=3D(td.offsetTop=3D=3D=3D5);innerDiv.style.overflow=3D=
'hidden',innerDiv.style.position=3D'relative';this.subtractsBorderForOver=
flowNotVisible=3D(checkDiv.offsetTop=3D=3D=3D-5);body.style.marginTop=3D'=
1px';this.doesNotIncludeMarginInBodyOffset=3D(body.offsetTop=3D=3D=3D0);b=
ody.style.marginTop=3DbodyMarginTop;body.removeChild(container);this.init=
ialized=3Dtrue;},bodyOffset:function(body){jQuery.offset.initialized||jQu=
ery.offset.initialize();var =
top=3Dbody.offsetTop,left=3Dbody.offsetLeft;if(jQuery.offset.doesNotInclu=
deMarginInBodyOffset)=0A=
top+=3DparseInt(jQuery.curCSS(body,'marginTop',true),10)||0,left+=3Dparse=
Int(jQuery.curCSS(body,'marginLeft',true),10)||0;return{top:top,left:left=
};}};jQuery.fn.extend({position:function(){var =
left=3D0,top=3D0,results;if(this[0]){var =
offsetParent=3Dthis.offsetParent(),offset=3Dthis.offset(),parentOffset=3D=
/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.=
offset();offset.top-=3Dnum(this,'marginTop');offset.left-=3Dnum(this,'mar=
ginLeft');parentOffset.top+=3Dnum(offsetParent,'borderTopWidth');parentOf=
fset.left+=3Dnum(offsetParent,'borderLeftWidth');results=3D{top:offset.to=
p-parentOffset.top,left:offset.left-parentOffset.left};}=0A=
return results;},offsetParent:function(){var =
offsetParent=3Dthis[0].offsetParent||document.body;while(offsetParent&&(!=
/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'posit=
ion')=3D=3D'static'))=0A=
offsetParent=3DoffsetParent.offsetParent;return =
jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var =
method=3D'scroll'+name;jQuery.fn[method]=3Dfunction(val){if(!this[0])retu=
rn null;return =
val!=3D=3Dundefined?this.each(function(){this=3D=3Dwindow||this=3D=3Ddocu=
ment?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(wind=
ow).scrollTop()):this[method]=3Dval;}):this[0]=3D=3Dwindow||this[0]=3D=3D=
document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.d=
ocumentElement[method]||document.body[method]:this[0][method];};});jQuery=
.each(["Height","Width"],function(i,name){var =
tl=3Di?"Left":"Top",br=3Di?"Right":"Bottom",lower=3Dname.toLowerCase();jQ=
uery.fn["inner"+name]=3Dfunction(){return =
this[0]?jQuery.css(this[0],lower,false,"padding"):null;};jQuery.fn["outer=
"+name]=3Dfunction(margin){return =
this[0]?jQuery.css(this[0],lower,false,margin?"margin":"border"):null;};v=
ar type=3Dname.toLowerCase();jQuery.fn[type]=3Dfunction(size){return =
this[0]=3D=3Dwindow?document.compatMode=3D=3D"CSS1Compat"&&document.docum=
entElement["client"+name]||document.body["client"+name]:this[0]=3D=3Ddocu=
ment?Math.max(document.documentElement["client"+name],document.body["scro=
ll"+name],document.documentElement["scroll"+name],document.body["offset"+=
name],document.documentElement["offset"+name]):size=3D=3D=3Dundefined?(th=
is.length?jQuery.css(this[0],type):null):this.css(type,typeof =
size=3D=3D=3D"string"?size:size+"px");};});})();=0A=
=0A=
/* jquery.scrollTo.js (33%) */=0A=
;(function($){var =
$scrollTo=3D$.scrollTo=3Dfunction(target,duration,settings){$(window).scr=
ollTo(target,duration,settings);};$scrollTo.defaults=3D{axis:'xy',duratio=
n:parseFloat($.fn.jquery)>=3D1.3?0:1};$scrollTo.window=3Dfunction(scope){=
return $(window).scrollable();};$.fn.scrollable=3Dfunction(){return =
this.map(function(){var =
elem=3Dthis,isWin=3D!elem.nodeName||$.inArray(elem.nodeName.toLowerCase()=
,['iframe','#document','html','body'])!=3D-1;if(!isWin)=0A=
return elem;var =
doc=3D(elem.contentWindow||elem).document||elem.ownerDocument||elem;retur=
n =
$.browser.safari||doc.compatMode=3D=3D'BackCompat'?doc.body:doc.documentE=
lement;});};$.fn.scrollTo=3Dfunction(target,duration,settings){if(typeof =
duration=3D=3D'object'){settings=3Dduration;duration=3D0;}=0A=
if(typeof settings=3D=3D'function')=0A=
settings=3D{onAfter:settings};if(target=3D=3D'max')=0A=
target=3D9e9;settings=3D$.extend({},$scrollTo.defaults,settings);duration=
=3Dduration||settings.speed||settings.duration;settings.queue=3Dsettings.=
queue&&settings.axis.length>1;if(settings.queue)=0A=
duration/=3D2;settings.offset=3Dboth(settings.offset);settings.over=3Dbot=
h(settings.over);return this.scrollable().each(function(){var =
elem=3Dthis,$elem=3D$(elem),targ=3Dtarget,toff,attr=3D{},win=3D$elem.is('=
html,body');switch(typeof =
targ){case'number':case'string':if(/^([+-]=3D)?\d+(\.\d+)?(px)?$/.test(ta=
rg)){targ=3Dboth(targ);break;}=0A=
targ=3D$(targ,this);case'object':if(targ.is||targ.style)=0A=
toff=3D(targ=3D$(targ)).offset();}=0A=
$.each(settings.axis.split(''),function(i,axis){var =
Pos=3Daxis=3D=3D'x'?'Left':'Top',pos=3DPos.toLowerCase(),key=3D'scroll'+P=
os,old=3Delem[key],Dim=3Daxis=3D=3D'x'?'Width':'Height';if(toff){attr[key=
]=3Dtoff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[ke=
y]-=3DparseInt(targ.css('margin'+Pos))||0;attr[key]-=3DparseInt(targ.css(=
'border'+Pos+'Width'))||0;}=0A=
attr[key]+=3Dsettings.offset[pos]||0;if(settings.over[pos])=0A=
attr[key]+=3Dtarg[Dim.toLowerCase()]()*settings.over[pos];}else=0A=
attr[key]=3Dtarg[pos];if(/^\d+$/.test(attr[key]))=0A=
attr[key]=3Dattr[key]<=3D0?0:Math.min(attr[key],max(Dim));if(!i&&settings=
.queue){if(old!=3Dattr[key])=0A=
animate(settings.onAfterFirst);delete =
attr[key];}});animate(settings.onAfter);function =
animate(callback){$elem.animate(attr,duration,settings.easing,callback&&f=
unction(){callback.call(this,target,settings);});};function max(Dim){var =
scroll=3D'scroll'+Dim;if(!win)=0A=
return elem[scroll];var =
size=3D'client'+Dim,html=3Delem.ownerDocument.documentElement,body=3Delem=
.ownerDocument.body;return Math.max(html[scroll],body[scroll])=0A=
-Math.min(html[size],body[size]);};}).end();};function both(val){return =
typeof val=3D=3D'object'?val:{top:val,left:val};};})(jQuery);=0A=
=0A=
/* retweet.js (71%) */=0A=
(function(){window.RetweetJS=3D{bitly_user:"retweetjs",bitly_key:"R_6287c=
92ecaf9efc6f39e4f33bdbf80b1",link_text:(/windows/i.test(navigator.userAge=
nt)?"&#9658;":"&#9851;")+"&nbsp;Retweet",count_type:"clicks",prefix:"",st=
yling:"a.retweet { font: 12px Helvetica,Arial; color: #000; =
text-decoration: none; border: 0px; }"+"a.retweet span { color: #FFF; =
background: #94CC3D; margin-left: 2px; border: 1px solid #43A52A; =
-moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; =
padding: 3px; }"+"a.vert { display: block; text-align: center; =
font-size: 16px; float: left; margin: 4px; }"+"a.retweet strong.vert { =
display: block; margin-bottom: 4px; background: #F5F5F5; border: 1px =
solid #EEE; -moz-border-radius: 3px; -webkit-border-radius: 3px; =
border-radius: 3px; padding: 3px; }"+"a.retweet span.vert { display: =
block; font-size: 12px; margin-left: 0px; }"};var =
loadCount=3D1;if(typeof BitlyClient=3D=3D=3D"undefined"){var =
head=3Ddocument.getElementsByTagName("head")[0]||document.documentElement=
;var =
script=3Ddocument.createElement("script");script.src=3D"http://bit.ly/jav=
ascript-api.js?version=3Dlatest&login=3D"+=0A=
RetweetJS.bitly_user+"&apiKey=3D"+RetweetJS.bitly_key;script.charSet=3D"u=
tf-8";head.appendChild(script);var =
check=3DsetInterval(function(){if(typeof =
BitlyCB!=3D=3D"undefined"){clearInterval(check);head.removeChild(script);=
loaded();}},10);loadCount=3D0;}=0A=
if(document.addEventListener){document.addEventListener("DOMContentLoaded=
",loaded,false);}else =
if(window.attachEvent){window.attachEvent("onload",loaded);}=0A=
function loaded(){if(++loadCount<2){return;}=0A=
var =
elems=3D[],urlElem=3D{},hashURL=3D{};BitlyCB.shortenResponse=3Dfunction(d=
ata){for(var url in data.results){var =
hash=3Ddata.results[url].userHash;hashURL[hash]=3Durl;var =
elems=3DurlElem[url];for(var =
i=3D0;i<elems.length;i++){elems[i].href+=3Dhash;}=0A=
if(RetweetJS.count_type=3D=3D=3D"clicks"){BitlyClient.stats(hash,'BitlyCB=
.statsResponse');}}};BitlyCB.statsResponse=3Dfunction(data){var =
clicks=3Ddata.results.clicks,hash=3Ddata.results.userHash;var =
url=3DhashURL[hash],elems=3DurlElem[url];if(clicks>0){for(var =
i=3D0;i<elems.length;i++){var =
strong=3Ddocument.createElement("strong");strong.appendChild(document.cre=
ateTextNode(clicks+" =
"));elems[i].insertBefore(strong,elems[i].firstChild);if(/(^|\s)vert(\s|$=
)/.test(elems[i].className)){elems[i].firstChild.className=3Delems[i].las=
tChild.className=3D"vert";}}}=0A=
hashURL[hash]=3DurlElem[url]=3Dnull;};if(document.getElementsByClassName)=
{elems=3Ddocument.getElementsByClassName("retweet");}else{var =
tmp=3Ddocument.getElementsByTagName("a");for(var =
i=3D0;i<tmp.length;i++){if(/(^|\s)retweet(\s|$)/.test(tmp[i].className)){=
elems.push(tmp[i]);}}}=0A=
if(elems.length&&RetweetJS.styling){var =
style=3Ddocument.createElement("style");style.type=3D"text/css";try{style=
.appendChild(document.createTextNode(RetweetJS.styling));}catch(e){if(sty=
le.styleSheet){style.styleSheet.cssText=3DRetweetJS.styling;}}=0A=
document.body.appendChild(style);}=0A=
for(var i=3D0;i<elems.length;i++){var =
elem=3Delems[i];if(/(^|\s)self(\s|$)/.test(elem.className)){elem.href=3Dw=
indow.location;elem.title=3Ddocument.title;}=0A=
var =
origText=3Delem.title||elem.textContent||elem.innerText,href=3Delem.href;=
elem.innerHTML=3D"<span>"+RetweetJS.link_text+"</span>";elem.title=3D"";e=
lem.href=3D"http://twitter.com/home?status=3D"+=0A=
encodeURIComponent(RetweetJS.prefix+origText+" =
http://bit.ly/");if(urlElem[href]){urlElem[href].push(elem);}else{urlElem=
[href]=3D[elem];BitlyClient.shorten(href,'BitlyCB.shortenResponse');}}}})=
();=0A=
=0A=
/* fulljslint.js (43%) */=0A=
"use strict";var JSLINT=3D(function(){var =
adsafe_id,adsafe_may,adsafe_went,anonname,approved,atrule=3D{media:true,'=
font-face':true,page:true},bang=3D{'<':true,'<=3D':true,'=3D=3D':true,'=3D=
=3D=3D':true,'!=3D=3D':true,'!=3D':true,'>':true,'>=3D':true,'+':true,'-'=
:true,'*':true,'/':true,'%':true},banned=3D{'arguments':true,callee:true,=
caller:true,constructor:true,'eval':true,prototype:true,unwatch:true,valu=
eOf:true,watch:true},boolOptions=3D{adsafe:true,bitwise:true,browser:true=
,cap:true,css:true,debug:true,devel:true,eqeqeq:true,evil:true,forin:true=
,fragment:true,immed:true,laxbreak:true,newcap:true,nomen:true,on:true,on=
evar:true,passfail:true,plusplus:true,regexp:true,rhino:true,undef:true,s=
afe:true,sidebar:true,strict:true,sub:true,white:true,widget:true},browse=
r=3D{addEventListener:false,blur:false,clearInterval:false,clearTimeout:f=
alse,close:false,closed:false,defaultStatus:false,document:false,event:fa=
lse,focus:false,frames:false,getComputedStyle:false,history:false,Image:f=
alse,length:false,location:false,moveBy:false,moveTo:false,name:false,nav=
igator:false,onbeforeunload:true,onblur:true,onerror:true,onfocus:true,on=
load:true,onresize:true,onunload:true,open:false,opener:false,Option:fals=
e,parent:false,print:false,removeEventListener:false,resizeBy:false,resiz=
eTo:false,screen:false,scroll:false,scrollBy:false,scrollTo:false,setInte=
rval:false,setTimeout:false,status:false,top:false,XMLHttpRequest:false},=
cssAttributeData,cssAny,cssColorData=3D{"aliceblue":true,"antiquewhite":t=
rue,"aqua":true,"aquamarine":true,"azure":true,"beige":true,"bisque":true=
,"black":true,"blanchedalmond":true,"blue":true,"blueviolet":true,"brown"=
:true,"burlywood":true,"cadetblue":true,"chartreuse":true,"chocolate":tru=
e,"coral":true,"cornflowerblue":true,"cornsilk":true,"crimson":true,"cyan=
":true,"darkblue":true,"darkcyan":true,"darkgoldenrod":true,"darkgray":tr=
ue,"darkgreen":true,"darkkhaki":true,"darkmagenta":true,"darkolivegreen":=
true,"darkorange":true,"darkorchid":true,"darkred":true,"darksalmon":true=
,"darkseagreen":true,"darkslateblue":true,"darkslategray":true,"darkturqu=
oise":true,"darkviolet":true,"deeppink":true,"deepskyblue":true,"dimgray"=
:true,"dodgerblue":true,"firebrick":true,"floralwhite":true,"forestgreen"=
:true,"fuchsia":true,"gainsboro":true,"ghostwhite":true,"gold":true,"gold=
enrod":true,"gray":true,"green":true,"greenyellow":true,"honeydew":true,"=
hotpink":true,"indianred":true,"indigo":true,"ivory":true,"khaki":true,"l=
avender":true,"lavenderblush":true,"lawngreen":true,"lemonchiffon":true,"=
lightblue":true,"lightcoral":true,"lightcyan":true,"lightgoldenrodyellow"=
:true,"lightgreen":true,"lightpink":true,"lightsalmon":true,"lightseagree=
n":true,"lightskyblue":true,"lightslategray":true,"lightsteelblue":true,"=
lightyellow":true,"lime":true,"limegreen":true,"linen":true,"magenta":tru=
e,"maroon":true,"mediumaquamarine":true,"mediumblue":true,"mediumorchid":=
true,"mediumpurple":true,"mediumseagreen":true,"mediumslateblue":true,"me=
diumspringgreen":true,"mediumturquoise":true,"mediumvioletred":true,"midn=
ightblue":true,"mintcream":true,"mistyrose":true,"moccasin":true,"navajow=
hite":true,"navy":true,"oldlace":true,"olive":true,"olivedrab":true,"oran=
ge":true,"orangered":true,"orchid":true,"palegoldenrod":true,"palegreen":=
true,"paleturquoise":true,"palevioletred":true,"papayawhip":true,"peachpu=
ff":true,"peru":true,"pink":true,"plum":true,"powderblue":true,"purple":t=
rue,"red":true,"rosybrown":true,"royalblue":true,"saddlebrown":true,"salm=
on":true,"sandybrown":true,"seagreen":true,"seashell":true,"sienna":true,=
"silver":true,"skyblue":true,"slateblue":true,"slategray":true,"snow":tru=
e,"springgreen":true,"steelblue":true,"tan":true,"teal":true,"thistle":tr=
ue,"tomato":true,"turquoise":true,"violet":true,"wheat":true,"white":true=
,"whitesmoke":true,"yellow":true,"yellowgreen":true},cssBorderStyle,cssBr=
eak,cssLengthData=3D{'%':true,'cm':true,'em':true,'ex':true,'in':true,'mm=
':true,'pc':true,'pt':true,'px':true},cssOverflow,devel=3D{alert:false,co=
nfirm:false,console:false,Debug:false,opera:false,prompt:false},escapes=3D=
{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','/':'\\=
/','\\':'\\\\'},funct,functionicity=3D['closure','exception','global','la=
bel','outer','unused','var'],functions,global,htmltag=3D{a:{},abbr:{},acr=
onym:{},address:{},applet:{},area:{empty:true,parent:' map =
'},b:{},base:{empty:true,parent:' head =
'},bdo:{},big:{},blockquote:{},body:{parent:' html noframes =
'},br:{empty:true},button:{},canvas:{parent:' body p div th td =
'},caption:{parent:' table =
'},center:{},cite:{},code:{},col:{empty:true,parent:' table colgroup =
'},colgroup:{parent:' table '},dd:{parent:' dl =
'},del:{},dfn:{},dir:{},div:{},dl:{},dt:{parent:' dl =
'},em:{},embed:{},fieldset:{},font:{},form:{},frame:{empty:true,parent:' =
frameset '},frameset:{parent:' html frameset =
'},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{parent:' html =
'},html:{parent:'*'},hr:{empty:true},i:{},iframe:{},img:{empty:true},inpu=
t:{empty:true},ins:{},kbd:{},label:{},legend:{parent:' fieldset =
'},li:{parent:' dir menu ol ul '},link:{empty:true,parent:' head =
'},map:{},menu:{},meta:{empty:true,parent:' head noframes noscript =
'},noframes:{parent:' html body '},noscript:{parent:' body head noframes =
'},object:{},ol:{},optgroup:{parent:' select '},option:{parent:' =
optgroup select '},p:{},param:{empty:true,parent:' applet object =
'},pre:{},q:{},samp:{},script:{empty:true,parent:' body div frame head =
iframe p pre span =
'},select:{},small:{},span:{},strong:{},style:{parent:' head =
',empty:true},sub:{},sup:{},table:{},tbody:{parent:' table =
'},td:{parent:' tr '},textarea:{},tfoot:{parent:' table '},th:{parent:' =
tr '},thead:{parent:' table '},title:{parent:' head '},tr:{parent:' =
table tbody thead tfoot =
'},tt:{},u:{},ul:{},'var':{}},ids,implied,inblock,indent,jsonmode,lines,l=
ookahead,member,membersOnly,nexttoken,noreach,option,predefined,prereg,pr=
evtoken,rhino=3D{defineClass:false,deserialize:false,gc:false,help:false,=
load:false,loadClass:false,print:false,quit:false,readFile:false,readUrl:=
false,runCommand:false,seal:false,serialize:false,spawn:false,sync:false,=
toint32:false,version:false},scope,sidebar=3D{System:false},src,stack,sta=
ndard=3D{Array:false,Boolean:false,Date:false,decodeURI:false,decodeURICo=
mponent:false,encodeURI:false,encodeURIComponent:false,Error:false,'eval'=
:false,EvalError:false,Function:false,hasOwnProperty:false,isFinite:false=
,isNaN:false,JSON:false,Math:false,Number:false,Object:false,parseInt:fal=
se,parseFloat:false,RangeError:false,ReferenceError:false,RegExp:false,St=
ring:false,SyntaxError:false,TypeError:false,URIError:false},standard_mem=
ber=3D{E:true,LN2:true,LN10:true,LOG2E:true,LOG10E:true,PI:true,SQRT1_2:t=
rue,SQRT2:true,MAX_VALUE:true,MIN_VALUE:true,NEGATIVE_INFINITY:true,POSIT=
IVE_INFINITY:true},strict_mode,syntax=3D{},tab,token,urls,warnings,widget=
=3D{alert:true,animator:true,appleScript:true,beep:true,bytesToUIString:t=
rue,Canvas:true,chooseColor:true,chooseFile:true,chooseFolder:true,closeW=
idget:true,COM:true,convertPathToHFS:true,convertPathToPlatform:true,Cust=
omAnimation:true,escape:true,FadeAnimation:true,filesystem:true,Flash:tru=
e,focusWidget:true,form:true,FormField:true,Frame:true,HotKey:true,Image:=
true,include:true,isApplicationRunning:true,iTunes:true,konfabulatorVersi=
on:true,log:true,md5:true,MenuItem:true,MoveAnimation:true,openURL:true,p=
lay:true,Point:true,popupMenu:true,preferenceGroups:true,preferences:true=
,print:true,prompt:true,random:true,Rectangle:true,reloadWidget:true,Resi=
zeAnimation:true,resolvePath:true,resumeUpdates:true,RotateAnimation:true=
,runCommand:true,runCommandInBg:true,saveAs:true,savePreferences:true,scr=
een:true,ScrollBar:true,showWidgetPreferences:true,sleep:true,speak:true,=
Style:true,suppressUpdates:true,system:true,tellWidget:true,Text:true,Tex=
tArea:true,Timer:true,unescape:true,updateNow:true,URL:true,Web:true,widg=
et:true,Window:true,XMLDOM:true,XMLHttpRequest:true,yahooCheckLogin:true,=
yahooLogin:true,yahooLogout:true},xmode,xquote,ax=3D/@cc|<\/?|script|\]*s=
\]|<\s*!|&lt/i,cx=3D/[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f=
\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,=
tx=3D/^\s*([(){}\[.,:;'"~\?\]#@]|=3D=3D?=3D?|\/(\*(jslint|members?|global=
)?|=3D|\/)?|\*[\/=3D]?|\+[+=3D]?|-[\-=3D]?|%=3D?|&[&=3D]?|\|[|=3D]?|>>?>?=
=3D?|<([\/=3D!]|\!(\[|--)?|<=3D?)?|\^=3D?|\!=3D?=3D?|[a-zA-Z_$][a-zA-Z0-9=
_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/,hx=3D/^\s*([=
'"=3D>\/&#]|<(?:\/|\!(?:--)?)?|[a-zA-Z][a-zA-Z0-9_\-]*|[0-9]+|--|.)/,nx=3D=
/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\=
u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,nxg=3D/[\u000=
0-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\=
u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,ox=3D/[>&]|<[\/!]?|=
--/,lx=3D/\*\/|\/\*/,ix=3D/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,jx=3D/^(?:javasc=
ript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i,ux=3D/&|\+|\u00A=
D|\.\.|\/\*|%[^;]|base64|url|expression|data|mailto/i,sx=3D/^\s*([{:#%.=3D=
,>+\[\]@()"';]|\*=3D?|\$=3D|\|=3D|\^=3D|~=3D|[a-zA-Z_][a-zA-Z0-9_\-]*|[0-=
9]+|<\/|\/\*)/,ssx=3D/^\s*([@#!"'};:\-%.=3D,+\[\]()*_]|[a-zA-Z][a-zA-Z0-9=
._\-]*|\/\*?|\d+(?:\.\d+)?|<\/)/,qx=3D/[^a-zA-Z0-9-_\/ =
]/,dx=3D/[\[\]\/\\"'*<>.&:(){}+=3D#]/,rx=3D{outer:hx,html:hx,style:sx,sty=
leproperty:ssx};function F(){}=0A=
if(typeof =
Object.create!=3D=3D'function'){Object.create=3Dfunction(o){F.prototype=3D=
o;return new F();};}=0A=
function is_own(object,name){return =
Object.prototype.hasOwnProperty.call(object,name);}=0A=
function combine(t,o){var n;for(n in o){if(is_own(o,n)){t[n]=3Do[n];}}}=0A=
String.prototype.entityify=3Dfunction(){return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');};St=
ring.prototype.isAlpha=3Dfunction(){return(this>=3D'a'&&this<=3D'z\uffff'=
)||(this>=3D'A'&&this<=3D'Z\uffff');};String.prototype.isDigit=3Dfunction=
(){return(this>=3D'0'&&this<=3D'9');};String.prototype.supplant=3Dfunctio=
n(o){return this.replace(/\{([^{}]*)\}/g,function(a,b){var =
r=3Do[b];return typeof r=3D=3D=3D'string'||typeof =
r=3D=3D=3D'number'?r:a;});};String.prototype.name=3Dfunction(){if(ix.test=
(this)){return this;}=0A=
if(nx.test(this)){return'"'+this.replace(nxg,function(a){var =
c=3Descapes[a];if(c){return c;}=0A=
return'\\u'+('0000'+a.charCodeAt().toString(16)).slice(-4);})+'"';}=0A=
return'"'+this+'"';};function =
assume(){if(!option.safe){if(option.rhino){combine(predefined,rhino);}=0A=
if(option.devel){combine(predefined,devel);}=0A=
if(option.browser||option.sidebar){combine(predefined,browser);}=0A=
if(option.sidebar){combine(predefined,sidebar);}=0A=
if(option.widget){combine(predefined,widget);}}}=0A=
function =
quit(m,l,ch){throw{name:'JSLintError',line:l,character:ch,message:m+" =
("+Math.floor((l/lines.length)*100)+"% scanned)."};}=0A=
function warning(m,t,a,b,c,d){var =
ch,l,w;t=3Dt||nexttoken;if(t.id=3D=3D=3D'(end)'){t=3Dtoken;}=0A=
l=3Dt.line||0;ch=3Dt.from||0;w=3D{id:'(error)',raw:m,evidence:lines[l-1]|=
|'',line:l,character:ch,a:a,b:b,c:c,d:d};w.reason=3Dm.supplant(w);JSLINT.=
errors.push(w);if(option.passfail){quit('Stopping. ',l,ch);}=0A=
warnings+=3D1;if(warnings>=3Doption.maxerr){quit("Too many =
errors.",l,ch);}=0A=
return w;}=0A=
function warningAt(m,l,ch,a,b,c,d){return =
warning(m,{line:l,from:ch},a,b,c,d);}=0A=
function error(m,t,a,b,c,d){var w=3Dwarning(m,t,a,b,c,d);quit("Stopping, =
unable to continue.",w.line,w.character);}=0A=
function errorAt(m,l,ch,a,b,c,d){return =
error(m,{line:l,from:ch},a,b,c,d);}=0A=
var lex=3D(function lex(){var character,from,line,s;function =
nextLine(){var at;if(line>=3Dlines.length){return false;}=0A=
character=3D1;s=3Dlines[line];line+=3D1;at=3Ds.search(/ =
\t/);if(at>=3D0){warningAt("Mixed spaces and tabs.",line,at+1);}=0A=
s=3Ds.replace(/\t/g,tab);at=3Ds.search(cx);if(at>=3D0){warningAt("Unsafe =
character.",line,at);}=0A=
if(option.maxlen&&option.maxlen<s.length){warningAt("Line too =
long.",line,s.length);}=0A=
return true;}=0A=
function it(type,value){var =
i,t;if(type=3D=3D=3D'(color)'){t=3D{type:type};}else =
if(type=3D=3D=3D'(punctuator)'||(type=3D=3D=3D'(identifier)'&&is_own(synt=
ax,value))){t=3Dsyntax[value]||syntax['(error)'];}else{t=3Dsyntax[type];}=0A=
t=3DObject.create(t);if(type=3D=3D=3D'(string)'||type=3D=3D=3D'(range)'){=
if(jx.test(value)){warningAt("Script URL.",line,from);}}=0A=
if(type=3D=3D=3D'(identifier)'){t.identifier=3Dtrue;if(value=3D=3D=3D'__i=
terator__'||value=3D=3D=3D'__proto__'){errorAt("Reserved name =
'{a}'.",line,from,value);}else =
if(option.nomen&&(value.charAt(0)=3D=3D=3D'_'||value.charAt(value.length-=
1)=3D=3D=3D'_')){warningAt("Unexpected {a} in =
'{b}'.",line,from,"dangling '_'",value);}}=0A=
t.value=3Dvalue;t.line=3Dline;t.character=3Dcharacter;t.from=3Dfrom;i=3Dt=
.id;if(i!=3D=3D'(endline)'){prereg=3Di&&(('(,=3D:[!&|?{};'.indexOf(i.char=
At(i.length-1))>=3D0)||i=3D=3D=3D'return');}=0A=
return t;}=0A=
return{init:function(source){if(typeof =
source=3D=3D=3D'string'){lines=3Dsource.replace(/\r\n/g,'\n').replace(/\r=
/g,'\n').split('\n');}else{lines=3Dsource;}=0A=
line=3D0;nextLine();from=3D1;},range:function(begin,end){var =
c,value=3D'';from=3Dcharacter;if(s.charAt(0)!=3D=3Dbegin){errorAt("Expect=
ed '{a}' and instead saw '{b}'.",line,character,begin,s.charAt(0));}=0A=
for(;;){s=3Ds.slice(1);character+=3D1;c=3Ds.charAt(0);switch(c){case'':er=
rorAt("Missing '{a}'.",line,character,c);break;case =
end:s=3Ds.slice(1);character+=3D1;return it('(range)',value);case =
xquote:case'\\':warningAt("Unexpected '{a}'.",line,character,c);}=0A=
value+=3Dc;}},token:function(){var =
b,c,captures,d,depth,high,i,l,low,q,t;function match(x){var =
r=3Dx.exec(s),r1;if(r){l=3Dr[0].length;r1=3Dr[1];c=3Dr1.charAt(0);s=3Ds.s=
ubstr(l);from=3Dcharacter+l-r1.length;character+=3Dl;return r1;}}=0A=
function string(x){var =
c,j,r=3D'';if(jsonmode&&x!=3D=3D'"'){warningAt("Strings must use =
doublequote.",line,character);}=0A=
if(xquote=3D=3D=3Dx||(xmode=3D=3D=3D'scriptstring'&&!xquote)){return =
it('(punctuator)',x);}=0A=
function esc(n){var =
i=3DparseInt(s.substr(j+1,n),16);j+=3Dn;if(i>=3D32&&i<=3D126&&i!=3D=3D34&=
&i!=3D=3D92&&i!=3D=3D39){warningAt("Unnecessary =
escapement.",line,character);}=0A=
character+=3Dn;c=3DString.fromCharCode(i);}=0A=
j=3D0;for(;;){while(j>=3Ds.length){j=3D0;if(xmode!=3D=3D'html'||!nextLine=
()){errorAt("Unclosed string.",line,from);}}=0A=
c=3Ds.charAt(j);if(c=3D=3D=3Dx){character+=3D1;s=3Ds.substr(j+1);return =
it('(string)',r,x);}=0A=
if(c<' '){if(c=3D=3D=3D'\n'||c=3D=3D=3D'\r'){break;}=0A=
warningAt("Control character in string: =
{a}.",line,character+j,s.slice(0,j));}else =
if(c=3D=3D=3Dxquote){warningAt("Bad HTML string",line,character+j);}else =
if(c=3D=3D=3D'<'){if(option.safe&&xmode=3D=3D=3D'html'){warningAt("ADsafe=
 string violation.",line,character+j);}else =
if(s.charAt(j+1)=3D=3D=3D'/'&&(xmode||option.safe)){warningAt("Expected =
'<\\/' and instead saw '</'.",line,character);}else =
if(s.charAt(j+1)=3D=3D=3D'!'&&(xmode||option.safe)){warningAt("Unexpected=
 '<!' in a string.",line,character);}}else =
if(c=3D=3D=3D'\\'){if(xmode=3D=3D=3D'html'){if(option.safe){warningAt("AD=
safe string violation.",line,character+j);}}else =
if(xmode=3D=3D=3D'styleproperty'){j+=3D1;character+=3D1;c=3Ds.charAt(j);i=
f(c!=3D=3Dx){warningAt("Escapement in style =
string.",line,character+j);}}else{j+=3D1;character+=3D1;c=3Ds.charAt(j);s=
witch(c){case xquote:warningAt("Bad HTML =
string",line,character+j);break;case'\\':case'\'':case'"':case'/':break;c=
ase'b':c=3D'\b';break;case'f':c=3D'\f';break;case'n':c=3D'\n';break;case'=
r':c=3D'\r';break;case't':c=3D'\t';break;case'u':esc(4);break;case'v':c=3D=
'\v';break;case'x':if(jsonmode){warningAt("Avoid \\x-.",line,character);}=0A=
esc(2);break;default:warningAt("Bad escapement.",line,character);}}}=0A=
r+=3Dc;character+=3D1;j+=3D1;}}=0A=
for(;;){if(!s){return it(nextLine()?'(endline)':'(end)','');}=0A=
while(xmode=3D=3D=3D'outer'){i=3Ds.search(ox);if(i=3D=3D=3D0){break;}else=
 =
if(i>0){character+=3D1;s=3Ds.slice(i);break;}else{if(!nextLine()){return =
it('(end)','');}}}=0A=
t=3Dmatch(rx[xmode]||tx);if(!t){if(xmode=3D=3D=3D'html'){return =
it('(error)',s.charAt(0));}else{t=3D'';c=3D'';while(s&&s<'!'){s=3Ds.subst=
r(1);}=0A=
if(s){errorAt("Unexpected =
'{a}'.",line,character,s.substr(0,1));}}}else{if(c.isAlpha()||c=3D=3D=3D'=
_'||c=3D=3D=3D'$'){return it('(identifier)',t);}=0A=
if(c.isDigit()){if(xmode!=3D=3D'style'&&!isFinite(Number(t))){warningAt("=
Bad number '{a}'.",line,character,t);}=0A=
if(xmode!=3D=3D'style'&&xmode!=3D=3D'styleproperty'&&s.substr(0,1).isAlph=
a()){warningAt("Missing space after '{a}'.",line,character,t);}=0A=
if(c=3D=3D=3D'0'){d=3Dt.substr(1,1);if(d.isDigit()){if(token.id!=3D=3D'.'=
&&xmode!=3D=3D'styleproperty'){warningAt("Don't use extra leading zeros =
'{a}'.",line,character,t);}}else =
if(jsonmode&&(d=3D=3D=3D'x'||d=3D=3D=3D'X')){warningAt("Avoid 0x-. =
'{a}'.",line,character,t);}}=0A=
if(t.substr(t.length-1)=3D=3D=3D'.'){warningAt("A trailing decimal point =
can be confused with a dot '{a}'.",line,character,t);}=0A=
return it('(number)',t);}=0A=
switch(t){case'"':case"'":return =
string(t);case'//':if(src||(xmode&&xmode!=3D=3D'script')){warningAt("Unex=
pected comment.",line,character);}else =
if(xmode=3D=3D=3D'script'&&/<\s*\//i.test(s)){warningAt("Unexpected <\/ =
in comment.",line,character);}else =
if((option.safe||xmode=3D=3D=3D'script')&&ax.test(s)){warningAt("Dangerou=
s comment.",line,character);}=0A=
s=3D'';token.comment=3Dtrue;break;case'/*':if(src||(xmode&&xmode!=3D=3D's=
cript'&&xmode!=3D=3D'style'&&xmode!=3D=3D'styleproperty')){warningAt("Une=
xpected comment.",line,character);}=0A=
if(option.safe&&ax.test(s)){warningAt("ADsafe comment =
violation.",line,character);}=0A=
for(;;){i=3Ds.search(lx);if(i>=3D0){break;}=0A=
if(!nextLine()){errorAt("Unclosed =
comment.",line,character);}else{if(option.safe&&ax.test(s)){warningAt("AD=
safe comment violation.",line,character);}}}=0A=
character+=3Di+2;if(s.substr(i,1)=3D=3D=3D'/'){errorAt("Nested =
comment.",line,character);}=0A=
s=3Ds.substr(i+2);token.comment=3Dtrue;break;case'/*members':case'/*membe=
r':case'/*jslint':case'/*global':case'*/':return{value:t,type:'special',l=
ine:line,character:character,from:from};case'':break;case'/':if(prereg){d=
epth=3D0;captures=3D0;l=3D0;for(;;){b=3Dtrue;c=3Ds.charAt(l);l+=3D1;switc=
h(c){case'':errorAt("Unclosed regular =
expression.",line,from);return;case'/':if(depth>0){warningAt("Unescaped =
'{a}'.",line,from+l,'/');}=0A=
c=3Ds.substr(0,l-1);q=3D{g:true,i:true,m:true};while(q[s.charAt(l)]=3D=3D=
=3Dtrue){q[s.charAt(l)]=3Dfalse;l+=3D1;}=0A=
character+=3Dl;s=3Ds.substr(l);return =
it('(regexp)',c);case'\\':c=3Ds.charAt(l);if(c<' =
'){warningAt("Unexpected control character in regular =
expression.",line,from+l);}else if(c=3D=3D=3D'<'){warningAt("Unexpected =
escaped character '{a}' in regular expression.",line,from+l,c);}=0A=
l+=3D1;break;case'(':depth+=3D1;b=3Dfalse;if(s.charAt(l)=3D=3D=3D'?'){l+=3D=
1;switch(s.charAt(l)){case':':case'=3D':case'!':l+=3D1;break;default:warn=
ingAt("Expected '{a}' and instead saw =
'{b}'.",line,from+l,':',s.charAt(l));}}else{captures+=3D1;}=0A=
break;case'|':b=3Dfalse;break;case')':if(depth=3D=3D=3D0){warningAt("Unes=
caped '{a}'.",line,from+l,')');}else{depth-=3D1;}=0A=
break;case' ':q=3D1;while(s.charAt(l)=3D=3D=3D' '){l+=3D1;q+=3D1;}=0A=
if(q>1){warningAt("Spaces are hard to count. Use {{a}}.",line,from+l,q);}=0A=
break;case'[':c=3Ds.charAt(l);if(c=3D=3D=3D'^'){l+=3D1;if(option.regexp){=
warningAt("Insecure '{a}'.",line,from+l,c);}}=0A=
q=3Dfalse;if(c=3D=3D=3D']'){warningAt("Empty =
class.",line,from+l-1);q=3Dtrue;}=0A=
klass:do{c=3Ds.charAt(l);l+=3D1;switch(c){case'[':case'^':warningAt("Unes=
caped =
'{a}'.",line,from+l,c);q=3Dtrue;break;case'-':if(q){q=3Dfalse;}else{warni=
ngAt("Unescaped '{a}'.",line,from+l,'-');q=3Dtrue;}=0A=
break;case']':if(!q){warningAt("Unescaped '{a}'.",line,from+l-1,'-');}=0A=
break klass;case'\\':c=3Ds.charAt(l);if(c<' '){warningAt("Unexpected =
control character in regular expression.",line,from+l);}else =
if(c=3D=3D=3D'<'){warningAt("Unexpected escaped character '{a}' in =
regular expression.",line,from+l,c);}=0A=
l+=3D1;q=3Dtrue;break;case'/':warningAt("Unescaped =
'{a}'.",line,from+l-1,'/');q=3Dtrue;break;case'<':if(xmode=3D=3D=3D'scrip=
t'){c=3Ds.charAt(l);if(c=3D=3D=3D'!'||c=3D=3D=3D'/'){warningAt("HTML =
confusion in regular expression '<{a}'.",line,from+l,c);}}=0A=
q=3Dtrue;break;default:q=3Dtrue;}}while(c);break;case'.':if(option.regexp=
){warningAt("Insecure '{a}'.",line,from+l,c);}=0A=
break;case']':case'?':case'{':case'}':case'+':case'*':warningAt("Unescape=
d =
'{a}'.",line,from+l,c);break;case'<':if(xmode=3D=3D=3D'script'){c=3Ds.cha=
rAt(l);if(c=3D=3D=3D'!'||c=3D=3D=3D'/'){warningAt("HTML confusion in =
regular expression '<{a}'.",line,from+l,c);}}}=0A=
if(b){switch(s.charAt(l)){case'?':case'+':case'*':l+=3D1;if(s.charAt(l)=3D=
=3D=3D'?'){l+=3D1;}=0A=
break;case'{':l+=3D1;c=3Ds.charAt(l);if(c<'0'||c>'9'){warningAt("Expected=
 a number and instead saw '{a}'.",line,from+l,c);}=0A=
l+=3D1;low=3D+c;for(;;){c=3Ds.charAt(l);if(c<'0'||c>'9'){break;}=0A=
l+=3D1;low=3D+c+(low*10);}=0A=
high=3Dlow;if(c=3D=3D=3D','){l+=3D1;high=3DInfinity;c=3Ds.charAt(l);if(c>=
=3D'0'&&c<=3D'9'){l+=3D1;high=3D+c;for(;;){c=3Ds.charAt(l);if(c<'0'||c>'9=
'){break;}=0A=
l+=3D1;high=3D+c+(high*10);}}}=0A=
if(s.charAt(l)!=3D=3D'}'){warningAt("Expected '{a}' and instead saw =
'{b}'.",line,from+l,'}',c);}else{l+=3D1;}=0A=
if(s.charAt(l)=3D=3D=3D'?'){l+=3D1;}=0A=
if(low>high){warningAt("'{a}' should not be greater than =
'{b}'.",line,from+l,low,high);}}}}=0A=
c=3Ds.substr(0,l-1);character+=3Dl;s=3Ds.substr(l);return =
it('(regexp)',c);}=0A=
return =
it('(punctuator)',t);case'<!--':l=3Dline;c=3Dcharacter;for(;;){i=3Ds.inde=
xOf('--');if(i>=3D0){break;}=0A=
i=3Ds.indexOf('<!');if(i>=3D0){errorAt("Nested HTML =
comment.",line,character+i);}=0A=
if(!nextLine()){errorAt("Unclosed HTML comment.",l,c);}}=0A=
l=3Ds.indexOf('<!');if(l>=3D0&&l<i){errorAt("Nested HTML =
comment.",line,character+l);}=0A=
character+=3Di;if(s[i+2]!=3D=3D'>'){errorAt("Expected =
-->.",line,character);}=0A=
character+=3D3;s=3Ds.slice(i+3);break;case'#':if(xmode=3D=3D=3D'html'||xm=
ode=3D=3D=3D'styleproperty'){for(;;){c=3Ds.charAt(0);if((c<'0'||c>'9')&&(=
c<'a'||c>'f')&&(c<'A'||c>'F')){break;}=0A=
character+=3D1;s=3Ds.substr(1);t+=3Dc;}=0A=
if(t.length!=3D=3D4&&t.length!=3D=3D7){warningAt("Bad hex color =
'{a}'.",line,from+l,t);}=0A=
return it('(color)',t);}=0A=
return =
it('(punctuator)',t);default:if(xmode=3D=3D=3D'outer'&&c=3D=3D=3D'&'){cha=
racter+=3D1;s=3Ds.substr(1);for(;;){c=3Ds.charAt(0);character+=3D1;s=3Ds.=
substr(1);if(c=3D=3D=3D';'){break;}=0A=
if(!((c>=3D'0'&&c<=3D'9')||(c>=3D'a'&&c<=3D'z')||c=3D=3D=3D'#')){errorAt(=
"Bad entity",line,from+l,character);}}=0A=
break;}=0A=
return it('(punctuator)',t);}}}}};}());function =
addlabel(t,type){if(option.safe&&funct['(global)']&&typeof =
predefined[t]!=3D=3D'boolean'){warning('ADsafe global: =
'+t+'.',token);}else =
if(t=3D=3D=3D'hasOwnProperty'){warning("'hasOwnProperty' is a really bad =
name.");}=0A=
if(is_own(funct,t)&&!funct['(global)']){warning(funct[t]=3D=3D=3Dtrue?"'{=
a}' was used before it was defined.":"'{a}' is already =
defined.",nexttoken,t);}=0A=
funct[t]=3Dtype;if(funct['(global)']){global[t]=3Dfunct;if(is_own(implied=
,t)){warning("'{a}' was used before it was defined.",nexttoken,t);delete =
implied[t];}}else{scope[t]=3Dfunct;}}=0A=
function doOption(){var =
b,obj,filter,o=3Dnexttoken.value,t,v;switch(o){case'*/':error("Unbegun =
comment.");break;case'/*members':case'/*member':o=3D'/*members';if(!membe=
rsOnly){membersOnly=3D{};}=0A=
obj=3DmembersOnly;break;case'/*jslint':if(option.safe){warning("ADsafe =
restriction.");}=0A=
obj=3Doption;filter=3DboolOptions;break;case'/*global':if(option.safe){wa=
rning("ADsafe restriction.");}=0A=
obj=3Dpredefined;break;default:}=0A=
t=3Dlex.token();loop:for(;;){for(;;){if(t.type=3D=3D=3D'special'&&t.value=
=3D=3D=3D'*/'){break loop;}=0A=
if(t.id!=3D=3D'(endline)'&&t.id!=3D=3D','){break;}=0A=
t=3Dlex.token();}=0A=
if(t.type!=3D=3D'(string)'&&t.type!=3D=3D'(identifier)'&&o!=3D=3D'/*membe=
rs'){error("Bad option.",t);}=0A=
v=3Dlex.token();if(v.id=3D=3D=3D':'){v=3Dlex.token();if(obj=3D=3D=3Dmembe=
rsOnly){error("Expected '{a}' and instead saw '{b}'.",t,'*/',':');}=0A=
if(t.value=3D=3D=3D'indent'&&o=3D=3D=3D'/*jslint'){b=3D+v.value;if(typeof=
 =
b!=3D=3D'number'||!isFinite(b)||b<=3D0||Math.floor(b)!=3D=3Db){error("Exp=
ected a small integer and instead saw '{a}'.",v,v.value);}=0A=
obj.white=3Dtrue;obj.indent=3Db;}else =
if(t.value=3D=3D=3D'maxerr'&&o=3D=3D=3D'/*jslint'){b=3D+v.value;if(typeof=
 =
b!=3D=3D'number'||!isFinite(b)||b<=3D0||Math.floor(b)!=3D=3Db){error("Exp=
ected a small integer and instead saw '{a}'.",v,v.value);}=0A=
obj.maxerr=3Db;}else =
if(t.value=3D=3D=3D'maxlen'&&o=3D=3D=3D'/*jslint'){b=3D+v.value;if(typeof=
 =
b!=3D=3D'number'||!isFinite(b)||b<=3D0||Math.floor(b)!=3D=3Db){error("Exp=
ected a small integer and instead saw '{a}'.",v,v.value);}=0A=
obj.maxlen=3Db;}else =
if(v.value=3D=3D=3D'true'){obj[t.value]=3Dtrue;}else =
if(v.value=3D=3D=3D'false'){obj[t.value]=3Dfalse;}else{error("Bad option =
value.",v);}=0A=
t=3Dlex.token();}else{if(o=3D=3D=3D'/*jslint'){error("Missing option =
value.",t);}=0A=
obj[t.value]=3Dfalse;t=3Dv;}}=0A=
if(filter){assume();}}=0A=
function peek(p){var =
i=3Dp||0,j=3D0,t;while(j<=3Di){t=3Dlookahead[j];if(!t){t=3Dlookahead[j]=3D=
lex.token();}=0A=
j+=3D1;}=0A=
return t;}=0A=
function =
advance(id,t){switch(token.id){case'(number)':if(nexttoken.id=3D=3D=3D'.'=
){warning("A dot following a number can be confused with a decimal =
point.",token);}=0A=
break;case'-':if(nexttoken.id=3D=3D=3D'-'||nexttoken.id=3D=3D=3D'--'){war=
ning("Confusing minusses.");}=0A=
break;case'+':if(nexttoken.id=3D=3D=3D'+'||nexttoken.id=3D=3D=3D'++'){war=
ning("Confusing plusses.");}=0A=
break;}=0A=
if(token.type=3D=3D=3D'(string)'||token.identifier){anonname=3Dtoken.valu=
e;}=0A=
if(id&&nexttoken.id!=3D=3Did){if(t){if(nexttoken.id=3D=3D=3D'(end)'){warn=
ing("Unmatched '{a}'.",t,t.id);}else{warning("Expected '{a}' to match =
'{b}' from line {c} and instead saw =
'{d}'.",nexttoken,id,t.id,t.line,nexttoken.value);}}else =
if(nexttoken.type!=3D=3D'(identifier)'||nexttoken.value!=3D=3Did){warning=
("Expected '{a}' and instead saw '{b}'.",nexttoken,id,nexttoken.value);}}=0A=
prevtoken=3Dtoken;token=3Dnexttoken;for(;;){nexttoken=3Dlookahead.shift()=
||lex.token();if(nexttoken.id=3D=3D=3D'(end)'||nexttoken.id=3D=3D=3D'(err=
or)'){return;}=0A=
if(nexttoken.type=3D=3D=3D'special'){doOption();}else{if(nexttoken.id!=3D=
=3D'(endline)'){break;}}}}=0A=
function parse(rbp,initial){var =
left;if(nexttoken.id=3D=3D=3D'(end)'){error("Unexpected early end of =
program.",token);}=0A=
advance();if(option.safe&&typeof =
predefined[token.value]=3D=3D=3D'boolean'&&(nexttoken.id!=3D=3D'('&&nextt=
oken.id!=3D=3D'.')){warning('ADsafe violation.',token);}=0A=
if(initial){anonname=3D'anonymous';funct['(verb)']=3Dtoken.value;}=0A=
if(initial=3D=3D=3Dtrue&&token.fud){left=3Dtoken.fud();}else{if(token.nud=
){left=3Dtoken.nud();}else{if(nexttoken.type=3D=3D=3D'(number)'&&token.id=
=3D=3D=3D'.'){warning("A leading decimal point can be confused with a =
dot: '.{a}'.",token,nexttoken.value);advance();return =
token;}else{error("Expected an identifier and instead saw =
'{a}'.",token,token.id);}}=0A=
while(rbp<nexttoken.lbp){advance();if(token.led){left=3Dtoken.led(left);}=
else{error("Expected an operator and instead saw =
'{a}'.",token,token.id);}}}=0A=
return left;}=0A=
function =
adjacent(left,right){left=3Dleft||token;right=3Dright||nexttoken;if(optio=
n.white||xmode=3D=3D=3D'styleproperty'||xmode=3D=3D=3D'style'){if(left.ch=
aracter!=3D=3Dright.from&&left.line=3D=3D=3Dright.line){warning("Unexpect=
ed space after '{a}'.",right,left.value);}}}=0A=
function =
nospace(left,right){left=3Dleft||token;right=3Dright||nexttoken;if(option=
.white&&!left.comment){if(left.line=3D=3D=3Dright.line){adjacent(left,rig=
ht);}}}=0A=
function =
nonadjacent(left,right){if(option.white){left=3Dleft||token;right=3Dright=
||nexttoken;if(left.line=3D=3D=3Dright.line&&left.character=3D=3D=3Dright=
.from){warning("Missing space after '{a}'.",nexttoken,left.value);}}}=0A=
function =
nobreaknonadjacent(left,right){left=3Dleft||token;right=3Dright||nexttoke=
n;if(!option.laxbreak&&left.line!=3D=3Dright.line){warning("Bad line =
breaking before '{a}'.",right,right.id);}else =
if(option.white){left=3Dleft||token;right=3Dright||nexttoken;if(left.char=
acter=3D=3D=3Dright.from){warning("Missing space after =
'{a}'.",nexttoken,left.value);}}}=0A=
function indentation(bias){var =
i;if(option.white&&nexttoken.id!=3D=3D'(end)'){i=3Dindent+(bias||0);if(ne=
xttoken.from!=3D=3Di){warning("Expected '{a}' to have an indentation at =
{b} instead at {c}.",nexttoken,nexttoken.value,i,nexttoken.from);}}}=0A=
function =
nolinebreak(t){t=3Dt||token;if(t.line!=3D=3Dnexttoken.line){warning("Line=
 breaking error '{a}'.",t,t.value);}}=0A=
function =
comma(){if(token.line!=3D=3Dnexttoken.line){if(!option.laxbreak){warning(=
"Bad line breaking before '{a}'.",token,nexttoken.id);}}else =
if(token.character!=3D=3Dnexttoken.from&&option.white){warning("Unexpecte=
d space after '{a}'.",nexttoken,token.value);}=0A=
advance(',');nonadjacent(token,nexttoken);}=0A=
function symbol(s,p){var x=3Dsyntax[s];if(!x||typeof =
x!=3D=3D'object'){syntax[s]=3Dx=3D{id:s,lbp:p,value:s};}=0A=
return x;}=0A=
function delim(s){return symbol(s,0);}=0A=
function stmt(s,f){var =
x=3Ddelim(s);x.identifier=3Dx.reserved=3Dtrue;x.fud=3Df;return x;}=0A=
function blockstmt(s,f){var x=3Dstmt(s,f);x.block=3Dtrue;return x;}=0A=
function reserveName(x){var =
c=3Dx.id.charAt(0);if((c>=3D'a'&&c<=3D'z')||(c>=3D'A'&&c<=3D'Z')){x.ident=
ifier=3Dx.reserved=3Dtrue;}=0A=
return x;}=0A=
function prefix(s,f){var =
x=3Dsymbol(s,150);reserveName(x);x.nud=3D(typeof =
f=3D=3D=3D'function')?f:function(){this.right=3Dparse(150);this.arity=3D'=
unary';if(this.id=3D=3D=3D'++'||this.id=3D=3D=3D'--'){if(option.plusplus)=
{warning("Unexpected use of '{a}'.",this,this.id);}else =
if((!this.right.identifier||this.right.reserved)&&this.right.id!=3D=3D'.'=
&&this.right.id!=3D=3D'['){warning("Bad operand.",this);}}=0A=
return this;};return x;}=0A=
function type(s,f){var x=3Ddelim(s);x.type=3Ds;x.nud=3Df;return x;}=0A=
function reserve(s,f){var =
x=3Dtype(s,f);x.identifier=3Dx.reserved=3Dtrue;return x;}=0A=
function reservevar(s,v){return =
reserve(s,function(){if(this.id=3D=3D=3D'this'||this.id=3D=3D=3D'argument=
s'){if(strict_mode&&funct['(global)']){warning("Strict =
violation.",this);}else if(option.safe){warning("ADsafe =
violation.",this);}}=0A=
return this;});}=0A=
function infix(s,f,p,w){var =
x=3Dsymbol(s,p);reserveName(x);x.led=3Dfunction(left){if(!w){nobreaknonad=
jacent(prevtoken,token);nonadjacent(token,nexttoken);}=0A=
if(typeof f=3D=3D=3D'function'){return =
f(left,this);}else{this.left=3Dleft;this.right=3Dparse(p);return =
this;}};return x;}=0A=
function relation(s,f){var =
x=3Dsymbol(s,100);x.led=3Dfunction(left){nobreaknonadjacent(prevtoken,tok=
en);nonadjacent(token,nexttoken);var =
right=3Dparse(100);if((left&&left.id=3D=3D=3D'NaN')||(right&&right.id=3D=3D=
=3D'NaN')){warning("Use the isNaN function to compare with =
NaN.",this);}else if(f){f.apply(this,[left,right]);}=0A=
if(left.id=3D=3D=3D'!'){warning("Confusing use of '{a}'.",left,'!');}=0A=
if(right.id=3D=3D=3D'!'){warning("Confusing use of '{a}'.",left,'!');}=0A=
this.left=3Dleft;this.right=3Dright;return this;};return x;}=0A=
function isPoorRelation(node){return =
node&&((node.type=3D=3D=3D'(number)'&&+node.value=3D=3D=3D0)||(node.type=3D=
=3D=3D'(string)'&&node.value=3D=3D=3D' =
')||node.type=3D=3D=3D'true'||node.type=3D=3D=3D'false'||node.type=3D=3D=3D=
'undefined'||node.type=3D=3D=3D'null');}=0A=
function assignop(s,f){symbol(s,20).exps=3Dtrue;return =
infix(s,function(left,that){var =
l;that.left=3Dleft;if(predefined[left.value]=3D=3D=3Dfalse&&scope[left.va=
lue]['(global)']=3D=3D=3Dtrue){warning('Read only.',left);}=0A=
if(option.safe){l=3Dleft;do{if(typeof =
predefined[l.value]=3D=3D=3D'boolean'){warning('ADsafe violation.',l);}=0A=
l=3Dl.left;}while(l);}=0A=
if(left){if(left.id=3D=3D=3D'.'||left.id=3D=3D=3D'['){if(!left.left||left=
.left.value=3D=3D=3D'arguments'){warning('Bad assignment.',that);}=0A=
that.right=3Dparse(19);return that;}else =
if(left.identifier&&!left.reserved){if(funct[left.value]=3D=3D=3D'excepti=
on'){warning("Do not assign to the exception parameter.",left);}=0A=
that.right=3Dparse(19);return that;}=0A=
if(left=3D=3D=3Dsyntax['function']){warning("Expected an identifier in =
an assignment and instead saw a function invocation.",token);}}=0A=
error("Bad assignment.",that);},20);}=0A=
function bitwise(s,f,p){var =
x=3Dsymbol(s,p);reserveName(x);x.led=3D(typeof =
f=3D=3D=3D'function')?f:function(left){if(option.bitwise){warning("Unexpe=
cted use of '{a}'.",this,this.id);}=0A=
this.left=3Dleft;this.right=3Dparse(p);return this;};return x;}=0A=
function bitwiseassignop(s){symbol(s,20).exps=3Dtrue;return =
infix(s,function(left,that){if(option.bitwise){warning("Unexpected use =
of '{a}'.",that,that.id);}=0A=
nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);if(left){if(lef=
t.id=3D=3D=3D'.'||left.id=3D=3D=3D'['||(left.identifier&&!left.reserved))=
{parse(19);return that;}=0A=
if(left=3D=3D=3Dsyntax['function']){warning("Expected an identifier in =
an assignment, and instead saw a function invocation.",token);}=0A=
return that;}=0A=
error("Bad assignment.",that);},20);}=0A=
function suffix(s,f){var =
x=3Dsymbol(s,150);x.led=3Dfunction(left){if(option.plusplus){warning("Une=
xpected use of '{a}'.",this,this.id);}else =
if((!left.identifier||left.reserved)&&left.id!=3D=3D'.'&&left.id!=3D=3D'[=
'){warning("Bad operand.",this);}=0A=
this.left=3Dleft;return this;};return x;}=0A=
function optionalidentifier(){if(nexttoken.reserved){warning("Expected =
an identifier and instead saw '{a}' (a reserved =
word).",nexttoken,nexttoken.id);}=0A=
if(nexttoken.identifier){advance();return token.value;}}=0A=
function identifier(){var i=3Doptionalidentifier();if(i){return i;}=0A=
if(token.id=3D=3D=3D'function'&&nexttoken.id=3D=3D=3D'('){warning("Missin=
g name in function statement.");}else{error("Expected an identifier and =
instead saw '{a}'.",nexttoken,nexttoken.value);}}=0A=
function reachable(s){var =
i=3D0,t;if(nexttoken.id!=3D=3D';'||noreach){return;}=0A=
for(;;){t=3Dpeek(i);if(t.reach){return;}=0A=
if(t.id!=3D=3D'(endline)'){if(t.id=3D=3D=3D'function'){warning("Inner =
functions should be listed at the top of the outer function.",t);break;}=0A=
warning("Unreachable '{a}' after '{b}'.",t,t.value,s);break;}=0A=
i+=3D1;}}=0A=
function statement(noindent){var =
i=3Dindent,r,s=3Dscope,t=3Dnexttoken;if(t.id=3D=3D=3D';'){warning("Unnece=
ssary semicolon.",t);advance(';');return;}=0A=
if(t.identifier&&!t.reserved&&peek().id=3D=3D=3D':'){advance();advance(':=
');scope=3DObject.create(s);addlabel(t.value,'label');if(!nexttoken.label=
led){warning("Label '{a}' on {b} =
statement.",nexttoken,t.value,nexttoken.value);}=0A=
if(jx.test(t.value+':')){warning("Label '{a}' looks like a javascript =
url.",t,t.value);}=0A=
nexttoken.label=3Dt.value;t=3Dnexttoken;}=0A=
if(!noindent){indentation();}=0A=
if(nexttoken.id=3D=3D=3D'new'){warning("'new' should not be used as a =
statement.");}=0A=
r=3Dparse(0,true);if(!t.block){if(!r||!r.exps){warning("Expected an =
assignment or function call and instead saw an expression.",token);}=0A=
if(nexttoken.id!=3D=3D';'){warningAt("Missing =
semicolon.",token.line,token.from+token.value.length);}else{adjacent(toke=
n,nexttoken);advance(';');nonadjacent(token,nexttoken);}}=0A=
indent=3Di;scope=3Ds;return r;}=0A=
function use_strict(){if(nexttoken.value=3D=3D=3D'use =
strict'){advance();advance(';');strict_mode=3Dtrue;return =
true;}else{return false;}}=0A=
function statements(begin){var =
a=3D[],f,p;if(begin&&!use_strict()&&option.strict){warning('Missing "use =
strict" statement.',nexttoken);}=0A=
if(option.adsafe){switch(begin){case'script':if(!adsafe_may){if(nexttoken=
.value!=3D=3D'ADSAFE'||peek(0).id!=3D=3D'.'||(peek(1).value!=3D=3D'id'&&p=
eek(1).value!=3D=3D'go')){error('ADsafe violation: Missing ADSAFE.id or =
ADSAFE.go.',nexttoken);}}=0A=
if(nexttoken.value=3D=3D=3D'ADSAFE'&&peek(0).id=3D=3D=3D'.'&&peek(1).valu=
e=3D=3D=3D'id'){if(adsafe_may){error('ADsafe violation.',nexttoken);}=0A=
advance('ADSAFE');advance('.');advance('id');advance('(');if(nexttoken.va=
lue!=3D=3Dadsafe_id){error('ADsafe violation: id does not =
match.',nexttoken);}=0A=
advance('(string)');advance(')');advance(';');adsafe_may=3Dtrue;}=0A=
break;case'lib':if(nexttoken.value=3D=3D=3D'ADSAFE'){advance('ADSAFE');ad=
vance('.');advance('lib');advance('(');advance('(string)');comma();f=3Dpa=
rse(0);if(f.id!=3D=3D'function'){error('The second argument to lib must =
be a function.',f);}=0A=
p=3Df.funct['(params)'];p=3Dp&&p.join(', =
');if(p&&p!=3D=3D'lib'){error("Expected '{a}' and instead saw =
'{b}'.",f,'(lib)','('+p+')');}=0A=
advance(')');advance(';');return a;}else{error("ADsafe lib =
violation.");}}}=0A=
while(!nexttoken.reach&&nexttoken.id!=3D=3D'(end)'){if(nexttoken.id=3D=3D=
=3D';'){warning("Unnecessary =
semicolon.");advance(';');}else{a.push(statement());}}=0A=
return a;}=0A=
function block(f){var =
a,b=3Dinblock,old_indent=3Dindent,s=3Dscope,t;inblock=3Df;scope=3DObject.=
create(scope);nonadjacent(token,nexttoken);t=3Dnexttoken;if(nexttoken.id=3D=
=3D=3D'{'){advance('{');if(nexttoken.id!=3D=3D'}'||token.line!=3D=3Dnextt=
oken.line){indent+=3Doption.indent;while(!f&&nexttoken.from>indent){inden=
t+=3Doption.indent;}=0A=
if(!f){use_strict();}=0A=
a=3Dstatements();indent-=3Doption.indent;indentation();}=0A=
advance('}',t);indent=3Dold_indent;}else{warning("Expected '{a}' and =
instead saw =
'{b}'.",nexttoken,'{',nexttoken.value);noreach=3Dtrue;a=3D[statement()];n=
oreach=3Dfalse;}=0A=
funct['(verb)']=3Dnull;scope=3Ds;inblock=3Db;return a;}=0A=
function idValue(){return this;}=0A=
function countMember(m){if(membersOnly&&typeof =
membersOnly[m]!=3D=3D'boolean'){warning("Unexpected /*member =
'{a}'.",token,m);}=0A=
if(typeof =
member[m]=3D=3D=3D'number'){member[m]+=3D1;}else{member[m]=3D1;}}=0A=
function note_implied(token){var =
name=3Dtoken.value,line=3Dtoken.line,a=3Dimplied[name];if(typeof =
a=3D=3D=3D'function'){a=3Dfalse;}=0A=
if(!a){a=3D[line];implied[name]=3Da;}else =
if(a[a.length-1]!=3D=3Dline){a.push(line);}}=0A=
function cssName(){if(nexttoken.identifier){advance();return true;}}=0A=
function =
cssNumber(){if(nexttoken.id=3D=3D=3D'-'){advance('-');adjacent();nolinebr=
eak();}=0A=
if(nexttoken.type=3D=3D=3D'(number)'){advance('(number)');return true;}}=0A=
function =
cssString(){if(nexttoken.type=3D=3D=3D'(string)'){advance();return =
true;}}=0A=
function cssColor(){var =
i,number;if(nexttoken.identifier){if(nexttoken.value=3D=3D=3D'rgb'){advan=
ce();advance('(');for(i=3D0;i<3;i+=3D1){if(i){advance(',');}=0A=
number=3Dnexttoken.value;if(nexttoken.type!=3D=3D'(number)'||number<0){wa=
rning("Expected a positive number and instead saw =
'{a}'",nexttoken,number);advance();}else{advance();if(nexttoken.id=3D=3D=3D=
'%'){advance('%');if(number>100){warning("Expected a percentage and =
instead saw '{a}'",token,number);}}else{if(number>255){warning("Expected =
a small number and instead saw '{a}'",token,number);}}}}=0A=
advance(')');return true;}else =
if(cssColorData[nexttoken.value]=3D=3D=3Dtrue){advance();return =
true;}}else if(nexttoken.type=3D=3D=3D'(color)'){advance();return true;}=0A=
return false;}=0A=
function =
cssLength(){if(nexttoken.id=3D=3D=3D'-'){advance('-');adjacent();nolinebr=
eak();}=0A=
if(nexttoken.type=3D=3D=3D'(number)'){advance();if(nexttoken.type!=3D=3D'=
(string)'&&cssLengthData[nexttoken.value]=3D=3D=3Dtrue){adjacent();advanc=
e();}else if(+token.value!=3D=3D0){warning("Expected a linear unit and =
instead saw '{a}'.",nexttoken,nexttoken.value);}=0A=
return true;}=0A=
return false;}=0A=
function =
cssLineHeight(){if(nexttoken.id=3D=3D=3D'-'){advance('-');adjacent();}=0A=
if(nexttoken.type=3D=3D=3D'(number)'){advance();if(nexttoken.type!=3D=3D'=
(string)'&&cssLengthData[nexttoken.value]=3D=3D=3Dtrue){adjacent();advanc=
e();}=0A=
return true;}=0A=
return false;}=0A=
function =
cssWidth(){if(nexttoken.identifier){switch(nexttoken.value){case'thin':ca=
se'medium':case'thick':advance();return true;}}else{return cssLength();}}=0A=
function =
cssMargin(){if(nexttoken.identifier){if(nexttoken.value=3D=3D=3D'auto'){a=
dvance();return true;}}else{return cssLength();}}=0A=
function =
cssAttr(){if(nexttoken.identifier&&nexttoken.value=3D=3D=3D'attr'){advanc=
e();advance('(');if(!nexttoken.identifier){warning("Expected a name and =
instead saw '{a}'.",nexttoken,nexttoken.value);}=0A=
advance();advance(')');return true;}=0A=
return false;}=0A=
function =
cssCommaList(){while(nexttoken.id!=3D=3D';'){if(!cssName()&&!cssString())=
{warning("Expected a name and instead saw =
'{a}'.",nexttoken,nexttoken.value);}=0A=
if(nexttoken.id!=3D=3D','){return true;}=0A=
comma();}}=0A=
function =
cssCounter(){if(nexttoken.identifier&&nexttoken.value=3D=3D=3D'counter'){=
advance();advance('(');if(!nexttoken.identifier){}=0A=
advance();if(nexttoken.id=3D=3D=3D','){comma();if(nexttoken.type!=3D=3D'(=
string)'){warning("Expected a string and instead saw =
'{a}'.",nexttoken,nexttoken.value);}=0A=
advance();}=0A=
advance(')');return true;}=0A=
if(nexttoken.identifier&&nexttoken.value=3D=3D=3D'counters'){advance();ad=
vance('(');if(!nexttoken.identifier){warning("Expected a name and =
instead saw '{a}'.",nexttoken,nexttoken.value);}=0A=
advance();if(nexttoken.id=3D=3D=3D','){comma();if(nexttoken.type!=3D=3D'(=
string)'){warning("Expected a string and instead saw =
'{a}'.",nexttoken,nexttoken.value);}=0A=
advance();}=0A=
if(nexttoken.id=3D=3D=3D','){comma();if(nexttoken.type!=3D=3D'(string)'){=
warning("Expected a string and instead saw =
'{a}'.",nexttoken,nexttoken.value);}=0A=
advance();}=0A=
advance(')');return true;}=0A=
return false;}=0A=
function cssShape(){var =
i;if(nexttoken.identifier&&nexttoken.value=3D=3D=3D'rect'){advance();adva=
nce('(');for(i=3D0;i<4;i+=3D1){if(!cssLength()){warning("Expected a =
number and instead saw '{a}'.",nexttoken,nexttoken.value);break;}}=0A=
advance(')');return true;}=0A=
return false;}=0A=
function cssUrl(){var =
c,url;if(nexttoken.identifier&&nexttoken.value=3D=3D=3D'url'){nexttoken=3D=
lex.range('(',')');url=3Dnexttoken.value;c=3Durl.charAt(0);if(c=3D=3D=3D'=
"'||c=3D=3D=3D'\''){if(url.slice(-1)!=3D=3Dc){warning("Bad url =
string.");}else{url=3Durl.slice(1,-1);if(url.indexOf(c)>=3D0){warning("Ba=
d url string.");}}}=0A=
if(!url){warning("Missing url.");}=0A=
advance();if(option.safe&&ux.test(url)){error("ADsafe URL violation.");}=0A=
urls.push(url);return true;}=0A=
return false;}=0A=
cssAny=3D[cssUrl,function(){for(;;){if(nexttoken.identifier){switch(nextt=
oken.value.toLowerCase()){case'url':cssUrl();break;case'expression':warni=
ng("Unexpected expression =
'{a}'.",nexttoken,nexttoken.value);advance();break;default:advance();}}el=
se{if(nexttoken.id=3D=3D=3D';'||nexttoken.id=3D=3D=3D'!'||nexttoken.id=3D=
=3D=3D'(end)'||nexttoken.id=3D=3D=3D'}'){return true;}=0A=
advance();}}}];cssBorderStyle=3D['none','hidden','dotted','dashed','solid=
','double','ridge','inset','outset'];cssBreak=3D['auto','always','avoid',=
'left','right'];cssOverflow=3D['auto','hidden','scroll','visible'];cssAtt=
ributeData=3D{background:[true,'background-attachment','background-color'=
,'background-image','background-position','background-repeat'],'backgroun=
d-attachment':['scroll','fixed'],'background-color':['transparent',cssCol=
or],'background-image':['none',cssUrl],'background-position':[2,[cssLengt=
h,'top','bottom','left','right','center']],'background-repeat':['repeat',=
'repeat-x','repeat-y','no-repeat'],'border':[true,'border-color','border-=
style','border-width'],'border-bottom':[true,'border-bottom-color','borde=
r-bottom-style','border-bottom-width'],'border-bottom-color':cssColor,'bo=
rder-bottom-style':cssBorderStyle,'border-bottom-width':cssWidth,'border-=
collapse':['collapse','separate'],'border-color':['transparent',4,cssColo=
r],'border-left':[true,'border-left-color','border-left-style','border-le=
ft-width'],'border-left-color':cssColor,'border-left-style':cssBorderStyl=
e,'border-left-width':cssWidth,'border-right':[true,'border-right-color',=
'border-right-style','border-right-width'],'border-right-color':cssColor,=
'border-right-style':cssBorderStyle,'border-right-width':cssWidth,'border=
-spacing':[2,cssLength],'border-style':[4,cssBorderStyle],'border-top':[t=
rue,'border-top-color','border-top-style','border-top-width'],'border-top=
-color':cssColor,'border-top-style':cssBorderStyle,'border-top-width':css=
Width,'border-width':[4,cssWidth],bottom:[cssLength,'auto'],'caption-side=
':['bottom','left','right','top'],clear:['both','left','none','right'],cl=
ip:[cssShape,'auto'],color:cssColor,content:['open-quote','close-quote','=
no-open-quote','no-close-quote',cssString,cssUrl,cssCounter,cssAttr],'cou=
nter-increment':[cssName,'none'],'counter-reset':[cssName,'none'],cursor:=
[cssUrl,'auto','crosshair','default','e-resize','help','move','n-resize',=
'ne-resize','nw-resize','pointer','s-resize','se-resize','sw-resize','w-r=
esize','text','wait'],direction:['ltr','rtl'],display:['block','compact',=
'inline','inline-block','inline-table','list-item','marker','none','run-i=
n','table','table-caption','table-cell','table-column','table-column-grou=
p','table-footer-group','table-header-group','table-row','table-row-group=
'],'empty-cells':['show','hide'],'float':['left','none','right'],font:['c=
aption','icon','menu','message-box','small-caption','status-bar',true,'fo=
nt-size','font-style','font-weight','font-family'],'font-family':cssComma=
List,'font-size':['xx-small','x-small','small','medium','large','x-large'=
,'xx-large','larger','smaller',cssLength],'font-size-adjust':['none',cssN=
umber],'font-stretch':['normal','wider','narrower','ultra-condensed','ext=
ra-condensed','condensed','semi-condensed','semi-expanded','expanded','ex=
tra-expanded'],'font-style':['normal','italic','oblique'],'font-variant':=
['normal','small-caps'],'font-weight':['normal','bold','bolder','lighter'=
,cssNumber],height:[cssLength,'auto'],left:[cssLength,'auto'],'letter-spa=
cing':['normal',cssLength],'line-height':['normal',cssLineHeight],'list-s=
tyle':[true,'list-style-image','list-style-position','list-style-type'],'=
list-style-image':['none',cssUrl],'list-style-position':['inside','outsid=
e'],'list-style-type':['circle','disc','square','decimal','decimal-leadin=
g-zero','lower-roman','upper-roman','lower-greek','lower-alpha','lower-la=
tin','upper-alpha','upper-latin','hebrew','katakana','hiragana-iroha','ka=
takana-oroha','none'],margin:[4,cssMargin],'margin-bottom':cssMargin,'mar=
gin-left':cssMargin,'margin-right':cssMargin,'margin-top':cssMargin,'mark=
er-offset':[cssLength,'auto'],'max-height':[cssLength,'none'],'max-width'=
:[cssLength,'none'],'min-height':cssLength,'min-width':cssLength,opacity:=
cssNumber,outline:[true,'outline-color','outline-style','outline-width'],=
'outline-color':['invert',cssColor],'outline-style':['dashed','dotted','d=
ouble','groove','inset','none','outset','ridge','solid'],'outline-width':=
cssWidth,overflow:cssOverflow,'overflow-x':cssOverflow,'overflow-y':cssOv=
erflow,padding:[4,cssLength],'padding-bottom':cssLength,'padding-left':cs=
sLength,'padding-right':cssLength,'padding-top':cssLength,'page-break-aft=
er':cssBreak,'page-break-before':cssBreak,position:['absolute','fixed','r=
elative','static'],quotes:[8,cssString],right:[cssLength,'auto'],'table-l=
ayout':['auto','fixed'],'text-align':['center','justify','left','right'],=
'text-decoration':['none','underline','overline','line-through','blink'],=
'text-indent':cssLength,'text-shadow':['none',4,[cssColor,cssLength]],'te=
xt-transform':['capitalize','uppercase','lowercase','none'],top:[cssLengt=
h,'auto'],'unicode-bidi':['normal','embed','bidi-override'],'vertical-ali=
gn':['baseline','bottom','sub','super','top','text-top','middle','text-bo=
ttom',cssLength],visibility:['visible','hidden','collapse'],'white-space'=
:['normal','nowrap','pre','pre-line','pre-wrap','inherit'],width:[cssLeng=
th,'auto'],'word-spacing':['normal',cssLength],'word-wrap':['break-word',=
'normal'],'z-index':['auto',cssNumber]};function styleAttribute(){var =
v;while(nexttoken.id=3D=3D=3D'*'||nexttoken.id=3D=3D=3D'#'||nexttoken.val=
ue=3D=3D=3D'_'){if(!option.css){warning("Unexpected =
'{a}'.",nexttoken,nexttoken.value);}=0A=
advance();}=0A=
if(nexttoken.id=3D=3D=3D'-'){if(!option.css){warning("Unexpected =
'{a}'.",nexttoken,nexttoken.value);}=0A=
advance('-');if(!nexttoken.identifier){warning("Expected a non-standard =
style attribute and instead saw '{a}'.",nexttoken,nexttoken.value);}=0A=
advance();return =
cssAny;}else{if(!nexttoken.identifier){warning("Excepted a style =
attribute, and instead saw =
'{a}'.",nexttoken,nexttoken.value);}else{if(is_own(cssAttributeData,nextt=
oken.value)){v=3DcssAttributeData[nexttoken.value];}else{v=3DcssAny;if(!o=
ption.css){warning("Unrecognized style attribute =
'{a}'.",nexttoken,nexttoken.value);}}}=0A=
advance();return v;}}=0A=
function styleValue(v){var =
i=3D0,n,once,match,round,start=3D0,vi;switch(typeof =
v){case'function':return =
v();case'string':if(nexttoken.identifier&&nexttoken.value=3D=3D=3Dv){adva=
nce();return true;}=0A=
return false;}=0A=
for(;;){if(i>=3Dv.length){return false;}=0A=
vi=3Dv[i];i+=3D1;if(vi=3D=3D=3Dtrue){break;}else if(typeof =
vi=3D=3D=3D'number'){n=3Dvi;vi=3Dv[i];i+=3D1;}else{n=3D1;}=0A=
match=3Dfalse;while(n>0){if(styleValue(vi)){match=3Dtrue;n-=3D1;}else{bre=
ak;}}=0A=
if(match){return true;}}=0A=
start=3Di;once=3D[];for(;;){round=3Dfalse;for(i=3Dstart;i<v.length;i+=3D1=
){if(!once[i]){if(styleValue(cssAttributeData[v[i]])){match=3Dtrue;round=3D=
true;once[i]=3Dtrue;break;}}}=0A=
if(!round){return match;}}}=0A=
function =
styleChild(){if(nexttoken.id=3D=3D=3D'(number)'){advance();if(nexttoken.v=
alue=3D=3D=3D'n'&&nexttoken.identifier){adjacent();advance();if(nexttoken=
.id=3D=3D=3D'+'){adjacent();advance('+');adjacent();advance('(number)');}=
}=0A=
return;}else{switch(nexttoken.value){case'odd':case'even':if(nexttoken.id=
entifier){advance();return;}}}=0A=
warning("Unexpected token '{a}'.",nexttoken,nexttoken.value);}=0A=
function substyle(){var =
v;for(;;){if(nexttoken.id=3D=3D=3D'}'||nexttoken.id=3D=3D=3D'(end)'||xquo=
te&&nexttoken.id=3D=3D=3Dxquote){return;}=0A=
while(nexttoken.id=3D=3D=3D';'){warning("Misplaced ';'.");advance(';');}=0A=
v=3DstyleAttribute();advance(':');if(nexttoken.identifier&&nexttoken.valu=
e=3D=3D=3D'inherit'){advance();}else{if(!styleValue(v)){warning("Unexpect=
ed token '{a}'.",nexttoken,nexttoken.value);advance();}}=0A=
if(nexttoken.id=3D=3D=3D'!'){advance('!');adjacent();if(nexttoken.identif=
ier&&nexttoken.value=3D=3D=3D'important'){advance();}else{warning("Expect=
ed '{a}' and instead saw =
'{b}'.",nexttoken,'important',nexttoken.value);}}=0A=
if(nexttoken.id=3D=3D=3D'}'||nexttoken.id=3D=3D=3Dxquote){warning("Missin=
g '{a}'.",nexttoken,';');}else{advance(';');}}}=0A=
function =
styleSelector(){if(nexttoken.identifier){if(!is_own(htmltag,nexttoken.val=
ue)){warning("Expected a tagName, and instead saw =
{a}.",nexttoken,nexttoken.value);}=0A=
advance();}else{switch(nexttoken.id){case'>':case'+':advance();styleSelec=
tor();break;case':':advance(':');switch(nexttoken.value){case'active':cas=
e'after':case'before':case'checked':case'disabled':case'empty':case'enabl=
ed':case'first-child':case'first-letter':case'first-line':case'first-of-t=
ype':case'focus':case'hover':case'last-of-type':case'link':case'only-of-t=
ype':case'root':case'target':case'visited':advance();break;case'lang':adv=
ance();advance('(');if(!nexttoken.identifier){warning("Expected a lang =
code, and instead saw :{a}.",nexttoken,nexttoken.value);}=0A=
advance(')');break;case'nth-child':case'nth-last-child':case'nth-last-of-=
type':case'nth-of-type':advance();advance('(');styleChild();advance(')');=
break;case'not':advance();advance('(');if(nexttoken.id=3D=3D=3D':'&&peek(=
0).value=3D=3D=3D'not'){warning("Nested not.");}=0A=
styleSelector();advance(')');break;default:warning("Expected a pseudo, =
and instead saw :{a}.",nexttoken,nexttoken.value);}=0A=
break;case'#':advance('#');if(!nexttoken.identifier){warning("Expected =
an id, and instead saw #{a}.",nexttoken,nexttoken.value);}=0A=
advance();break;case'*':advance('*');break;case'.':advance('.');if(!nextt=
oken.identifier){warning("Expected a class, and instead saw =
#.{a}.",nexttoken,nexttoken.value);}=0A=
advance();break;case'[':advance('[');if(!nexttoken.identifier){warning("E=
xpected an attribute, and instead saw =
[{a}].",nexttoken,nexttoken.value);}=0A=
advance();if(nexttoken.id=3D=3D=3D'=3D'||nexttoken.value=3D=3D=3D'~=3D'||=
nexttoken.value=3D=3D=3D'$=3D'||nexttoken.value=3D=3D=3D'|=3D'||nexttoken=
.id=3D=3D=3D'*=3D'||nexttoken.id=3D=3D=3D'^=3D'){advance();if(nexttoken.t=
ype!=3D=3D'(string)'){warning("Expected a string, and instead saw =
{a}.",nexttoken,nexttoken.value);}=0A=
advance();}=0A=
advance(']');break;default:error("Expected a CSS selector, and instead =
saw {a}.",nexttoken,nexttoken.value);}}}=0A=
function stylePattern(){var =
name;if(nexttoken.id=3D=3D=3D'{'){warning("Expected a style pattern, and =
instead saw '{a}'.",nexttoken,nexttoken.id);}else =
if(nexttoken.id=3D=3D=3D'@'){advance('@');name=3Dnexttoken.value;if(nextt=
oken.identifier&&atrule[name]=3D=3D=3Dtrue){advance();return name;}=0A=
warning("Expected an at-rule, and instead saw @{a}.",nexttoken,name);}=0A=
for(;;){styleSelector();if(nexttoken.id=3D=3D=3D'</'||nexttoken.id=3D=3D=3D=
'{'||nexttoken.id=3D=3D=3D'(end)'){return'';}=0A=
if(nexttoken.id=3D=3D=3D','){comma();}}}=0A=
function styles(){var =
i;while(nexttoken.id=3D=3D=3D'@'){i=3Dpeek();if(i.identifier&&i.value=3D=3D=
=3D'import'){advance('@');advance();if(!cssUrl()){warning("Expected =
'{a}' and instead saw =
'{b}'.",nexttoken,'url',nexttoken.value);advance();}=0A=
advance(';');}else{break;}}=0A=
while(nexttoken.id!=3D=3D'</'&&nexttoken.id!=3D=3D'(end)'){stylePattern()=
;xmode=3D'styleproperty';if(nexttoken.id=3D=3D=3D';'){advance(';');}else{=
advance('{');substyle();xmode=3D'style';advance('}');}}}=0A=
function =
doBegin(n){if(n!=3D=3D'html'&&!option.fragment){if(n=3D=3D=3D'div'&&optio=
n.adsafe){error("ADSAFE: Use the fragment =
option.");}else{error("Expected '{a}' and instead saw =
'{b}'.",token,'html',n);}}=0A=
if(option.adsafe){if(n=3D=3D=3D'html'){error("Currently, ADsafe does not =
operate on whole HTML documents. It operates on <div> fragments and .js =
files.",token);}=0A=
if(option.fragment){if(n!=3D=3D'div'){error("ADsafe violation: Wrap the =
widget in a div.",token);}}else{error("Use the fragment =
option.",token);}}=0A=
option.browser=3Dtrue;assume();}=0A=
function doAttribute(n,a,v){var u,x;if(a=3D=3D=3D'id'){u=3Dtypeof =
v=3D=3D=3D'string'?v.toUpperCase():'';if(ids[u]=3D=3D=3Dtrue){warning("Du=
plicate id=3D'{a}'.",nexttoken,v);}=0A=
if(option.adsafe){if(adsafe_id){if(v.slice(0,adsafe_id.length)!=3D=3Dadsa=
fe_id){warning("ADsafe violation: An id must have a '{a}' =
prefix",nexttoken,adsafe_id);}else =
if(!/^[A-Z]+_[A-Z]+$/.test(v)){warning("ADSAFE violation: bad =
id.");}}else{adsafe_id=3Dv;if(!/^[A-Z]+_$/.test(v)){warning("ADSAFE =
violation: bad id.");}}}=0A=
x=3Dv.search(dx);if(x>=3D0){warning("Unexpected character '{a}' in =
{b}.",token,v.charAt(x),a);}=0A=
ids[u]=3Dtrue;}else =
if(a=3D=3D=3D'class'||a=3D=3D=3D'type'||a=3D=3D=3D'name'){x=3Dv.search(qx=
);if(x>=3D0){warning("Unexpected character '{a}' in =
{b}.",token,v.charAt(x),a);}=0A=
ids[u]=3Dtrue;}else =
if(a=3D=3D=3D'href'||a=3D=3D=3D'background'||a=3D=3D=3D'content'||a=3D=3D=
=3D'data'||a.indexOf('src')>=3D0||a.indexOf('url')>=3D0){if(option.safe&&=
ux.test(v)){error("ADsafe URL violation.");}=0A=
urls.push(v);}else =
if(a=3D=3D=3D'for'){if(option.adsafe){if(adsafe_id){if(v.slice(0,adsafe_i=
d.length)!=3D=3Dadsafe_id){warning("ADsafe violation: An id must have a =
'{a}' prefix",nexttoken,adsafe_id);}else =
if(!/^[A-Z]+_[A-Z]+$/.test(v)){warning("ADSAFE violation: bad =
id.");}}else{warning("ADSAFE violation: bad id.");}}}else =
if(a=3D=3D=3D'name'){if(option.adsafe&&v.indexOf('_')>=3D0){warning("ADsa=
fe name violation.");}}}=0A=
function doTag(n,a){var =
i,t=3Dhtmltag[n],x;src=3Dfalse;if(!t){error("Unrecognized tag =
'<{a}>'.",nexttoken,n=3D=3D=3Dn.toLowerCase()?n:n+' (capitalization =
error)');}=0A=
if(stack.length>0){if(n=3D=3D=3D'html'){error("Too many <html> =
tags.",token);}=0A=
x=3Dt.parent;if(x){if(x.indexOf(' '+stack[stack.length-1].name+' =
')<0){error("A '<{a}>' must be within '<{b}>'.",token,n,x);}}else =
if(!option.adsafe&&!option.fragment){i=3Dstack.length;do{if(i<=3D0){error=
("A '<{a}>' must be within '<{b}>'.",token,n,'body');}=0A=
i-=3D1;}while(stack[i].name!=3D=3D'body');}}=0A=
switch(n){case'div':if(option.adsafe&&stack.length=3D=3D=3D1&&!adsafe_id)=
{warning("ADSAFE violation: missing ID_.");}=0A=
break;case'script':xmode=3D'script';advance('>');indent=3Dnexttoken.from;=
if(a.lang){warning("lang is deprecated.",token);}=0A=
if(option.adsafe&&stack.length!=3D=3D1){warning("ADsafe script placement =
violation.",token);}=0A=
if(a.src){if(option.adsafe&&(!adsafe_may||!approved[a.src])){warning("ADs=
afe unapproved script source.",token);}=0A=
if(a.type){warning("type is =
unnecessary.",token);}}else{if(adsafe_went){error("ADsafe script =
violation.",token);}=0A=
statements('script');}=0A=
xmode=3D'html';advance('</');if(!nexttoken.identifier&&nexttoken.value!=3D=
=3D'script'){warning("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'script',nexttoken.value);}=0A=
advance();xmode=3D'outer';break;case'style':xmode=3D'style';advance('>');=
styles();xmode=3D'html';advance('</');if(!nexttoken.identifier&&nexttoken=
.value!=3D=3D'style'){warning("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'style',nexttoken.value);}=0A=
advance();xmode=3D'outer';break;case'input':switch(a.type){case'radio':ca=
se'checkbox':case'button':case'reset':case'submit':break;case'text':case'=
file':case'password':case'file':case'hidden':case'image':if(option.adsafe=
&&a.autocomplete!=3D=3D'off'){warning("ADsafe autocomplete violation.");}=0A=
break;default:warning("Bad input type.");}=0A=
break;case'applet':case'body':case'embed':case'frame':case'frameset':case=
'head':case'iframe':case'noembed':case'noframes':case'object':case'param'=
:if(option.adsafe){warning("ADsafe violation: Disallowed tag: "+n);}=0A=
break;}}=0A=
function closetag(n){return'</'+n+'>';}=0A=
function html(){var =
a,attributes,e,n,q,t,v,w=3Doption.white,wmode;xmode=3D'html';xquote=3D'';=
stack=3Dnull;for(;;){switch(nexttoken.value){case'<':xmode=3D'html';advan=
ce('<');attributes=3D{};t=3Dnexttoken;if(!t.identifier){warning("Bad =
identifier {a}.",t,t.value);}=0A=
n=3Dt.value;if(option.cap){n=3Dn.toLowerCase();}=0A=
t.name=3Dn;advance();if(!stack){stack=3D[];doBegin(n);}=0A=
v=3Dhtmltag[n];if(typeof v!=3D=3D'object'){error("Unrecognized tag =
'<{a}>'.",t,n);}=0A=
e=3Dv.empty;t.type=3Dn;for(;;){if(nexttoken.id=3D=3D=3D'/'){advance('/');=
if(nexttoken.id!=3D=3D'>'){warning("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'>',nexttoken.value);}=0A=
break;}=0A=
if(nexttoken.id&&nexttoken.id.substr(0,1)=3D=3D=3D'>'){break;}=0A=
if(!nexttoken.identifier){if(nexttoken.id=3D=3D=3D'(end)'||nexttoken.id=3D=
=3D=3D'(error)'){error("Missing '>'.",nexttoken);}=0A=
warning("Bad identifier.");}=0A=
option.white=3Dtrue;nonadjacent(token,nexttoken);a=3Dnexttoken.value;opti=
on.white=3Dw;advance();if(!option.cap&&a!=3D=3Da.toLowerCase()){warning("=
Attribute '{a}' not all lower case.",nexttoken,a);}=0A=
a=3Da.toLowerCase();xquote=3D'';if(is_own(attributes,a)){warning("Attribu=
te '{a}' repeated.",nexttoken,a);}=0A=
if(a.slice(0,2)=3D=3D=3D'on'){if(!option.on){warning("Avoid HTML event =
handlers.");}=0A=
xmode=3D'scriptstring';advance('=3D');q=3Dnexttoken.id;if(q!=3D=3D'"'&&q!=
=3D=3D"'"){error("Missing quote.");}=0A=
xquote=3Dq;wmode=3Doption.white;option.white=3Dfalse;advance(q);statement=
s('on');option.white=3Dwmode;if(nexttoken.id!=3D=3Dq){error("Missing =
close quote on script attribute.");}=0A=
xmode=3D'html';xquote=3D'';advance(q);v=3Dfalse;}else =
if(a=3D=3D=3D'style'){xmode=3D'scriptstring';advance('=3D');q=3Dnexttoken=
.id;if(q!=3D=3D'"'&&q!=3D=3D"'"){error("Missing quote.");}=0A=
xmode=3D'styleproperty';xquote=3Dq;advance(q);substyle();xmode=3D'html';x=
quote=3D'';advance(q);v=3Dfalse;}else{if(nexttoken.id=3D=3D=3D'=3D'){adva=
nce('=3D');v=3Dnexttoken.value;if(!nexttoken.identifier&&nexttoken.id!=3D=
=3D'"'&&nexttoken.id!=3D=3D'\''&&nexttoken.type!=3D=3D'(string)'&&nexttok=
en.type!=3D=3D'(number)'&&nexttoken.type!=3D=3D'(color)'){warning("Expect=
ed an attribute value and instead saw '{a}'.",token,a);}=0A=
advance();}else{v=3Dtrue;}}=0A=
attributes[a]=3Dv;doAttribute(n,a,v);}=0A=
doTag(n,attributes);if(!e){stack.push(t);}=0A=
xmode=3D'outer';advance('>');break;case'</':xmode=3D'html';advance('</');=
if(!nexttoken.identifier){warning("Bad identifier.");}=0A=
n=3Dnexttoken.value;if(option.cap){n=3Dn.toLowerCase();}=0A=
advance();if(!stack){error("Unexpected '{a}'.",nexttoken,closetag(n));}=0A=
t=3Dstack.pop();if(!t){error("Unexpected '{a}'.",nexttoken,closetag(n));}=0A=
if(t.name!=3D=3Dn){error("Expected '{a}' and instead saw =
'{b}'.",nexttoken,closetag(t.name),closetag(n));}=0A=
if(nexttoken.id!=3D=3D'>'){error("Missing '{a}'.",nexttoken,'>');}=0A=
xmode=3D'outer';advance('>');break;case'<!':if(option.safe){warning("ADsa=
fe HTML violation.");}=0A=
xmode=3D'html';for(;;){advance();if(nexttoken.id=3D=3D=3D'>'||nexttoken.i=
d=3D=3D=3D'(end)'){break;}=0A=
if(nexttoken.value.indexOf('--')>=3D0){warning("Unexpected --.");}=0A=
if(nexttoken.value.indexOf('<')>=3D0){warning("Unexpected <.");}=0A=
if(nexttoken.value.indexOf('>')>=3D0){warning("Unexpected >.");}}=0A=
xmode=3D'outer';advance('>');break;case'(end)':return;default:if(nexttoke=
n.id=3D=3D=3D'(end)'){error("Missing =
'{a}'.",nexttoken,'</'+stack[stack.length-1].value+'>');}else{advance();}=
}=0A=
if(stack&&stack.length=3D=3D=3D0&&(option.adsafe||!option.fragment||nextt=
oken.id=3D=3D=3D'(end)')){break;}}=0A=
if(nexttoken.id!=3D=3D'(end)'){error("Unexpected material after the =
end.");}}=0A=
type('(number)',idValue);type('(string)',idValue);syntax['(identifier)']=3D=
{type:'(identifier)',lbp:0,identifier:true,nud:function(){var =
v=3Dthis.value,s=3Dscope[v],f;if(typeof =
s=3D=3D=3D'function'){s=3Dundefined;}else if(typeof =
s=3D=3D=3D'boolean'){f=3Dfunct;funct=3Dfunctions[0];addlabel(v,'var');s=3D=
funct;funct=3Df;}=0A=
if(funct=3D=3D=3Ds){switch(funct[v]){case'unused':funct[v]=3D'var';break;=
case'label':warning("'{a}' is a statement label.",token,v);break;}}else =
if(funct['(global)']){if(option.undef&&predefined[v]!=3D=3D'boolean'){war=
ning("'{a}' is not defined.",token,v);}=0A=
note_implied(token);}else{switch(funct[v]){case'closure':case'function':c=
ase'var':case'unused':warning("'{a}' used out of =
scope.",token,v);break;case'label':warning("'{a}' is a statement =
label.",token,v);break;case'outer':case'global':break;default:if(s=3D=3D=3D=
true){funct[v]=3Dtrue;}else if(s=3D=3D=3Dnull){warning("'{a}' is not =
allowed.",token,v);note_implied(token);}else if(typeof =
s!=3D=3D'object'){if(option.undef){warning("'{a}' is not =
defined.",token,v);}else{funct[v]=3Dtrue;}=0A=
note_implied(token);}else{switch(s[v]){case'function':case'var':case'unus=
ed':s[v]=3D'closure';funct[v]=3Ds['(global)']?'global':'outer';break;case=
'closure':case'parameter':funct[v]=3Ds['(global)']?'global':'outer';break=
;case'label':warning("'{a}' is a statement label.",token,v);}}}}=0A=
return this;},led:function(){error("Expected an operator and instead saw =
'{a}'.",nexttoken,nexttoken.value);}};type('(regexp)',function(){return =
this;});delim('(endline)');delim('(begin)');delim('(end)').reach=3Dtrue;d=
elim('</').reach=3Dtrue;delim('<!');delim('<!--');delim('-->');delim('(er=
ror)').reach=3Dtrue;delim('}').reach=3Dtrue;delim(')');delim(']');delim('=
"').reach=3Dtrue;delim("'").reach=3Dtrue;delim(';');delim(':').reach=3Dtr=
ue;delim(',');delim('#');delim('@');reserve('else');reserve('case').reach=
=3Dtrue;reserve('catch');reserve('default').reach=3Dtrue;reserve('finally=
');reservevar('arguments');reservevar('eval');reservevar('false');reserve=
var('Infinity');reservevar('NaN');reservevar('null');reservevar('this');r=
eservevar('true');reservevar('undefined');assignop('=3D','assign',20);ass=
ignop('+=3D','assignadd',20);assignop('-=3D','assignsub',20);assignop('*=3D=
','assignmult',20);assignop('/=3D','assigndiv',20).nud=3Dfunction(){error=
("A regular expression literal can be confused with =
'/=3D'.");};assignop('%=3D','assignmod',20);bitwiseassignop('&=3D','assig=
nbitand',20);bitwiseassignop('|=3D','assignbitor',20);bitwiseassignop('^=3D=
','assignbitxor',20);bitwiseassignop('<<=3D','assignshiftleft',20);bitwis=
eassignop('>>=3D','assignshiftright',20);bitwiseassignop('>>>=3D','assign=
shiftrightunsigned',20);infix('?',function(left,that){that.left=3Dleft;th=
at.right=3Dparse(10);advance(':');that['else']=3Dparse(10);return =
that;},30);infix('||','or',40);infix('&&','and',50);bitwise('|','bitor',7=
0);bitwise('^','bitxor',80);bitwise('&','bitand',90);relation('=3D=3D',fu=
nction(left,right){if(option.eqeqeq){warning("Expected '{a}' and instead =
saw '{b}'.",this,'=3D=3D=3D','=3D=3D');}else =
if(isPoorRelation(left)){warning("Use '{a}' to compare with =
'{b}'.",this,'=3D=3D=3D',left.value);}else =
if(isPoorRelation(right)){warning("Use '{a}' to compare with =
'{b}'.",this,'=3D=3D=3D',right.value);}=0A=
return =
this;});relation('=3D=3D=3D');relation('!=3D',function(left,right){if(opt=
ion.eqeqeq){warning("Expected '{a}' and instead saw =
'{b}'.",this,'!=3D=3D','!=3D');}else =
if(isPoorRelation(left)){warning("Use '{a}' to compare with =
'{b}'.",this,'!=3D=3D',left.value);}else =
if(isPoorRelation(right)){warning("Use '{a}' to compare with =
'{b}'.",this,'!=3D=3D',right.value);}=0A=
return =
this;});relation('!=3D=3D');relation('<');relation('>');relation('<=3D');=
relation('>=3D');bitwise('<<','shiftleft',120);bitwise('>>','shiftright',=
120);bitwise('>>>','shiftrightunsigned',120);infix('in','in',120);infix('=
instanceof','instanceof',120);infix('+',function(left,that){var =
right=3Dparse(130);if(left&&right&&left.id=3D=3D=3D'(string)'&&right.id=3D=
=3D=3D'(string)'){left.value+=3Dright.value;left.character=3Dright.charac=
ter;if(jx.test(left.value)){warning("JavaScript URL.",left);}=0A=
return left;}=0A=
that.left=3Dleft;that.right=3Dright;return =
that;},130);prefix('+','num');infix('-','sub',130);prefix('-','neg');infi=
x('*','mult',140);infix('/','div',140);infix('%','mod',140);suffix('++','=
postinc');prefix('++','preinc');syntax['++'].exps=3Dtrue;suffix('--','pos=
tdec');prefix('--','predec');syntax['--'].exps=3Dtrue;prefix('delete',fun=
ction(){var =
p=3Dparse(0);if(!p||(p.id!=3D=3D'.'&&p.id!=3D=3D'[')){warning("Expected =
'{a}' and instead saw '{b}'.",nexttoken,'.',nexttoken.value);}=0A=
this.first=3Dp;return =
this;}).exps=3Dtrue;prefix('~',function(){if(option.bitwise){warning("Une=
xpected '{a}'.",this,'~');}=0A=
parse(150);return =
this;});prefix('!',function(){this.right=3Dparse(150);this.arity=3D'unary=
';if(bang[this.right.id]=3D=3D=3Dtrue){warning("Confusing use of =
'{a}'.",this,'!');}=0A=
return this;});prefix('typeof','typeof');prefix('new',function(){var =
c=3Dparse(155),i;if(c&&c.id!=3D=3D'function'){if(c.identifier){c['new']=3D=
true;switch(c.value){case'Object':warning("Use the object literal =
notation =
{}.",token);break;case'Array':if(nexttoken.id!=3D=3D'('){warning("Use =
the array literal notation =
[].",token);}else{advance('(');if(nexttoken.id=3D=3D=3D')'){warning("Use =
the array literal notation =
[].",token);}else{i=3Dparse(0);c.dimension=3Di;if((i.id=3D=3D=3D'(number)=
'&&/[.+\-Ee]/.test(i.value))||(i.id=3D=3D=3D'-'&&!i.right)||i.id=3D=3D=3D=
'(string)'||i.id=3D=3D=3D'['||i.id=3D=3D=3D'{'||i.id=3D=3D=3D'true'||i.id=
=3D=3D=3D'false'||i.id=3D=3D=3D'null'||i.id=3D=3D=3D'undefined'||i.id=3D=3D=
=3D'Infinity'){warning("Use the array literal notation [].",token);}=0A=
if(nexttoken.id!=3D=3D')'){error("Use the array literal notation =
[].",token);}}=0A=
advance(')');}=0A=
this.first=3Dc;return =
this;case'Number':case'String':case'Boolean':case'Math':case'JSON':warnin=
g("Do not use {a} as a =
constructor.",token,c.value);break;case'Function':if(!option.evil){warnin=
g("The Function constructor is eval.");}=0A=
break;case'Date':case'RegExp':break;default:if(c.id!=3D=3D'function'){i=3D=
c.value.substr(0,1);if(option.newcap&&(i<'A'||i>'Z')){warning("A =
constructor name should start with an uppercase =
letter.",token);}}}}else{if(c.id!=3D=3D'.'&&c.id!=3D=3D'['&&c.id!=3D=3D'(=
'){warning("Bad constructor.",token);}}}else{warning("Weird =
construction. Delete 'new'.",this);}=0A=
adjacent(token,nexttoken);if(nexttoken.id!=3D=3D'('){warning("Missing =
'()' invoking a constructor.");}=0A=
this.first=3Dc;return =
this;});syntax['new'].exps=3Dtrue;infix('.',function(left,that){adjacent(=
prevtoken,token);var m=3Didentifier();if(typeof =
m=3D=3D=3D'string'){countMember(m);}=0A=
that.left=3Dleft;that.right=3Dm;if(!option.evil&&left&&left.value=3D=3D=3D=
'document'&&(m=3D=3D=3D'write'||m=3D=3D=3D'writeln')){warning("document.w=
rite can be a form of eval.",left);}else =
if(option.adsafe){if(left&&left.value=3D=3D=3D'ADSAFE'){if(m=3D=3D=3D'id'=
||m=3D=3D=3D'lib'){warning("ADsafe violation.",that);}else =
if(m=3D=3D=3D'go'){if(xmode!=3D=3D'script'){warning("ADsafe =
violation.",that);}else =
if(adsafe_went||nexttoken.id!=3D=3D'('||peek(0).id!=3D=3D'(string)'||peek=
(0).value!=3D=3Dadsafe_id||peek(1).id!=3D=3D','){error("ADsafe =
violation: go.",that);}=0A=
adsafe_went=3Dtrue;adsafe_may=3Dfalse;}}}=0A=
if(!option.evil&&(m=3D=3D=3D'eval'||m=3D=3D=3D'execScript')){warning('eva=
l is evil.');}else =
if(option.safe){for(;;){if(banned[m]=3D=3D=3Dtrue){warning("ADsafe =
restricted word '{a}'.",token,m);}=0A=
if(typeof =
predefined[left.value]!=3D=3D'boolean'||nexttoken.id=3D=3D=3D'('){break;}=0A=
if(standard_member[m]=3D=3D=3Dtrue){if(nexttoken.id=3D=3D=3D'.'){warning(=
"ADsafe violation.",that);}=0A=
break;}=0A=
if(nexttoken.id!=3D=3D'.'){warning("ADsafe violation.",that);break;}=0A=
advance('.');token.left=3Dthat;token.right=3Dm;that=3Dtoken;m=3Didentifie=
r();if(typeof m=3D=3D=3D'string'){countMember(m);}}}=0A=
return =
that;},160,true);infix('(',function(left,that){adjacent(prevtoken,token);=
nospace();var =
n=3D0,p=3D[];if(left){if(left.type=3D=3D=3D'(identifier)'){if(left.value.=
match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)){if(left.value!=3D=3D'N=
umber'&&left.value!=3D=3D'String'&&left.value!=3D=3D'Boolean'&&left.value=
!=3D=3D'Date'){if(left.value=3D=3D=3D'Math'){warning("Math is not a =
function.",left);}else if(option.newcap){warning("Missing 'new' prefix =
when invoking a constructor.",left);}}}}else =
if(left.id=3D=3D=3D'.'){if(option.safe&&left.left.value=3D=3D=3D'Math'&&l=
eft.right=3D=3D=3D'random'){warning("ADsafe violation.",left);}}}=0A=
if(nexttoken.id!=3D=3D')'){for(;;){p[p.length]=3Dparse(10);n+=3D1;if(next=
token.id!=3D=3D','){break;}=0A=
comma();}}=0A=
advance(')');if(option.immed&&left.id=3D=3D=3D'function'&&nexttoken.id!=3D=
=3D')'){warning("Wrap the entire immediate function invocation in =
parens.",that);}=0A=
nospace(prevtoken,token);if(typeof =
left=3D=3D=3D'object'){if(left.value=3D=3D=3D'parseInt'&&n=3D=3D=3D1){war=
ning("Missing radix parameter.",left);}=0A=
if(!option.evil){if(left.value=3D=3D=3D'eval'||left.value=3D=3D=3D'Functi=
on'||left.value=3D=3D=3D'execScript'){warning("eval is =
evil.",left);}else =
if(p[0]&&p[0].id=3D=3D=3D'(string)'&&(left.value=3D=3D=3D'setTimeout'||le=
ft.value=3D=3D=3D'setInterval')){warning("Implied eval is evil. Pass a =
function instead of a string.",left);}}=0A=
if(!left.identifier&&left.id!=3D=3D'.'&&left.id!=3D=3D'['&&left.id!=3D=3D=
'('&&left.id!=3D=3D'&&'&&left.id!=3D=3D'||'&&left.id!=3D=3D'?'){warning("=
Bad invocation.",left);}}=0A=
that.left=3Dleft;return =
that;},155,true).exps=3Dtrue;prefix('(',function(){nospace();var =
v=3Dparse(0);advance(')',this);nospace(prevtoken,token);if(option.immed&&=
v.id=3D=3D=3D'function'){if(nexttoken.id=3D=3D=3D'('){warning("Move the =
invocation into the parens that contain the =
function.",nexttoken);}else{warning("Do not wrap function literals in =
parens unless they are to be immediately invoked.",this);}}=0A=
return v;});infix('[',function(left,that){nospace();var =
e=3Dparse(0),s;if(e&&e.type=3D=3D=3D'(string)'){if(option.safe&&banned[e.=
value]=3D=3D=3Dtrue){warning("ADsafe restricted word =
'{a}'.",that,e.value);}else =
if(!option.evil&&(e.value=3D=3D=3D'eval'||e.value=3D=3D=3D'execScript')){=
warning("eval is evil.",that);}else =
if(option.safe&&(e.value.charAt(0)=3D=3D=3D'_'||e.value.charAt(0)=3D=3D=3D=
'-')){warning("ADsafe restricted subscript '{a}'.",that,e.value);}=0A=
countMember(e.value);if(!option.sub&&ix.test(e.value)){s=3Dsyntax[e.value=
];if(!s||!s.reserved){warning("['{a}'] is better written in dot =
notation.",e,e.value);}}}else =
if(!e||e.type!=3D=3D'(number)'||e.value<0){if(option.safe){warning('ADsaf=
e subscripting.');}}=0A=
advance(']',that);nospace(prevtoken,token);that.left=3Dleft;that.right=3D=
e;return that;},160,true);prefix('[',function(){var =
b=3Dtoken.line!=3D=3Dnexttoken.line;this.first=3D[];if(b){indent+=3Doptio=
n.indent;if(nexttoken.from=3D=3D=3Dindent+option.indent){indent+=3Doption=
.indent;}}=0A=
while(nexttoken.id!=3D=3D'(end)'){while(nexttoken.id=3D=3D=3D','){warning=
("Extra comma.");advance(',');}=0A=
if(nexttoken.id=3D=3D=3D']'){break;}=0A=
if(b&&token.line!=3D=3Dnexttoken.line){indentation();}=0A=
this.first.push(parse(10));if(nexttoken.id=3D=3D=3D','){comma();if(nextto=
ken.id=3D=3D=3D']'){warning("Extra comma.",token);break;}}else{break;}}=0A=
if(b){indent-=3Doption.indent;indentation();}=0A=
advance(']',this);return this;},160);(function(x){x.nud=3Dfunction(){var =
b,i,s,seen=3D{};b=3Dtoken.line!=3D=3Dnexttoken.line;if(b){indent+=3Doptio=
n.indent;if(nexttoken.from=3D=3D=3Dindent+option.indent){indent+=3Doption=
.indent;}}=0A=
for(;;){if(nexttoken.id=3D=3D=3D'}'){break;}=0A=
if(b){indentation();}=0A=
i=3Doptionalidentifier(true);if(!i){if(nexttoken.id=3D=3D=3D'(string)'){i=
=3Dnexttoken.value;if(ix.test(i)){s=3Dsyntax[i];}=0A=
advance();}else =
if(nexttoken.id=3D=3D=3D'(number)'){i=3Dnexttoken.value.toString();advanc=
e();}else{error("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'}',nexttoken.value);}}=0A=
if(seen[i]=3D=3D=3Dtrue){warning("Duplicate member '{a}'.",nexttoken,i);}=0A=
seen[i]=3Dtrue;countMember(i);advance(':');nonadjacent(token,nexttoken);p=
arse(10);if(nexttoken.id=3D=3D=3D','){comma();if(nexttoken.id=3D=3D=3D','=
||nexttoken.id=3D=3D=3D'}'){warning("Extra comma.",token);}}else{break;}}=0A=
if(b){indent-=3Doption.indent;indentation();}=0A=
advance('}',this);return this;};x.fud=3Dfunction(){error("Expected to =
see a statement and instead saw a =
block.",token);};}(delim('{')));function varstatement(prefix){var =
id,name,value;if(funct['(onevar)']&&option.onevar){warning("Too many var =
statements.");}else if(!funct['(global)']){funct['(onevar)']=3Dtrue;}=0A=
this.first=3D[];for(;;){nonadjacent(token,nexttoken);id=3Didentifier();if=
(funct['(global)']&&predefined[id]=3D=3D=3Dfalse){warning("Redefinition =
of '{a}'.",token,id);}=0A=
addlabel(id,'unused');if(prefix){break;}=0A=
name=3Dtoken;this.first.push(token);if(nexttoken.id=3D=3D=3D'=3D'){nonadj=
acent(token,nexttoken);advance('=3D');nonadjacent(token,nexttoken);if(pee=
k(0).id=3D=3D=3D'=3D'&&nexttoken.identifier){error("Variable {a} was not =
declared correctly.",nexttoken,nexttoken.value);}=0A=
value=3Dparse(0);name.first=3Dvalue;}=0A=
if(nexttoken.id!=3D=3D','){break;}=0A=
comma();}=0A=
return this;}=0A=
stmt('var',varstatement).exps=3Dtrue;function functionparams(){var =
i,t=3Dnexttoken,p=3D[];advance('(');nospace();if(nexttoken.id=3D=3D=3D')'=
){advance(')');nospace(prevtoken,token);return;}=0A=
for(;;){i=3Didentifier();p.push(i);addlabel(i,'parameter');if(nexttoken.i=
d=3D=3D=3D','){comma();}else{advance(')',t);nospace(prevtoken,token);retu=
rn p;}}}=0A=
function doFunction(i){var =
s=3Dscope;scope=3DObject.create(s);funct=3D{'(name)':i||'"'+anonname+'"',=
'(line)':nexttoken.line,'(context)':funct,'(breakage)':0,'(loopage)':0,'(=
scope)':scope};token.funct=3Dfunct;functions.push(funct);if(i){addlabel(i=
,'function');}=0A=
funct['(params)']=3Dfunctionparams();block(false);scope=3Ds;funct['(last)=
']=3Dtoken.line;funct=3Dfunct['(context)'];}=0A=
blockstmt('function',function(){if(inblock){warning("Function statements =
cannot be placed in blocks. Use a function expression or move the =
statement to the top of the outer function.",token);}=0A=
var =
i=3Didentifier();adjacent(token,nexttoken);addlabel(i,'unused');doFunctio=
n(i);if(nexttoken.id=3D=3D=3D'('&&nexttoken.line=3D=3D=3Dtoken.line){erro=
r("Function statements are not invocable. Wrap the whole function =
invocation in parens.");}=0A=
return this;});prefix('function',function(){var =
i=3Doptionalidentifier();if(i){adjacent(token,nexttoken);}else{nonadjacen=
t(token,nexttoken);}=0A=
doFunction(i);if(funct['(loopage)']&&nexttoken.id!=3D=3D'('){warning("Be =
careful when making functions within a loop. Consider putting the =
function in a closure.");}=0A=
return this;});blockstmt('if',function(){var =
t=3Dnexttoken;advance('(');nonadjacent(this,t);nospace();parse(20);if(nex=
ttoken.id=3D=3D=3D'=3D'){warning("Expected a conditional expression and =
instead saw an assignment.");advance('=3D');parse(20);}=0A=
advance(')',t);nospace(prevtoken,token);block(true);if(nexttoken.id=3D=3D=
=3D'else'){nonadjacent(token,nexttoken);advance('else');if(nexttoken.id=3D=
=3D=3D'if'||nexttoken.id=3D=3D=3D'switch'){statement(true);}else{block(tr=
ue);}}=0A=
return this;});blockstmt('try',function(){var =
b,e,s;if(option.adsafe){warning("ADsafe try violation.",this);}=0A=
block(false);if(nexttoken.id=3D=3D=3D'catch'){advance('catch');nonadjacen=
t(token,nexttoken);advance('(');s=3Dscope;scope=3DObject.create(s);e=3Dne=
xttoken.value;if(nexttoken.type!=3D=3D'(identifier)'){warning("Expected =
an identifier and instead saw =
'{a}'.",nexttoken,e);}else{addlabel(e,'exception');}=0A=
advance();advance(')');block(false);b=3Dtrue;scope=3Ds;}=0A=
if(nexttoken.id=3D=3D=3D'finally'){advance('finally');block(false);return=
;}else if(!b){error("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'catch',nexttoken.value);}=0A=
return this;});blockstmt('while',function(){var =
t=3Dnexttoken;funct['(breakage)']+=3D1;funct['(loopage)']+=3D1;advance('(=
');nonadjacent(this,t);nospace();parse(20);if(nexttoken.id=3D=3D=3D'=3D')=
{warning("Expected a conditional expression and instead saw an =
assignment.");advance('=3D');parse(20);}=0A=
advance(')',t);nospace(prevtoken,token);block(true);funct['(breakage)']-=3D=
1;funct['(loopage)']-=3D1;return =
this;}).labelled=3Dtrue;reserve('with');blockstmt('switch',function(){var=
 =
t=3Dnexttoken,g=3Dfalse;funct['(breakage)']+=3D1;advance('(');nonadjacent=
(this,t);nospace();this.condition=3Dparse(20);advance(')',t);nospace(prev=
token,token);nonadjacent(token,nexttoken);t=3Dnexttoken;advance('{');nona=
djacent(token,nexttoken);indent+=3Doption.indent;this.cases=3D[];for(;;){=
switch(nexttoken.id){case'case':switch(funct['(verb)']){case'break':case'=
case':case'continue':case'return':case'switch':case'throw':break;default:=
warning("Expected a 'break' statement before 'case'.",token);}=0A=
indentation(-option.indent);advance('case');this.cases.push(parse(20));g=3D=
true;advance(':');funct['(verb)']=3D'case';break;case'default':switch(fun=
ct['(verb)']){case'break':case'continue':case'return':case'throw':break;d=
efault:warning("Expected a 'break' statement before 'default'.",token);}=0A=
indentation(-option.indent);advance('default');g=3Dtrue;advance(':');brea=
k;case'}':indent-=3Doption.indent;indentation();advance('}',t);if(this.ca=
ses.length=3D=3D=3D1||this.condition.id=3D=3D=3D'true'||this.condition.id=
=3D=3D=3D'false'){warning("This 'switch' should be an 'if'.",this);}=0A=
funct['(breakage)']-=3D1;funct['(verb)']=3Dundefined;return;case'(end)':e=
rror("Missing =
'{a}'.",nexttoken,'}');return;default:if(g){switch(token.id){case',':erro=
r("Each value should have its own case =
label.");return;case':':statements();break;default:error("Missing ':' on =
a case clause.",token);}}else{error("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'case',nexttoken.value);}}}}).labelled=3Dtrue;stmt('deb=
ugger',function(){if(!option.debug){warning("All 'debugger' statements =
should be removed.");}=0A=
return this;}).exps=3Dtrue;(function(){var =
x=3Dstmt('do',function(){funct['(breakage)']+=3D1;funct['(loopage)']+=3D1=
;this.first=3Dblock(true);advance('while');var =
t=3Dnexttoken;nonadjacent(token,t);advance('(');nospace();parse(20);if(ne=
xttoken.id=3D=3D=3D'=3D'){warning("Expected a conditional expression and =
instead saw an assignment.");advance('=3D');parse(20);}=0A=
advance(')',t);nospace(prevtoken,token);funct['(breakage)']-=3D1;funct['(=
loopage)']-=3D1;return =
this;});x.labelled=3Dtrue;x.exps=3Dtrue;}());blockstmt('for',function(){v=
ar =
f=3Doption.forin,s,t=3Dnexttoken;funct['(breakage)']+=3D1;funct['(loopage=
)']+=3D1;advance('(');nonadjacent(this,t);nospace();if(peek(nexttoken.id=3D=
=3D=3D'var'?1:0).id=3D=3D=3D'in'){if(nexttoken.id=3D=3D=3D'var'){advance(=
'var');varstatement(true);}else{switch(funct[nexttoken.value]){case'unuse=
d':funct[nexttoken.value]=3D'var';break;case'var':break;default:warning("=
Bad for in variable '{a}'.",nexttoken,nexttoken.value);}=0A=
advance();}=0A=
advance('in');parse(20);advance(')',t);s=3Dblock(true);if(!f&&(s.length>1=
||typeof s[0]!=3D=3D'object'||s[0].value!=3D=3D'if')){warning("The body =
of a for in should be wrapped in an if statement to filter unwanted =
properties from the prototype.",this);}=0A=
funct['(breakage)']-=3D1;funct['(loopage)']-=3D1;return =
this;}else{if(nexttoken.id!=3D=3D';'){if(nexttoken.id=3D=3D=3D'var'){adva=
nce('var');varstatement();}else{for(;;){parse(0,'for');if(nexttoken.id!=3D=
=3D','){break;}=0A=
comma();}}}=0A=
nolinebreak(token);advance(';');if(nexttoken.id!=3D=3D';'){parse(20);if(n=
exttoken.id=3D=3D=3D'=3D'){warning("Expected a conditional expression =
and instead saw an assignment.");advance('=3D');parse(20);}}=0A=
nolinebreak(token);advance(';');if(nexttoken.id=3D=3D=3D';'){error("Expec=
ted '{a}' and instead saw '{b}'.",nexttoken,')',';');}=0A=
if(nexttoken.id!=3D=3D')'){for(;;){parse(0,'for');if(nexttoken.id!=3D=3D'=
,'){break;}=0A=
comma();}}=0A=
advance(')',t);nospace(prevtoken,token);block(true);funct['(breakage)']-=3D=
1;funct['(loopage)']-=3D1;return =
this;}}).labelled=3Dtrue;stmt('break',function(){var =
v=3Dnexttoken.value;if(funct['(breakage)']=3D=3D=3D0){warning("Unexpected=
 '{a}'.",nexttoken,this.value);}=0A=
nolinebreak(this);if(nexttoken.id!=3D=3D';'){if(token.line=3D=3D=3Dnextto=
ken.line){if(funct[v]!=3D=3D'label'){warning("'{a}' is not a statement =
label.",nexttoken,v);}else if(scope[v]!=3D=3Dfunct){warning("'{a}' is =
out of scope.",nexttoken,v);}=0A=
this.first=3Dnexttoken;advance();}}=0A=
reachable('break');return =
this;}).exps=3Dtrue;stmt('continue',function(){var =
v=3Dnexttoken.value;if(funct['(breakage)']=3D=3D=3D0){warning("Unexpected=
 '{a}'.",nexttoken,this.value);}=0A=
nolinebreak(this);if(nexttoken.id!=3D=3D';'){if(token.line=3D=3D=3Dnextto=
ken.line){if(funct[v]!=3D=3D'label'){warning("'{a}' is not a statement =
label.",nexttoken,v);}else if(scope[v]!=3D=3Dfunct){warning("'{a}' is =
out of scope.",nexttoken,v);}=0A=
this.first=3Dnexttoken;advance();}}=0A=
reachable('continue');return =
this;}).exps=3Dtrue;stmt('return',function(){nolinebreak(this);if(nexttok=
en.id=3D=3D=3D'(regexp)'){warning("Wrap the /regexp/ literal in parens =
to disambiguate the slash operator.");}=0A=
if(nexttoken.id!=3D=3D';'&&!nexttoken.reach){nonadjacent(token,nexttoken)=
;this.first=3Dparse(20);}=0A=
reachable('return');return =
this;}).exps=3Dtrue;stmt('throw',function(){nolinebreak(this);nonadjacent=
(token,nexttoken);this.first=3Dparse(20);reachable('throw');return =
this;}).exps=3Dtrue;reserve('void');reserve('class');reserve('const');res=
erve('enum');reserve('export');reserve('extends');reserve('import');reser=
ve('super');reserve('let');reserve('yield');reserve('implements');reserve=
('interface');reserve('package');reserve('private');reserve('protected');=
reserve('public');reserve('static');function jsonValue(){function =
jsonObject(){var =
o=3D{},t=3Dnexttoken;advance('{');if(nexttoken.id!=3D=3D'}'){for(;;){if(n=
exttoken.id=3D=3D=3D'(end)'){error("Missing '}' to match '{' from line =
{a}.",nexttoken,t.line);}else =
if(nexttoken.id=3D=3D=3D'}'){warning("Unexpected =
comma.",token);break;}else =
if(nexttoken.id=3D=3D=3D','){error("Unexpected comma.",nexttoken);}else =
if(nexttoken.id!=3D=3D'(string)'){warning("Expected a string and instead =
saw {a}.",nexttoken,nexttoken.value);}=0A=
if(o[nexttoken.value]=3D=3D=3Dtrue){warning("Duplicate key =
'{a}'.",nexttoken,nexttoken.value);}else =
if(nexttoken.value=3D=3D=3D'__proto__'){warning("Stupid key =
'{a}'.",nexttoken,nexttoken.value);}else{o[nexttoken.value]=3Dtrue;}=0A=
advance();advance(':');jsonValue();if(nexttoken.id!=3D=3D','){break;}=0A=
advance(',');}}=0A=
advance('}');}=0A=
function jsonArray(){var =
t=3Dnexttoken;advance('[');if(nexttoken.id!=3D=3D']'){for(;;){if(nexttoke=
n.id=3D=3D=3D'(end)'){error("Missing ']' to match '[' from line =
{a}.",nexttoken,t.line);}else =
if(nexttoken.id=3D=3D=3D']'){warning("Unexpected =
comma.",token);break;}else =
if(nexttoken.id=3D=3D=3D','){error("Unexpected comma.",nexttoken);}=0A=
jsonValue();if(nexttoken.id!=3D=3D','){break;}=0A=
advance(',');}}=0A=
advance(']');}=0A=
switch(nexttoken.id){case'{':jsonObject();break;case'[':jsonArray();break=
;case'true':case'false':case'null':case'(number)':case'(string)':advance(=
);break;case'-':advance('-');if(token.character!=3D=3Dnexttoken.from){war=
ning("Unexpected space after '-'.",token);}=0A=
adjacent(token,nexttoken);advance('(number)');break;default:error("Expect=
ed a JSON value.",nexttoken);}}=0A=
var itself=3Dfunction(s,o){var =
a,i;JSLINT.errors=3D[];predefined=3DObject.create(standard);if(o){a=3Do.p=
redef;if(a instanceof =
Array){for(i=3D0;i<a.length;i+=3D1){predefined[a[i]]=3Dtrue;}}=0A=
if(o.adsafe){o.safe=3Dtrue;}=0A=
if(o.safe){o.browser=3Dfalse;o.css=3Dfalse;o.debug=3Dfalse;o.devel=3Dfals=
e;o.eqeqeq=3Dtrue;o.evil=3Dfalse;o.forin=3Dfalse;o.nomen=3Dtrue;o.on=3Dfa=
lse;o.rhino=3Dfalse;o.safe=3Dtrue;o.sidebar=3Dfalse;o.strict=3Dtrue;o.sub=
=3Dfalse;o.undef=3Dtrue;o.widget=3Dfalse;predefined.Date=3Dnull;predefine=
d['eval']=3Dnull;predefined.Function=3Dnull;predefined.Object=3Dnull;pred=
efined.ADSAFE=3Dfalse;predefined.lib=3Dfalse;}=0A=
option=3Do;}else{option=3D{};}=0A=
option.indent=3Doption.indent||4;option.maxerr=3Doption.maxerr||50;adsafe=
_id=3D'';adsafe_may=3Dfalse;adsafe_went=3Dfalse;approved=3D{};if(option.a=
pproved){for(i=3D0;i<option.approved.length;i+=3D1){approved[option.appro=
ved[i]]=3Doption.approved[i];}}else{approved.test=3D'test';}=0A=
tab=3D'';for(i=3D0;i<option.indent;i+=3D1){tab+=3D' ';}=0A=
indent=3D1;global=3DObject.create(predefined);scope=3Dglobal;funct=3D{'(g=
lobal)':true,'(name)':'(global)','(scope)':scope,'(breakage)':0,'(loopage=
)':0};functions=3D[funct];ids=3D{};urls=3D[];src=3Dfalse;xmode=3Dfalse;st=
ack=3Dnull;member=3D{};membersOnly=3Dnull;implied=3D{};inblock=3Dfalse;lo=
okahead=3D[];jsonmode=3Dfalse;warnings=3D0;lex.init(s);prereg=3Dtrue;stri=
ct_mode=3Dfalse;prevtoken=3Dtoken=3Dnexttoken=3Dsyntax['(begin)'];assume(=
);try{advance();if(nexttoken.value.charAt(0)=3D=3D=3D'<'){html();if(optio=
n.adsafe&&!adsafe_went){warning("ADsafe violation: Missing =
ADSAFE.go.",this);}}else{switch(nexttoken.id){case'{':case'[':option.laxb=
reak=3Dtrue;jsonmode=3Dtrue;jsonValue();break;case'@':case'*':case'#':cas=
e'.':case':':xmode=3D'style';advance();if(token.id!=3D=3D'@'||!nexttoken.=
identifier||nexttoken.value!=3D=3D'charset'||token.line!=3D=3D1||token.fr=
om!=3D=3D1){error('A css file should begin with @charset "UTF-8";');}=0A=
advance();if(nexttoken.type!=3D=3D'(string)'&&nexttoken.value!=3D=3D'UTF-=
8'){error('A css file should begin with @charset "UTF-8";');}=0A=
advance();advance(';');styles();break;default:if(option.adsafe&&option.fr=
agment){error("Expected '{a}' and instead saw =
'{b}'.",nexttoken,'<div>',nexttoken.value);}=0A=
statements('lib');}}=0A=
advance('(end)');}catch(e){if(e){JSLINT.errors.push({reason:e.message,lin=
e:e.line||nexttoken.line,character:e.character||nexttoken.from},null);}}=0A=
return JSLINT.errors.length=3D=3D=3D0;};function is_array(o){return =
Object.prototype.toString.apply(o)=3D=3D=3D'[object Array]';}=0A=
function to_array(o){var a=3D[],k;for(k in =
o){if(is_own(o,k)){a.push(k);}}=0A=
return a;}=0A=
itself.data=3Dfunction(){var =
data=3D{functions:[]},fu,globals,implieds=3D[],f,i,j,members=3D[],n,unuse=
d=3D[],v;if(itself.errors.length){data.errors=3Ditself.errors;}=0A=
if(jsonmode){data.json=3Dtrue;}=0A=
for(n in =
implied){if(is_own(implied,n)){implieds.push({name:n,line:implied[n]});}}=0A=
if(implieds.length>0){data.implieds=3Dimplieds;}=0A=
if(urls.length>0){data.urls=3Durls;}=0A=
globals=3Dto_array(scope);if(globals.length>0){data.globals=3Dglobals;}=0A=
for(i=3D1;i<functions.length;i+=3D1){f=3Dfunctions[i];fu=3D{};for(j=3D0;j=
<functionicity.length;j+=3D1){fu[functionicity[j]]=3D[];}=0A=
for(n in =
f){if(is_own(f,n)&&n.charAt(0)!=3D=3D'('){v=3Df[n];if(is_array(fu[v])){fu=
[v].push(n);if(v=3D=3D=3D'unused'){unused.push({name:n,line:f['(line)'],'=
function':f['(name)']});}}}}=0A=
for(j=3D0;j<functionicity.length;j+=3D1){if(fu[functionicity[j]].length=3D=
=3D=3D0){delete fu[functionicity[j]];}}=0A=
fu.name=3Df['(name)'];fu.param=3Df['(params)'];fu.line=3Df['(line)'];fu.l=
ast=3Df['(last)'];data.functions.push(fu);}=0A=
if(unused.length>0){data.unused=3Dunused;}=0A=
members=3D[];for(n in member){if(typeof =
member[n]=3D=3D=3D'number'){data.member=3Dmember;break;}}=0A=
return data;};itself.report=3Dfunction(option){var =
data=3Ditself.data();var =
a=3D[],c,e,err,f,i,k,l,m=3D'',n,o=3D[],s;function =
detail(h,s){if(s){o.push('<div><i>'+h+'</i> '+=0A=
s.sort().join(', ')+'</div>');}}=0A=
if(data.errors||data.implieds||data.unused){err=3Dtrue;o.push('<div =
id=3Derrors><i>Error:</i>');if(data.errors){for(i=3D0;i<data.errors.lengt=
h;i+=3D1){c=3Ddata.errors[i];if(c){e=3Dc.evidence||'';o.push('<p>Problem'=
+(isFinite(c.line)?' at line '+=0A=
c.line+' character '+c.character:'')+': '+c.reason.entityify()+'</p><p =
class=3Devidence>'+=0A=
(e&&(e.length>80?e.slice(0,77)+'...':e).entityify())+'</p>');}}}=0A=
if(data.implieds){s=3D[];for(i=3D0;i<data.implieds.length;i+=3D1){s[i]=3D=
'<code>'+data.implieds[i].name+'</code>&nbsp;<i>'+=0A=
data.implieds[i].line+'</i>';}=0A=
o.push('<p><i>Implied global:</i> '+s.join(', ')+'</p>');}=0A=
if(data.unused){s=3D[];for(i=3D0;i<data.unused.length;i+=3D1){s[i]=3D'<co=
de><u>'+data.unused[i].name+'</u></code>&nbsp;<i>'+=0A=
data.unused[i].line+'</i> <code>'+=0A=
data.unused[i]['function']+'</code>';}=0A=
o.push('<p><i>Unused variable:</i> '+s.join(', ')+'</p>');}=0A=
if(data.json){o.push('<p>JSON: bad.</p>');}=0A=
o.push('</div>');}=0A=
if(!option){o.push('<br><div =
id=3Dfunctions>');if(data.urls){detail("URLs<br>",data.urls,'<br>');}=0A=
if(data.json&&!err){o.push('<p>JSON: good.</p>');}else =
if(data.globals){o.push('<div><i>Global</i> '+=0A=
data.globals.sort().join(', ')+'</div>');}else{o.push('<div><i>No new =
global variables introduced.</i></div>');}=0A=
for(i=3D0;i<data.functions.length;i+=3D1){f=3Ddata.functions[i];o.push('<=
br><div class=3Dfunction><i>'+f.line+'-'+=0A=
f.last+'</i> '+(f.name||'')+'('+=0A=
(f.param?f.param.join(', =
'):'')+')</div>');detail('<big><b>Unused</b></big>',f.unused);detail('Clo=
sure',f.closure);detail('Variable',f['var']);detail('Exception',f.excepti=
on);detail('Outer',f.outer);detail('Global',f.global);detail('Label',f.la=
bel);}=0A=
if(data.member){a=3Dto_array(data.member);if(a.length){a=3Da.sort();m=3D'=
<br><pre id=3Dmembers>/*members =
';l=3D10;for(i=3D0;i<a.length;i+=3D1){k=3Da[i];n=3Dk.name();if(l+n.length=
>72){o.push(m+'<br>');m=3D'    ';l=3D1;}=0A=
l+=3Dn.length+2;if(data.member[k]=3D=3D=3D1){n=3D'<i>'+n+'</i>';}=0A=
if(i<a.length-1){n+=3D', ';}=0A=
m+=3Dn;}=0A=
o.push(m+'<br>*/</pre>');}=0A=
o.push('</div>');}}=0A=
return =
o.join('');};itself.jslint=3Ditself;itself.edition=3D'2009-11-22';return =
itself;}());=0A=
=0A=
/* lint.js (54%) */=0A=
jQuery(document).ready(function(){jQuery('div.lint-output').each(function=
(){var funcname=3DjQuery(this).attr('function');var =
target=3DjQuery(this);var source=3DfuncSourceCode[funcname];var =
lintOptions=3D{adsafe:false,bitwise:false,browser:false,cap:false,css:fal=
se,debug:false,devel:false,eqeqeq:true,evil:false,forin:false,fragment:fa=
lse,immed:true,indent:4,laxbreak:false,maxerr:100,maxlen:80,newcap:true,n=
omen:false,on:true,onevar:false,passfail:false,plusplus:false,predef:['wi=
ndow'],regexp:false,rhino:false,safe:false,sidebar:false,strict:false,sub=
:false,undef:true,white:false,widget:false}=0A=
target.html('Scanning for problems...');var i=3D0,s=3D'';var =
myResult=3DJSLINT(source,lintOptions);target.html('');target.append('<ul>=
');if(myResult=3D=3D=3Dtrue){s=3D'None. All good =
:)';target.append('<li>'+s+'</li>');}else{for(i in =
JSLINT.errors){if(JSLINT.errors[i]['line']){s=3D'';s+=3D'On line: '+' =
';s+=3D'#'+JSLINT.errors[i]['line']+': =
';s+=3DJSLINT.errors[i]['reason']+' ';target.append('<li>'+s+'</li>');}}}=0A=
target.append('</ul>');});});=0A=
=0A=
/* sh_main.js (54%) */=0A=
if(!this.sh_languages){this.sh_languages=3D{};}=0A=
var sh_requests=3D{};function =
sh_isEmailAddress(url){if(/^mailto:/.test(url)){return false;}=0A=
return url.indexOf('@')!=3D=3D-1;}=0A=
function sh_setHref(tags,numTags,inputString){var =
url=3DinputString.substring(tags[numTags-2].pos,tags[numTags-1].pos);if(u=
rl.length>=3D2&&url.charAt(0)=3D=3D=3D'<'&&url.charAt(url.length-1)=3D=3D=
=3D'>'){url=3Durl.substr(1,url.length-2);}=0A=
if(sh_isEmailAddress(url)){url=3D'mailto:'+url;}=0A=
tags[numTags-2].node.href=3Durl;}=0A=
function sh_konquerorExec(s){var =
result=3D[''];result.index=3Ds.length;result.input=3Ds;return result;}=0A=
function =
sh_highlightString(inputString,language){if(/Konqueror/.test(navigator.us=
erAgent)){if(!language.konquered){for(var =
s=3D0;s<language.length;s++){for(var p=3D0;p<language[s].length;p++){var =
r=3Dlanguage[s][p][0];if(r.source=3D=3D=3D'$'){r.exec=3Dsh_konquerorExec;=
}}}=0A=
language.konquered=3Dtrue;}}=0A=
var a=3Ddocument.createElement('a');var =
span=3Ddocument.createElement('span');var tags=3D[];var numTags=3D0;var =
patternStack=3D[];var pos=3D0;var currentStyle=3Dnull;var =
output=3Dfunction(s,style){var =
length=3Ds.length;if(length=3D=3D=3D0){return;}=0A=
if(!style){var =
stackLength=3DpatternStack.length;if(stackLength!=3D=3D0){var =
pattern=3DpatternStack[stackLength-1];if(!pattern[3]){style=3Dpattern[1];=
}}}=0A=
if(currentStyle!=3D=3Dstyle){if(currentStyle){tags[numTags++]=3D{pos:pos}=
;if(currentStyle=3D=3D=3D'sh_url'){sh_setHref(tags,numTags,inputString);}=
}=0A=
if(style){var =
clone;if(style=3D=3D=3D'sh_url'){clone=3Da.cloneNode(false);}=0A=
else{clone=3Dspan.cloneNode(false);}=0A=
clone.className=3Dstyle;tags[numTags++]=3D{node:clone,pos:pos};}}=0A=
pos+=3Dlength;currentStyle=3Dstyle;};var =
endOfLinePattern=3D/\r\n|\r|\n/g;endOfLinePattern.lastIndex=3D0;var =
inputStringLength=3DinputString.length;while(pos<inputStringLength){var =
start=3Dpos;var end;var startOfNextLine;var =
endOfLineMatch=3DendOfLinePattern.exec(inputString);if(endOfLineMatch=3D=3D=
=3Dnull){end=3DinputStringLength;startOfNextLine=3DinputStringLength;}=0A=
else{end=3DendOfLineMatch.index;startOfNextLine=3DendOfLinePattern.lastIn=
dex;}=0A=
var line=3DinputString.substring(start,end);var =
matchCache=3D[];for(;;){var posWithinLine=3Dpos-start;var stateIndex;var =
stackLength=3DpatternStack.length;if(stackLength=3D=3D=3D0){stateIndex=3D=
0;}=0A=
else{stateIndex=3DpatternStack[stackLength-1][2];}=0A=
var state=3Dlanguage[stateIndex];var numPatterns=3Dstate.length;var =
mc=3DmatchCache[stateIndex];if(!mc){mc=3DmatchCache[stateIndex]=3D[];}=0A=
var bestMatch=3Dnull;var bestPatternIndex=3D-1;for(var =
i=3D0;i<numPatterns;i++){var =
match;if(i<mc.length&&(mc[i]=3D=3D=3Dnull||posWithinLine<=3Dmc[i].index))=
{match=3Dmc[i];}=0A=
else{var =
regex=3Dstate[i][0];regex.lastIndex=3DposWithinLine;match=3Dregex.exec(li=
ne);mc[i]=3Dmatch;}=0A=
if(match!=3D=3Dnull&&(bestMatch=3D=3D=3Dnull||match.index<bestMatch.index=
)){bestMatch=3Dmatch;bestPatternIndex=3Di;if(match.index=3D=3D=3DposWithi=
nLine){break;}}}=0A=
if(bestMatch=3D=3D=3Dnull){output(line.substring(posWithinLine),null);bre=
ak;}=0A=
else{if(bestMatch.index>posWithinLine){output(line.substring(posWithinLin=
e,bestMatch.index),null);}=0A=
var pattern=3Dstate[bestPatternIndex];var newStyle=3Dpattern[1];var =
matchedString;if(newStyle instanceof Array){for(var =
subexpression=3D0;subexpression<newStyle.length;subexpression++){matchedS=
tring=3DbestMatch[subexpression+1];output(matchedString,newStyle[subexpre=
ssion]);}}=0A=
else{matchedString=3DbestMatch[0];output(matchedString,newStyle);}=0A=
switch(pattern[2]){case-1:break;case-2:patternStack.pop();break;case-3:pa=
tternStack.length=3D0;break;default:patternStack.push(pattern);break;}}}=0A=
if(currentStyle){tags[numTags++]=3D{pos:pos};if(currentStyle=3D=3D=3D'sh_=
url'){sh_setHref(tags,numTags,inputString);}=0A=
currentStyle=3Dnull;}=0A=
pos=3DstartOfNextLine;}=0A=
return tags;}=0A=
function sh_getClasses(element){var result=3D[];var =
htmlClass=3Delement.className;if(htmlClass&&htmlClass.length>0){var =
htmlClasses=3DhtmlClass.split(' ');for(var =
i=3D0;i<htmlClasses.length;i++){if(htmlClasses[i].length>0){result.push(h=
tmlClasses[i]);}}}=0A=
return result;}=0A=
function sh_addClass(element,name){var =
htmlClasses=3Dsh_getClasses(element);for(var =
i=3D0;i<htmlClasses.length;i++){if(name.toLowerCase()=3D=3D=3DhtmlClasses=
[i].toLowerCase()){return;}}=0A=
htmlClasses.push(name);element.className=3DhtmlClasses.join(' ');}=0A=
function sh_extractTagsFromNodeList(nodeList,result){var =
length=3DnodeList.length;for(var i=3D0;i<length;i++){var =
node=3DnodeList.item(i);switch(node.nodeType){case =
1:if(node.nodeName.toLowerCase()=3D=3D=3D'br'){var =
terminator;if(/MSIE/.test(navigator.userAgent)){terminator=3D'\r';}=0A=
else{terminator=3D'\n';}=0A=
result.text.push(terminator);result.pos++;}=0A=
else{result.tags.push({node:node.cloneNode(false),pos:result.pos});sh_ext=
ractTagsFromNodeList(node.childNodes,result);result.tags.push({pos:result=
.pos});}=0A=
break;case 3:case =
4:result.text.push(node.data);result.pos+=3Dnode.length;break;}}}=0A=
function sh_extractTags(element,tags){var =
result=3D{};result.text=3D[];result.tags=3Dtags;result.pos=3D0;sh_extract=
TagsFromNodeList(element.childNodes,result);return result.text.join('');}=0A=
function sh_mergeTags(originalTags,highlightTags){var =
numOriginalTags=3DoriginalTags.length;if(numOriginalTags=3D=3D=3D0){retur=
n highlightTags;}=0A=
var =
numHighlightTags=3DhighlightTags.length;if(numHighlightTags=3D=3D=3D0){re=
turn originalTags;}=0A=
var result=3D[];var originalIndex=3D0;var =
highlightIndex=3D0;while(originalIndex<numOriginalTags&&highlightIndex<nu=
mHighlightTags){var originalTag=3DoriginalTags[originalIndex];var =
highlightTag=3DhighlightTags[highlightIndex];if(originalTag.pos<=3Dhighli=
ghtTag.pos){result.push(originalTag);originalIndex++;}=0A=
else{result.push(highlightTag);if(highlightTags[highlightIndex+1].pos<=3D=
originalTag.pos){highlightIndex++;result.push(highlightTags[highlightInde=
x]);highlightIndex++;}=0A=
else{result.push({pos:originalTag.pos});highlightTags[highlightIndex]=3D{=
node:highlightTag.node.cloneNode(false),pos:originalTag.pos};}}}=0A=
while(originalIndex<numOriginalTags){result.push(originalTags[originalInd=
ex]);originalIndex++;}=0A=
while(highlightIndex<numHighlightTags){result.push(highlightTags[highligh=
tIndex]);highlightIndex++;}=0A=
return result;}=0A=
function sh_insertTags(tags,text){var doc=3Ddocument;var =
result=3Ddocument.createDocumentFragment();var tagIndex=3D0;var =
numTags=3Dtags.length;var textPos=3D0;var textLength=3Dtext.length;var =
currentNode=3Dresult;while(textPos<textLength||tagIndex<numTags){var =
tag;var =
tagPos;if(tagIndex<numTags){tag=3Dtags[tagIndex];tagPos=3Dtag.pos;}=0A=
else{tagPos=3DtextLength;}=0A=
if(tagPos<=3DtextPos){if(tag.node){var =
newNode=3Dtag.node;currentNode.appendChild(newNode);currentNode=3DnewNode=
;}=0A=
else{currentNode=3DcurrentNode.parentNode;}=0A=
tagIndex++;}=0A=
else{currentNode.appendChild(doc.createTextNode(text.substring(textPos,ta=
gPos)));textPos=3DtagPos;}}=0A=
return result;}=0A=
function =
sh_highlightElement(element,language){sh_addClass(element,'sh_sourceCode'=
);var originalTags=3D[];var =
inputString=3Dsh_extractTags(element,originalTags);var =
highlightTags=3Dsh_highlightString(inputString,language);var =
tags=3Dsh_mergeTags(originalTags,highlightTags);var =
documentFragment=3Dsh_insertTags(tags,inputString);while(element.hasChild=
Nodes()){element.removeChild(element.firstChild);}=0A=
element.appendChild(documentFragment);}=0A=
function sh_getXMLHttpRequest(){if(window.ActiveXObject){return new =
ActiveXObject('Msxml2.XMLHTTP');}=0A=
else if(window.XMLHttpRequest){return new XMLHttpRequest();}=0A=
throw'No XMLHttpRequest implementation available';}=0A=
function sh_load(language,element,prefix,suffix){if(language in =
sh_requests){sh_requests[language].push(element);return;}=0A=
sh_requests[language]=3D[element];var =
request=3Dsh_getXMLHttpRequest();var =
url=3Dprefix+'sh_'+language+suffix;request.open('GET',url,true);request.o=
nreadystatechange=3Dfunction(){if(request.readyState=3D=3D=3D4){try{if(!r=
equest.status||request.status=3D=3D=3D200){eval(request.responseText);var=
 elements=3Dsh_requests[language];for(var =
i=3D0;i<elements.length;i++){sh_highlightElement(elements[i],sh_languages=
[language]);}}=0A=
else{throw'HTTP error: status '+request.status;}}=0A=
finally{request=3Dnull;}}};request.send(null);}=0A=
function sh_highlightDocument(prefix,suffix){var =
nodeList=3Ddocument.getElementsByTagName('pre');for(var =
i=3D0;i<nodeList.length;i++){var element=3DnodeList.item(i);var =
htmlClasses=3Dsh_getClasses(element);for(var =
j=3D0;j<htmlClasses.length;j++){var =
htmlClass=3DhtmlClasses[j].toLowerCase();if(htmlClass=3D=3D=3D'sh_sourcec=
ode'){continue;}=0A=
if(htmlClass.substr(0,3)=3D=3D=3D'sh_'){var =
language=3DhtmlClass.substring(3);if(language in =
sh_languages){sh_highlightElement(element,sh_languages[language]);}=0A=
else =
if(typeof(prefix)=3D=3D=3D'string'&&typeof(suffix)=3D=3D=3D'string'){sh_l=
oad(language,element,prefix,suffix);}=0A=
else{throw'Found <pre> element with class=3D"'+htmlClass+'", but no such =
language exists';}=0A=
break;}}}}=0A=
=0A=
/* sh_javascript.js (62%) */=0A=
if(!this.sh_languages){this.sh_languages=3D{};}=0A=
sh_languages['javascript']=3D[[[/\/\/\//g,'sh_comment',1],[/\/\//g,'sh_co=
mment',7],[/\/\*\*/g,'sh_comment',8],[/\/\*/g,'sh_comment',9],[/\b(?:abst=
ract|break|case|catch|class|const|continue|debugger|default|delete|do|els=
e|enum|export|extends|false|final|finally|for|function|goto|if|implements=
|in|instanceof|interface|native|new|null|private|protected|prototype|publ=
ic|return|static|super|switch|synchronized|throw|throws|this|transient|tr=
ue|try|typeof|var|volatile|while|with)\b/g,'sh_keyword',-1],[/(\+\+|--|\)=
|\])(\s*)(\/=3D?(?![*\/]))/g,['sh_symbol','sh_normal','sh_symbol'],-1],[/=
(0x[A-Fa-f0-9]+|(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?)(\s*)(\/(?![*\/]))/g=
,['sh_number','sh_normal','sh_symbol'],-1],[/([A-Za-z$_][A-Za-z0-9$_]*\s*=
)(\/=3D?(?![*\/]))/g,['sh_normal','sh_symbol'],-1],[/\/(?:\\.|[^*\\\/])(?=
:\\.|[^\\\/])*\/[gim]*/g,'sh_regexp',-1],[/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(=
?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/=
g,'sh_number',-1],[/"/g,'sh_string',10],[/'/g,'sh_string',11],[/~|!|%|\^|=
\*|\(|\)|-|\+|=3D|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,'sh_symbol',-1],[/\{=
|\}/g,'sh_cbracket',-1],[/\b(?:Math|Infinity|NaN|undefined|arguments)\b/g=
,'sh_predef_var',-1],[/\b(?:Array|Boolean|Date|Error|EvalError|Function|N=
umber|Object|RangeError|ReferenceError|RegExp|String|SyntaxError|TypeErro=
r|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval=
|isFinite|isNaN|parseFloat|parseInt)\b/g,'sh_predef_func',-1],[/(?:[A-Za-=
z]|_)[A-Za-z0-9_]*(?=3D[ =
\t]*\()/g,'sh_function',-1]],[[/$/g,null,-2],[/(?:<?)[A-Za-z0-9_\.\/\-_~]=
+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~=
]+(?:>?)/g,'sh_url',-1],[/<\?xml/g,'sh_preproc',2,1],[/<!DOCTYPE/g,'sh_pr=
eproc',4,1],[/<!--/g,'sh_comment',5],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]=
*)(?:\/)?>/g,'sh_keyword',-1],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,'s=
h_keyword',6,1],[/&(?:[A-Za-z0-9]+);/g,'sh_preproc',-1],[/<(?:\/)?[A-Za-z=
][A-Za-z0-9]*(?:\/)?>/g,'sh_keyword',-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g=
,'sh_keyword',6,1],[/@[A-Za-z]+/g,'sh_type',-1],[/(?:TODO|FIXME|BUG)(?:[:=
]?)/g,'sh_todo',-1]],[[/\?>/g,'sh_preproc',-2],[/([^=3D" \t>]+)([ =
\t]*)(=3D?)/g,['sh_type','sh_normal','sh_symbol'],-1],[/"/g,'sh_string',3=
]],[[/\\(?:\\|")/g,null,-1],[/"/g,'sh_string',-2]],[[/>/g,'sh_preproc',-2=
],[/([^=3D" \t>]+)([ =
\t]*)(=3D?)/g,['sh_type','sh_normal','sh_symbol'],-1],[/"/g,'sh_string',3=
]],[[/-->/g,'sh_comment',-2],[/<!--/g,'sh_comment',5]],[[/(?:\/)?>/g,'sh_=
keyword',-2],[/([^=3D" \t>]+)([ =
\t]*)(=3D?)/g,['sh_type','sh_normal','sh_symbol'],-1],[/"/g,'sh_string',3=
]],[[/$/g,null,-2]],[[/\*\//g,'sh_comment',-2],[/(?:<?)[A-Za-z0-9_\.\/\-_=
~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-=
_~]+(?:>?)/g,'sh_url',-1],[/<\?xml/g,'sh_preproc',2,1],[/<!DOCTYPE/g,'sh_=
preproc',4,1],[/<!--/g,'sh_comment',5],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.=
-]*)(?:\/)?>/g,'sh_keyword',-1],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,=
'sh_keyword',6,1],[/&(?:[A-Za-z0-9]+);/g,'sh_preproc',-1],[/<(?:\/)?[A-Za=
-z][A-Za-z0-9]*(?:\/)?>/g,'sh_keyword',-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*=
/g,'sh_keyword',6,1],[/@[A-Za-z]+/g,'sh_type',-1],[/(?:TODO|FIXME|BUG)(?:=
[:]?)/g,'sh_todo',-1]],[[/\*\//g,'sh_comment',-2],[/(?:<?)[A-Za-z0-9_\.\/=
\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\=
/\-_~]+(?:>?)/g,'sh_url',-1],[/(?:TODO|FIXME|BUG)(?:[:]?)/g,'sh_todo',-1]=
],[[/"/g,'sh_string',-2],[/\\./g,'sh_specialchar',-1]],[[/'/g,'sh_string'=
,-2],[/\\./g,'sh_specialchar',-1]]];
------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://widgets.dzone.com/widgets/zoneit.js

(function() {
var write_string =3D '<iframe =
src=3D"http://widgets.dzone.com/links/widgets/zoneit.html?t=3D';
write_string +=3D window.dzone_style ? window.dzone_style : '1';
write_string +=3D '&url=3D';
if (window.dzone_url) write_string +=3D encodeURIComponent(dzone_url);
else  write_string +=3D encodeURIComponent(window.location);
if (window.dzone_title) write_string +=3D '&title=3D' + =
encodeURIComponent(dzone_title);
else  write_string +=3D '&title=3D' + =
encodeURIComponent(document.title);
if (window.dzone_blurb) write_string +=3D '&description=3D' + =
encodeURIComponent(dzone_blurb);
if (window.dzone_style =3D=3D '2') write_string +=3D '" height=3D"25" =
width=3D"155" scrolling=3D"no" frameborder=3D"0"></iframe>';
else write_string +=3D '" height=3D"70" width=3D"50" scrolling=3D"no" =
frameborder=3D"0"></iframe>';
document.write(write_string);
})()
------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.ohloh.net/p/13436/widgets/project_users.js?style=blue

document.write('<a =
href=3D\'http://www.ohloh.net/stack_entries/new?project_id=3Dphp-js&amp;r=
ef=3DWidgetProjectUsers\' onMouseOut=3D\"this.style.background =3D =
\'url(http://www.ohloh.net/images/stack/iusethis/blue.png) 0px 0px =
no-repeat\'\" onMouseOver=3D\"this.style.background =3D =
\'url(http://www.ohloh.net/images/stack/iusethis/blue.png) 0 -85px =
no-repeat\'\" style=3D\'border-bottom:none; display:block;background: =
url(http://www.ohloh.net/images/stack/iusethis/blue.png) 0px 0px =
no-repeat; text-decoration: none; width: 70px; height: 85px;\' =
target=3D\'_top\'>\n  <div style=3D\'width: 70px; line-height: 1.2em; =
height: 85px\'>\n    <p style=3D\'font-weight: bold; font-size:18pt; =
text-align:center; padding:23px 0px 0px 0px; color:#fff; =
font-family:helvetica; letter-spacing:-0.05em; line-height: 1.2em; =
margin:0px\'>77<\/p>\n  <\/div>\n<\/a>\n')
------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://digg.com/tools/diggthis.js

if(!window.__DBW){var __DBW=3D(function(){var =
M=3D{api:"http://widgets.digg.com/buttons/count?url=3D",analytics:"http:/=
/a.digg.com/",css:"http://widgets.digg.com/css/buttonb.css",popup:"http:/=
/digg.com/tools/diggthis/",submit:"http://digg.com/submit?"},W=3D{impress=
ion:5,click:100},O=3D{source:"source",submitted:"submitted",event:"event"=
,diggs:"diggs",storyId:"storyId",buttons:"buttons"},G=3Dtrue,d,f,b=3D{},c=
=3Dfunction(i,j){var =
k,h=3DparseInt(j.diggs),g=3Di.firstChild.firstChild.firstChild.firstChild=
;=0A=
if(h>9999){h=3DMath.floor(data.diggs/1000)+"K"}else{if(h>999){k=3D(h+=3D"=
").charAt(0);h=3Dh.replace(k,k+",")}}g.appendChild(document.createTextNod=
e(h));=0A=
g.nextSibling.appendChild(document.createTextNode(h=3D=3D1?"digg":"diggs"=
));if(j.id){i.firstChild.firstChild.className=3D"db-container"=0A=
}},F=3Dfunction(k){var =
g=3Dd.cloneNode(true),j=3DD(k),l=3D{},m,i;g.className+=3D" =
db-"+j;g.getElementsByTagName("SPAN")[2].className+=3D" db-"+j;=0A=
m=3DL(k);if(m.style=3D=3D=3Dfalse){g.className=3D"db-clean"}function =
h(){for(var n in l){return n}}g.firstChild.onclick=3Dfunction(){var =
o,n=3Dthis.firstChild;=0A=
n.className=3D"db-container =
db-dugg";if(!i){n=3Dn.firstChild.firstChild;if(f.ie){e(n)}else{Y(n,0,func=
tion(){e(n);=0A=
setTimeout(function(){Y(n,100)},175)})}i=3D1}if(h()){U(l,"click")}else{se=
tTimeout(function(){U(l,"click")=0A=
},1000)}Q(m,l)};k.parentNode.replaceChild(g,k);b[m.url]=3Db[m.url]||[];b[=
m.url].push(function(n){if(!h()){l=3Dn;=0A=
U(n,"impression");c(g,n)}});a(m.url)},H=3Dfunction(){var =
h=3Ddocument.createElement("link"),g=3Ddocument.getElementsByTagName("hea=
d")[0]||document.documentElement,i=3Dg.firstChild;=0A=
h.setAttribute("rel","stylesheet");h.setAttribute("type","text/css");h.se=
tAttribute("href",M.css);i?g.insertBefore(h,i):g.appendChild(h);=0A=
H=3D0},Y=3Dfunction(k,i,n){var =
j,l,n,m=3Dfunction(){j=3Di?5:-5;l=3Di?0:100;h(l);setTimeout(g,15)},h=3Dfu=
nction(o){l=3Do;=0A=
k.style.opacity=3D(o/100);k.style.filter=3D"alpha(opacity=3D"+o+")"},g=3D=
function(){if(l=3D=3Di){n&&n()}else{h(l+j);=0A=
setTimeout(g,15)}};m()},V=3Dfunction(j){var =
g=3Ddocument.createElement("script"),h=3Ddocument.getElementsByTagName("h=
ead")[0]||document.documentElement,i=3Dh.firstChild;=0A=
g.setAttribute("type","text/javascript");g.setAttribute("async","true");g=
.setAttribute("src",j);i?h.insertBefore(g,i):h.appendChild(g)=0A=
},a=3Dfunction(g){V(M.api+g)},D=3Dfunction(h){var g=3D"large",i=3D" =
"+h.className+" ",k,j=3D"";if(i.match(/( DiggThisButtonMedium | =
DiggMedium )/)){g=3D"medium"=0A=
}else{if(i.match(/ DiggLarge /)){g=3D"large"}else{if(i.match(/ =
DiggCompact /)){g=3D"compact"}else{if(i.match(/ DiggIcon /)){g=3D"digger"=0A=
}}}}k=3Dh.getElementsByTagName("IMG");if(k[0]){j=3Dk[0].src}else{return =
g}if(j.match(/diggThis\.(gif|png)/i)){return"large"=0A=
}else{if(j.match(/diggThisMedium\.(gif|png)/i)){return"medium"}else{if(j.=
match(/diggThisCompact\.(gif|png)/i)){return"compact"=0A=
}else{if(j.match(/digg-guy-icon.(gif|png)/i)){return"digger"}else{if(j.ma=
tch(/diggThisIcon.(gif|png)/i)){return"digger"=0A=
}}}}}return g},e=3Dfunction(i){var =
h=3Di.firstChild,g=3Dh.nodeValue;if(g.indexOf(",")>=3D0){h.nodeValue=3D+g=
.replace(",","","g")+1=0A=
}else{if(!g.match(/k/i)){g=3D+g+1;h.nodeValue=3Dg;if(g=3D=3D1){i.nextSibl=
ing.firstChild.nodeValue=3D"digg"}else{i.nextSibling.firstChild.nodeValue=
=3D"diggs"=0A=
}}}},B,Q=3Dfunction(j,h){var =
g=3D480,i;if(h.id){j.storyId=3Dh.id}if(j.related=3D=3D=3Dfalse){g=3D335}i=
=3DM.popup+"confirm"+I(j);=0A=
B=3Dwindow.open(i,"diggAction","status=3D0,toolbar=3D0,location=3D0,menub=
ar=3D0,directories=3D0,resizable=3D0,scrollsbars=3D0,height=3D"+g+",width=
=3D590")=0A=
},R=3Dfunction(k){var =
m,j,h,n=3D{},g=3Dk.indexOf("?");if(g>-1){k=3Dk.substr(g+1).replace("&amp;=
","&","g").split("&");=0A=
for(m=3D0,j=3Dk.length;m<j;m++){h=3Dk[m].split("=3D");n[h[0]]=3Dh[1]}}ret=
urn n},L=3Dfunction(h){var j=3D{},g;if(h.href){j=3DR(h.href)=0A=
}j.title=3Descape(unescape(j.url?j.title||"":document.title));j.url=3Desc=
ape(unescape(j.url||location.href)).replace("+","%2b","g");=0A=
j.related=3Dj.related||true;j.style=3Dj.style!=3D"no";if(h.rev){g=3Dh.rev=
.split(",");if(g.length>1){j.rev=3Dg[0].replace("(","").replace(")","").r=
eplace("'","","g");=0A=
j.topic=3DZ(g[1])}}j.bodytext=3Dnull;var =
i=3Dh.getElementsByTagName("span")[0];if(i){j.bodytext=3Di.innerHTML=0A=
}return j},E=3Dfunction(){var =
k,h,g,j,m,l,i;f=3Df||{ie:!!document.all,ie6:this.ie&&document.documentEle=
ment.style&&"maxHeight" in document.documentElement.style};=0A=
d=3Ddocument.createElement("SPAN");d.className=3D"db-wrapper =
db-clear";k=3Ddocument.createElement("SPAN");if(f.ie){k.className=3D"db-i=
e";=0A=
if(f.ie6){k.className=3D"db-ie =
db-ie6"}}h=3Ddocument.createElement("SPAN");h.className=3D"db-container =
db-submit";=0A=
g=3Ddocument.createElement("SPAN");g.className=3D"db-body";j=3Ddocument.c=
reateElement("SPAN");j.className=3D"db-count";=0A=
m=3Ddocument.createElement("SPAN");m.className=3D"db-copy";i=3Ddocument.c=
reateElement("A");i.className=3D"db-anchor";=0A=
d.appendChild(k);k.appendChild(h);h.appendChild(g);g.appendChild(j);g.app=
endChild(m);g.appendChild(i);=0A=
i.appendChild(document.createTextNode("digg"))},I=3Dfunction(h){var =
g=3D[];for(prop in h){if(h[prop]!=3D=3Dnull){g.push(prop+"=3D"+h[prop])=0A=
}}return"?"+g.join("&")},T=3Dfunction(h){var g;for(prop in =
h){if(O[prop]){g=3Dh[prop];delete h[prop];h[O[prop]]=3Dg=0A=
}}return h},U=3Dfunction(i,h){if(G){var =
k=3D{source:"button",submitted:!!i.id,event:h,diggs:i.diggs,storyId:i.id|=
|0,buttons:S},l=3DT(k),j=3DM.analytics+I(l),g=3DMath.floor(Math.random()*=
100)+1;=0A=
if(g<=3DW[h]){new Image().src=3Dj}}},Z=3Dfunction(g){return =
g.replace(/^\s+|\s+$/g,"")},N,K,X,S=3D0,P,C=3Dfunction(){H&&H();=0A=
d||E();P();if(!X){N=3DsetTimeout(C,750)}},A=3Dfunction(){var g=3D['<a =
class=3D"DiggThisButton'];if(window.digg_skin=3D=3D"compact"){g.push(' =
DiggCompact"')=0A=
}else{if(window.digg_skin=3D=3D"icon"){g.push(' =
DiggIcon"')}else{g.push('"')}}if(window.digg_title){g.push(' =
href=3D"',M.submit,"url=3D",escape(digg_url||DIGG_URL||location.href).rep=
lace("+","%2b","g"),"&title=3D",escape(digg_title),'"')=0A=
}else{if(window.digg_url||window.DIGG_URL){g.push(' =
href=3D"',M.submit,"url=3D",escape(digg_url||DIGG_URL).replace("+","%2b",=
"g"),'"')=0A=
}}if(window.digg_media&&window.digg_topic){g.push(' =
rev=3D"',digg_media,", ",digg_topic,'"')}g.push(">");=0A=
if(window.digg_bodytext){g.push("<span>",digg_bodytext,"</span>")}g.push(=
"</a>");document.write(g.join(""))=0A=
},J=3Dfunction(){X=3D1};if(function(g){return =
g&&(g+=3D"").substr(g.indexOf("{")).replace(/\s/g,"")=3D=3D"{[nativecode]=
}"=0A=
}(document.getElementsByClassName)){P=3Dfunction(){var =
g=3Ddocument.getElementsByClassName("DiggThisButton");=0A=
while(g.length){F(g[0]);S++}}}else{P=3Dfunction(){var =
h=3Ddocument.getElementsByTagName("A"),g=3Dh.length,j=3D0,k;=0A=
for(;j<g;j++){k=3D" "+h[j].className+" ";if(k.indexOf(" DiggThisButton =
")>=3D0){F(h[j]);S++}}}}C();if(document.body&&!S){A()=0A=
}if(window.addEventListener){window.addEventListener("load",J,true)}else{=
if(window.attachEvent){window.attachEvent("onload",J)=0A=
}else{K=3Dwindow.onload;window.onload=3DK?function(){K();J()}:J}}return{w=
riteLink:A,addButtons:C,collectDiggs:function(k){var =
h=3Db[escape(k.url).replace("+","%2b","g")],g=3Dh.length,j=3D0;=0A=
for(;j<g;j++){h[j](k)}}}})()}else{__DBW.writeLink()};
------=_NextPart_000_0000_01CAFF83.83AF68B0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.ohloh.net/p/13436/widgets/project_thin_badge.js

document.write('<a =
href=3D\'http://www.ohloh.net/p/php-js?ref=3DWidgetProjectThinBadge\' =
target=3D\'_top\'>\n  <img alt=3D\'Ohloh project report for PHP.JS\' =
border=3D\'0\' height=3D\'16\' =
src=3D\'http://www.ohloh.net/p/php-js/widgets/project_thin_badge.gif\' =
width=3D\'100\' />\n<\/a>\n')
------=_NextPart_000_0000_01CAFF83.83AF68B0--
