From: "Guardado por Microsoft Internet Explorer 7"
Subject: =?iso-8859-1?Q?El_blog_de_Jorge_Mestre_=BB_El_=FAltimo_libro_del_SAP_lo_e?=
	=?iso-8859-1?Q?scribe=85_Alec_Baldwin?=
Date: Tue, 7 Oct 2008 01:22:09 +0200
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0153_01C9281B.1E2D67D0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16669

This is a multi-part message in MIME format.

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.jorgemestre.com/?p=88

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD=20
profile=3Dhttp://gmpg.org/xfn/11><TITLE>El blog de Jorge Mestre =C2=BB =
El =C3=BAltimo libro del SAP lo escribe=E2=80=A6 Alec Baldwin</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3DUTF-8">
<META content=3D"MSHTML 6.00.6000.16711" name=3DGENERATOR><!-- leave =
this for stats please -->
<STYLE type=3Dtext/css media=3Dscreen>@import url( =
http://www.jorgemestre.com/wp-content/themes/connections/style.css );
</STYLE>
<LINK title=3D"RSS 2.0" href=3D"http://www.jorgemestre.com/?feed=3Drss2" =

type=3Dapplication/rss+xml rel=3Dalternate><LINK title=3D"Atom 0.3"=20
href=3D"http://www.jorgemestre.com/?feed=3Datom" =
type=3Dapplication/atom+xml=20
rel=3Dalternate><LINK href=3D"http://www.jorgemestre.com/xmlrpc.php"=20
rel=3Dpingback><LINK title=3D"Octubre 2008"=20
href=3D"http://www.jorgemestre.com/?m=3D200810" rel=3Darchives><LINK=20
title=3D"Septiembre 2008" =
href=3D"http://www.jorgemestre.com/?m=3D200809"=20
rel=3Darchives><LINK title=3D"Septiembre 2007"=20
href=3D"http://www.jorgemestre.com/?m=3D200709" rel=3Darchives><LINK=20
title=3D"Junio 2007" href=3D"http://www.jorgemestre.com/?m=3D200706"=20
rel=3Darchives><LINK title=3D"Mayo 2007" =
href=3D"http://www.jorgemestre.com/?m=3D200705"=20
rel=3Darchives><LINK title=3D"Marzo 2007"=20
href=3D"http://www.jorgemestre.com/?m=3D200703" rel=3Darchives><LINK=20
title=3D"Febrero 2007" href=3D"http://www.jorgemestre.com/?m=3D200702"=20
rel=3Darchives><LINK title=3D"Septiembre 2006"=20
href=3D"http://www.jorgemestre.com/?m=3D200609" rel=3Darchives><LINK=20
title=3D"Agosto 2006" href=3D"http://www.jorgemestre.com/?m=3D200608"=20
rel=3Darchives><LINK title=3D"Julio 2006"=20
href=3D"http://www.jorgemestre.com/?m=3D200607" rel=3Darchives><LINK=20
title=3D"Junio 2006" href=3D"http://www.jorgemestre.com/?m=3D200606"=20
rel=3Darchives><LINK title=3D"Mayo 2006" =
href=3D"http://www.jorgemestre.com/?m=3D200605"=20
rel=3Darchives><LINK title=3D"Marzo 2006"=20
href=3D"http://www.jorgemestre.com/?m=3D200603" rel=3Darchives><LINK=20
title=3D"Febrero 2006" href=3D"http://www.jorgemestre.com/?m=3D200602"=20
rel=3Darchives><LINK title=3D"Enero 2006"=20
href=3D"http://www.jorgemestre.com/?m=3D200601" rel=3Darchives><LINK=20
title=3D"Diciembre 2005" href=3D"http://www.jorgemestre.com/?m=3D200512" =

rel=3Darchives><LINK title=3D"Noviembre 2005"=20
href=3D"http://www.jorgemestre.com/?m=3D200511" rel=3Darchives>
<SCRIPT=20
src=3D"http://www.jorgemestre.com/wp-content/plugins/livecalendar/xmlhttp=
request.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://www.jorgemestre.com/wp-content/plugins/livecalendar/kcalend=
arscript.php"=20
type=3Dtext/javascript></SCRIPT>
<!-- Xinha for WordPress v1.1 -->
<SCRIPT type=3Dtext/javascript><!--=0A=
      //<![CDATA[=0A=
      _editor_url =3D "/wp-content/plugins/xinha4wp/xinha_core/";=0A=
      _editor_lang =3D "es";=0A=
      //]]>=0A=
    --></SCRIPT>

<SCRIPT=20
src=3D"http://www.jorgemestre.com/wp-content/plugins/xinha4wp/xinha_core/=
htmlarea.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript><!--=0A=
      //<![CDATA[=0A=
=0A=
    xinha_editors =3D null;=0A=
    xinha_init    =3D null;=0A=
    xinha_config  =3D null;=0A=
    xinha_plugins =3D null;=0A=
=0A=
    xinha_init =3D xinha_init ? xinha_init : function()=0A=
    {=0A=
=0A=
	xinha_plugins =3D xinha_plugins ? xinha_plugins :=0A=
	[ 'FullScreen','SpellChecker','Abbreviation' ];=0A=
	=0A=
	if(!HTMLArea.loadPlugins(xinha_plugins, xinha_init)) return;=0A=
=0A=
	xinha_editors =3D xinha_editors ? xinha_editors : [ 'comment' ];=0A=
	xinha_config =3D xinha_config ? xinha_config : new HTMLArea.Config();=0A=
=0A=
xinha_config.flowToolbars =3D false;=0A=
xinha_config.statusBar =3D false;=0A=
xinha_config.SuperClean =3D { 'show_dialog' : false };=0A=
xinha_config.height =3D 'auto';=0A=
xinha_config.width =3D 'auto';=0A=
xinha_config.pageStyle =3D 'body { font-family: Verdana, Arial, =
sans-serif; font-size: 10px; }';=0A=
xinha_config.SpellChecker =3D { 'backend' : 'php', 'personalFilesDir' : =
'', 'defaultDictionary' : 'es_ES' };=0A=
=0A=
	xinha_config.toolbar =3D=0A=
	[=0A=
	["selectall"],(HTMLArea.is_gecko ? [] : =
["cut","copy","paste","overwrite"]),["insertimage"],["bold","italic","und=
erline","strikethrough"],["outdent","indent"],["createlink"],["popupedito=
r"]=0A=
	];=0A=
=0A=
	xinha_editors =3D HTMLArea.makeEditors(xinha_editors, xinha_config, =
xinha_plugins);=0A=
	HTMLArea.startEditors(xinha_editors);=0A=
    }=0A=
=0A=
    window.onload =3D xinha_init;=0A=
    HTMLArea._addEvent(window,"load",xinha_init);=0A=
      //]]>=0A=
    --></SCRIPT>

<STYLE type=3Dtext/css>.htmlarea IFRAME {
=09
}
</STYLE>
<!-- End Xinha for Wordpress --></HEAD>
<BODY>
<DIV id=3Drap>
<DIV id=3Dheader>
<H1><A title=3D"El blog de Jorge Mestre" =
href=3D"http://www.jorgemestre.com/">El=20
blog de Jorge Mestre</A></H1>
<DIV id=3Ddesc>Todo lo que a mi me gusta, a un clic.</DIV>
<UL id=3Dtopnav>
  <LI><A id=3DnavHome title=3Dinicio accessKey=3Dh=20
  =
href=3D"http://www.jorgemestre.com/">inicio&nbsp;&nbsp;|</A>&nbsp;&nbsp; =

  <LI><A id=3DnavAbout title=3D"sobre m=C3=AD" accessKey=3Da=20
  href=3D"http://www.jorgemestre.com/?page_id=3D13">sobre=20
  m=C3=AD&nbsp;&nbsp;|</A>&nbsp;&nbsp;=20
  <LI><A id=3DnavArchives title=3Dart=C3=ADculos accessKey=3Dr=20
  href=3D"http://www.jorgemestre.com/?page_id=3D14" =
publicados?>art=C3=ADculos=20
  publicados&nbsp;&nbsp;|</A>&nbsp;&nbsp;=20
  <LI><A title=3Dlibros accessKey=3Dl=20
  =
href=3D"http://www.jorgemestre.com/?page_id=3D28">libros&nbsp;&nbsp;|</A>=
&nbsp;&nbsp;=20

  <LI><A title=3Dfotos accessKey=3Dl =
href=3D"http://www.jorgemestre.com/?p=3D88#">fotos=20
  </A>&nbsp;&nbsp; </LI></UL></DIV>
<DIV id=3Dmain>
<DIV id=3Dcontent>
<DIV class=3Dpost>
<DIV class=3Dpost-info>
<H2 class=3Dpost-title><A=20
title=3D"Enlace permanente: El =C3=BAltimo libro del SAP lo =
escribe=E2=80=A6 Alec Baldwin"=20
href=3D"http://www.jorgemestre.com/?p=3D88" rel=3Dbookmark>El =
=C3=BAltimo libro del SAP lo=20
escribe=E2=80=A6 Alec Baldwin</A></H2><SPAN class=3Dpost-date>Lun 6 Oct =
2008<BR>Categoria:=20
<A title=3D"Ver todas las entradas en Varios"=20
href=3D"http://www.jorgemestre.com/?cat=3D1" rel=3D"category =
tag">Varios</A> - &nbsp;-=20
Visitas: &nbsp;12&nbsp;&nbsp;</SPAN></DIV>
<DIV class=3Dpost-content><FONT size=3D2>
<P><IMG=20
style=3D"BORDER-RIGHT: 0px solid; PADDING-RIGHT: 5px; BORDER-TOP: 0px =
solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px; BORDER-LEFT: =
0px solid; PADDING-TOP: 5px; BORDER-BOTTOM: 0px solid"=20
height=3D254 alt=3D"A promise to ourselves de Alec Baldwin"=20
src=3D"http://www.jorgemestre.com/wp-content/images/baldwinn.jpg" =
width=3D152=20
align=3Dleft>Mientras este pasado domingo le=C3=ADa las noticias sobre =
las=20
manifestaciones que se produjeron en defensa de la custodia compartida a =
las=20
puertas del Congreso de los diputados en Madrid, conoc=C3=ADa v=C3=ADa =
el <EM>New York=20
Times</EM> que <STRONG>Alec Baldwin</STRONG> es sorprendentemente el =
=C3=BAltimo=20
autor de un libro sobre el s=C3=ADndrome de alienaci=C3=B3n parental. Su =
obra llamada=20
<EM>=E2=80=9CA promise to ourselves=E2=80=9D </EM>(=E2=80=9DUna promesa =
para nosotros mismos=E2=80=9D) es un=20
alegato en defensa de los menores tras los procesos de ruptura =
matrimonial en=20
Estados Unidos y, c=C3=B3mo no, tambi=C3=A9n en Espa=C3=B1a. Baldwin =
estuvo muchos a=C3=B1os casado=20
con la actriz <STRONG>Kim Basinger</STRONG> y tras su divorcio vio como =
la=20
relaci=C3=B3n con su hija se ve=C3=ADa quebrada. </P>
<P>Baldwin denuncia, nada m=C3=A1s y nada menos, el sistema legal de =
familia que=20
existe en Estados Unidos y propone su cambio inmediato. Creo que a =
m=C3=A1s de uno,=20
esto le resultar=C3=A1 familiar. El escritor <STRONG>Alex =
Kucynski</STRONG>,=20
encargado de la cr=C3=ADtica en el <EM>=E2=80=9CThe New York Times Book =
Review=E2=80=9D</EM>, afirma=20
que se trata de un libro serio, una especie de manifiesto que =
ocasionalmente se=20
ve marcado por el triste recuerdo, no exento de pol=C3=A9mica, del =
fracaso de su=20
matrimonio y el alejamiento de su =C3=BAnica hija. </P>
<P>El actor americano ha tenido la fortuna de poder expresar sus ideas =
en un=20
libro que seguramente recoger=C3=A1 el sentir general de cientos, miles =
d=C3=ADa yo, de=20
padres e hijos que han visto rota su relaci=C3=B3n por el capricho =
personal de la=20
otra parte. Pero Baldwin arremete tambi=C3=A9n contra el sistema legal =
de familia=20
americano compuesto de unos abogados y jueces que, seg=C3=BAn =C3=A9l, =
trabajan en=20
cooperaci=C3=B3n para aprovecharse econ=C3=B3micamente de las parejas en =
divorcio. =E2=80=9CUna=20
industria que se alimenta de las vulnerabilidades de los ya =
vulnerables=E2=80=9D,=20
afirma. Para =C3=A9l, el divorcio es un infierno, que los abogados son =
unos buitres y=20
que los hijos se pierden. </P>
<P>El libro de Baldwin est=C3=A1 escrito tambi=C3=A9n con <STRONG>Mark =
Tabb</STRONG> y da=20
a conocer algunos chismorreos sobre su matrimonio con Basinger. Pero =
aparte de=20
decir de ella que cuando le dio la noticia de su embarazo parec=C3=ADa =
contarle que=20
le hab=C3=ADan destrozado el coche o de que tiene el s=C3=ADndrome de =
Munchausen, le acusa=20
de haber envenenado la relaci=C3=B3n con su hija. A los jueces y =
abogados les llama=20
reprimidos, malvados, petulantes y a su ex, =E2=80=9Cla bruja malvada de =
la costa=20
oeste=E2=80=9D. </P>
<P>Baldwin aporta adem=C3=A1s los casos de padres que han experimentado =
casos como el=20
suyo y en el que los hijos son v=C3=ADctimas del S=C3=ADndrome de =
Alienaci=C3=B3n Parental=20
(SAP), lo que provoca que muchos de los ni=C3=B1os acaben odiando a su =
padre. El=20
actor quiere hacernos ver que el SAP es un s=C3=ADndrome leg=C3=ADtimo y =
para ello termina=20
entrevistando a un profesor de Harvard y a una mujer que argumenta que =
el=20
feminismo est=C3=A1 detr=C3=A1s de la actual legislaci=C3=B3n de familia =
en EE UU. </P>
<P>Y yo que pensaba que all=C3=AD las cosas eran diferentes que en =
Espa=C3=B1a. </P>
<P>Desde <A title=3DAmazon=20
href=3D"http://www.amazon.com/Promise-Ourselves-Journey-Through-Fatherhoo=
d/dp/0312363362/ref=3Dpd_bbs_sr_1?ie=3DUTF8&amp;s=3Dbooks&amp;qid=3D12232=
42518&amp;sr=3D8-1"=20
target=3D""><STRONG>Amazon</STRONG></A>, pod=C3=A9is comprar el libro de =
Baldwin.=20
</P></FONT>
<DIV class=3Dpost-info></DIV>
<DIV class=3Dpost-footer>&nbsp;</DIV></DIV>
<SCRIPT type=3Dtext/javascript><!--
google_ad_client =3D "pub-4231497927362981";
google_ad_width =3D 468;
google_ad_height =3D 60;
google_ad_format =3D "468x60_as";
google_ad_type =3D "text";
//2007-10-19: opinion
google_ad_channel =3D "6450082974";
google_color_border =3D "666666";
google_color_bg =3D "929D91";
google_color_link =3D "000000";
google_color_text =3D "333333";
google_color_url =3D "666666";
google_ui_features =3D "rc:0";
//-->
</SCRIPT>

<SCRIPT src=3D"http://pagead2.googlesyndication.com/pagead/show_ads.js"=20
type=3Dtext/javascript>
</SCRIPT>
<!-- You can start editing here. --><!-- If comments are open, but there =
are no comments. -->
<H3 id=3Drespond>Deja tu comentario</H3>
<FORM id=3Dcommentform =
action=3Dhttp://www.jorgemestre.com/wp-comments-post.php=20
method=3Dpost>
<P><INPUT id=3Dauthor tabIndex=3D1 size=3D22 name=3Dauthor> <LABEL=20
for=3Dauthor><SMALL>Name (requerido)</SMALL></LABEL></P>
<P><INPUT id=3Demail tabIndex=3D2 size=3D22 name=3Demail> <LABEL =
for=3Demail><SMALL>Mail=20
(will not be published) (requerido)</SMALL></LABEL></P>
<P><INPUT id=3Durl tabIndex=3D3 size=3D22 name=3Durl> <LABEL=20
for=3Durl><SMALL>Website</SMALL></LABEL></P><!--<p><small><strong>XHTML:<=
/strong> You can use these tags: &lt;a href=3D&quot;&quot; =
title=3D&quot;&quot;&gt; &lt;abbr title=3D&quot;&quot;&gt; &lt;acronym =
title=3D&quot;&quot;&gt; &lt;b&gt; &lt;blockquote =
cite=3D&quot;&quot;&gt; &lt;code&gt; &lt;em&gt; &lt;i&gt; &lt;strike&gt; =
&lt;strong&gt; </small></p>-->
<P><TEXTAREA id=3Dcomment tabIndex=3D4 name=3Dcomment rows=3D10 =
cols=3D100></TEXTAREA></P>
<P><INPUT id=3Dsubmit tabIndex=3D5 type=3Dsubmit value=3D"Enviar =
comentario" name=3Dsubmit>=20
<INPUT type=3Dhidden value=3D88 name=3Dcomment_post_ID> =
</P></FORM></DIV>
<P align=3Dcenter></P></DIV>
<DIV id=3Dsidebar>
<H2>Archived Entry</H2>
<UL>
  <LI><STRONG>Post Date :</STRONG>=20
  <LI>Lunes, Oct 6th, 2008 at 10:52 pm=20
  <LI><STRONG>Category :</STRONG>=20
  <LI><A title=3D"Ver todas las entradas en Varios"=20
  href=3D"http://www.jorgemestre.com/?cat=3D1" rel=3D"category =
tag">Varios</A>=20
  <LI><STRONG>Do More :</STRONG>=20
  <LI>You can <A =
href=3D"http://www.jorgemestre.com/?p=3D88#respond">leave a=20
  response</A>, or <A=20
  =
href=3D"http://www.jorgemestre.com/wp-trackback.php?p=3D88">trackback</A>=
 from=20
  your own site. </LI></UL>
<H2><LABEL for=3Ds>Recomendado</LABEL></H2>
<UL>
  <LI></LI></UL></DIV>
<P id=3Dfooter>=C2=A9 <A href=3D"mailto:jorge@jorgemestre.com">Jorge =
Mestre</A>. Todos=20
los derechos reservados. | Dise=C3=B1o por <A=20
href=3D"mailto:msotelo@prensamediterraneo.com">Mauro Sotelo</A>.</P>
<SCRIPT src=3D"http://www.google-analytics.com/urchin.js" =
type=3Dtext/javascript>
</SCRIPT>

<SCRIPT type=3Dtext/javascript>
_uacct =3D "UA-338144-1";
urchinTracker();
</SCRIPT>
</DIV></DIV></BODY></HTML>

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://www.jorgemestre.com/wp-content/images/baldwinn.jpg

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

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.jorgemestre.com/wp-content/themes/connections/style.css

BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 0.9em; BACKGROUND: =
#666666; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #000000; LINE-HEIGHT: =
1.3em; PADDING-TOP: 0px; FONT-FAMILY: 'Trebuchet MS',Georgia, Times, =
Times New Roman, sans-serif; TEXT-ALIGN: center
}
A {
	FONT-WEIGHT: bold; COLOR: #000; TEXT-DECORATION: none
}
A:visited {
	COLOR: #8a3207
}
A:hover {
	COLOR: #990000; TEXT-DECORATION: none
}
INPUT {
	BORDER-RIGHT: #a1a59a 1px solid; BORDER-TOP: #a1a59a 1px solid; =
BACKGROUND: #fff; BORDER-LEFT: #a1a59a 1px solid; BORDER-BOTTOM: #a1a59a =
1px solid
}
TEXTAREA {
	BORDER-RIGHT: #a1a59a 1px solid; BORDER-TOP: #a1a59a 1px solid; =
BACKGROUND: #fff; BORDER-LEFT: #a1a59a 1px solid; BORDER-BOTTOM: #a1a59a =
1px solid
}
#rap {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 0.9em; BACKGROUND: =
url(img/rap.jpg) #fff repeat-y center 50%; PADDING-BOTTOM: 0px; MARGIN: =
0px auto; WIDTH: 760px; PADDING-TOP: 0px; FONT-FAMILY: Trebuchet =
MS,Georgia, Arial, serif; TEXT-ALIGN: left
}
#header {
	BORDER-RIGHT: #a1a5ba 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#a1a5ba 0px solid; PADDING-LEFT: 0px; BACKGROUND: url(img/top.jpg) #fff =
no-repeat 50% top; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: =
#a1a5ba 0px solid; WIDTH: 760px; PADDING-TOP: 50px; BORDER-BOTTOM: =
#a1a5ba 0px solid; HEIGHT: 133px
}
#main {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
auto; WIDTH: 740px; PADDING-TOP: 0px; BACKGROUND-COLOR: #eeebeb
}
#content {
	PADDING-RIGHT: 5px; DISPLAY: inline; PADDING-LEFT: 5px; FLOAT: left; =
PADDING-BOTTOM: 5px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 510px; =
PADDING-TOP: 5px
}
#sidebar {
	PADDING-RIGHT: 8px; DISPLAY: inline; PADDING-LEFT: 8px; FONT-SIZE: 1em; =
FLOAT: right; PADDING-BOTTOM: 10px; MARGIN: 0px; WIDTH: 186px; COLOR: =
#000; PADDING-TOP: 0px; BACKGROUND-COLOR: #e2dfb2
}
A IMG {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
ACRONYM {
	BORDER-BOTTOM: #a1a59a 1px solid
}
ABBR {
	BORDER-BOTTOM: #a1a59a 1px solid
}
ACRONYM {
	CURSOR: help; LETTER-SPACING: 0.07em
}
ABBR {
	CURSOR: help; LETTER-SPACING: 0.07em
}
SPAN.caps {
	CURSOR: help; LETTER-SPACING: 0.07em
}
CODE {
	FONT-SIZE: 1em; FONT-STYLE: italic
}
BLOCKQUOTE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 45px; BACKGROUND: =
url(img/blockquote.gif) no-repeat left top; PADDING-BOTTOM: 0px; MARGIN: =
15px 30px 0px 45px; PADDING-TOP: 0px; FONT-STYLE: italic
}
CITE {
	FONT-SIZE: 0.9em; FONT-STYLE: normal
}
H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1.3em; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 1em; LINE-HEIGHT: 1.5em; PADDING-TOP: 0px
}
H1 {
	FONT-WEIGHT: normal; FONT-FAMILY: lucida, Verdana, sans-serif
}
H2 {
	FONT-WEIGHT: normal; FONT-FAMILY: lucida, Verdana, sans-serif
}
H3 {
	FONT-WEIGHT: normal; FONT-FAMILY: lucida, Verdana, sans-serif
}
H4 {
	FONT-WEIGHT: normal; FONT-FAMILY: lucida, Verdana, sans-serif
}
#header H1 {
	PADDING-RIGHT: 20px; PADDING-LEFT: 0px; FONT-SIZE: 1.6em; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 10px; TEXT-ALIGN: right
}
#header H1 A {
	COLOR: #f7f3ed; TEXT-DECORATION: none
}
#header H1 A:hover {
	COLOR: #b5c09d
}
#header #desc {
	PADDING-RIGHT: 20px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: =
1em; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #b5c09d; PADDING-TOP: 0px; =
FONT-STYLE: italic; TEXT-ALIGN: right
}
#sidebar H2 {
	BORDER-RIGHT: #8b8f85 0px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#8b8f85 0px solid; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: =
13px; PADDING-BOTTOM: 2px; MARGIN: 10px 0px 0px; BORDER-LEFT: #8b8f85 =
0px solid; COLOR: #333; PADDING-TOP: 2px; BORDER-BOTTOM: #8b8f85 0px =
solid; FONT-FAMILY: Helvetica, sans-serif; HEIGHT: 22px; TEXT-ALIGN: =
center
}
#sidebar UL {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 5px; FONT-SIZE: 0.9em; BACKGROUND: =
#929d91; PADDING-BOTTOM: 5px; MARGIN: 0px; BORDER-LEFT: #666666 1px =
solid; PADDING-TOP: 5px; BORDER-BOTTOM: #666666 1px solid; =
LIST-STYLE-TYPE: none
}
#pagenav {
	LIST-STYLE-TYPE: none
}
#sidebar UL LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0.1em 0px 0px; PADDING-TOP: 0px
}
#sidebar UL LI A {
	COLOR: #000000; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: =
none
}
#sidebar UL LI A:link {
	COLOR: #000000
}
#sidebar UL LI A:visited {
	COLOR: #333333
}
#sidebar UL LI A:hover {
	COLOR: #990000
}
#sidebar UL LI A:active {
	COLOR: #990000
}
#sidebar UL UL {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 1em; BACKGROUND: none =
transparent scroll repeat 0% 0%; PADDING-BOTTOM: 5px; MARGIN: 0px; =
BORDER-TOP-STYLE: none; PADDING-TOP: 5px; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; LIST-STYLE-TYPE: none; BORDER-BOTTOM-STYLE: =
none
}
#sidebar UL UL LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; BACKGROUND: =
url(img/subcat_bullet.gif) no-repeat left 50%; PADDING-BOTTOM: 0px; =
MARGIN: 0px 0px 0px 10px; PADDING-TOP: 0px
}
#content UL {
	PADDING-LEFT: 45px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none
}
#content UL LI {
	PADDING-LEFT: 1.5em; BACKGROUND: url(img/bullet.gif) no-repeat 0px 7px
}
.post {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: =
0px 0px 30px; PADDING-TOP: 10px
}
.page {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: =
0px 0px 30px; PADDING-TOP: 10px
}
.page {
	MARGIN: 25px -5px 0px 27px
}
.post-info {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 0.85em; =
PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #333; PADDING-TOP: 0px; =
FONT-FAMILY: verdana, Arial, Sans-Serif
}
.page-info {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 0.85em; =
PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #333; PADDING-TOP: 0px; =
FONT-FAMILY: verdana, Arial, Sans-Serif
}
.page-info {
	TEXT-ALIGN: center
}
.post-info A {
	FONT-WEIGHT: bold; COLOR: #990000; BORDER-TOP-STYLE: none; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; TEXT-DECORATION: =
none; BORDER-BOTTOM-STYLE: none
}
.post-info A:hover {
	COLOR: #000
}
.post-content {
	PADDING-RIGHT: 0px; BORDER-TOP: #bbc4a3 1px solid; PADDING-LEFT: 0px; =
FONT-SIZE: 12px; PADDING-BOTTOM: 10px; MARGIN: 3px 0px; PADDING-TOP: =
10px; FONT-FAMILY: Georgia, Verdana, Arial, serif
}
.page-content {
	PADDING-RIGHT: 0px; BORDER-TOP: #bbc4a3 1px solid; PADDING-LEFT: 0px; =
FONT-SIZE: 12px; PADDING-BOTTOM: 10px; MARGIN: 3px 0px; PADDING-TOP: =
10px; FONT-FAMILY: Georgia, Verdana, Arial, serif
}
.post-content A {
	FONT-WEIGHT: normal; COLOR: #6699cc; BORDER-BOTTOM: #6699cc 1px dotted
}
.post-content A:visited {
	FONT-WEIGHT: normal; COLOR: #6699cc; BORDER-BOTTOM: #6699cc 1px dotted
}
.post-content A:active {
	FONT-WEIGHT: normal; COLOR: #6699cc; BORDER-BOTTOM: #6699cc 1px dotted
}
.post-content A:hover {
	COLOR: #990000; BORDER-BOTTOM: #990000 1px dotted
}
.post-title {
	FONT-WEIGHT: normal; FONT-SIZE: 16px; MARGIN: 0px; FONT-FAMILY: Arial, =
Serif
}
.page-title {
	FONT-WEIGHT: normal; FONT-SIZE: 16px; MARGIN: 0px; FONT-FAMILY: Arial, =
Serif
}
.page-title {
	FONT-WEIGHT: normal; FONT-SIZE: 1.7em
}
#content .page-title A {
	COLOR: #000; TEXT-DECORATION: none
}
.post-title A:link {
	COLOR: #000; TEXT-DECORATION: none
}
.post-title A:visited {
	COLOR: #000; TEXT-DECORATION: none
}
.post-title A:hover {
	COLOR: #000; TEXT-DECORATION: none
}
.post-title A:active {
	COLOR: #000; TEXT-DECORATION: none
}
.post-date {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 10px; PADDING-BOTTOM: =
8px; MARGIN: 3px 10px 0px 0px; COLOR: #333333; PADDING-TOP: 8px; =
FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: left
}
.post-footer {
	PADDING-TOP: 20px
}
#footer {
	CLEAR: both; PADDING-RIGHT: 0px; BORDER-TOP: #bbc4a3 1px solid; =
PADDING-LEFT: 0px; FONT-SIZE: 0.8em; PADDING-BOTTOM: 7px; MARGIN: 0px =
auto; WIDTH: 740px; COLOR: #999; PADDING-TOP: 7px; TEXT-ALIGN: center
}
#footer A {
	COLOR: #7a7636; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.commentlist {
	FONT-WEIGHT: normal; FONT-SIZE: 1em
}
#commentform {
	MARGIN: 0px 0px 0px 40px
}
#commentform TEXTAREA {
	WIDTH: 80%
}
#commentform P {
	MARGIN: 0px 0px 1em
}
#comments {
	MARGIN: 3em 0px 1em 40px; FONT: 0.9em verdana, helvetica, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #676e04
}
#respond {
	MARGIN: 3em 0px 1em 40px; FONT: 0.9em verdana, helvetica, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #676e04
}
.commentlist LI {
	BORDER-RIGHT: #e1d6c6 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#e1d6c6 1px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(img/comments_bottom.jpg) #f3f6ed repeat-x 50% bottom; =
PADDING-BOTTOM: 20px; MARGIN: 5px 0px; BORDER-LEFT: #e1d6c6 1px solid; =
PADDING-TOP: 10px; BORDER-BOTTOM: #e1d6c6 1px solid
}
.commentlist .alt {
=09
}
#topnav {
	CLEAR: both; BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 1px; =
BORDER-TOP: #000 1px solid; PADDING-LEFT: 10px; FONT-WEIGHT: normal; =
FONT-SIZE: 10px; FILTER: progid:DXImageTransform.Microsoft.Alpha( =
Opacity=3D85); PADDING-BOTTOM: 1px; MARGIN: 50px 0px 0px 20px; =
BORDER-LEFT: #000 1px solid; WIDTH: 360px; PADDING-TOP: 1px; =
BORDER-BOTTOM: #000 1px solid; FONT-FAMILY: Verdana, Arial, Sans-Serif; =
LIST-STYLE-TYPE: none; BACKGROUND-COLOR: #006666; TEXT-ALIGN: left
}
#topnav LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#topnav LI A:link {
	FONT-WEIGHT: normal; COLOR: #f7f3ed; TEXT-DECORATION: none
}
#topnav LI A:visited {
	FONT-WEIGHT: normal; COLOR: #f7f3ed; TEXT-DECORATION: none
}
#topnav LI A:hover {
	COLOR: #bbc4a3
}
#topnav LI A:active {
	COLOR: #bbc4a3
}

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.jorgemestre.com/wp-content/plugins/livecalendar/xmlhttprequest.js

/*

Cross-Browser XMLHttpRequest v1.1
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D

Emulate Gecko 'XMLHttpRequest()' functionality in IE and Opera. Opera =
requires
the Sun Java Runtime Environment <http://www.java.com/>.

by Andrew Gregory
http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/

This work is licensed under the Creative Commons Attribution License. To =
view a
copy of this license, visit http://creativecommons.org/licenses/by/1.0/ =
or send
a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, =
California 94305,
USA.

Not Supported in Opera
----------------------
* user/password authentication
* responseXML data member

Not Fully Supported in Opera
----------------------------
* async requests
* abort()
* getAllResponseHeaders(), getAllResponseHeader(header)

*/
// IE support
if (window.ActiveXObject && !window.XMLHttpRequest) {
  window.XMLHttpRequest =3D function() {
    return new =
ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 5') !=3D =
-1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP');
  };
}
// Gecko support
/* ;-) */
// Opera support
if (window.opera && !window.XMLHttpRequest) {
  window.XMLHttpRequest =3D function() {
    this.readyState =3D 0; // =
0=3Duninitialized,1=3Dloading,2=3Dloaded,3=3Dinteractive,4=3Dcomplete
    this.status =3D 0; // HTTP status codes
    this.statusText =3D '';
    this._headers =3D [];
    this._aborted =3D false;
    this._async =3D true;
    this.abort =3D function() {
      this._aborted =3D true;
    };
    this.getAllResponseHeaders =3D function() {
      return this.getAllResponseHeader('*');
    };
    this.getAllResponseHeader =3D function(header) {
      var ret =3D '';
      for (var i =3D 0; i < this._headers.length; i++) {
        if (header =3D=3D '*' || this._headers[i].h =3D=3D header) {
          ret +=3D this._headers[i].h + ': ' + this._headers[i].v + =
'\n';
        }
      }
      return ret;
    };
    this.setRequestHeader =3D function(header, value) {
      this._headers[this._headers.length] =3D {h:header, v:value};
    };
    this.open =3D function(method, url, async, user, password) {
      this.method =3D method;
      this.url =3D url;
      this._async =3D true;
      this._aborted =3D false;
      if (arguments.length >=3D 3) {
        this._async =3D async;
      }
      if (arguments.length > 3) {
        // user/password support requires a custom Authenticator class
        opera.postError('XMLHttpRequest.open() - user/password not =
supported');
      }
      this._headers =3D [];
      this.readyState =3D 1;
      if (this.onreadystatechange) {
        this.onreadystatechange();
      }
    };
    this.send =3D function(data) {
      if (!navigator.javaEnabled()) {
        alert("XMLHttpRequest.send() - Java must be installed and =
enabled.");
        return;
      }
      if (this._async) {
        setTimeout(this._sendasync, 0, this, data);
        // this is not really asynchronous and won't execute until the =
current
        // execution context ends
      } else {
        this._sendsync(data);
      }
    }
    this._sendasync =3D function(req, data) {
      if (!req._aborted) {
        req._sendsync(data);
      }
    };
    this._sendsync =3D function(data) {
      this.readyState =3D 2;
      if (this.onreadystatechange) {
        this.onreadystatechange();
      }
      // open connection
      var url =3D new java.net.URL(new =
java.net.URL(window.location.href), this.url);
      var conn =3D url.openConnection();
      for (var i =3D 0; i < this._headers.length; i++) {
        conn.setRequestProperty(this._headers[i].h, this._headers[i].v);
      }
      this._headers =3D [];
      if (this.method =3D=3D 'POST') {
        // POST data
        conn.setDoOutput(true);
        var wr =3D new =
java.io.OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
        wr.close();
      }
      // read response headers
      // NOTE: the getHeaderField() methods always return nulls for me =
:(
      var gotContentEncoding =3D false;
      var gotContentLength =3D false;
      var gotContentType =3D false;
      var gotDate =3D false;
      var gotExpiration =3D false;
      var gotLastModified =3D false;
      for (var i =3D 0; ; i++) {
        var hdrName =3D conn.getHeaderFieldKey(i);
        var hdrValue =3D conn.getHeaderField(i);
        if (hdrName =3D=3D null && hdrValue =3D=3D null) {
          break;
        }
        if (hdrName !=3D null) {
          this._headers[this._headers.length] =3D {h:hdrName, =
v:hdrValue};
          switch (hdrName.toLowerCase()) {
            case 'content-encoding': gotContentEncoding =3D true; break;
            case 'content-length'  : gotContentLength   =3D true; break;
            case 'content-type'    : gotContentType     =3D true; break;
            case 'date'            : gotDate            =3D true; break;
            case 'expires'         : gotExpiration      =3D true; break;
            case 'last-modified'   : gotLastModified    =3D true; break;
          }
        }
      }
      // try to fill in any missing header information
      var val;
      val =3D conn.getContentEncoding();
      if (val !=3D null && !gotContentEncoding) =
this._headers[this._headers.length] =3D {h:'Content-encoding', v:val};
      val =3D conn.getContentLength();
      if (val !=3D -1 && !gotContentLength) =
this._headers[this._headers.length] =3D {h:'Content-length', v:val};
      val =3D conn.getContentType();
      if (val !=3D null && !gotContentType) =
this._headers[this._headers.length] =3D {h:'Content-type', v:val};
      val =3D conn.getDate();
      if (val !=3D 0 && !gotDate) this._headers[this._headers.length] =
=3D {h:'Date', v:(new Date(val)).toUTCString()};
      val =3D conn.getExpiration();
      if (val !=3D 0 && !gotExpiration) =
this._headers[this._headers.length] =3D {h:'Expires', v:(new =
Date(val)).toUTCString()};
      val =3D conn.getLastModified();
      if (val !=3D 0 && !gotLastModified) =
this._headers[this._headers.length] =3D {h:'Last-modified', v:(new =
Date(val)).toUTCString()};
      // read response data
      var reqdata =3D '';
      var stream =3D conn.getInputStream();
      if (stream) {
        var reader =3D new java.io.BufferedReader(new =
java.io.InputStreamReader(stream));
        var line;
        while ((line =3D reader.readLine()) !=3D null) {
          if (this.readyState =3D=3D 2) {
            this.readyState =3D 3;
            if (this.onreadystatechange) {
              this.onreadystatechange();
            }
          }
          reqdata +=3D line + '\n';
        }
        reader.close();
        this.status =3D 200;
        this.statusText =3D 'OK';
        this.responseText =3D reqdata;
        this.readyState =3D 4;
        if (this.onreadystatechange) {
          this.onreadystatechange();
        }
        if (this.onload) {
          this.onload();
        }
      } else {
        // error
        this.status =3D 404;
        this.statusText =3D 'Not Found';
        this.responseText =3D '';
        this.readyState =3D 4;
        if (this.onreadystatechange) {
          this.onreadystatechange();
        }
        if (this.onerror) {
          this.onerror();
        }
      }
    };
  };
}
// ActiveXObject emulation
if (!window.ActiveXObject && window.XMLHttpRequest) {
  window.ActiveXObject =3D function(type) {
    switch (type.toLowerCase()) {
      case 'microsoft.xmlhttp':
      case 'msxml2.xmlhttp':
        return new XMLHttpRequest();
    }
    return null;
  };
}
------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.jorgemestre.com/wp-content/plugins/livecalendar/kcalendarscript.php


var week_begins  =3D 1;
var thismonth    =3D 10;
var thisyear     =3D 2008;
var firstpost	 =3D '';
var min_year	 =3D 2005;
var min_month	 =3D 11;
var permastruct  =3D '/?m=3D%year%%monthnum%%day%';
var m_permastruct=3D '/?m=3D%year%%monthnum%';
var has_fp       =3D false;
var dateDay      =3D new Array('Domingo', 'Lunes', 'Martes', =
'Mi&eacute;rcoles', 'Jueves', 'Viernes', 'S&aacute;bado');
var dateDayShort =3D new Array('D', 'L', 'M', 'X', 'J', 'V', 'S');
var dateDayAbbr  =3D new Array('Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', =
'Sab');
var dateMon      =3D new Array('Enero', 'Febrero', 'Marzo', 'Abril', =
'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', =
'Noviembre', 'Diciembre');
var dateMonShort =3D new Array('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', =
'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic');
var archives     =3D 'Archivos:';
var viewpostsfor_=3D 'Ver todas las entradas para %1$s %2$s';
var siteurl	 =3D 'http://www.jorgemestre.com';

function viewpostsfor(year,month) {
   return =
viewpostsfor_.replace("%1\$s",dateMon[month]).replace("%2\$s",year);
  =20
}

var unixmonth =3D new Date(thisyear,thismonth-1,1);
unixmonth.setYear(thisyear); // to be sure it's a 4 digit value.

var entries_cache=3Dnew Array();
var tocall;

function addEvent(el,ev,fn){
 if(el.attachEvent)el.attachEvent('on'+ev,fn);
 else if(el.addEventListener)el.addEventListener(ev,fn,false);
}

if(typeof window.XMLHttpRequest!=3D"undefined") {
 if(navigator.userAgent.indexOf('KHTML')>0){
   setTimeout('kcalendar_refresh()',2000);
  }else{
   addEvent(window,'load',kcalendar_refresh);
  }
}

function kcalendar_build(year,month,day){
 var today=3Dnew Date;
 shownDate=3Dnew Date(year,month,day);
 cal=3Ddocument.createElement('table');
 cal.id=3D"wp-calendar";

// caption
  caption=3Ddocument.createElement('caption');
  =
caption.appendChild(document.createTextNode(dateMon[shownDate.getMonth()]=
+' '+shownDate.getFullYear()));
  cal.appendChild(caption);
  caption.id=3D"wp-calendar_caption";
=20
// draw day headers
// "var wd" value sets weekday display style; currently set to =
dateDayAbbr (Sun)
// swap commenting on "var wd" entries for weekday displays of either =
dateDayShort (S) or dateDay (Sunday)
 cal_head =3D document.createElement('THEAD');
 cal.appendChild(cal_head);=20
 cal_row=3Dcal_head.insertRow(0);
 cal_row.id=3D"calendar_daysRow";
 for(i=3D0;i<7;i++){
  cal_cell =3D document.createElement('TH');
  cal_row.appendChild(cal_cell);
  var wd =3D dateDayShort[(i+week_begins)%7];
//  var wd =3D dateDayAbbr[(i+week_begins)%7];
//  var wd =3D dateDay[(i+week_begins)%7];
  cal_cell.appendChild(document.createTextNode(wd));
  cal_cell.abbr =3Dwd;
  cal_cell.title=3Dwd;
  cal_cell.scope=3D"col";
 }
=20
 // draw navigation row month
 cal_foot =3D document.createElement('TFOOT');
 cal.appendChild(cal_foot);
 cal_row=3Dcal_foot.insertRow(0);
 cal_cell=3Dcal_row.insertCell(0);
 link_year=3DshownDate.getFullYear();
 link_month=3DshownDate.getMonth()-1;
 if(link_month=3D=3D-1){link_month=3D11;link_year--;}
=20
 // print prev. month nav if we have a post from back then...
 if(link_year > min_year || (link_year =3D=3D min_year && link_month+1 =
>=3D min_month)) {
    link=3Ddocument.createElement('a');
    link.appendChild(document.createTextNode(String.fromCharCode(171)+" =
" + dateMonShort[link_month]));
    =
link.href=3D"javascript:kcalendar_refresh("+link_year+","+(link_month+1)+=
");";    link.title =3D viewpostsfor(link_year,link_month)
    cal_cell.appendChild(link);
 }
 else { cal_cell.className=3D'pad'; }
 cal_cell.colSpan=3D3;
 cal_cell.abbr=3DdateMonShort[link_month];
 cal_cell.id=3D"prev"

 cal_cell=3Dcal_row.insertCell(1);
 cal_cell.className=3D"pad";
 spinner =3D document.createElement("IMG");
 spinner.id=3D"calendar_spin";
 spinner.src =3D siteurl + "/wp-content/plugins/livecalendar/wait.gif";
 cal_cell.appendChild(spinner);

 cal_cell=3Dcal_row.insertCell(2);
 cal_cell.colSpan=3D3;
 cal_cell.className=3D"pad";
 link_year=3DshownDate.getFullYear();
 link_month=3DshownDate.getMonth()+1;
 if(link_month=3D=3D12){link_month=3D0;link_year++;}
 if(link_year<today.getFullYear() || (link_year=3D=3Dtoday.getFullYear() =
&& link_month<=3Dtoday.getMonth() )) {
   link=3Ddocument.createElement('a');
   link.appendChild(document.createTextNode(dateMonShort[link_month] +" =
"+String.fromCharCode(187)));
   =
link.href=3D"javascript:kcalendar_refresh("+link_year+","+(link_month+1)+=
");";
   link.title =3D viewpostsfor(link_year,link_month)
   cal_cell.appendChild(link);
   cal_cell.abbr=3DdateMonShort[link_month];
   cal_cell.id=3D"next"
  }
 =20
 // draw navigation row year
 cal_row=3Dcal_foot.insertRow(1);
=20
 cal_cell=3Dcal_row.insertCell(0);
 link_year=3DshownDate.getFullYear()-1;
 link_month=3DshownDate.getMonth();
 if( link_year > min_year || (link_year =3D=3D min_year && link_month =
>=3D min_month)){

    link=3Ddocument.createElement('a');
    link.appendChild(document.createTextNode(String.fromCharCode(171)+" =
" + [link_year]));
    =
link.href=3D"javascript:kcalendar_refresh("+link_year+","+(link_month+1)+=
");";
    link.title =3D viewpostsfor(link_year,link_month)
    cal_cell.appendChild(link);
 }
 else { cal_cell.className =3D 'pad' }
 cal_cell.colSpan=3D3;
 cal_cell.abbr=3D[link_year];
 cal_cell.id=3D"prev"

 cal_cell=3Dcal_row.insertCell(1);
 cal_cell.className=3D"pad";

 cal_cell=3Dcal_row.insertCell(2);
 cal_cell.colSpan=3D3;
 cal_cell.className=3D"pad";
 link_year=3DshownDate.getFullYear()+1;
 link_month=3DshownDate.getMonth();
 if(link_year<today.getFullYear() || (link_year=3D=3Dtoday.getFullYear() =
&& link_month<=3Dtoday.getMonth() )) {
   link=3Ddocument.createElement('a');
   link.appendChild(document.createTextNode([link_year] +" =
"+String.fromCharCode(187)));
   =
link.href=3D"javascript:kcalendar_refresh("+link_year+","+(link_month+1)+=
");";
   link.title =3D viewpostsfor(link_year,link_month)
   cal_cell.appendChild(link);
   cal_cell.abbr=3D[link_year];
   cal_cell.id=3D"next"
  }
 =20
 cal_body =3D document.createElement('TBODY');
 cal.appendChild(cal_body);
 // get date of first cell
 firstcelldate=3Dnew =
Date(shownDate.getFullYear(),shownDate.getMonth(),1);
 cellDate=3D1-firstcelldate.getDay()+week_begins;
 if(cellDate>1)cellDate-=3D7;
 // draw rest of month
 =
days_in_last_month=3Dkcalendar_daysInMonth(shownDate.getFullYear(),shownD=
ate.getMonth()-1);
 for(i=3D0;i<6;i++){
  cal_row=3Dcal_body.insertRow(i);
  for(j=3D0;j<7;j++){
   cal_cell=3Dcal_row.insertCell(j);
   class_to_show=3D'';

   if(cellDate<1){
    class_to_show=3D'pad';
    num_to_show=3D'';//days_in_last_month+cellDate;
   }else =
if(cellDate>kcalendar_daysInMonth(shownDate.getFullYear(),shownDate.getMo=
nth())){
    class_to_show=3D'pad';
    =
num_to_show=3D'';//cellDate-kcalendar_daysInMonth(shownDate.getFullYear()=
,shownDate.getMonth());

   }else{
    num_to_show=3DcellDate;
    class_to_show=3D'';
    if(shownDate.getFullYear()=3D=3Dtoday.getFullYear() && =
shownDate.getMonth()=3D=3Dtoday.getMonth() && =
cellDate=3D=3Dtoday.getDate()){
     cal_cell.id=3D'today';
     class_to_show=3D'';
    }
   }
   cal_cell.appendChild(document.createTextNode(num_to_show));
   cal_cell.className=3Dclass_to_show;
   if(cal_cell.id !=3D 'today') {
     =
cal_cell.id=3D"kcalendar_"+shownDate.getFullYear()+"_"+(shownDate.getMont=
h()+1)+"_"+cellDate; }

   cellDate++;
  }
 }
=20

 =
tocall=3D'kcalendar_'+(shownDate.getFullYear())+"_"+(shownDate.getMonth()=
);
 return cal;
}

function kcalendar_create_links(arr){
 if(arr.length =3D=3D 0) return;
 for(i=3D0;i<arr.length;i++){
  split=3Darr[i].split(/: /);
  id=3D'kcalendar_'+split[0].replace(/-/g,'_');
  id=3Did.replace(/_0/g,'_');
  el=3Ddocument.getElementById(id);
  if(!el){ el=3Ddocument.getElementById('today'); }
  text=3Del.childNodes[0];
  el2=3Ddocument.createElement('a');
  el2.appendChild(text);
  el2.title=3Dsplit[1];
  datenums =3D split[0].split(/-/);
  el2.href =3D siteurl + permastruct;
  el2.href =3D el2.href.replace(/%year%/,datenums[0]);
  el2.href =3D el2.href.replace(/%monthnum%/,datenums[1]);
  el2.href =3D el2.href.replace(/%day%/,datenums[2]);
  el.appendChild(el2);
 }
 el=3Ddocument.getElementById('wp-calendar_caption');
 split=3Darr[0].split(/: /);
 if(el && split.length>1){
  split=3Dsplit[0].split(/-/);
  text=3Del.childNodes[0];
  el2=3Ddocument.createElement('a');
  el2.title=3D archives+' '+dateMon[split[1]-1]+ ' ' +split[0];
  el2.appendChild(text);
  el2.href =3D siteurl + m_permastruct;
  el2.href =3D el2.href.replace(/%year%/,split[0]);
  el2.href =3D el2.href.replace(/%monthnum%/,split[1]);
  // create fancy tooltips if the plugin is enabled...
  if( has_fp =3D=3D true ) FancyTooltips.autoCreation();
  el.appendChild(el2);
 }
}

function kcalendar_daysInMonth(year,month){
 if(month<0){month+=3D12;year--}
 if(month=3D=3D3||month=3D=3D5||month=3D=3D8||month=3D=3D10)return 30;
 if(month!=3D1)return 31;
 if(!(year%4))return 29;
 return 28;
}


function kcalendar_refresh(year,month){
  if(isNaN(year)){
    year=3Dunixmonth.getFullYear();
    month=3Dunixmonth.getMonth();
  } else {
    month--;
  }
  if(month<0 ){month+=3D12;year--}
  if(month>11){month-=3D12;year++}
  el=3Ddocument.getElementById('calendar');
  if(!el) {
   el2=3Ddocument.getElementById('wp-calendar');
   if(el2){
    el=3Ddocument.createElement('div');
    el.id=3D'calendar';
    el3=3Del2.parentNode;
    el3.insertBefore(el,el2);
    el3.removeChild(el2);
    el.appendChild(el2);
  }
 }
 if(!el) return;
 els=3Del.childNodes;
 for(i=3Del.childNodes.length-1;i>-1;i--)el.removeChild(els[i]);
 cal=3Dkcalendar_build(year,month,1);
 el.appendChild(cal);

 // get any applicable links for the dates
 if(entries_cache[tocall]){
  kcalendar_create_links(entries_cache[tocall]);
  el=3Ddocument.getElementById('calendar_spin');
  if(el) el.parentNode.removeChild(el);
 }else{
  var req =3D new XMLHttpRequest();
  if (req) {
   req.onreadystatechange=3Dfunction(){
    if(req.readyState=3D=3D4&&req.status=3D=3D200) {
     entries_cache[tocall]=3D(req.responseText)?
      req.responseText.split(/\n/):
      [];
     kcalendar_create_links(entries_cache[tocall]);
     el=3Ddocument.getElementById('calendar_spin');
     if(el) el.parentNode.removeChild(el);
    }
   };
   req.open('GET', siteurl + =
'/wp-content/plugins/livecalendar/kcalendar.php?year=3D'+shownDate.getFul=
lYear()+'&month=3D'+(shownDate.getMonth()+1));
   if(navigator.userAgent.indexOf('KHTML')=3D=3D-1)req.send(null);
   else req.send();
  }
 }
}

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.jorgemestre.com/wp-content/plugins/xinha4wp/xinha_core/htmlarea.js

=0A=
  =
/*--------------------------------------:noTabs=3Dtrue:tabSize=3D2:indent=
Size=3D2:--=0A=
    --  Xinha (is not htmlArea) - http://xinha.gogo.co.nz/=0A=
    --=0A=
    --  Use of Xinha is granted by the terms of the htmlArea License =
(based on=0A=
    --  BSD license)  please read license.txt in this package for =
details.=0A=
    --=0A=
    --  Xinha was originally based on work by Mihai Bazon which is:=0A=
    --      Copyright (c) 2003-2004 dynarch.com.=0A=
    --      Copyright (c) 2002-2003 interactivetools.com, inc.=0A=
    --      This copyright notice MUST stay intact for use.=0A=
    --=0A=
    --  Developers - Coding Style:=0A=
    --   For the sake of not committing needlessly conflicting changes,=0A=
    --=0A=
    --   * New code to be indented with 2 spaces ("soft tab").=0A=
    --   * New code preferably uses BSD-Style Bracing=0A=
    --      if(foo)=0A=
    --      {=0A=
    --        bar();=0A=
    --      }=0A=
    --   * Don't change brace styles unless you're working on the non =
BSD-Style=0A=
    --     area (so we don't get spurious changes in line numbering).=0A=
    --   * Don't change indentation unless you're working on the badly =
indented=0A=
    --     area (so we don't get spurious changes of large blocks of =
code).=0A=
    --   * Jedit is the recommended editor, a comment of this format =
should be=0A=
    --     included in the top 10 lines of the file (see the embedded =
edit mode)=0A=
    --=0A=
    --  $HeadURL: http://svn.xinha.python-hosting.com/trunk/htmlarea.js $=0A=
    --  $LastChangedDate: 2005-09-14 19:13:33 +1200 (Wed, 14 Sep 2005) $=0A=
    --  $LastChangedRevision: 316 $=0A=
    --  $LastChangedBy: niko $=0A=
    =
-------------------------------------------------------------------------=
-*/=0A=
=0A=
HTMLArea.version =3D=0A=
{=0A=
  'Release'   : 'Trunk',=0A=
  'Head'      : '$HeadURL: =
http://svn.xinha.python-hosting.com/trunk/htmlarea.js =
$'.replace(/^[^:]*: (.*) \$$/, '$1'),=0A=
  'Date'      : '$LastChangedDate: 2005-09-14 19:13:33 +1200 (Wed, 14 =
Sep 2005) $'.replace(/^[^:]*: ([0-9-]*) ([0-9:]*) ([+0-9]*) \((.*)\) =
\$/, '$4 $2 $3'),=0A=
  'Revision'  : '$LastChangedRevision: 316 $'.replace(/^[^:]*: (.*) =
\$$/, '$1'),=0A=
  'RevisionBy': '$LastChangedBy: niko $'.replace(/^[^:]*: (.*) \$$/, =
'$1')=0A=
}=0A=
=0A=
if (typeof _editor_url =3D=3D "string") {=0A=
  // Leave exactly one backslash at the end of _editor_url=0A=
  _editor_url =3D _editor_url.replace(/\x2f*$/, '/');=0A=
} else {=0A=
  alert("WARNING: _editor_url is not set!  You should set this variable =
to the editor files path; it should preferably be an absolute path, like =
in '/htmlarea/', but it can be relative if you prefer.  Further we will =
try to load the editor files correctly but we'll probably fail.");=0A=
  _editor_url =3D '';=0A=
}=0A=
=0A=
// make sure we have a language=0A=
if (typeof _editor_lang =3D=3D "string") {=0A=
  _editor_lang =3D _editor_lang.toLowerCase();=0A=
} else {=0A=
  _editor_lang =3D "en";=0A=
}=0A=
=0A=
// skin stylesheet to load=0A=
if (!(typeof _editor_skin =3D=3D "string")) {=0A=
  _editor_skin =3D "";=0A=
}=0A=
=0A=
var __htmlareas =3D [ ];=0A=
=0A=
// browser identification=0A=
HTMLArea.agt =3D navigator.userAgent.toLowerCase();=0A=
HTMLArea.is_ie	   =3D ((HTMLArea.agt.indexOf("msie") !=3D -1) && =
(HTMLArea.agt.indexOf("opera") =3D=3D -1));=0A=
HTMLArea.is_opera  =3D (HTMLArea.agt.indexOf("opera") !=3D -1);=0A=
HTMLArea.is_mac	   =3D (HTMLArea.agt.indexOf("mac") !=3D -1);=0A=
HTMLArea.is_mac_ie =3D (HTMLArea.is_ie && HTMLArea.is_mac);=0A=
HTMLArea.is_win_ie =3D (HTMLArea.is_ie && !HTMLArea.is_mac);=0A=
HTMLArea.is_gecko  =3D (navigator.product =3D=3D "Gecko");=0A=
=0A=
// Creates a new HTMLArea object.  Tries to replace the textarea with =
the given=0A=
// ID with it.=0A=
function HTMLArea(textarea, config)=0A=
{=0A=
  if(!textarea) throw("Tried to create HTMLArea without textarea =
specified.");=0A=
=0A=
  if (HTMLArea.checkSupportedBrowser()) {=0A=
    if (typeof config =3D=3D "undefined") {=0A=
      this.config =3D new HTMLArea.Config();=0A=
    } else {=0A=
      this.config =3D config;=0A=
    }=0A=
    this._htmlArea =3D null;=0A=
=0A=
    if(typeof textarea !=3D 'object')=0A=
    {=0A=
      textarea =3D HTMLArea.getElementById('textarea', textarea);=0A=
    }=0A=
    this._textArea =3D textarea;=0A=
       =0A=
    // Before we modify anything, get the initial textarea size=0A=
    this._initial_ta_size =3D=0A=
    {=0A=
      w: textarea.style.width ? textarea.style.width   : =
(textarea.offsetWidth + 'px'),=0A=
      h: textarea.style.height ? textarea.style.height : =
(textarea.offsetHeight + 'px')=0A=
    }=0A=
=0A=
    this._editMode =3D "wysiwyg";=0A=
    this.plugins =3D {};=0A=
    this._timerToolbar =3D null;=0A=
    this._timerUndo =3D null;=0A=
    this._undoQueue =3D new Array(this.config.undoSteps);=0A=
    this._undoPos =3D -1;=0A=
    this._customUndo =3D true;=0A=
    this._mdoc =3D document; // cache the document, we need it in plugins=0A=
    this.doctype =3D '';=0A=
    this.__htmlarea_id_num =3D __htmlareas.length;=0A=
    __htmlareas[this.__htmlarea_id_num] =3D this;=0A=
=0A=
    this._notifyListeners =3D { };=0A=
=0A=
    // Panels=0A=
    var panels =3D this._panels =3D=0A=
    {=0A=
      right:=0A=
      {=0A=
        on: true,=0A=
        container:    document.createElement('td'),=0A=
        panels: [ ]=0A=
      },=0A=
      left:=0A=
      {=0A=
        on: true,=0A=
        container:    document.createElement('td'),=0A=
        panels: [ ]=0A=
      },=0A=
      top:=0A=
      {=0A=
        on: true,=0A=
        container:    document.createElement('td'),=0A=
        panels: [ ]=0A=
      },=0A=
      bottom:=0A=
      {=0A=
        on: true,=0A=
        container:    document.createElement('td'),=0A=
        panels: [ ]=0A=
      }=0A=
    };=0A=
=0A=
    for(var i in panels)=0A=
    {=0A=
      panels[i].div =3D panels[i].container; // legacy=0A=
      panels[i].container.className =3D 'panels ' + i;=0A=
      HTMLArea.freeLater(panels[i], 'container');=0A=
      HTMLArea.freeLater(panels[i], 'div');      =0A=
    }=0A=
    HTMLArea.freeLater(this, '_textArea');=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.onload =3D function(){};=0A=
HTMLArea.init =3D function() {=0A=
    HTMLArea.onload();=0A=
};=0A=
=0A=
=0A=
// cache some regexps=0A=
HTMLArea.RE_tagName =3D /(<\/|<)\s*([^ \t\n>]+)/ig;=0A=
HTMLArea.RE_doctype =3D /(<!doctype((.|\n)*?)>)\n?/i;=0A=
HTMLArea.RE_head    =3D /<head>((.|\n)*?)<\/head>/i;=0A=
HTMLArea.RE_body    =3D /<body[^>]*>((.|\n|\r|\t)*?)<\/body>/i;=0A=
HTMLArea.RE_Specials =3D /([\/\^$*+?.()|{}[\]])/g;=0A=
HTMLArea.RE_email    =3D =
/[a-z0-9_]{3,}@[a-z0-9_-]{2,}(\.[a-z0-9_-]{2,})+/i;=0A=
HTMLArea.RE_url      =3D =
/(https?:\/\/)?(([a-z0-9_]+:[a-z0-9_]+@)?[a-z0-9_-]{2,}(\.[a-z0-9_-]{2,})=
{2,}(:[0-9]+)?(\/\S+)*)/i;=0A=
=0A=
HTMLArea.Config =3D function () {=0A=
  var cfg =3D this;=0A=
  this.version =3D HTMLArea.version.Revision;=0A=
=0A=
  // Width and Height=0A=
  //  you may set these as follows=0A=
  //  width =3D 'auto'      -- the width of the original textarea will =
be used=0A=
  //  width =3D 'toolbar'   -- the width of the toolbar will be used=0A=
  //  width =3D '<css measure>' -- use any css measurement, eg width =3D =
'75%'=0A=
  //=0A=
  //  height =3D 'auto'     -- the height of the original textarea=0A=
  //  height =3D '<css measure>' -- any css measurement, eg height =3D =
'480px'=0A=
  this.width  =3D "auto";=0A=
  this.height =3D "auto";=0A=
=0A=
  // the next parameter specifies whether the toolbar should be included=0A=
  // in the size above, or are extra to it.  If false then it's =
recommended=0A=
  // to have explicit pixel sizes above (or on your textarea and have =
auto above)=0A=
  this.sizeIncludesBars =3D true;=0A=
=0A=
  // the next parameter specifies whether the panels should be included=0A=
  // in the size above, or are extra to it.  If false then it's =
recommended=0A=
  // to have explicit pixel sizes above (or on your textarea and have =
auto above)=0A=
  this.sizeIncludesPanels =3D true;=0A=
=0A=
  // each of the panels has a dimension, for the left/right it's the =
width=0A=
  // for the top/bottom it's the height.=0A=
  //=0A=
  // WARNING: PANEL DIMENSIONS MUST BE SPECIFIED AS PIXEL WIDTHS=0A=
  this.panel_dimensions =3D=0A=
  {=0A=
    left:   '200px', // Width=0A=
    right:  '200px',=0A=
    top:    '100px', // Height=0A=
    bottom: '100px'=0A=
  }=0A=
=0A=
  // enable creation of a status bar?=0A=
  this.statusBar =3D true;=0A=
=0A=
  // intercept ^V and use the HTMLArea paste command=0A=
  // If false, then passes ^V through to browser editor widget=0A=
  this.htmlareaPaste =3D false;=0A=
=0A=
  this.mozParaHandler =3D 'best'; // set to 'built-in', 'dirty' or 'best'=0A=
                                // built-in: will (may) use 'br' instead =
of 'p' tags=0A=
                                // dirty   : will use p and work good =
enough for the majority of cases,=0A=
                                // best    : works the best, but it's =
about 12kb worth of javascript=0A=
                                //   and will probably be slower than =
'dirty'.  This is the "EnterParagraphs"=0A=
                                //   plugin from "hipikat", rolled in to =
be part of the core code=0A=
=0A=
  // maximum size of the undo queue=0A=
  this.undoSteps =3D 20;=0A=
=0A=
  // the time interval at which undo samples are taken=0A=
  this.undoTimeout =3D 500;	// 1/2 sec.=0A=
=0A=
  // if true then HTMLArea will retrieve the full HTML, starting with the=0A=
  // <HTML> tag.=0A=
  this.fullPage =3D false;=0A=
=0A=
  // style included in the iframe document=0A=
  this.pageStyle =3D "";=0A=
=0A=
  // external stylesheets to load (REFERENCE THESE ABSOLUTELY)=0A=
  this.pageStyleSheets =3D [ ];=0A=
=0A=
  // specify a base href for relative links=0A=
  this.baseHref  =3D null;=0A=
=0A=
  // we can strip the base href out of relative links to leave them =
relative, reason for this=0A=
  //   especially if you don't specify a baseHref is that mozilla at =
least (& IE ?) will prefix=0A=
  //   the baseHref to any relative links to make them absolute, which =
isn't what you want most the time.=0A=
  this.stripBaseHref =3D true;=0A=
=0A=
  // and we can strip the url of the editor page from named links (eg <a =
href=3D"#top">...</a>)=0A=
  //  reason for this is that mozilla at least (and IE ?) prefixes =
location.href to any=0A=
  //  that don't have a url prefixing them=0A=
  this.stripSelfNamedAnchors =3D true;=0A=
=0A=
  // sometimes high-ascii in links can cause problems for servers =
(basically they don't recognise them)=0A=
  //  so you can use this flag to ensure that all characters other than =
the normal ascii set (actually=0A=
  //  only ! through ~) are escaped in URLs to % codes=0A=
  this.only7BitPrintablesInURLs =3D true;=0A=
=0A=
  // if you are putting the HTML written in Xinha into an email you =
might want it to be 7-bit=0A=
  //  characters only.  This config option (off by default) will convert =
all characters consuming=0A=
  //  more than 7bits into UNICODE decimal entity references (actually =
it will convert anything=0A=
  //  below <space> (chr 20) except cr, lf and tab and above <tilde> (~, =
chr 7E))=0A=
  this.sevenBitClean  =3D false;=0A=
=0A=
  // sometimes we want to be able to replace some string in the html =
comng in and going out=0A=
  //  so that in the editor we use the "internal" string, and outside =
and in the source view=0A=
  //  we use the "external" string  this is useful for say making =
special codes for=0A=
  //  your absolute links, your external string might be some special =
code, say "{server_url}"=0A=
  //  an you say that the internal represenattion of that should be =
http://your.server/=0A=
  this.specialReplacements =3D { }; // { 'external_string' : =
'internal_string' }=0A=
=0A=
  // set to true if you want Word code to be cleaned upon Paste=0A=
  this.killWordOnPaste =3D true;=0A=
=0A=
  // enable the 'Target' field in the Make Link dialog=0A=
  this.makeLinkShowsTarget =3D true;=0A=
=0A=
  // CharSet of the iframe, default is the charset of the document=0A=
  this.charSet =3D HTMLArea.is_gecko ? document.characterSet : =
document.charset;=0A=
=0A=
  // URL-s=0A=
  this.imgURL =3D "images/";=0A=
  this.popupURL =3D "popups/";=0A=
  this.helpURL  =3D _editor_url + "reference.html";=0A=
=0A=
  // remove tags (these have to be a regexp, or null if this =
functionality is not desired)=0A=
  this.htmlRemoveTags =3D null;=0A=
=0A=
  // Turning this on will turn all "linebreak" and "separator" items in =
your toolbar into soft-breaks,=0A=
  // this means that if the items between that item and the next =
linebreak/separator can=0A=
  // fit on the same line as that which came before then they will, =
otherwise they will=0A=
  // float down to the next line.=0A=
=0A=
  // If you put a linebreak and separator next to each other, only the =
separator will=0A=
  // take effect, this allows you to have one toolbar that works for =
both flowToolbars =3D true and false=0A=
  // infact the toolbar below has been designed in this way, if =
flowToolbars is false then it will=0A=
  // create explictly two lines (plus any others made by plugins) =
breaking at justifyleft, however if=0A=
  // flowToolbars is false and your window is narrow enough then it will =
create more than one line=0A=
  // even neater, if you resize the window the toolbars will reflow.  =
Niiiice.=0A=
=0A=
  this.flowToolbars =3D true;=0A=
=0A=
  /** CUSTOMIZING THE TOOLBAR=0A=
   * -------------------------=0A=
   *=0A=
   * It is recommended that you customize the toolbar contents in an=0A=
   * external file (i.e. the one calling HTMLArea) and leave this one=0A=
   * unchanged.  That's because when we (InteractiveTools.com) release a=0A=
   * new official version, it's less likely that you will have problems=0A=
   * upgrading HTMLArea.=0A=
   */=0A=
  this.toolbar =3D=0A=
  [=0A=
    ["popupeditor"],=0A=
    =
["separator","formatblock","fontname","fontsize","bold","italic","underli=
ne","strikethrough"],=0A=
    ["separator","forecolor","hilitecolor","textindicator"],=0A=
    ["separator","subscript","superscript"],=0A=
    =
["linebreak","separator","justifyleft","justifycenter","justifyright","ju=
stifyfull"],=0A=
    =
["separator","insertorderedlist","insertunorderedlist","outdent","indent"=
],=0A=
    =
["separator","inserthorizontalrule","createlink","insertimage","inserttab=
le"],=0A=
    ["separator","undo","redo","selectall"], (HTMLArea.is_gecko ? [] : =
["cut","copy","paste","overwrite","saveas"]),=0A=
    =
["separator","killword","removeformat","toggleborders","lefttoright", =
"righttoleft","separator","htmlmode","about"]=0A=
  ];=0A=
=0A=
=0A=
  this.fontname =3D {=0A=
    "&mdash; font &mdash;":         '',=0A=
    "Arial":	   'arial,helvetica,sans-serif',=0A=
    "Courier New":	   'courier new,courier,monospace',=0A=
    "Georgia":	   'georgia,times new roman,times,serif',=0A=
    "Tahoma":	   'tahoma,arial,helvetica,sans-serif',=0A=
    "Times New Roman": 'times new roman,times,serif',=0A=
    "Verdana":	   'verdana,arial,helvetica,sans-serif',=0A=
    "impact":	   'impact',=0A=
    "WingDings":	   'wingdings'=0A=
  };=0A=
=0A=
  this.fontsize =3D {=0A=
    "&mdash; size &mdash;"  : "",=0A=
    "1 (8 pt)" : "1",=0A=
    "2 (10 pt)": "2",=0A=
    "3 (12 pt)": "3",=0A=
    "4 (14 pt)": "4",=0A=
    "5 (18 pt)": "5",=0A=
    "6 (24 pt)": "6",=0A=
    "7 (36 pt)": "7"=0A=
  };=0A=
=0A=
  this.formatblock =3D {=0A=
    "&mdash; format &mdash;"  : "",=0A=
    "Heading 1": "h1",=0A=
    "Heading 2": "h2",=0A=
    "Heading 3": "h3",=0A=
    "Heading 4": "h4",=0A=
    "Heading 5": "h5",=0A=
    "Heading 6": "h6",=0A=
    "Normal"   : "p",=0A=
    "Address"  : "address",=0A=
    "Formatted": "pre"=0A=
  };=0A=
=0A=
  this.customSelects =3D {};=0A=
=0A=
  function cut_copy_paste(e, cmd, obj) {=0A=
    e.execCommand(cmd);=0A=
  };=0A=
=0A=
  this.debug =3D true;=0A=
=0A=
  this.URIs =3D {=0A=
   "blank": "popups/blank.html",=0A=
   "link": "link.html",=0A=
   "insert_image": "insert_image.html",=0A=
   "insert_table": "insert_table.html",=0A=
   "select_color": "select_color.html",=0A=
   "about": "about.html"=0A=
  };=0A=
=0A=
=0A=
  // ADDING CUSTOM BUTTONS: please read below!=0A=
  // format of the btnList elements is "ID: [ ToolTip, Icon, Enabled in =
text mode?, ACTION ]"=0A=
  //    - ID: unique ID for the button.  If the button calls =
document.execCommand=0A=
  //	    it's wise to give it the same name as the called command.=0A=
  //    - ACTION: function that gets called when the button is clicked.=0A=
  //              it has the following prototype:=0A=
  //                 function(editor, buttonName)=0A=
  //              - editor is the HTMLArea object that triggered the call=0A=
  //              - buttonName is the ID of the clicked button=0A=
  //              These 2 parameters makes it possible for you to use =
the same=0A=
  //              handler for more HTMLArea objects or for more =
different buttons.=0A=
  //    - ToolTip: tooltip, will be translated below=0A=
  //    - Icon: path to an icon image file for the button=0A=
  //            OR; you can use an 18x18 block of a larger image by =
supllying an array=0A=
  //            that has three elemtents, the first is the larger image, =
the second is the column=0A=
  //            the third is the row.  The ros and columns numbering =
starts at 0 but there is=0A=
  //            a header row and header column which have numbering to =
make life easier.=0A=
  //            See images/buttons_main.gif to see how it's done.=0A=
  //    - Enabled in text mode: if false the button gets disabled for =
text-only mode; otherwise enabled all the time.=0A=
  this.btnList =3D {=0A=
    bold:          [ "Bold",   HTMLArea._lc({key: 'button_bold', string: =
["ed_buttons_main.gif",3,2]}, 'HTMLArea'), false, function(e) =
{e.execCommand("bold");} ],=0A=
    italic:        [ "Italic", HTMLArea._lc({key: 'button_italic', =
string: ["ed_buttons_main.gif",2,2]}, 'HTMLArea'), false, function(e) =
{e.execCommand("italic");} ],=0A=
    underline:     [ "Underline", HTMLArea._lc({key: 'button_underline', =
string: ["ed_buttons_main.gif",2,0]}, 'HTMLArea'), false, function(e) =
{e.execCommand("underline");} ],=0A=
    strikethrough: [ "Strikethrough", HTMLArea._lc({key: =
'button_strikethrough', string: ["ed_buttons_main.gif",3,0]}, =
'HTMLArea'), false, function(e) {e.execCommand("strikethrough");} ],=0A=
    subscript:     [ "Subscript", HTMLArea._lc({key: 'button_subscript', =
string: ["ed_buttons_main.gif",3,1]}, 'HTMLArea'), false, function(e) =
{e.execCommand("subscript");} ],=0A=
    superscript:   [ "Superscript", HTMLArea._lc({key: =
'button_superscript', string: ["ed_buttons_main.gif",2,1]}, 'HTMLArea'), =
false, function(e) {e.execCommand("superscript");} ],=0A=
=0A=
    justifyleft:   [ "Justify Left", ["ed_buttons_main.gif",0,0], false, =
function(e) {e.execCommand("justifyleft");} ],=0A=
    justifycenter: [ "Justify Center", ["ed_buttons_main.gif",1,1], =
false, function(e){e.execCommand("justifycenter");}],=0A=
    justifyright: [ "Justify Right", ["ed_buttons_main.gif",1,0], false, =
function(e) {e.execCommand("justifyright");} ],=0A=
    justifyfull: [ "Justify Full", ["ed_buttons_main.gif",0,1], false, =
function(e) {e.execCommand("justifyfull");} ],=0A=
=0A=
=0A=
    orderedlist: [ "Ordered List", ["ed_buttons_main.gif",0,3], false, =
function(e) {e.execCommand("insertorderedlist");} ],=0A=
    unorderedlist: [ "Bulleted List", ["ed_buttons_main.gif",1,3], =
false, function(e) {e.execCommand("insertunorderedlist");} ],=0A=
    insertorderedlist: [ "Ordered List", ["ed_buttons_main.gif",0,3], =
false, function(e) {e.execCommand("insertorderedlist");} ],=0A=
    insertunorderedlist: [ "Bulleted List", ["ed_buttons_main.gif",1,3], =
false, function(e) {e.execCommand("insertunorderedlist");} ],=0A=
=0A=
    outdent: [ "Decrease Indent", ["ed_buttons_main.gif",1,2], false, =
function(e) {e.execCommand("outdent");} ],=0A=
    indent: [ "Increase Indent",["ed_buttons_main.gif",0,2], false, =
function(e) {e.execCommand("indent");} ],=0A=
    forecolor: [ "Font Color", ["ed_buttons_main.gif",3,3], false, =
function(e) {e.execCommand("forecolor");} ],=0A=
    hilitecolor: [ "Background Color", ["ed_buttons_main.gif",2,3], =
false, function(e) {e.execCommand("hilitecolor");} ],=0A=
=0A=
    undo: [ "Undoes your last action", ["ed_buttons_main.gif",4,2], =
false, function(e) {e.execCommand("undo");} ],=0A=
    redo: [ "Redoes your last action", ["ed_buttons_main.gif",5,2], =
false, function(e) {e.execCommand("redo");} ],=0A=
    cut: [ "Cut selection", ["ed_buttons_main.gif",5,0], false, =
cut_copy_paste ],=0A=
    copy: [ "Copy selection", ["ed_buttons_main.gif",4,0], false, =
cut_copy_paste ],=0A=
    paste: [ "Paste from clipboard", ["ed_buttons_main.gif",4,1], false, =
cut_copy_paste ],=0A=
    selectall: [ "Select all", "ed_selectall.gif", false, function(e) =
{e.execCommand("selectall");} ],=0A=
=0A=
=0A=
    inserthorizontalrule: [ "Horizontal Rule", =
["ed_buttons_main.gif",6,0], false, function(e) =
{e.execCommand("inserthorizontalrule");} ],=0A=
    createlink: [ "Insert Web Link", ["ed_buttons_main.gif",6,1], false, =
function(e) {e._createLink();} ],=0A=
    insertimage: [ "Insert/Modify Image", ["ed_buttons_main.gif",6,3], =
false, function(e) {e.execCommand("insertimage");} ],=0A=
    inserttable: [ "Insert Table", ["ed_buttons_main.gif",6,2], false, =
function(e) {e.execCommand("inserttable");} ],=0A=
=0A=
=0A=
    htmlmode: [ "Toggle HTML Source", ["ed_buttons_main.gif",7,0], true, =
function(e) {e.execCommand("htmlmode");} ],=0A=
    toggleborders: [ "Toggle Borders", ["ed_buttons_main.gif",7,2], =
false, function(e) { e._toggleBorders() } ],=0A=
    print:         [ "Print document", ["ed_buttons_main.gif",8,1], =
false, function(e) {e._iframe.contentWindow.print();} ],=0A=
    saveas: [ "Save as", "ed_saveas.gif", false, function(e) =
{e.execCommand("saveas",false,"noname.htm");} ],=0A=
    about: [ "About this editor", ["ed_buttons_main.gif",8,2], true, =
function(e) {e.execCommand("about");} ],=0A=
    showhelp: [ "Help using editor", ["ed_buttons_main.gif",9,2], true, =
function(e) {e.execCommand("showhelp");} ],=0A=
=0A=
    splitblock:    [ "Split Block", "ed_splitblock.gif", false, =
function(e) {e._splitBlock();} ],=0A=
    lefttoright: [ "Direction left to right", =
["ed_buttons_main.gif",0,4], false, function(e) =
{e.execCommand("lefttoright");} ],=0A=
    righttoleft: [ "Direction right to left", =
["ed_buttons_main.gif",1,4], false, function(e) =
{e.execCommand("righttoleft");} ],=0A=
    overwrite: [ "Insert/Overwrite", "ed_overwrite.gif", false, =
function(e) {e.execCommand("overwrite");} ],=0A=
=0A=
    wordclean:     [ "MS Word Cleaner", ["ed_buttons_main.gif",5,3], =
false, function(e) {e._wordClean();} ],=0A=
    clearfonts:    [ "Clear Inline Font Specifications", =
["ed_buttons_main.gif",5,4], false, function(e) {e._clearFonts();} ],=0A=
    removeformat:  [ "Remove formatting", ["ed_buttons_main.gif",4,4], =
false, function(e) {e.execCommand("removeformat");} ],=0A=
    killword:      [ "Clear MSOffice tags", ["ed_buttons_main.gif",4,3], =
false, function(e) {e.execCommand("killword");} ]=0A=
=0A=
  };=0A=
  /* ADDING CUSTOM BUTTONS=0A=
   * ---------------------=0A=
   *=0A=
   * It is recommended that you add the custom buttons in an external=0A=
   * file and leave this one unchanged.  That's because when we=0A=
   * (InteractiveTools.com) release a new official version, it's less=0A=
   * likely that you will have problems upgrading HTMLArea.=0A=
   *=0A=
   * Example on how to add a custom button when you construct the =
HTMLArea:=0A=
   *=0A=
   *   var editor =3D new HTMLArea("your_text_area_id");=0A=
   *   var cfg =3D editor.config; // this is the default configuration=0A=
   *   cfg.btnList["my-hilite"] =3D=0A=
   *	[ function(editor) { editor.surroundHTML('<span =
style=3D"background:yellow">', '</span>'); }, // action=0A=
   *	  "Highlight selection", // tooltip=0A=
   *	  "my_hilite.gif", // image=0A=
   *	  false // disabled in text mode=0A=
   *	];=0A=
   *   cfg.toolbar.push(["linebreak", "my-hilite"]); // add the new =
button to the toolbar=0A=
   *=0A=
   * An alternate (also more convenient and recommended) way to=0A=
   * accomplish this is to use the registerButton function below.=0A=
   */=0A=
  // initialize tooltips from the I18N module and generate correct image =
path=0A=
  for (var i in this.btnList) {=0A=
    var btn =3D this.btnList[i];=0A=
    if(typeof btn[1] !=3D 'string')=0A=
    {=0A=
      btn[1][0] =3D _editor_url + this.imgURL + btn[1][0];=0A=
    }=0A=
    else=0A=
    {=0A=
      btn[1] =3D _editor_url + this.imgURL + btn[1];=0A=
    }=0A=
    btn[0] =3D HTMLArea._lc(btn[0]); //initialize tooltip=0A=
  }=0A=
=0A=
};=0A=
=0A=
/** Helper function: register a new button with the configuration.  It =
can be=0A=
 * called with all 5 arguments, or with only one (first one).  When =
called with=0A=
 * only one argument it must be an object with the following properties: =
id,=0A=
 * tooltip, image, textMode, action.  Examples:=0A=
 *=0A=
 * 1. config.registerButton("my-hilite", "Hilite text", "my-hilite.gif", =
false, function(editor) {...});=0A=
 * 2. config.registerButton({=0A=
 *      id       : "my-hilite",      // the ID of your button=0A=
 *      tooltip  : "Hilite text",    // the tooltip=0A=
 *      image    : "my-hilite.gif",  // image to be displayed in the =
toolbar=0A=
 *      textMode : false,            // disabled in text mode=0A=
 *      action   : function(editor) { // called when the button is =
clicked=0A=
 *                   editor.surroundHTML('<span class=3D"hilite">', =
'</span>');=0A=
 *                 },=0A=
 *      context  : "p"               // will be disabled if outside a =
<p> element=0A=
 *    });=0A=
 */=0A=
HTMLArea.Config.prototype.registerButton =3D function(id, tooltip, =
image, textMode, action, context) {=0A=
  var the_id;=0A=
  if (typeof id =3D=3D "string") {=0A=
    the_id =3D id;=0A=
  } else if (typeof id =3D=3D "object") {=0A=
    the_id =3D id.id;=0A=
  } else {=0A=
    alert("ERROR [HTMLArea.Config::registerButton]:\ninvalid arguments");=0A=
    return false;=0A=
  }=0A=
  // check for existing id=0A=
  if (typeof this.customSelects[the_id] !=3D "undefined") {=0A=
    // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown =
with the same ID already exists.");=0A=
  }=0A=
  if (typeof this.btnList[the_id] !=3D "undefined") {=0A=
    // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button =
with the same ID already exists.");=0A=
  }=0A=
  switch (typeof id) {=0A=
      case "string": this.btnList[id] =3D [ tooltip, image, textMode, =
action, context ]; break;=0A=
      case "object": this.btnList[id.id] =3D [ id.tooltip, id.image, =
id.textMode, id.action, id.context ]; break;=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.prototype.registerPanel =3D function(side, object)=0A=
{=0A=
  if(!side) side =3D 'right';=0A=
  var panel =3D this.addPanel(side);=0A=
  if(object)=0A=
  {=0A=
    object.drawPanelIn(panel);=0A=
  }=0A=
}=0A=
=0A=
/** The following helper function registers a dropdown box with the =
editor=0A=
 * configuration.  You still have to add it to the toolbar, same as with =
the=0A=
 * buttons.  Call it like this:=0A=
 *=0A=
 * FIXME: add example=0A=
 */=0A=
HTMLArea.Config.prototype.registerDropdown =3D function(object) {=0A=
  // check for existing id=0A=
  if (typeof this.customSelects[object.id] !=3D "undefined") {=0A=
    // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA dropdown =
with the same ID already exists.");=0A=
  }=0A=
  if (typeof this.btnList[object.id] !=3D "undefined") {=0A=
    // alert("WARNING [HTMLArea.Config::registerDropdown]:\nA button =
with the same ID already exists.");=0A=
  }=0A=
  this.customSelects[object.id] =3D object;=0A=
};=0A=
=0A=
/** Call this function to remove some buttons/drop-down boxes from the =
toolbar.=0A=
 * Pass as the only parameter a string containing button/drop-down names=0A=
 * delimited by spaces.  Note that the string should also begin with a =
space=0A=
 * and end with a space.  Example:=0A=
 *=0A=
 *   config.hideSomeButtons(" fontname fontsize textindicator ");=0A=
 *=0A=
 * It's useful because it's easier to remove stuff from the defaul =
toolbar than=0A=
 * create a brand new toolbar ;-)=0A=
 */=0A=
HTMLArea.Config.prototype.hideSomeButtons =3D function(remove) {=0A=
  var toolbar =3D this.toolbar;=0A=
  for (var i =3D toolbar.length; --i >=3D 0;) {=0A=
    var line =3D toolbar[i];=0A=
    for (var j =3D line.length; --j >=3D 0; ) {=0A=
      if (remove.indexOf(" " + line[j] + " ") >=3D 0) {=0A=
        var len =3D 1;=0A=
        if (/separator|space/.test(line[j + 1])) {=0A=
          len =3D 2;=0A=
        }=0A=
        line.splice(j, len);=0A=
      }=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
/** Helper Function: add buttons/drop-downs boxes with title or =
separator to the toolbar=0A=
 * if the buttons/drop-downs boxes doesn't allready exists.=0A=
 * id: button or selectbox (as array with separator or title)=0A=
 * where: button or selectbox (as array if the first is not found take =
the second and so on)=0A=
 * position:=0A=
 * -1 =3D insert button (id) one position before the button (where)=0A=
 * 0 =3D replace button (where) by button (id)=0A=
 * +1 =3D insert button (id) one position after button (where)=0A=
 *=0A=
 * cfg.addToolbarElement(["T[title]", "button_id", "separator"] , =
["first_id","second_id"], -1);=0A=
*/=0A=
=0A=
HTMLArea.Config.prototype.addToolbarElement =3D function(id, where, =
position) {=0A=
  var toolbar =3D this.toolbar;=0A=
  var a, i, j, o, sid;=0A=
  var idIsArray =3D false;=0A=
  var whereIsArray =3D false;=0A=
  var whereLength =3D 0;=0A=
  var whereJ =3D 0;=0A=
  var whereI =3D 0;=0A=
  var exists =3D false;=0A=
  var found =3D false;=0A=
  // check if id and where are arrys=0A=
  if ((id && typeof id =3D=3D "object") && (id.constructor =3D=3D =
Array)) {=0A=
    idIsArray =3D true;=0A=
  }=0A=
  if ((where && typeof where =3D=3D "object") && (where.constructor =
=3D=3D Array)) {=0A=
    whereIsArray =3D true;=0A=
    whereLength =3D where.length;=0A=
	}=0A=
=0A=
  if (idIsArray) { //find the button/select box in input array=0A=
    for (i =3D 0; i < id.length; ++i) {=0A=
      if ((id[i] !=3D "separator") && (id[i].indexOf("T[") !=3D 0)) {=0A=
        sid =3D id[i];=0A=
      }=0A=
    }=0A=
  } else {=0A=
    sid =3D id;=0A=
  }=0A=
=0A=
  for (var i =3D 0; !exists && !found && i < toolbar.length; ++i) {=0A=
    a =3D toolbar[i]=0A=
    for (j =3D 0; !found && j < a.length; ++j) {=0A=
      if (a[i] =3D=3D sid) { // check if button/select box exists=0A=
        exists =3D true;=0A=
        break;=0A=
      }=0A=
      if (whereIsArray) {=0A=
        for (o =3D 0; o < whereLength; ++o) {=0A=
          if(a[j] =3D=3D where[o]) {=0A=
            if (o =3D=3D 0) {=0A=
              found =3D true;=0A=
              j--;=0A=
              break;=0A=
            } else {=0A=
              whereI =3D i;=0A=
              whereJ =3D j;=0A=
              whereLength =3D o;=0A=
            }=0A=
          }=0A=
        }=0A=
      } else {=0A=
        if (a[j] =3D=3D where) { // find the position to insert=0A=
          found =3D true;=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  if (!exists) {=0A=
    if (!found && whereIsArray) { //if check found any other as the =
first button=0A=
      if (where.length !=3D whereLength) {=0A=
        j =3D whereJ;=0A=
        a =3D toolbar[whereI];=0A=
        found =3D true;=0A=
      }=0A=
    }=0A=
    if (found) {=0A=
      if (position =3D=3D 0) { // replace the found button=0A=
        if (idIsArray) {=0A=
          a[j] =3D id[id.length-1];=0A=
          for (i =3D id.length-1; --i >=3D 0;) {=0A=
            a.splice(j, 0, id[i]);=0A=
          }=0A=
        } else {=0A=
          a[j] =3D id;=0A=
        }=0A=
      } else { // insert before/after the found button=0A=
        if (position < 0) {=0A=
          j =3D j + position + 1; //correct position before=0A=
        } else if (position > 0) {=0A=
          j =3D j + position; //correct posion after=0A=
        }=0A=
        if (idIsArray) {=0A=
          for (i =3D id.length; --i >=3D 0;) {=0A=
            a.splice(j, 0, id[i]);=0A=
          }=0A=
        } else {=0A=
           a.splice(j, 0, id);=0A=
        }=0A=
      }=0A=
    }	else { // no button found=0A=
      toolbar[0].splice(0, 0, "separator");=0A=
      if (idIsArray) {=0A=
        for (i =3D id.length; --i >=3D 0;) {=0A=
          toolbar[0].splice(0, 0, id[i]);=0A=
        }=0A=
      } else {=0A=
        toolbar[0].splice(0, 0, id);=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
/** Helper function: replace all TEXTAREA-s in the document with =
HTMLArea-s. */=0A=
HTMLArea.replaceAll =3D function(config) {=0A=
  var tas =3D document.getElementsByTagName("textarea");=0A=
  for (var i =3D tas.length; i > 0; (new HTMLArea(tas[--i], =
config)).generate());=0A=
};=0A=
=0A=
/** Helper function: replaces the TEXTAREA with the given ID with =
HTMLArea. */=0A=
HTMLArea.replace =3D function(id, config)=0A=
{=0A=
  var ta =3D HTMLArea.getElementById("textarea", id);=0A=
  return ta ? (new HTMLArea(ta, config)).generate() : null;;=0A=
};=0A=
=0A=
// Creates the toolbar and appends it to the _htmlarea=0A=
HTMLArea.prototype._createToolbar =3D function () {=0A=
  var editor =3D this;	// to access this in nested functions=0A=
=0A=
  var toolbar =3D document.createElement("div");=0A=
  // ._toolbar is for legacy, ._toolBar is better thanks.=0A=
  this._toolBar =3D this._toolbar =3D toolbar;=0A=
  toolbar.className =3D "toolbar";=0A=
  toolbar.unselectable =3D "1";=0A=
=0A=
  HTMLArea.freeLater(this, '_toolBar');=0A=
  HTMLArea.freeLater(this, '_toolbar');=0A=
  =0A=
  var tb_row =3D null;=0A=
  var tb_objects =3D new Object();=0A=
  this._toolbarObjects =3D tb_objects;=0A=
=0A=
	this._createToolbar1(editor, toolbar, tb_objects);=0A=
	this._htmlArea.appendChild(toolbar);      =0A=
  =0A=
  return toolbar;=0A=
}=0A=
=0A=
=0A=
HTMLArea.prototype._setConfig =3D function(config) {=0A=
	this.config =3D config;=0A=
}=0A=
=0A=
HTMLArea.prototype._addToolbar =3D function() {=0A=
	this._createToolbar1(this, this._toolbar, this._toolbarObjects);=0A=
}=0A=
=0A=
// separate from previous createToolBar to allow dynamic change of =
toolbar=0A=
HTMLArea.prototype._createToolbar1 =3D function (editor, toolbar, =
tb_objects) {=0A=
=0A=
  // This shouldn't be necessary, but IE seems to float outside of the =
container=0A=
  // when we float toolbar sections, so we have to clear:both here as =
well=0A=
  // as at the end (which we do have to do).=0A=
  if(editor.config.flowToolbars)=0A=
  {=0A=
    var brk =3D document.createElement('div');=0A=
    brk.style.height =3D=0A=
      brk.style.width =3D=0A=
      brk.style.lineHeight =3D=0A=
      brk.style.fontSize =3D '1px';=0A=
    brk.style.clear =3D 'both';=0A=
    toolbar.appendChild(brk);=0A=
  }=0A=
=0A=
  // creates a new line in the toolbar=0A=
  function newLine() {=0A=
    if(typeof tb_row !=3D 'undefined' && tb_row.childNodes.length =3D=3D =
0) return;=0A=
=0A=
    var table =3D document.createElement("table");=0A=
    table.border =3D "0px";=0A=
    table.cellSpacing =3D "0px";=0A=
    table.cellPadding =3D "0px";=0A=
    if(editor.config.flowToolbars)=0A=
    {=0A=
      if(HTMLArea.is_ie)=0A=
      {=0A=
        table.style.styleFloat =3D "left";=0A=
      }=0A=
      else=0A=
      {=0A=
        table.style.cssFloat =3D "left";=0A=
      }=0A=
    }=0A=
=0A=
    toolbar.appendChild(table);=0A=
    // TBODY is required for IE, otherwise you don't see anything=0A=
    // in the TABLE.=0A=
    var tb_body =3D document.createElement("tbody");=0A=
    table.appendChild(tb_body);=0A=
    tb_row =3D document.createElement("tr");=0A=
    tb_body.appendChild(tb_row);=0A=
=0A=
    table.className =3D 'toolbarRow'; // meh, kinda.=0A=
  }; // END of function: newLine=0A=
=0A=
  // init first line=0A=
  newLine();=0A=
=0A=
  // updates the state of a toolbar element.  This function is member of=0A=
  // a toolbar element object (unnamed objects created by createButton or=0A=
  // createSelect functions below).=0A=
  function setButtonStatus(id, newval) {=0A=
    var oldval =3D this[id];=0A=
    var el =3D this.element;=0A=
    if (oldval !=3D newval) {=0A=
      switch (id) {=0A=
          case "enabled":=0A=
        if (newval) {=0A=
          HTMLArea._removeClass(el, "buttonDisabled");=0A=
          el.disabled =3D false;=0A=
        } else {=0A=
          HTMLArea._addClass(el, "buttonDisabled");=0A=
          el.disabled =3D true;=0A=
        }=0A=
        break;=0A=
          case "active":=0A=
        if (newval) {=0A=
          HTMLArea._addClass(el, "buttonPressed");=0A=
        } else {=0A=
          HTMLArea._removeClass(el, "buttonPressed");=0A=
        }=0A=
        break;=0A=
      }=0A=
      this[id] =3D newval;=0A=
    }=0A=
  }; // END of function: setButtonStatus=0A=
=0A=
  // this function will handle creation of combo boxes.  Receives as=0A=
  // parameter the name of a button as defined in the toolBar config.=0A=
  // This function is called from createButton, above, if the given "txt"=0A=
  // doesn't match a button.=0A=
  function createSelect(txt) {=0A=
    var options =3D null;=0A=
    var el =3D null;=0A=
    var cmd =3D null;=0A=
    var customSelects =3D editor.config.customSelects;=0A=
    var context =3D null;=0A=
    var tooltip =3D "";=0A=
    switch (txt) {=0A=
        case "fontsize":=0A=
        case "fontname":=0A=
        case "formatblock":=0A=
      // the following line retrieves the correct=0A=
      // configuration option because the variable name=0A=
      // inside the Config object is named the same as the=0A=
      // button/select in the toolbar.  For instance, if txt=0A=
      // =3D=3D "formatblock" we retrieve config.formatblock (or=0A=
      // a different way to write it in JS is=0A=
      // config["formatblock"].=0A=
      options =3D editor.config[txt];=0A=
      cmd =3D txt;=0A=
      break;=0A=
        default:=0A=
      // try to fetch it from the list of registered selects=0A=
      cmd =3D txt;=0A=
      var dropdown =3D customSelects[cmd];=0A=
      if (typeof dropdown !=3D "undefined") {=0A=
        options =3D dropdown.options;=0A=
        context =3D dropdown.context;=0A=
        if (typeof dropdown.tooltip !=3D "undefined") {=0A=
          tooltip =3D dropdown.tooltip;=0A=
        }=0A=
      } else {=0A=
        alert("ERROR [createSelect]:\nCan't find the requested dropdown =
definition");=0A=
      }=0A=
      break;=0A=
    }=0A=
    if (options) {=0A=
      el =3D document.createElement("select");=0A=
      el.title =3D tooltip;=0A=
      var obj =3D {=0A=
        name	: txt, // field name=0A=
        element : el,	// the UI element (SELECT)=0A=
        enabled : true, // is it enabled?=0A=
        text	: false, // enabled in text mode?=0A=
        cmd	: cmd, // command ID=0A=
        state	: setButtonStatus, // for changing state=0A=
        context : context=0A=
      };=0A=
      =0A=
      HTMLArea.freeLater(obj);=0A=
      =0A=
      tb_objects[txt] =3D obj;=0A=
      =0A=
      for (var i in options) {=0A=
        var op =3D document.createElement("option");=0A=
        op.innerHTML =3D HTMLArea._lc(i);=0A=
        op.value =3D options[i];=0A=
        el.appendChild(op);=0A=
      }=0A=
      HTMLArea._addEvent(el, "change", function () {=0A=
        editor._comboSelected(el, txt);=0A=
      });=0A=
    }=0A=
    return el;=0A=
  }; // END of function: createSelect=0A=
=0A=
  // appends a new button to toolbar=0A=
  function createButton(txt) {=0A=
    // the element that will be created=0A=
    var el =3D null;=0A=
    var btn =3D null;=0A=
    switch (txt) {=0A=
        case "separator":=0A=
          if(editor.config.flowToolbars) newLine();=0A=
      el =3D document.createElement("div");=0A=
      el.className =3D "separator";=0A=
      break;=0A=
        case "space":=0A=
      el =3D document.createElement("div");=0A=
      el.className =3D "space";=0A=
      break;=0A=
      case "linebreak":=0A=
          newLine();=0A=
          return false;=0A=
        case "textindicator":=0A=
      el =3D document.createElement("div");=0A=
      el.appendChild(document.createTextNode("A"));=0A=
      el.className =3D "indicator";=0A=
      el.title =3D HTMLArea._lc("Current style");=0A=
      var obj =3D {=0A=
        name	: txt, // the button name (i.e. 'bold')=0A=
        element : el, // the UI element (DIV)=0A=
        enabled : true, // is it enabled?=0A=
        active	: false, // is it pressed?=0A=
        text	: false, // enabled in text mode?=0A=
        cmd	: "textindicator", // the command ID=0A=
        state	: setButtonStatus // for changing state=0A=
      };=0A=
      =0A=
      HTMLArea.freeLater(obj);=0A=
      =0A=
      tb_objects[txt] =3D obj;=0A=
      break;=0A=
        default:=0A=
      btn =3D editor.config.btnList[txt];=0A=
    }=0A=
    if (!el && btn) {=0A=
      el =3D document.createElement("a");=0A=
      el.style.display =3D 'block';=0A=
      el.href =3D 'javascript:void(0)';=0A=
      el.style.textDecoration =3D 'none';=0A=
      el.title =3D btn[0];=0A=
      el.className =3D "button";=0A=
      // let's just pretend we have a button object, and=0A=
      // assign all the needed information to it.=0A=
      var obj =3D {=0A=
        name	: txt, // the button name (i.e. 'bold')=0A=
        element : el, // the UI element (DIV)=0A=
        enabled : true, // is it enabled?=0A=
        active	: false, // is it pressed?=0A=
        text	: btn[2], // enabled in text mode?=0A=
        cmd	: btn[3], // the command ID=0A=
        state	: setButtonStatus, // for changing state=0A=
        context : btn[4] || null // enabled in a certain context?=0A=
      };=0A=
      =0A=
      HTMLArea.freeLater(obj);=0A=
      =0A=
      tb_objects[txt] =3D obj;=0A=
      // handlers to emulate nice flat toolbar buttons=0A=
      HTMLArea._addEvent(el, "mouseout", function () {=0A=
        if (obj.enabled) with (HTMLArea) {=0A=
          //_removeClass(el, "buttonHover");=0A=
          _removeClass(el, "buttonActive");=0A=
          (obj.active) && _addClass(el, "buttonPressed");=0A=
        }=0A=
      });=0A=
=0A=
      HTMLArea._addEvent(el, "mousedown", function (ev) {=0A=
        if (obj.enabled) with (HTMLArea) {=0A=
          _addClass(el, "buttonActive");=0A=
          _removeClass(el, "buttonPressed");=0A=
          _stopEvent(is_ie ? window.event : ev);=0A=
        }=0A=
      });=0A=
      // when clicked, do the following:=0A=
      HTMLArea._addEvent(el, "click", function (ev) {=0A=
        if (obj.enabled) with (HTMLArea) {=0A=
          _removeClass(el, "buttonActive");=0A=
          //_removeClass(el, "buttonHover");=0A=
          if(HTMLArea.is_gecko)=0A=
          {=0A=
            editor.activateEditor();=0A=
          }=0A=
          obj.cmd(editor, obj.name, obj);=0A=
          _stopEvent(is_ie ? window.event : ev);=0A=
        }=0A=
      });=0A=
=0A=
      var i_contain =3D HTMLArea.makeBtnImg(btn[1]);=0A=
      var img =3D i_contain.firstChild;=0A=
      el.appendChild(i_contain);=0A=
=0A=
      obj.imgel =3D img;      =0A=
      obj.swapImage =3D function(newimg)=0A=
      {=0A=
        if(typeof newimg !=3D 'string')=0A=
        {=0A=
          img.src =3D newimg[0];=0A=
          img.style.position =3D 'relative';=0A=
          img.style.top  =3D newimg[2] ? ('-' + (18 * (newimg[2] + 1)) + =
'px') : '-18px';=0A=
          img.style.left =3D newimg[1] ? ('-' + (18 * (newimg[1] + 1)) + =
'px') : '-18px';=0A=
        }=0A=
        else=0A=
        {=0A=
          obj.imgel.src =3D newimg;=0A=
          img.style.top =3D '0px';=0A=
          img.style.left =3D '0px';=0A=
        }=0A=
      }=0A=
      =0A=
    } else if (!el) {=0A=
      el =3D createSelect(txt);=0A=
    }=0A=
=0A=
    return el;=0A=
  };=0A=
=0A=
  var first =3D true;=0A=
  for (var i =3D 0; i < this.config.toolbar.length; ++i) {=0A=
    if (!first) {=0A=
      // createButton("linebreak");=0A=
    } else {=0A=
      first =3D false;=0A=
    }=0A=
    if(this.config.toolbar[i] =3D=3D null) this.config.toolbar[i] =3D =
['separator'];=0A=
    var group =3D this.config.toolbar[i];=0A=
=0A=
    for (var j =3D 0; j < group.length; ++j)=0A=
    {=0A=
      var code =3D group[j];=0A=
      if (/^([IT])\[(.*?)\]/.test(code))=0A=
      {=0A=
        // special case, create text label=0A=
        var l7ed =3D RegExp.$1 =3D=3D "I"; // localized?=0A=
        var label =3D RegExp.$2;=0A=
        if (l7ed) {=0A=
	  label =3D HTMLArea._lc(label);=0A=
        }=0A=
        var tb_cell =3D document.createElement("td");=0A=
        tb_row.appendChild(tb_cell);=0A=
        tb_cell.className =3D "label";=0A=
        tb_cell.innerHTML =3D label;=0A=
      }=0A=
      else if(typeof code !=3D 'function')=0A=
      {=0A=
        var tb_element =3D createButton(code);=0A=
=0A=
        if (tb_element)=0A=
        {=0A=
          var tb_cell =3D document.createElement("td");=0A=
          tb_cell.className =3D 'toolbarElement';=0A=
          tb_row.appendChild(tb_cell);=0A=
          tb_cell.appendChild(tb_element);=0A=
        }=0A=
        else if (tb_element =3D=3D null)=0A=
        {=0A=
          alert("FIXME: Unknown toolbar item: " + code);=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  if(editor.config.flowToolbars)=0A=
  {=0A=
    var brk =3D document.createElement('div');=0A=
    brk.style.height =3D=0A=
      brk.style.width =3D=0A=
      brk.style.lineHeight =3D=0A=
      brk.style.fontSize =3D '1px';=0A=
    brk.style.clear =3D 'both';=0A=
    toolbar.appendChild(brk);=0A=
  }=0A=
=0A=
  return toolbar;=0A=
};=0A=
=0A=
use_clone_img =3D false;=0A=
HTMLArea.makeBtnImg =3D function(imgDef, doc)=0A=
{=0A=
  if(!doc) doc =3D document;=0A=
=0A=
  if(!doc._htmlareaImgCache)=0A=
  {=0A=
    doc._htmlareaImgCache =3D { };=0A=
    HTMLArea.freeLater(doc._htmlareaImgCache);=0A=
  }=0A=
=0A=
  var i_contain =3D null;=0A=
  if(HTMLArea.is_ie && ((!doc.compatMode) || (doc.compatMode && =
doc.compatMode =3D=3D "BackCompat")))=0A=
  {=0A=
    i_contain =3D doc.createElement('span');=0A=
  }=0A=
  else=0A=
  {=0A=
    i_contain =3D doc.createElement('div');=0A=
    i_contain.style.position =3D 'relative';=0A=
  }=0A=
=0A=
  i_contain.style.overflow =3D 'hidden';=0A=
  i_contain.style.width =3D "18px";=0A=
  i_contain.style.height =3D "18px";=0A=
  i_contain.className    =3D 'buttonImageContainer';=0A=
=0A=
  var img =3D null;=0A=
  if(typeof imgDef =3D=3D 'string')=0A=
  {=0A=
    if(doc._htmlareaImgCache[imgDef])=0A=
    {=0A=
      img =3D doc._htmlareaImgCache[imgDef].cloneNode();=0A=
    }=0A=
    else=0A=
    {=0A=
      img =3D doc.createElement("img");=0A=
      img.src =3D imgDef;=0A=
      img.style.width =3D "18px";=0A=
      img.style.height =3D "18px";=0A=
      if(use_clone_img)=0A=
        doc._htmlareaImgCache[imgDef] =3D img.cloneNode();=0A=
    }=0A=
  }=0A=
  else=0A=
  {=0A=
    if(doc._htmlareaImgCache[imgDef[0]])=0A=
    {=0A=
      img =3D doc._htmlareaImgCache[imgDef[0]].cloneNode();=0A=
    }=0A=
    else=0A=
    {=0A=
      img =3D doc.createElement("img");=0A=
      img.src =3D imgDef[0];=0A=
      img.style.position =3D 'relative';=0A=
      if(use_clone_img)=0A=
        doc._htmlareaImgCache[imgDef[0]] =3D img.cloneNode();=0A=
    }=0A=
    img.style.top  =3D imgDef[2] ? ('-' + (18 * (imgDef[2] + 1)) + 'px') =
: '-18px';=0A=
    img.style.left =3D imgDef[1] ? ('-' + (18 * (imgDef[1] + 1)) + 'px') =
: '-18px';=0A=
  }=0A=
  i_contain.appendChild(img);=0A=
  return i_contain;=0A=
}=0A=
=0A=
HTMLArea.prototype._createStatusBar =3D function() {=0A=
  var statusbar =3D document.createElement("div");=0A=
  statusbar.className =3D "statusBar";=0A=
  this._statusBar =3D statusbar;=0A=
  HTMLArea.freeLater(this, '_statusBar');=0A=
  =0A=
  // statusbar.appendChild(document.createTextNode(HTMLArea._lc("Path") =
+ ": "));=0A=
  // creates a holder for the path view=0A=
  div =3D document.createElement("span");=0A=
  div.className =3D "statusBarTree";=0A=
  div.innerHTML =3D HTMLArea._lc("Path") + ": ";=0A=
  this._statusBarTree =3D div;=0A=
  HTMLArea.freeLater(this, '_statusBarTree');=0A=
  this._statusBar.appendChild(div);=0A=
=0A=
  div =3D document.createElement("span");=0A=
  div.innerHTML =3D HTMLArea._lc("You are in TEXT MODE.  Use the [<>] =
button to switch back to WYSIWYG.");=0A=
  div.style.display =3D "none";=0A=
  this._statusBarTextMode =3D div;=0A=
  HTMLArea.freeLater(this, '_statusBarTextMode');=0A=
  this._statusBar.appendChild(div);=0A=
=0A=
  if (!this.config.statusBar)=0A=
  {=0A=
    // disable it...=0A=
    statusbar.style.display =3D "none";=0A=
  }=0A=
=0A=
  return statusbar;=0A=
};=0A=
=0A=
// Creates the HTMLArea object and replaces the textarea with it.=0A=
HTMLArea.prototype.generate =3D function ()=0A=
{=0A=
  var editor =3D this;	// we'll need "this" in some nested functions=0A=
=0A=
  if(typeof Dialog =3D=3D 'undefined')=0A=
  {=0A=
    HTMLArea._loadback=0A=
      (_editor_url + 'dialog.js', function() { editor.generate(); } );=0A=
      return false;=0A=
  }=0A=
=0A=
  if(typeof HTMLArea.Dialog =3D=3D 'undefined')=0A=
  {=0A=
    HTMLArea._loadback=0A=
      (_editor_url + 'inline-dialog.js', function() { editor.generate(); =
} );=0A=
      return false;=0A=
  }=0A=
=0A=
  if(typeof PopupWin =3D=3D 'undefined')=0A=
  {=0A=
    HTMLArea._loadback=0A=
      (_editor_url + 'popupwin.js', function() { editor.generate(); } );=0A=
      return false;=0A=
  }=0A=
=0A=
  if(_editor_skin !=3D "") {=0A=
    var found=3Dfalse;=0A=
    var head =3D document.getElementsByTagName("head")[0];=0A=
    var links =3D document.getElementsByTagName("link");=0A=
    for(var i =3D 0; i<links.length; i++) {=0A=
      if((links[i].rel =3D=3D "stylesheet")&&(links[i].href =3D=3D =
_editor_url + 'skins/' + _editor_skin + '/skin.css'))=0A=
        found =3D true;=0A=
    }=0A=
    if(!found) {=0A=
      var link =3D document.createElement("link");=0A=
      link.type =3D "text/css";=0A=
      link.href =3D _editor_url + 'skins/' + _editor_skin + '/skin.css';=0A=
      link.rel =3D "stylesheet"=0A=
      head.appendChild(link);=0A=
    }=0A=
  }=0A=
=0A=
  //backwards-compatibility: load FullScreen-Plugin if we find a =
"popupeditor"-button in the toolbar=0A=
  var toolbar =3D editor.config.toolbar;=0A=
  for (var i =3D toolbar.length; --i >=3D 0;) {=0A=
    for (var j =3D toolbar[i].length; --j >=3D 0; ) {=0A=
      if (toolbar[i][j]=3D=3D"popupeditor") {=0A=
        if(typeof FullScreen =3D=3D "undefined") {=0A=
          HTMLArea.loadPlugin("FullScreen", function() { =
editor.generate(); } );=0A=
          return false;=0A=
        }=0A=
        editor.registerPlugin('FullScreen');=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  // If this is gecko, set up the paragraph handling now=0A=
  if(HTMLArea.is_gecko)=0A=
  {=0A=
    switch(editor.config.mozParaHandler)=0A=
    {=0A=
      case 'best':=0A=
      {=0A=
        if(typeof EnterParagraphs =3D=3D 'undefined')=0A=
        {=0A=
          HTMLArea.loadPlugin("EnterParagraphs", function() { =
editor.generate(); } );=0A=
          return false;=0A=
        }=0A=
        editor.registerPlugin('EnterParagraphs');=0A=
      }=0A=
      break;=0A=
=0A=
      case 'dirty'   :=0A=
      case 'built-in':=0A=
      default        :=0A=
      {=0A=
        // See _editorEvent=0A=
      }=0A=
      break;=0A=
    }=0A=
  }=0A=
=0A=
  // create the editor framework, yah, table layout I know, but much =
easier=0A=
  // to get it working correctly this way, sorry about that, patches =
welcome.=0A=
=0A=
  this._framework =3D=0A=
  {=0A=
    'table'     :document.createElement('table'),=0A=
    'tbody'     :document.createElement('tbody'), // IE will not show =
the table if it doesn't have a tbody!=0A=
    'tb_row'    :document.createElement('tr'),=0A=
    'tb_cell'   :document.createElement('td'), // Toolbar=0A=
=0A=
    'tp_row'   :document.createElement('tr'),=0A=
    'tp_cell'   :this._panels.top.container,   // top panel=0A=
=0A=
    'ler_row'   :document.createElement('tr'),=0A=
    'lp_cell'   :this._panels.left.container,  // left panel=0A=
    'ed_cell'   :document.createElement('td'), // editor=0A=
    'rp_cell'   :this._panels.right.container, // right panel=0A=
=0A=
    'bp_row'    :document.createElement('tr'),=0A=
    'bp_cell'   :this._panels.bottom.container,// bottom panel=0A=
=0A=
    'sb_row'    :document.createElement('tr'),=0A=
    'sb_cell'   :document.createElement('td')  // status bar=0A=
=0A=
  }=0A=
=0A=
  HTMLArea.freeLater(this._framework);=0A=
  =0A=
  var fw =3D this._framework;=0A=
  fw.table.border=3D"0";=0A=
  fw.table.cellPadding=3D"0";=0A=
  fw.table.cellSpacing=3D"0";=0A=
=0A=
  fw.tb_row.style.verticalAlign =3D 'top';=0A=
  fw.tp_row.style.verticalAlign =3D 'top';=0A=
  fw.ler_row.style.verticalAlign=3D 'top';=0A=
  fw.bp_row.style.verticalAlign =3D 'top';=0A=
  fw.sb_row.style.verticalAlign =3D 'top';=0A=
  fw.ed_cell.style.position     =3D 'relative';=0A=
=0A=
  // Put the cells in the rows        set col & rowspans=0A=
  // note that I've set all these so that all panels are showing=0A=
  // but they will be redone in sizeEditor() depending on which=0A=
  // panels are shown.  It's just here to clarify how the thing=0A=
  // is put togethor.=0A=
  fw.tb_row.appendChild(fw.tb_cell);  fw.tb_cell.colSpan =3D 3;=0A=
=0A=
  fw.tp_row.appendChild(fw.tp_cell);  fw.tp_cell.colSpan =3D 3;=0A=
=0A=
  fw.ler_row.appendChild(fw.lp_cell);=0A=
  fw.ler_row.appendChild(fw.ed_cell);=0A=
  fw.ler_row.appendChild(fw.rp_cell);=0A=
=0A=
  fw.bp_row.appendChild(fw.bp_cell);  fw.bp_cell.colSpan =3D 3;=0A=
=0A=
  fw.sb_row.appendChild(fw.sb_cell);  fw.sb_cell.colSpan =3D 3;=0A=
=0A=
  // Put the rows in the table body=0A=
  fw.tbody.appendChild(fw.tb_row);  // Toolbar=0A=
  fw.tbody.appendChild(fw.tp_row); // Left, Top, Right panels=0A=
  fw.tbody.appendChild(fw.ler_row);  // Editor/Textarea=0A=
  fw.tbody.appendChild(fw.bp_row);  // Bottom panel=0A=
  fw.tbody.appendChild(fw.sb_row);  // Statusbar=0A=
=0A=
  // and body in the table=0A=
  fw.table.appendChild(fw.tbody);=0A=
=0A=
  var htmlarea =3D this._framework.table;=0A=
  this._htmlArea =3D htmlarea;=0A=
  HTMLArea.freeLater(this, '_htmlArea');=0A=
  htmlarea.className =3D "htmlarea";=0A=
=0A=
    // create the toolbar and put in the area=0A=
  var toolbar =3D this._createToolbar();=0A=
  this._framework.tb_cell.appendChild(toolbar);=0A=
=0A=
    // create the IFRAME & add to container=0A=
  var iframe =3D document.createElement("iframe");=0A=
  iframe.src =3D _editor_url + editor.config.URIs["blank"];=0A=
  this._framework.ed_cell.appendChild(iframe);=0A=
  this._iframe =3D iframe;=0A=
  this._iframe.className =3D 'xinha_iframe';=0A=
  HTMLArea.freeLater(this, '_iframe');=0A=
  =0A=
    // creates & appends the status bar=0A=
  var statusbar =3D this._createStatusBar();=0A=
  this._framework.sb_cell.appendChild(statusbar);=0A=
=0A=
  // insert Xinha before the textarea.=0A=
  var textarea =3D this._textArea;=0A=
  textarea.parentNode.insertBefore(htmlarea, textarea);=0A=
  textarea.className =3D 'xinha_textarea';=0A=
=0A=
  // extract the textarea and insert it into the htmlarea=0A=
  HTMLArea.removeFromParent(textarea);=0A=
  this._framework.ed_cell.appendChild(textarea);=0A=
=0A=
=0A=
  // Set up event listeners for saving the iframe content to the textarea=0A=
  if (textarea.form)=0A=
  {=0A=
    // onsubmit get the HTMLArea content and update original textarea.=0A=
    HTMLArea.prependDom0Event=0A=
    (=0A=
      this._textArea.form,=0A=
      'submit',=0A=
      function() {editor._textArea.value =3D =
editor.outwardHtml(editor.getHTML()); return true;}=0A=
    );=0A=
=0A=
    var initialTAContent =3D textarea.value;=0A=
=0A=
    // onreset revert the HTMLArea content to the textarea content=0A=
    HTMLArea.prependDom0Event=0A=
    (=0A=
      this._textArea.form,=0A=
      'reset',=0A=
      function() { editor.setHTML(editor.inwardHtml(initialTAContent)); =
editor.updateToolbar(); return true; }=0A=
    );=0A=
  }=0A=
=0A=
  // add a handler for the "back/forward" case -- on body.unload we save=0A=
  // the HTML content into the original textarea.=0A=
  HTMLArea.prependDom0Event(window, 'unload', function() {textarea.value =
=3D editor.outwardHtml(editor.getHTML()); return true; });=0A=
=0A=
  // Hide textarea=0A=
  textarea.style.display =3D "none";=0A=
=0A=
  // Initalize size=0A=
  editor.initSize();=0A=
=0A=
  // Add an event to initialize the iframe once loaded.=0A=
  editor._iframeLoadDone =3D false;=0A=
  HTMLArea._addEvent=0A=
  (=0A=
    this._iframe,=0A=
    'load',=0A=
    function(e)=0A=
    {=0A=
      if(! editor._iframeLoadDone)=0A=
      {=0A=
        editor._iframeLoadDone =3D true;=0A=
        editor.initIframe();=0A=
      }=0A=
      return true;=0A=
    }=0A=
  );=0A=
=0A=
};=0A=
=0A=
=0A=
  /**=0A=
   * Size the editor according to the INITIAL sizing information.=0A=
   * config.width=0A=
   *    The width may be set via three ways=0A=
   *    auto    =3D the width is inherited from the original textarea=0A=
   *    toolbar =3D the width is set to be the same size as the toolbar=0A=
   *    <set size> =3D the width is an explicit size (any CSS =
measurement, eg 100em should be fine)=0A=
   *=0A=
   * config.height=0A=
   *    auto    =3D the height is inherited from the original textarea=0A=
   *    <set size> =3D an explicit size measurement (again, CSS =
measurements)=0A=
   *=0A=
   * config.sizeIncludesBars=0A=
   *    true    =3D the tool & status bars will appear inside the width =
& height confines=0A=
   *    false   =3D the tool & status bars will appear outside the width =
& height confines=0A=
   *=0A=
   */=0A=
=0A=
  HTMLArea.prototype.initSize =3D function()=0A=
  {=0A=
    var editor =3D this;=0A=
=0A=
    var width  =3D null;=0A=
    var height =3D null;=0A=
    switch(this.config.width)=0A=
    {=0A=
      case 'auto':=0A=
      {=0A=
        width =3D this._initial_ta_size.w;=0A=
      }=0A=
      break;=0A=
=0A=
      case 'toolbar':=0A=
      {=0A=
        width =3D this._toolBar.offsetWidth;=0A=
      }=0A=
      break;=0A=
=0A=
      default :=0A=
      {=0A=
        width =3D this.config.width;=0A=
      }=0A=
      break;=0A=
    }=0A=
=0A=
    switch(this.config.height)=0A=
    {=0A=
      case 'auto':=0A=
      {=0A=
        height =3D this._initial_ta_size.h;=0A=
      }=0A=
      break;=0A=
=0A=
      default :=0A=
      {=0A=
        height =3D this.config.height;=0A=
      }=0A=
      break;=0A=
    }=0A=
=0A=
    this.sizeEditor(width, height, this.config.sizeIncludesBars, =
this.config.sizeIncludesPanels);=0A=
=0A=
    HTMLArea.addDom0Event(window, 'resize', function(e) { =
editor.sizeEditor(); });=0A=
=0A=
    this.notifyOn('panel_change',function(){editor.sizeEditor();});=0A=
  }=0A=
=0A=
  /**=0A=
   *  Size the editor to a specific size, or just refresh the size (when =
window resizes for example)=0A=
   *  @param width optional width (CSS specification)=0A=
   *  @param height optional height (CSS specification)=0A=
   *  @param includingBars optional boolean to indicate if the size =
should include or exclude tool & status bars=0A=
   */=0A=
=0A=
  HTMLArea.prototype.sizeEditor =3D function(width, height, =
includingBars, includingPanels)=0A=
  {=0A=
=0A=
    // We need to set the iframe & textarea to 100% height so that the =
htmlarea=0A=
    // isn't "pushed out" when we get it's height, so we can change them =
later.=0A=
    this._iframe.style.height   =3D '100%';=0A=
    this._textArea.style.height =3D '100%';=0A=
    this._iframe.style.width    =3D '';=0A=
    this._textArea.style.width  =3D '';=0A=
=0A=
    if(includingBars !=3D null)     this._htmlArea.sizeIncludesToolbars =
=3D includingBars;=0A=
    if(includingPanels !=3D null)   this._htmlArea.sizeIncludesPanels   =
=3D includingPanels;=0A=
=0A=
    if(width !=3D null)=0A=
    {=0A=
      this._htmlArea.style.width          =3D width;=0A=
      if(!this._htmlArea.sizeIncludesPanels)=0A=
      {=0A=
        // Need to add some for l & r panels=0A=
        var panel =3D this._panels.right;=0A=
        if(panel.on && panel.panels.length && =
HTMLArea.hasDisplayedChildren(panel.div))=0A=
        {=0A=
          this._htmlArea.style.width =3D this._htmlArea.offsetWidth + =
parseInt(this.config.panel_dimensions.right);=0A=
        }=0A=
=0A=
        var panel =3D this._panels.left;=0A=
        if(panel.on && panel.panels.length && =
HTMLArea.hasDisplayedChildren(panel.div))=0A=
        {=0A=
          this._htmlArea.style.width =3D this._htmlArea.offsetWidth + =
parseInt(this.config.panel_dimensions.left);=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    if(height !=3D null)=0A=
    {=0A=
      this._htmlArea.style.height         =3D height;=0A=
      if(!this._htmlArea.sizeIncludesToolbars)=0A=
      {=0A=
        // Need to add some for toolbars=0A=
        this._htmlArea.style.height         =3D =
this._htmlArea.offsetHeight + this._toolbar.offsetHeight + =
this._statusBar.offsetHeight;=0A=
      }=0A=
=0A=
      if(!this._htmlArea.sizeIncludesPanels)=0A=
      {=0A=
        // Need to add some for l & r panels=0A=
        var panel =3D this._panels.top;=0A=
        if(panel.on && panel.panels.length && =
HTMLArea.hasDisplayedChildren(panel.div))=0A=
        {=0A=
          this._htmlArea.style.height =3D this._htmlArea.offsetHeight + =
parseInt(this.config.panel_dimensions.top);=0A=
        }=0A=
=0A=
        var panel =3D this._panels.bottom;=0A=
        if(panel.on && panel.panels.length && =
HTMLArea.hasDisplayedChildren(panel.div))=0A=
        {=0A=
          this._htmlArea.style.height =3D this._htmlArea.offsetHeight + =
parseInt(this.config.panel_dimensions.bottom);=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    // At this point we have this._htmlArea.style.width & =
this._htmlArea.style.height=0A=
    // which are the size for the OUTER editor area, including toolbars =
and panels=0A=
    // now we size the INNER area and position stuff in the right places.=0A=
    width  =3D this._htmlArea.offsetWidth;=0A=
    height =3D this._htmlArea.offsetHeight;=0A=
=0A=
    // Set colspan for toolbar, and statusbar, rowspan for left & right =
panels, and insert panels to be displayed=0A=
    // into thier rows=0A=
    var panels =3D this._panels;=0A=
    var editor =3D this;=0A=
    var col_span =3D 1;=0A=
=0A=
    function panel_is_alive(pan)=0A=
    {=0A=
      if(panels[pan].on && panels[pan].panels.length && =
HTMLArea.hasDisplayedChildren(panels[pan].container))=0A=
      {=0A=
        panels[pan].container.style.display =3D '';=0A=
        return true;=0A=
      }=0A=
=0A=
      // Otherwise make sure it's been removed from the framework=0A=
      else=0A=
      {=0A=
        panels[pan].container.style.display=3D'none';=0A=
        return false;=0A=
      }=0A=
    }=0A=
=0A=
    if(panel_is_alive('left'))=0A=
    {=0A=
      col_span +=3D 1;      =0A=
    }=0A=
=0A=
    if(panel_is_alive('top'))=0A=
    {=0A=
      // NOP=0A=
    }=0A=
=0A=
    if(panel_is_alive('right'))=0A=
    {=0A=
      col_span +=3D 1;=0A=
    }=0A=
=0A=
    if(panel_is_alive('bottom'))=0A=
    {=0A=
      // NOP=0A=
    }=0A=
=0A=
    this._framework.tb_cell.colSpan =3D col_span;=0A=
    this._framework.tp_cell.colSpan =3D col_span;=0A=
    this._framework.bp_cell.colSpan =3D col_span;=0A=
    this._framework.sb_cell.colSpan =3D col_span;=0A=
=0A=
    // Put in the panel rows, top panel goes above editor row=0A=
    if(!this._framework.tp_row.childNodes.length)=0A=
    {=0A=
      HTMLArea.removeFromParent(this._framework.tp_row);=0A=
    }=0A=
    else=0A=
    {=0A=
      if(!HTMLArea.hasParentNode(this._framework.tp_row))=0A=
      {=0A=
        this._framework.tbody.insertBefore(this._framework.tp_row, =
this._framework.ler_row);=0A=
      }=0A=
    }=0A=
=0A=
    // bp goes after the editor=0A=
    if(!this._framework.bp_row.childNodes.length)=0A=
    {=0A=
      HTMLArea.removeFromParent(this._framework.bp_row);=0A=
    }=0A=
    else=0A=
    {=0A=
      if(!HTMLArea.hasParentNode(this._framework.bp_row))=0A=
      {=0A=
        this._framework.tbody.insertBefore(this._framework.bp_row, =
this._framework.ler_row.nextSibling);=0A=
      }=0A=
    }=0A=
=0A=
    // finally if the statusbar is on, insert it=0A=
    if(!this.config.statusBar)=0A=
    {=0A=
      HTMLArea.removeFromParent(this._framework.sb_row);=0A=
    }=0A=
    else=0A=
    {=0A=
      if(!HTMLArea.hasParentNode(this._framework.sb_row))=0A=
      {=0A=
        this._framework.table.appendChild(this._framework.sb_row);=0A=
      }=0A=
    }=0A=
=0A=
    // Size and set colspans, link up the framework=0A=
    this._framework.lp_cell.style.width  =3D =
this.config.panel_dimensions.left;=0A=
    this._framework.rp_cell.style.width  =3D =
this.config.panel_dimensions.right;=0A=
    this._framework.tp_cell.style.height =3D =
this.config.panel_dimensions.top;=0A=
    this._framework.bp_cell.style.height =3D =
this.config.panel_dimensions.bottom;=0A=
    this._framework.tb_cell.style.height =3D this._toolBar.offsetHeight  =
 + 'px';=0A=
    this._framework.sb_cell.style.height =3D =
this._statusBar.offsetHeight + 'px';=0A=
=0A=
    var edcellheight =3D height - this._toolBar.offsetHeight - =
this._statusBar.offsetHeight;=0A=
    if(panel_is_alive('top'))    edcellheight  -=3D =
parseInt(this.config.panel_dimensions.top);=0A=
    if(panel_is_alive('bottom')) edcellheight  -=3D =
parseInt(this.config.panel_dimensions.bottom);;=0A=
    this._iframe.style.height    =3D edcellheight + 'px';=0A=
=0A=
    var edcellwidth =3D width;=0A=
    if(panel_is_alive('left'))  edcellwidth -=3D =
parseInt(this.config.panel_dimensions.left);=0A=
    if(panel_is_alive('right')) edcellwidth -=3D =
parseInt(this.config.panel_dimensions.right);=0A=
    this._iframe.style.width     =3D  edcellwidth + 'px';=0A=
=0A=
    this._textArea.style.height =3D this._iframe.style.height;=0A=
    this._textArea.style.width  =3D this._iframe.style.width;=0A=
=0A=
    this.notifyOf('resize', {width:this._htmlArea.offsetWidth, =
height:this._htmlArea.offsetHeight});=0A=
  }=0A=
=0A=
  HTMLArea.prototype.addPanel =3D function(side)=0A=
  {=0A=
    var div =3D document.createElement('div');=0A=
    div.side =3D side;=0A=
    if(side =3D=3D 'left' || side =3D=3D 'right')=0A=
    {=0A=
      div.style.width =3D this.config.panel_dimensions[side];=0A=
    }=0A=
    HTMLArea.addClasses(div, 'panel');=0A=
    this._panels[side].panels.push(div);=0A=
    this._panels[side].div.appendChild(div);=0A=
=0A=
    this.notifyOf('panel_change', {'action':'add','panel':div});=0A=
=0A=
    return div;=0A=
  }=0A=
=0A=
  HTMLArea.prototype.removePanel =3D function(panel)=0A=
  {=0A=
    this._panels[panel.side].div.removeChild(panel);=0A=
    var clean =3D [ ];=0A=
    for(var i =3D 0; i < this._panels[panel.side].panels.length; i++)=0A=
    {=0A=
      if(this._panels[panel.side].panels[i] !=3D panel)=0A=
      {=0A=
        clean.push(this._panels[panel.side].panels[i]);=0A=
      }=0A=
    }=0A=
    this._panels[panel.side].panels =3D clean;=0A=
    this.notifyOf('panel_change', {'action':'remove','panel':panel});=0A=
  }=0A=
=0A=
  HTMLArea.prototype.hidePanel =3D function(panel)=0A=
  {=0A=
    if(panel)=0A=
    {=0A=
      panel.style.display =3D 'none';=0A=
      this.notifyOf('panel_change', {'action':'hide','panel':panel});=0A=
    }=0A=
  }=0A=
=0A=
  HTMLArea.prototype.showPanel =3D function(panel)=0A=
  {=0A=
    if(panel)=0A=
    {=0A=
      panel.style.display =3D '';=0A=
      this.notifyOf('panel_change', {'action':'show','panel':panel});=0A=
    }=0A=
  }=0A=
=0A=
  HTMLArea.prototype.hidePanels =3D function(sides)=0A=
  {=0A=
    if(typeof sides =3D=3D 'undefined')=0A=
    {=0A=
      sides =3D ['left','right','top','bottom'];=0A=
    }=0A=
=0A=
    var reShow =3D [];=0A=
    for(var i =3D 0; i < sides.length;i++)=0A=
    {=0A=
      if(this._panels[sides[i]].on)=0A=
      {=0A=
        reShow.push(sides[i]);=0A=
        this._panels[sides[i]].on =3D false;=0A=
      }=0A=
    }=0A=
    this.notifyOf('panel_change', {'action':'multi_hide','sides':sides});=0A=
  }=0A=
=0A=
  HTMLArea.prototype.showPanels =3D function(sides)=0A=
  {=0A=
    if(typeof sides =3D=3D 'undefined')=0A=
    {=0A=
      sides =3D ['left','right','top','bottom'];=0A=
    }=0A=
=0A=
    var reHide =3D [];=0A=
    for(var i =3D 0; i < sides.length;i++)=0A=
    {=0A=
      if(!this._panels[sides[i]].on)=0A=
      {=0A=
        reHide.push(sides[i]);=0A=
        this._panels[sides[i]].on =3D true;=0A=
      }=0A=
    }=0A=
    this.notifyOf('panel_change', {'action':'multi_show','sides':sides});=0A=
  }=0A=
=0A=
  HTMLArea.objectProperties =3D function(obj)=0A=
  {=0A=
    var props =3D [ ];=0A=
    for(var x in obj)=0A=
    {=0A=
      props[props.length] =3D x;=0A=
    }=0A=
    return props;=0A=
  }=0A=
=0A=
  /*=0A=
   * EDITOR ACTIVATION NOTES:=0A=
   *  when a page has multiple Xinha editors, ONLY ONE should be =
activated at any time (this is mostly to=0A=
   *  work around a bug in Mozilla, but also makes some sense).  No =
editor should be activated or focused=0A=
   *  automatically until at least one editor has been activated through =
user action (by mouse-clicking in=0A=
   *  the editor).=0A=
   */=0A=
=0A=
  HTMLArea.prototype.editorIsActivated =3D function() {=0A=
    try {=0A=
      if (HTMLArea.is_gecko) return (this._doc.designMode =3D=3D 'on');=0A=
      else return (this._doc.body.contentEditable);=0A=
    } catch (e)=0A=
    {=0A=
      return false;=0A=
    }=0A=
  }=0A=
=0A=
  HTMLArea._someEditorHasBeenActivated =3D false;=0A=
  HTMLArea._currentlyActiveEditor      =3D false;=0A=
  HTMLArea.prototype.activateEditor =3D function()=0A=
  {=0A=
    // We only want ONE editor at a time to be active=0A=
    if(HTMLArea._currentlyActiveEditor)=0A=
    {=0A=
      if(HTMLArea._currentlyActiveEditor =3D=3D this) return true;=0A=
      HTMLArea._currentlyActiveEditor.deactivateEditor();=0A=
    }=0A=
=0A=
    if (HTMLArea.is_gecko && this._doc.designMode !=3D 'on')=0A=
    {=0A=
      try=0A=
      {=0A=
        // cannot set design mode if no display=0A=
        if (this._iframe.style.display =3D=3D 'none')=0A=
        {=0A=
          this._iframe.style.display =3D '';=0A=
          this._doc.designMode =3D 'on';=0A=
          this._iframe.style.display =3D 'none';=0A=
        }=0A=
        else=0A=
        {=0A=
          this._doc.designMode =3D 'on';=0A=
        }=0A=
      } catch (e) {}=0A=
    }=0A=
    else if(!HTMLArea.is_gecko && this._doc.body.contentEditable !=3D =
true)=0A=
    {=0A=
      this._doc.body.contentEditable =3D true;=0A=
    }=0A=
=0A=
    // We need to know that at least one editor on the page has been =
activated=0A=
    // this is because we will not focus any editor until an editor has =
been activated=0A=
    HTMLArea._someEditorHasBeenActivated =3D true;=0A=
    HTMLArea._currentlyActiveEditor      =3D this;=0A=
=0A=
    var editor =3D this;=0A=
    this.enableToolbar();=0A=
  }=0A=
=0A=
  HTMLArea.prototype.deactivateEditor =3D function()=0A=
  {=0A=
    // If the editor isn't active then the user shouldn't use the toolbar=0A=
    this.disableToolbar();=0A=
=0A=
    if (HTMLArea.is_gecko && this._doc.designMode !=3D 'off')=0A=
    {=0A=
      try {this._doc.designMode =3D 'off';} catch (e) {}=0A=
    }=0A=
    else if(!HTMLArea.is_gecko && this._doc.body.contentEditable !=3D =
false)=0A=
    {=0A=
      this._doc.body.contentEditable =3D false;=0A=
    }=0A=
=0A=
    if(HTMLArea._currentlyActiveEditor !=3D this)=0A=
    {=0A=
      // We just deactivated an editor that wasn't marked as the =
currentlyActiveEditor=0A=
=0A=
      return; // I think this should really be an error, there shouldn't =
be a situation where=0A=
              // an editor is deactivated without first being activated. =
 but it probably won't=0A=
              // hurt anything.=0A=
    }=0A=
=0A=
    HTMLArea._currentlyActiveEditor =3D false;=0A=
  }=0A=
=0A=
  HTMLArea.prototype.initIframe =3D function()=0A=
  {=0A=
    this.disableToolbar();=0A=
    var doc =3D null;=0A=
    var editor =3D this;=0A=
    try=0A=
    {=0A=
      if (editor._iframe.contentDocument)=0A=
      {=0A=
        this._doc =3D editor._iframe.contentDocument;        =0A=
      }=0A=
      else=0A=
      {=0A=
        this._doc =3D editor._iframe.contentWindow.document;=0A=
      }=0A=
      doc =3D this._doc;      =0A=
      if (!doc) { // try later=0A=
        if (HTMLArea.is_gecko) {=0A=
          setTimeout(function() { editor.initIframe()}, 50);=0A=
          return false;=0A=
        } else {=0A=
          alert("ERROR: IFRAME can't be initialized.");=0A=
        }=0A=
      }=0A=
    }=0A=
    catch(e)=0A=
    { // try later=0A=
      setTimeout(function() { editor.initIframe()}, 50);=0A=
    }=0A=
    =0A=
    HTMLArea.freeLater(this, '_doc');=0A=
    =0A=
    doc.open();=0A=
    if (!editor.config.fullPage) {=0A=
      var html =3D "<html>\n";=0A=
      html +=3D "<head>\n";=0A=
      html +=3D "<meta http-equiv=3D\"Content-Type\" =
content=3D\"text/html; charset=3D" + editor.config.charSet + "\">\n";=0A=
      if(typeof editor.config.baseHref !=3D 'undefined' && =
editor.config.baseHref !=3D null)=0A=
      {=0A=
        html +=3D "<base href=3D\"" + editor.config.baseHref + "\"/>\n";=0A=
      }=0A=
      html +=3D "<style title=3D\"table borders\">"=0A=
           + ".htmtableborders, .htmtableborders td, .htmtableborders th =
{border : 1px dashed lightgrey ! important;} \n"=0A=
           + "</style>\n";=0A=
      html +=3D "<style type=3D\"text/css\">"=0A=
           + "html, body { border: 0px; } \n"=0A=
           + "span.macro, span.macro ul, span.macro div, span.macro p =
{background : #CCCCCC;}\n"=0A=
           + "</style>\n";=0A=
=0A=
      if(editor.config.pageStyle)=0A=
      {=0A=
        html +=3D "<style type=3D\"text/css\">\n" + =
editor.config.pageStyle + "\n</style>";=0A=
      }=0A=
=0A=
      if(typeof editor.config.pageStyleSheets !=3D=3D 'undefined')=0A=
      {=0A=
        for(style_i =3D 0; style_i < =
editor.config.pageStyleSheets.length; style_i++)=0A=
        {=0A=
          if(editor.config.pageStyleSheets[style_i].length > 0)=0A=
              html +=3D "<link rel=3D\"stylesheet\" type=3D\"text/css\" =
href=3D\"" + editor.config.pageStyleSheets[style_i] + "\">";=0A=
            //html +=3D "<style> @import url('" + =
editor.config.pageStyleSheets[style_i] + "'); </style>\n";=0A=
        }=0A=
      }=0A=
      html +=3D "</head>\n";=0A=
      html +=3D "<body>\n";=0A=
      html +=3D   editor.inwardHtml(editor._textArea.value);=0A=
      html +=3D "</body>\n";=0A=
      html +=3D "</html>";=0A=
    } else {=0A=
      var html =3D editor.inwardHtml(editor._textArea.value);=0A=
      if (html.match(HTMLArea.RE_doctype)) {=0A=
        editor.setDoctype(RegExp.$1);=0A=
        html =3D html.replace(HTMLArea.RE_doctype, "");=0A=
      }=0A=
    }=0A=
    doc.write(html);=0A=
    doc.close();=0A=
=0A=
    // if we have multiple editors some bug in Mozilla makes some lose =
editing ability=0A=
    HTMLArea._addEvents=0A=
    (=0A=
      doc,=0A=
      ["mousedown"],=0A=
      function() { editor.activateEditor(); return true; }=0A=
    );=0A=
=0A=
=0A=
    // intercept some events; for updating the toolbar & keyboard =
handlers=0A=
    HTMLArea._addEvents=0A=
      (doc, ["keydown", "keypress", "mousedown", "mouseup", "drag"],=0A=
       function (event) {=0A=
         return editor._editorEvent(HTMLArea.is_ie ? =
editor._iframe.contentWindow.event : event);=0A=
       });=0A=
=0A=
    // check if any plugins have registered refresh handlers=0A=
    for (var i in editor.plugins) {=0A=
      var plugin =3D editor.plugins[i].instance;=0A=
      HTMLArea.refreshPlugin(plugin);=0A=
    }=0A=
=0A=
    // specific editor initialization=0A=
    if(typeof editor._onGenerate =3D=3D "function") {=0A=
      editor._onGenerate();=0A=
    }=0A=
  }=0A=
=0A=
// Switches editor mode; parameter can be "textmode" or "wysiwyg".  If no=0A=
// parameter was passed this function toggles between modes.=0A=
HTMLArea.prototype.setMode =3D function(mode) {=0A=
  if (typeof mode =3D=3D "undefined") {=0A=
    mode =3D ((this._editMode =3D=3D "textmode") ? "wysiwyg" : =
"textmode");=0A=
  }=0A=
  switch (mode) {=0A=
    case "textmode":=0A=
    {=0A=
      var html =3D this.outwardHtml(this.getHTML());=0A=
      this.setHTML(html);=0A=
=0A=
      // Hide the iframe=0A=
      this.deactivateEditor();=0A=
      this._iframe.style.display   =3D 'none';=0A=
      this._textArea.style.display =3D '';=0A=
=0A=
      if (this.config.statusBar)=0A=
      {=0A=
        this._statusBarTree.style.display =3D "none";=0A=
        this._statusBarTextMode.style.display =3D "";=0A=
      }=0A=
=0A=
      this.notifyOf('modechange', {'mode':'text'});=0A=
      break;=0A=
    }=0A=
=0A=
    case "wysiwyg":=0A=
    {=0A=
      var html =3D this.inwardHtml(this.getHTML());=0A=
      this.deactivateEditor();=0A=
      this.setHTML(html);=0A=
      this._iframe.style.display   =3D '';=0A=
      this._textArea.style.display =3D "none";=0A=
      this.activateEditor();=0A=
      if (this.config.statusBar)=0A=
      {=0A=
        this._statusBarTree.style.display =3D "";=0A=
        this._statusBarTextMode.style.display =3D "none";=0A=
      }=0A=
=0A=
      this.notifyOf('modechange', {'mode':'wysiwyg'});=0A=
      break;=0A=
    }=0A=
=0A=
    default:=0A=
    {=0A=
      alert("Mode <" + mode + "> not defined!");=0A=
      return false;=0A=
    }=0A=
  }=0A=
  this._editMode =3D mode;=0A=
=0A=
  for (var i in this.plugins) {=0A=
    var plugin =3D this.plugins[i].instance;=0A=
    if (typeof plugin.onMode =3D=3D "function") plugin.onMode(mode);=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.prototype.setFullHTML =3D function(html) {=0A=
  var save_multiline =3D RegExp.multiline;=0A=
  RegExp.multiline =3D true;=0A=
  if (html.match(HTMLArea.RE_doctype)) {=0A=
    this.setDoctype(RegExp.$1);=0A=
    html =3D html.replace(HTMLArea.RE_doctype, "");=0A=
  }=0A=
  RegExp.multiline =3D save_multiline;=0A=
  if (!HTMLArea.is_ie) {=0A=
    if (html.match(HTMLArea.RE_head))=0A=
      this._doc.getElementsByTagName("head")[0].innerHTML =3D RegExp.$1;=0A=
    if (html.match(HTMLArea.RE_body))=0A=
      this._doc.getElementsByTagName("body")[0].innerHTML =3D RegExp.$1;=0A=
  } else {=0A=
    var reac =3D this.editorIsActivated();=0A=
    if(reac) this.deactivateEditor();=0A=
    var html_re =3D /<html>((.|\n)*?)<\/html>/i;=0A=
    html =3D html.replace(html_re, "$1");=0A=
    this._doc.open();=0A=
    this._doc.write(html);=0A=
    this._doc.close();=0A=
    if(reac) this.activateEditor();=0A=
    return true;=0A=
  }=0A=
};=0A=
=0A=
/***************************************************=0A=
 *  Category: PLUGINS=0A=
 ***************************************************/=0A=
=0A=
// Create the specified plugin and register it with this HTMLArea=0A=
// return the plugin created to allow refresh when necessary=0A=
HTMLArea.prototype.registerPlugin =3D function() {=0A=
  var plugin =3D arguments[0];=0A=
=0A=
  // We can only register plugins that have been succesfully loaded=0A=
  if=0A=
  (=0A=
    plugin =3D=3D null=0A=
    || typeof plugin =3D=3D 'undefined'=0A=
    || (typeof plugin =3D=3D 'string' && eval('typeof ' + plugin) =3D=3D =
'undefined')=0A=
  ) return false;=0A=
=0A=
  var args =3D [];=0A=
  for (var i =3D 1; i < arguments.length; ++i)=0A=
    args.push(arguments[i]);=0A=
  return this.registerPlugin2(plugin, args);=0A=
};=0A=
=0A=
// this is the variant of the function above where the plugin arguments =
are=0A=
// already packed in an array.  Externally, it should be only used in the=0A=
// full-screen editor code, in order to initialize plugins with the same=0A=
// parameters as in the opener window.=0A=
HTMLArea.prototype.registerPlugin2 =3D function(plugin, args) {=0A=
  if (typeof plugin =3D=3D "string")=0A=
    plugin =3D eval(plugin);=0A=
  if (typeof plugin =3D=3D "undefined") {=0A=
    /* FIXME: This should never happen. But why does it do? */=0A=
    return false;=0A=
  }=0A=
  var obj =3D new plugin(this, args);=0A=
  if (obj) {=0A=
    var clone =3D {};=0A=
    var info =3D plugin._pluginInfo;=0A=
    for (var i in info)=0A=
      clone[i] =3D info[i];=0A=
    clone.instance =3D obj;=0A=
    clone.args =3D args;=0A=
    this.plugins[plugin._pluginInfo.name] =3D clone;=0A=
    return obj;=0A=
  } else=0A=
    alert("Can't register plugin " + plugin.toString() + ".");=0A=
};=0A=
=0A=
// static function that loads the required plugin and lang file, based =
on the=0A=
// language loaded already for HTMLArea.  You better make sure that the =
plugin=0A=
// _has_ that language, otherwise shit might happen ;-)=0A=
HTMLArea.getPluginDir =3D function(pluginName) {=0A=
  return _editor_url + "plugins/" + pluginName;=0A=
};=0A=
=0A=
HTMLArea.loadPlugin =3D function(pluginName, callback) {=0A=
  // Might already be loaded=0A=
  if(eval('typeof ' + pluginName) !=3D 'undefined')=0A=
  {=0A=
    if(callback)=0A=
    {=0A=
      callback(pluginName);=0A=
    }=0A=
    return true;=0A=
  }=0A=
=0A=
  var dir =3D this.getPluginDir(pluginName);=0A=
  var plugin =3D pluginName.replace(/([a-z])([A-Z])([a-z])/g,=0A=
          function (str, l1, l2, l3) {=0A=
            return l1 + "-" + l2.toLowerCase() + l3;=0A=
          }).toLowerCase() + ".js";=0A=
  var plugin_file =3D dir + "/" + plugin;=0A=
=0A=
  if(callback)=0A=
  {=0A=
    HTMLArea._loadback(plugin_file, function() { callback(pluginName); =
});=0A=
  }=0A=
  else=0A=
  {=0A=
    document.write("<script type=3D'text/javascript' src=3D'" + =
plugin_file + "'></script>");=0A=
  }=0A=
  return false;=0A=
};=0A=
=0A=
HTMLArea._pluginLoadStatus =3D { };=0A=
HTMLArea.loadPlugins =3D function(plugins, callbackIfNotReady)=0A=
{=0A=
  // Rip the ones that are loaded and look for ones that have failed=0A=
  var retVal =3D true;=0A=
  var nuPlugins =3D HTMLArea.cloneObject(plugins);=0A=
  while(nuPlugins.length)=0A=
  {=0A=
    var p =3D nuPlugins.pop();=0A=
    if(typeof HTMLArea._pluginLoadStatus[p] =3D=3D 'undefined')=0A=
    {=0A=
      // Load it=0A=
      HTMLArea._pluginLoadStatus[p] =3D 'loading';=0A=
      HTMLArea.loadPlugin(p,=0A=
          function(plugin)=0A=
          {=0A=
            if(eval('typeof ' + plugin) !=3D 'undefined')=0A=
            {=0A=
              HTMLArea._pluginLoadStatus[plugin] =3D 'ready';=0A=
            }=0A=
            else=0A=
            {=0A=
              // Actually, this won't happen, because if the script fails=0A=
              // it will throw an exception preventing the callback from=0A=
              // running.  This will leave it always in the "loading" =
state=0A=
              // unfortunatly that means we can't fail plugins gracefully=0A=
              // by just skipping them.=0A=
              HTMLArea._pluginLoadStatus[plugin] =3D 'failed';=0A=
            }=0A=
          }=0A=
      );=0A=
      retVal =3D false;=0A=
    }=0A=
    else=0A=
    {=0A=
      switch(HTMLArea._pluginLoadStatus[p])=0A=
      {=0A=
        case 'failed':=0A=
        case 'ready' :=0A=
        break;=0A=
=0A=
        case 'loading':=0A=
        default       :=0A=
         retVal =3D false;=0A=
         break;=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  if(retVal) return true; // All done, just return=0A=
=0A=
  // Waiting on plugins to load, return false now and come back a bit =
later=0A=
  // if we have to callback=0A=
  if(callbackIfNotReady)=0A=
  {=0A=
    setTimeout(function() { if(HTMLArea.loadPlugins(plugins, =
callbackIfNotReady)) callbackIfNotReady(); }, 150);=0A=
  }=0A=
  return retVal;=0A=
}=0A=
=0A=
// refresh plugin by calling onGenerate or onGenerateOnce method.=0A=
HTMLArea.refreshPlugin =3D function(plugin) {=0A=
  if (typeof plugin.onGenerate =3D=3D "function")=0A=
    plugin.onGenerate();=0A=
  if (typeof plugin.onGenerateOnce =3D=3D "function") {=0A=
    plugin.onGenerateOnce();=0A=
    plugin.onGenerateOnce =3D null;=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.loadStyle =3D function(style, plugin) {=0A=
  var url =3D _editor_url || '';=0A=
  if (typeof plugin !=3D "undefined") {=0A=
    url +=3D "plugins/" + plugin + "/";=0A=
  }=0A=
  url +=3D style;=0A=
  if (/^\//.test(style))=0A=
    url =3D style;=0A=
  var head =3D document.getElementsByTagName("head")[0];=0A=
  var link =3D document.createElement("link");=0A=
  link.rel =3D "stylesheet";=0A=
  link.href =3D url;=0A=
  head.appendChild(link);=0A=
  //document.write("<style type=3D'text/css'>@import url(" + url + =
");</style>");=0A=
};=0A=
HTMLArea.loadStyle(typeof _editor_css =3D=3D "string" ? _editor_css : =
"htmlarea.css");=0A=
=0A=
/***************************************************=0A=
 *  Category: EDITOR UTILITIES=0A=
 ***************************************************/=0A=
=0A=
HTMLArea.prototype.debugTree =3D function() {=0A=
  var ta =3D document.createElement("textarea");=0A=
  ta.style.width =3D "100%";=0A=
  ta.style.height =3D "20em";=0A=
  ta.value =3D "";=0A=
  function debug(indent, str) {=0A=
    for (; --indent >=3D 0;)=0A=
      ta.value +=3D " ";=0A=
    ta.value +=3D str + "\n";=0A=
  };=0A=
  function _dt(root, level) {=0A=
    var tag =3D root.tagName.toLowerCase(), i;=0A=
    var ns =3D HTMLArea.is_ie ? root.scopeName : root.prefix;=0A=
    debug(level, "- " + tag + " [" + ns + "]");=0A=
    for (i =3D root.firstChild; i; i =3D i.nextSibling)=0A=
      if (i.nodeType =3D=3D 1)=0A=
        _dt(i, level + 2);=0A=
  };=0A=
  _dt(this._doc.body, 0);=0A=
  document.body.appendChild(ta);=0A=
};=0A=
=0A=
HTMLArea.getInnerText =3D function(el) {=0A=
  var txt =3D '', i;=0A=
  for (i =3D el.firstChild; i; i =3D i.nextSibling) {=0A=
    if (i.nodeType =3D=3D 3)=0A=
      txt +=3D i.data;=0A=
    else if (i.nodeType =3D=3D 1)=0A=
      txt +=3D HTMLArea.getInnerText(i);=0A=
  }=0A=
  return txt;=0A=
};=0A=
=0A=
HTMLArea.prototype._wordClean =3D function() {=0A=
  var=0A=
    editor =3D this,=0A=
    stats =3D {=0A=
      empty_tags : 0,=0A=
      mso_class  : 0,=0A=
      mso_style  : 0,=0A=
      mso_xmlel  : 0,=0A=
      orig_len   : this._doc.body.innerHTML.length,=0A=
      T          : (new Date()).getTime()=0A=
    },=0A=
    stats_txt =3D {=0A=
      empty_tags : "Empty tags removed: ",=0A=
      mso_class  : "MSO class names removed: ",=0A=
      mso_style  : "MSO inline style removed: ",=0A=
      mso_xmlel  : "MSO XML elements stripped: "=0A=
    };=0A=
  function showStats() {=0A=
    var txt =3D "HTMLArea word cleaner stats: \n\n";=0A=
    for (var i in stats)=0A=
      if (stats_txt[i])=0A=
        txt +=3D stats_txt[i] + stats[i] + "\n";=0A=
    txt +=3D "\nInitial document length: " + stats.orig_len + "\n";=0A=
    txt +=3D "Final document length: " + =
editor._doc.body.innerHTML.length + "\n";=0A=
    txt +=3D "Clean-up took " + (((new Date()).getTime() - stats.T) / =
1000) + " seconds";=0A=
    alert(txt);=0A=
  };=0A=
  function clearClass(node) {=0A=
    var newc =3D node.className.replace(/(^|\s)mso.*?(\s|$)/ig, ' ');=0A=
    if (newc !=3D node.className) {=0A=
      node.className =3D newc;=0A=
      if (!/\S/.test(node.className)) {=0A=
        node.removeAttribute("className");=0A=
        ++stats.mso_class;=0A=
      }=0A=
    }=0A=
  };=0A=
  function clearStyle(node) {=0A=
    var declarations =3D node.style.cssText.split(/\s*;\s*/);=0A=
    for (var i =3D declarations.length; --i >=3D 0;)=0A=
      if (/^mso|^tab-stops/i.test(declarations[i]) ||=0A=
          /^margin\s*:\s*0..\s+0..\s+0../i.test(declarations[i])) {=0A=
        ++stats.mso_style;=0A=
        declarations.splice(i, 1);=0A=
      }=0A=
    node.style.cssText =3D declarations.join("; ");=0A=
  };=0A=
  function stripTag(el) {=0A=
    if (HTMLArea.is_ie)=0A=
      el.outerHTML =3D HTMLArea.htmlEncode(el.innerText);=0A=
    else {=0A=
      var txt =3D document.createTextNode(HTMLArea.getInnerText(el));=0A=
      el.parentNode.insertBefore(txt, el);=0A=
      HTMLArea.removeFromParent(el);=0A=
    }=0A=
    ++stats.mso_xmlel;=0A=
  };=0A=
  function checkEmpty(el) {=0A=
    if (/^(a|span|b|strong|i|em|font)$/i.test(el.tagName) &&=0A=
        !el.firstChild) {=0A=
      HTMLArea.removeFromParent(el);=0A=
      ++stats.empty_tags;=0A=
    }=0A=
  };=0A=
  function parseTree(root) {=0A=
    var tag =3D root.tagName.toLowerCase(), i, next;=0A=
    if ((HTMLArea.is_ie && root.scopeName !=3D 'HTML') || =
(!HTMLArea.is_ie && /:/.test(tag))) {=0A=
      stripTag(root);=0A=
      return false;=0A=
    } else {=0A=
      clearClass(root);=0A=
      clearStyle(root);=0A=
      for (i =3D root.firstChild; i; i =3D next) {=0A=
        next =3D i.nextSibling;=0A=
        if (i.nodeType =3D=3D 1 && parseTree(i))=0A=
          checkEmpty(i);=0A=
      }=0A=
    }=0A=
    return true;=0A=
  };=0A=
  parseTree(this._doc.body);=0A=
  // showStats();=0A=
  // this.debugTree();=0A=
  // this.setHTML(this.getHTML());=0A=
  // this.setHTML(this.getInnerHTML());=0A=
  // this.forceRedraw();=0A=
  this.updateToolbar();=0A=
};=0A=
=0A=
HTMLArea.prototype._clearFonts =3D function() {=0A=
  var D =3D this.getInnerHTML();=0A=
=0A=
  if(confirm('Would you like to clear font typefaces?'))=0A=
  {=0A=
    D =3D D.replace(/face=3D"[^"]*"/gi, '');=0A=
    D =3D D.replace(/font-family:[^;}"']+;?/gi, '');=0A=
  }=0A=
=0A=
  if(confirm('Would you like to clear font sizes?'))=0A=
  {=0A=
    D =3D D.replace(/size=3D"[^"]*"/gi, '');=0A=
    D =3D D.replace(/font-size:[^;}"']+;?/gi, '');=0A=
  }=0A=
=0A=
  if(confirm('Would you like to clear font colours?'))=0A=
  {=0A=
    D =3D D.replace(/color=3D"[^"]*"/gi, '');=0A=
    D =3D D.replace(/([^-])color:[^;}"']+;?/gi, '$1');=0A=
  }=0A=
=0A=
  D =3D D.replace(/(style|class)=3D"\s*"/gi, '');=0A=
  D =3D D.replace(/<(font|span)\s*>/gi, '');=0A=
  this.setHTML(D);=0A=
  this.updateToolbar();=0A=
}=0A=
=0A=
HTMLArea.prototype._splitBlock =3D function()=0A=
{=0A=
  this._doc.execCommand('formatblock', false, '<div>');=0A=
}=0A=
=0A=
HTMLArea.prototype.forceRedraw =3D function() {=0A=
  this._doc.body.style.visibility =3D "hidden";=0A=
  this._doc.body.style.visibility =3D "visible";=0A=
  // this._doc.body.innerHTML =3D this.getInnerHTML();=0A=
};=0A=
=0A=
// focuses the iframe window.  returns a reference to the editor =
document.=0A=
HTMLArea.prototype.focusEditor =3D function() {=0A=
  switch (this._editMode) {=0A=
      // notice the try { ... } catch block to avoid some rare =
exceptions in FireFox=0A=
      // (perhaps also in other Gecko browsers). Manual focus by user is =
required in=0A=
        // case of an error. Somebody has an idea?=0A=
      case "wysiwyg" :=0A=
      try=0A=
      {=0A=
        // We don't want to focus the field unless at least one field =
has been activated.=0A=
        if(HTMLArea._someEditorHasBeenActivated)=0A=
        {=0A=
          this.activateEditor(); // Ensure *this* editor is activated=0A=
          this._iframe.contentWindow.focus(); // and focus it=0A=
        }=0A=
      } catch (e) {} break;=0A=
      case "textmode": try { this._textArea.focus() } catch (e) {} break;=0A=
      default	   : alert("ERROR: mode " + this._editMode + " is not =
defined");=0A=
  }=0A=
  return this._doc;=0A=
};=0A=
=0A=
// takes a snapshot of the current text (for undo)=0A=
HTMLArea.prototype._undoTakeSnapshot =3D function() {=0A=
  ++this._undoPos;=0A=
  if (this._undoPos >=3D this.config.undoSteps) {=0A=
    // remove the first element=0A=
    this._undoQueue.shift();=0A=
    --this._undoPos;=0A=
  }=0A=
  // use the fasted method (getInnerHTML);=0A=
  var take =3D true;=0A=
  var txt =3D this.getInnerHTML();=0A=
  if (this._undoPos > 0)=0A=
    take =3D (this._undoQueue[this._undoPos - 1] !=3D txt);=0A=
  if (take) {=0A=
    this._undoQueue[this._undoPos] =3D txt;=0A=
  } else {=0A=
    this._undoPos--;=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.prototype.undo =3D function() {=0A=
  if (this._undoPos > 0) {=0A=
    var txt =3D this._undoQueue[--this._undoPos];=0A=
    if (txt) this.setHTML(txt);=0A=
    else ++this._undoPos;=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.prototype.redo =3D function() {=0A=
  if (this._undoPos < this._undoQueue.length - 1) {=0A=
    var txt =3D this._undoQueue[++this._undoPos];=0A=
    if (txt) this.setHTML(txt);=0A=
    else --this._undoPos;=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.prototype.disableToolbar =3D function(except)=0A=
{=0A=
  if(this._timerToolbar) clearTimeout(this._timerToolbar);=0A=
  if(typeof except =3D=3D 'undefined')=0A=
  {=0A=
    except =3D [ ];=0A=
  }=0A=
  else if(typeof except !=3D 'object')=0A=
  {=0A=
    except =3D [except];=0A=
  }=0A=
=0A=
  for (var i in this._toolbarObjects)=0A=
  {=0A=
    var btn =3D this._toolbarObjects[i];=0A=
    if(except.contains(i))=0A=
    {=0A=
      continue;=0A=
    }=0A=
    btn.state("enabled", false);=0A=
  }=0A=
}=0A=
=0A=
HTMLArea.prototype.enableToolbar =3D function()=0A=
{=0A=
  this.updateToolbar();=0A=
}=0A=
=0A=
if(!Array.prototype.contains)=0A=
{=0A=
  Array.prototype.contains =3D function(needle)=0A=
  {=0A=
   var haystack =3D this;=0A=
   for(var i =3D 0; i < haystack.length; i++)=0A=
    {=0A=
      if(needle =3D=3D haystack[i]) return true;=0A=
    }=0A=
=0A=
    return false;=0A=
  }=0A=
}=0A=
=0A=
if(!Array.prototype.indexOf)=0A=
{=0A=
  Array.prototype.indexOf =3D function(needle)=0A=
  {=0A=
    var haystack =3D this;=0A=
    for(var i =3D 0; i < haystack.length; i++)=0A=
    {=0A=
      if(needle =3D=3D haystack[i]) return i;=0A=
    }=0A=
=0A=
    return null;=0A=
  }=0A=
}=0A=
=0A=
=0A=
// updates enabled/disable/active state of the toolbar elements=0A=
HTMLArea.prototype.updateToolbar =3D function(noStatus) {=0A=
  var doc =3D this._doc;=0A=
  var text =3D (this._editMode =3D=3D "textmode");=0A=
  var ancestors =3D null;=0A=
  if (!text) {=0A=
    ancestors =3D this.getAllAncestors();=0A=
    if (this.config.statusBar && !noStatus) {=0A=
      this._statusBarTree.innerHTML =3D HTMLArea._lc("Path") + ": "; // =
clear=0A=
      for (var i =3D ancestors.length; --i >=3D 0;) {=0A=
        var el =3D ancestors[i];=0A=
        if (!el) {=0A=
          // hell knows why we get here; this=0A=
          // could be a classic example of why=0A=
          // it's good to check for conditions=0A=
          // that are impossible to happen ;-)=0A=
          continue;=0A=
        }=0A=
        var a =3D document.createElement("a");=0A=
        a.href =3D "javascript:void(0)";=0A=
        a.el =3D el;=0A=
        a.editor =3D this;=0A=
        HTMLArea.addDom0Event(a, 'click', function() {=0A=
          this.blur();=0A=
          this.editor.selectNodeContents(this.el);=0A=
          this.editor.updateToolbar(true);=0A=
          return false;=0A=
        });=0A=
        HTMLArea.addDom0Event(a, 'contextmenu',  function() {=0A=
          // TODO: add context menu here=0A=
          this.blur();=0A=
          var info =3D "Inline style:\n\n";=0A=
          info +=3D this.el.style.cssText.split(/;\s*/).join(";\n");=0A=
          alert(info);=0A=
          return false;=0A=
        });=0A=
        var txt =3D el.tagName.toLowerCase();=0A=
        a.title =3D el.style.cssText;=0A=
        if (el.id) {=0A=
          txt +=3D "#" + el.id;=0A=
        }=0A=
        if (el.className) {=0A=
          txt +=3D "." + el.className;=0A=
        }=0A=
        a.appendChild(document.createTextNode(txt));=0A=
        this._statusBarTree.appendChild(a);=0A=
        if (i !=3D 0) {=0A=
          =
this._statusBarTree.appendChild(document.createTextNode(String.fromCharCo=
de(0xbb)));=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  for (var i in this._toolbarObjects) {=0A=
    var btn =3D this._toolbarObjects[i];=0A=
    var cmd =3D i;=0A=
    var inContext =3D true;=0A=
    if (btn.context && !text) {=0A=
      inContext =3D false;=0A=
      var context =3D btn.context;=0A=
      var attrs =3D [];=0A=
      if (/(.*)\[(.*?)\]/.test(context)) {=0A=
        context =3D RegExp.$1;=0A=
        attrs =3D RegExp.$2.split(",");=0A=
      }=0A=
      context =3D context.toLowerCase();=0A=
      var match =3D (context =3D=3D "*");=0A=
      for (var k =3D 0; k < ancestors.length; ++k) {=0A=
        if (!ancestors[k]) {=0A=
          // the impossible really happens.=0A=
          continue;=0A=
        }=0A=
        if (match || (ancestors[k].tagName.toLowerCase() =3D=3D =
context)) {=0A=
          inContext =3D true;=0A=
          for (var ka =3D 0; ka < attrs.length; ++ka) {=0A=
            if (!eval("ancestors[k]." + attrs[ka])) {=0A=
              inContext =3D false;=0A=
              break;=0A=
            }=0A=
          }=0A=
          if (inContext) {=0A=
            break;=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
    btn.state("enabled", (!text || btn.text) && inContext);=0A=
    if (typeof cmd =3D=3D "function") {=0A=
      continue;=0A=
    }=0A=
    // look-it-up in the custom dropdown boxes=0A=
    var dropdown =3D this.config.customSelects[cmd];=0A=
    if ((!text || btn.text) && (typeof dropdown !=3D "undefined")) {=0A=
      dropdown.refresh(this);=0A=
      continue;=0A=
    }=0A=
    switch (cmd)=0A=
    {=0A=
        case "fontname":=0A=
        case "fontsize":=0A=
      {=0A=
      if (!text) try {=0A=
        var value =3D ("" + doc.queryCommandValue(cmd)).toLowerCase();=0A=
        if (!value) {=0A=
          btn.element.selectedIndex =3D 0;=0A=
          break;=0A=
        }=0A=
=0A=
        // HACK -- retrieve the config option for this=0A=
        // combo box.  We rely on the fact that the=0A=
        // variable in config has the same name as=0A=
        // button name in the toolbar.=0A=
        var options =3D this.config[cmd];=0A=
        var k =3D 0;=0A=
          for (var j in options)=0A=
          {=0A=
          // FIXME: the following line is scary.=0A=
            if ((j.toLowerCase() =3D=3D value) || (options[j].substr(0, =
value.length).toLowerCase() =3D=3D value))=0A=
            {=0A=
            btn.element.selectedIndex =3D k;=0A=
            throw "ok";=0A=
          }=0A=
          ++k;=0A=
        }=0A=
        btn.element.selectedIndex =3D 0;=0A=
      } catch(e) {};=0A=
      }=0A=
      break;=0A=
=0A=
      // It's better to search for the format block by tag name from the=0A=
      //  current selection upwards, because IE has a tendancy to return=0A=
      //  things like 'heading 1' for 'h1', which breaks things if you =
want=0A=
      //  to call your heading blocks 'header 1'.  Stupid MS.=0A=
      case "formatblock"  :=0A=
      {=0A=
        var blocks =3D [ ];=0A=
        for(var i in this.config['formatblock'])=0A=
        {=0A=
          blocks[blocks.length] =3D this.config['formatblock'][i];=0A=
        }=0A=
=0A=
        var deepestAncestor =3D =
this._getFirstAncestor(this._getSelection(), blocks);=0A=
        if(deepestAncestor)=0A=
        {=0A=
          for(var x=3D 0; x < blocks.length; x++)=0A=
          {=0A=
            if(blocks[x].toLowerCase() =3D=3D =
deepestAncestor.tagName.toLowerCase())=0A=
            {=0A=
              btn.element.selectedIndex =3D x;=0A=
            }=0A=
          }=0A=
        }=0A=
        else=0A=
        {=0A=
          btn.element.selectedIndex =3D 0;=0A=
        }=0A=
      }=0A=
        break;=0A=
=0A=
        case "textindicator":=0A=
      if (!text) {=0A=
        try {with (btn.element.style) {=0A=
          backgroundColor =3D HTMLArea._makeColor(=0A=
            doc.queryCommandValue(HTMLArea.is_ie ? "backcolor" : =
"hilitecolor"));=0A=
          if (/transparent/i.test(backgroundColor)) {=0A=
            // Mozilla=0A=
            backgroundColor =3D =
HTMLArea._makeColor(doc.queryCommandValue("backcolor"));=0A=
          }=0A=
          color =3D =
HTMLArea._makeColor(doc.queryCommandValue("forecolor"));=0A=
          fontFamily =3D doc.queryCommandValue("fontname");=0A=
          fontWeight =3D doc.queryCommandState("bold") ? "bold" : =
"normal";=0A=
          fontStyle =3D doc.queryCommandState("italic") ? "italic" : =
"normal";=0A=
        }} catch (e) {=0A=
          // alert(e + "\n\n" + cmd);=0A=
        }=0A=
      }=0A=
      break;=0A=
        case "htmlmode": btn.state("active", text); break;=0A=
        case "lefttoright":=0A=
        case "righttoleft":=0A=
      var el =3D this.getParentElement();=0A=
      while (el && !HTMLArea.isBlockElement(el))=0A=
        el =3D el.parentNode;=0A=
      if (el)=0A=
        btn.state("active", (el.style.direction =3D=3D ((cmd =3D=3D =
"righttoleft") ? "rtl" : "ltr")));=0A=
      break;=0A=
        default:=0A=
      cmd =3D cmd.replace(/(un)?orderedlist/i, "insert$1orderedlist");=0A=
      try {=0A=
        btn.state("active", (!text && doc.queryCommandState(cmd)));=0A=
      } catch (e) {}=0A=
    }=0A=
  }=0A=
  // take undo snapshots=0A=
  if (this._customUndo && !this._timerUndo) {=0A=
    this._undoTakeSnapshot();=0A=
    var editor =3D this;=0A=
    this._timerUndo =3D setTimeout(function() {=0A=
      editor._timerUndo =3D null;=0A=
    }, this.config.undoTimeout);=0A=
  }=0A=
=0A=
  // Insert a space in certain locations, this is just to make editing a =
little=0A=
  // easier (to "get out of" tags), it's not essential.=0A=
  // TODO: Make this work for IE?=0A=
  // TODO: Perhaps should use a plain space character, I'm not sure.=0A=
  //  OK, I've disabled this temporarily, to be honest, I can't rightly =
remember what the=0A=
  //  original problem was I was trying to solve with it.  I think =
perhaps that EnterParagraphs=0A=
  //  might solve the problem, whatever the hell it was.  I'm going =
senile, I'm sure.=0A=
  if(0 && HTMLArea.is_gecko)=0A=
  {=0A=
    var s =3D this._getSelection();=0A=
    // If the last character in the last text node of the parent tag=0A=
    // and the parent tag is not a block tag=0A=
    if(s && s.isCollapsed && s.anchorNode=0A=
         && s.anchorNode.parentNode.tagName.toLowerCase() !=3D 'body'=0A=
         && s.anchorNode.nodeType =3D=3D 3 && s.anchorOffset =3D=3D =
s.anchorNode.length=0A=
         && !=0A=
          (   s.anchorNode.parentNode.nextSibling=0A=
           && s.anchorNode.parentNode.nextSibling.nodeType =3D=3D 3=0A=
          )=0A=
         && !HTMLArea.isBlockElement(s.anchorNode.parentNode)=0A=
      )=0A=
    {=0A=
      // Insert hair-width-space after the close tag if there isn't =
another text node on the other side=0A=
      // It could also work with zero-width-space (\u200B) but I don't =
like it so much.=0A=
      // Perhaps this won't work well in various character sets and we =
should use plain space (20)?=0A=
      try=0A=
      {=0A=
        s.anchorNode.parentNode.parentNode.insertBefore=0A=
          (this._doc.createTextNode('\t'), =
s.anchorNode.parentNode.nextSibling);=0A=
      }=0A=
      catch(e)=0A=
      {=0A=
        // Disregard=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  // check if any plugins have registered refresh handlers=0A=
  for (var i in this.plugins) {=0A=
    var plugin =3D this.plugins[i].instance;=0A=
    if (typeof plugin.onUpdateToolbar =3D=3D "function")=0A=
      plugin.onUpdateToolbar();=0A=
  }=0A=
=0A=
=0A=
}=0A=
=0A=
/** Returns a node after which we can insert other nodes, in the current=0A=
 * selection.  The selection is removed.  It splits a text node, if =
needed.=0A=
 */=0A=
HTMLArea.prototype.insertNodeAtSelection =3D function(toBeInserted) {=0A=
  if (!HTMLArea.is_ie) {=0A=
    var sel =3D this._getSelection();=0A=
    var range =3D this._createRange(sel);=0A=
    // remove the current selection=0A=
    sel.removeAllRanges();=0A=
    range.deleteContents();=0A=
    var node =3D range.startContainer;=0A=
    var pos =3D range.startOffset;=0A=
    switch (node.nodeType) {=0A=
        case 3: // Node.TEXT_NODE=0A=
      // we have to split it at the caret position.=0A=
      if (toBeInserted.nodeType =3D=3D 3) {=0A=
        // do optimized insertion=0A=
        node.insertData(pos, toBeInserted.data);=0A=
        range =3D this._createRange();=0A=
        range.setEnd(node, pos + toBeInserted.length);=0A=
        range.setStart(node, pos + toBeInserted.length);=0A=
        sel.addRange(range);=0A=
      } else {=0A=
        node =3D node.splitText(pos);=0A=
        var selnode =3D toBeInserted;=0A=
        if (toBeInserted.nodeType =3D=3D 11 /* =
Node.DOCUMENT_FRAGMENT_NODE */) {=0A=
          selnode =3D selnode.firstChild;=0A=
        }=0A=
        node.parentNode.insertBefore(toBeInserted, node);=0A=
        this.selectNodeContents(selnode);=0A=
        this.updateToolbar();=0A=
      }=0A=
      break;=0A=
        case 1: // Node.ELEMENT_NODE=0A=
      var selnode =3D toBeInserted;=0A=
      if (toBeInserted.nodeType =3D=3D 11 /* Node.DOCUMENT_FRAGMENT_NODE =
*/) {=0A=
        selnode =3D selnode.firstChild;=0A=
      }=0A=
      node.insertBefore(toBeInserted, node.childNodes[pos]);=0A=
      this.selectNodeContents(selnode);=0A=
      this.updateToolbar();=0A=
      break;=0A=
    }=0A=
  } else {=0A=
    return null;	// this function not yet used for IE <FIXME>=0A=
  }=0A=
};=0A=
=0A=
// Returns the deepest node that contains both endpoints of the =
selection.=0A=
HTMLArea.prototype.getParentElement =3D function(sel) {=0A=
  if(typeof sel =3D=3D 'undefined')=0A=
  {=0A=
    sel =3D this._getSelection();=0A=
  }=0A=
  var range =3D this._createRange(sel);=0A=
  if (HTMLArea.is_ie) {=0A=
    switch (sel.type) {=0A=
        case "Text":=0A=
        case "None":=0A=
      // It seems that even for selection of type "None",=0A=
      // there _is_ a parent element and it's value is not=0A=
      // only correct, but very important to us.  MSIE is=0A=
      // certainly the buggiest browser in the world and I=0A=
      // wonder, God, how can Earth stand it?=0A=
      return range.parentElement();=0A=
        case "Control":=0A=
      return range.item(0);=0A=
        default:=0A=
      return this._doc.body;=0A=
    }=0A=
  } else try {=0A=
    var p =3D range.commonAncestorContainer;=0A=
    if (!range.collapsed && range.startContainer =3D=3D =
range.endContainer &&=0A=
        range.startOffset - range.endOffset <=3D 1 && =
range.startContainer.hasChildNodes())=0A=
      p =3D range.startContainer.childNodes[range.startOffset];=0A=
    /*=0A=
    alert(range.startContainer + ":" + range.startOffset + "\n" +=0A=
          range.endContainer + ":" + range.endOffset);=0A=
    */=0A=
    while (p.nodeType =3D=3D 3) {=0A=
      p =3D p.parentNode;=0A=
    }=0A=
    return p;=0A=
  } catch (e) {=0A=
    return null;=0A=
  }=0A=
};=0A=
=0A=
// Returns an array with all the ancestor nodes of the selection.=0A=
HTMLArea.prototype.getAllAncestors =3D function() {=0A=
  var p =3D this.getParentElement();=0A=
  var a =3D [];=0A=
  while (p && (p.nodeType =3D=3D 1) && (p.tagName.toLowerCase() !=3D =
'body')) {=0A=
    a.push(p);=0A=
    p =3D p.parentNode;=0A=
  }=0A=
  a.push(this._doc.body);=0A=
  return a;=0A=
};=0A=
=0A=
// Returns the deepest ancestor of the selection that is of the current =
type=0A=
HTMLArea.prototype._getFirstAncestor =3D function(sel, types)=0A=
{=0A=
  var prnt =3D this._activeElement(sel);=0A=
  if(prnt =3D=3D null)=0A=
  {=0A=
    try=0A=
    {=0A=
      prnt =3D (HTMLArea.is_ie ? this._createRange(sel).parentElement() =
: this._createRange(sel).commonAncestorContainer);=0A=
    }=0A=
    catch(e)=0A=
    {=0A=
      return null;=0A=
    }=0A=
  }=0A=
=0A=
  if(typeof types =3D=3D 'string')=0A=
  {=0A=
    types =3D [types];=0A=
  }=0A=
=0A=
  while(prnt)=0A=
  {=0A=
    if(prnt.nodeType =3D=3D 1)=0A=
    {=0A=
      if(types =3D=3D null) return prnt;=0A=
      if(types.contains(prnt.tagName.toLowerCase()))=0A=
      {=0A=
=0A=
        return prnt;=0A=
      }=0A=
      if(prnt.tagName.toLowerCase() =3D=3D 'body') break;=0A=
      if(prnt.tagName.toLowerCase() =3D=3D 'table') break;=0A=
    }=0A=
    prnt =3D prnt.parentNode;=0A=
  }=0A=
=0A=
  return null;=0A=
}=0A=
=0A=
/**=0A=
 * Returns the selected element, if any.  That is,=0A=
 * the element that you have last selected in the "path"=0A=
 * at the bottom of the editor, or a "control" (eg image)=0A=
 *=0A=
 * @returns null | element=0A=
 */=0A=
HTMLArea.prototype._activeElement =3D function(sel)=0A=
{=0A=
  if(sel =3D=3D null) return null;=0A=
  if(this._selectionEmpty(sel)) return null;=0A=
=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
    if(sel.type.toLowerCase() =3D=3D "control")=0A=
    {=0A=
      return sel.createRange().item(0);=0A=
    }=0A=
    else=0A=
    {=0A=
=0A=
      // If it's not a control, then we need to see if=0A=
      // the selection is the _entire_ text of a parent node=0A=
      // (this happens when a node is clicked in the tree)=0A=
      var range =3D sel.createRange();=0A=
      var p_elm =3D this.getParentElement(sel);=0A=
      if(p_elm.innerHTML =3D=3D range.htmlText)=0A=
      {=0A=
        return p_elm;=0A=
      }=0A=
      /*=0A=
      if(p_elm)=0A=
      {=0A=
        var p_rng =3D this._doc.body.createTextRange();=0A=
        p_rng.moveToElementText(p_elm);=0A=
        if(p_rng.isEqual(range))=0A=
        {=0A=
          return p_elm;=0A=
        }=0A=
      }=0A=
=0A=
      if(range.parentElement())=0A=
      {=0A=
        var prnt_range =3D this._doc.body.createTextRange();=0A=
        prnt_range.moveToElementText(range.parentElement());=0A=
        if(prnt_range.isEqual(range))=0A=
        {=0A=
          return range.parentElement();=0A=
        }=0A=
      }=0A=
      */=0A=
      return null;=0A=
    }=0A=
  }=0A=
  else=0A=
  {=0A=
    // For Mozilla we just see if the selection is not collapsed =
(something is selected)=0A=
    // and that the anchor (start of selection) is an element.  This =
might not be totally=0A=
    // correct, we possibly should do a simlar check to IE?=0A=
    if(! sel.isCollapsed)=0A=
    {=0A=
      if(sel.anchorNode.childNodes.length > sel.anchorOffset && =
sel.anchorNode.childNodes[sel.anchorOffset].nodeType =3D=3D 1)=0A=
      {=0A=
        return sel.anchorNode.childNodes[sel.anchorOffset];=0A=
      }=0A=
      else if(sel.anchorNode.nodeType =3D=3D 1)=0A=
      {=0A=
        return sel.anchorNode;=0A=
      }=0A=
      else=0A=
      {=0A=
        return sel.anchorNode.parentNode;=0A=
      }=0A=
    }=0A=
    return null;=0A=
  }=0A=
}=0A=
=0A=
=0A=
HTMLArea.prototype._selectionEmpty =3D function(sel)=0A=
{=0A=
  if(!sel) return true;=0A=
=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
    return this._createRange(sel).htmlText =3D=3D '';=0A=
  }=0A=
  else if(typeof sel.isCollapsed !=3D 'undefined')=0A=
  {=0A=
    return sel.isCollapsed;=0A=
  }=0A=
=0A=
  return true;=0A=
}=0A=
=0A=
HTMLArea.prototype._getAncestorBlock =3D function(sel)=0A=
{=0A=
  // Scan upwards to find a block level element that we can change or =
apply to=0A=
  var prnt =3D (HTMLArea.is_ie ? this._createRange(sel).parentElement : =
this._createRange(sel).commonAncestorContainer);=0A=
=0A=
  while(prnt && (prnt.nodeType =3D=3D 1))=0A=
  {=0A=
    switch(prnt.tagName.toLowerCase())=0A=
    {=0A=
      case 'div' :=0A=
      case 'p'   :=0A=
      case 'address'    :=0A=
      case 'blockquote' :=0A=
      case 'center'  :=0A=
      case 'del'     :=0A=
      case 'ins'     :=0A=
      case 'pre'     :=0A=
      case 'h1'      :=0A=
      case 'h2'      :=0A=
      case 'h3'      :=0A=
      case 'h4'      :=0A=
      case 'h5'      :=0A=
      case 'h6'      :=0A=
      case 'h7'      :=0A=
        // Block Element=0A=
        return prnt;=0A=
=0A=
      case 'body'     :=0A=
      case 'noframes' :=0A=
      case 'dd'  :=0A=
      case 'li'  :=0A=
      case 'th'  :=0A=
      case 'td'  :=0A=
      case 'noscript' :=0A=
        // Halting element (stop searching)=0A=
        return null;=0A=
=0A=
      default :=0A=
        // Keep lookin=0A=
        break;=0A=
    }=0A=
  }=0A=
=0A=
  return null;=0A=
}=0A=
=0A=
HTMLArea.prototype._createImplicitBlock =3D function(type)=0A=
{=0A=
  // expand it until we reach a block element in either direction=0A=
  // then wrap the selection in a block and return=0A=
  var sel =3D this._getSelection();=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
    sel.empty();=0A=
  }=0A=
  else=0A=
  {=0A=
    sel.collapseToStart();=0A=
  }=0A=
=0A=
  var rng =3D this._createRange(sel);=0A=
=0A=
  // Expand UP=0A=
=0A=
  // Expand DN=0A=
}=0A=
=0A=
HTMLArea.prototype._formatBlock =3D function(block_format)=0A=
{=0A=
  var ancestors =3D this.getAllAncestors();=0A=
  var apply_to =3D null;=0A=
=0A=
  // Block format can be a tag followed with class defs=0A=
  //  eg div.blue.left=0A=
  var target_tag =3D null;=0A=
  var target_classNames =3D [ ];=0A=
=0A=
  if(block_format.indexOf('.') >=3D 0)=0A=
  {=0A=
    target_tag =3D block_format.substr(0, =
block_format.indexOf('.')).toLowerCase();;=0A=
=0A=
    target_classNames =3D block_format.substr(block_format.indexOf('.'), =
block_format.length - block_format.indexOf('.')).replace(/\./g, =
'').replace(/^\s*/, '').replace(/\s*$/, '').split(' ');=0A=
  }=0A=
  else=0A=
  {=0A=
    target_tag =3D block_format.toLowerCase();=0A=
  }=0A=
=0A=
  var sel =3D this._getSelection();=0A=
  var rng =3D this._createRange(sel);=0A=
  var apply_to =3D null;=0A=
=0A=
  if(HTMLArea.is_gecko)=0A=
  {=0A=
    if(sel.isCollapsed)=0A=
    {=0A=
      // With no selection we want to apply to the whole contents of the =
ancestor block=0A=
      apply_to =3D this._getAncestorBlock(sel);=0A=
      if(apply_to =3D=3D null)=0A=
      {=0A=
        // If there wasn't an ancestor, make one.=0A=
        apply_to =3D this._createImplicitBlock(sel, target_tag);=0A=
      }=0A=
    }=0A=
    else=0A=
    {=0A=
      // With a selection it's more tricky=0A=
      switch(target_tag)=0A=
      {=0A=
=0A=
        case 'h1'      :=0A=
        case 'h2'      :=0A=
        case 'h3'      :=0A=
        case 'h4'      :=0A=
        case 'h5'      :=0A=
        case 'h6'      :=0A=
        case 'h7'      :=0A=
          apply_to =3D [ ];=0A=
          var search_tags =3D ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7'];=0A=
          for(var y =3D 0; y < search_tags.length; y++)=0A=
          {=0A=
            var headers =3D =
this._doc.getElementsByTagName(search_tag[y]);=0A=
            for(var x =3D 0; x < headers.length; x++)=0A=
            {=0A=
              if(sel.containsNode(headers[x]))=0A=
              {=0A=
                apply_to[apply_to.length] =3D headers[x];=0A=
              }=0A=
            }=0A=
          }=0A=
          if(apply_to.length > 0) break;=0A=
          // If there wern't any in the selection drop through=0A=
        case 'div' :=0A=
          apply_to =3D this._doc.createElement(target_tag);=0A=
          apply_to.appendChild(rng.extractContents());=0A=
          rng.insertNode(apply_to);=0A=
          break;=0A=
=0A=
        case 'p'   :=0A=
        case 'center'  :=0A=
        case 'pre' :=0A=
        case 'ins' :=0A=
        case 'del' :=0A=
        case 'blockquote' :=0A=
        case 'address'    :=0A=
          apply_to =3D [ ];=0A=
          var paras =3D this._doc.getElementsByTagName(target_tag);=0A=
          for(var x =3D 0; x < paras.length; x++)=0A=
          {=0A=
            if(sel.containsNode(paras[x]))=0A=
            {=0A=
              apply_to[apply_to.length] =3D paras[x];=0A=
            }=0A=
          }=0A=
=0A=
          if(apply_to.length =3D=3D 0)=0A=
          {=0A=
            sel.collapseToStart();=0A=
            return this._formatBlock(block_format);=0A=
          }=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
}=0A=
=0A=
// Selects the contents inside the given node=0A=
HTMLArea.prototype.selectNodeContents =3D function(node, pos) {=0A=
  this.focusEditor();=0A=
  this.forceRedraw();=0A=
  var range;=0A=
  var collapsed =3D typeof pos =3D=3D "undefined" ? true : false;=0A=
  if (HTMLArea.is_ie) {=0A=
    // Tables and Images get selected as "objects" rather than the text =
contents=0A=
    if(collapsed && node.tagName && =
node.tagName.toLowerCase().match(/table|img|input|select|textarea/))=0A=
    {=0A=
      range =3D this._doc.body.createControlRange();=0A=
      range.add(node);=0A=
    }=0A=
    else=0A=
    {=0A=
      range =3D this._doc.body.createTextRange();=0A=
      range.moveToElementText(node);=0A=
      //(collapsed) && range.collapse(pos);=0A=
    }=0A=
    range.select();=0A=
  } else {=0A=
    var sel =3D this._getSelection();=0A=
    range =3D this._doc.createRange();=0A=
    // Tables and Images get selected as "objects" rather than the text =
contents=0A=
    if(collapsed && node.tagName && =
node.tagName.toLowerCase().match(/table|img|input|textarea|select/))=0A=
    {=0A=
      range.selectNode(node);=0A=
    }=0A=
    else=0A=
    {=0A=
      range.selectNodeContents(node);=0A=
      //(collapsed) && range.collapse(pos);=0A=
    }=0A=
    sel.removeAllRanges();=0A=
    sel.addRange(range);=0A=
  }=0A=
};=0A=
=0A=
/** Call this function to insert HTML code at the current position.  It =
deletes=0A=
 * the selection, if any.=0A=
 */=0A=
HTMLArea.prototype.insertHTML =3D function(html) {=0A=
  var sel =3D this._getSelection();=0A=
  var range =3D this._createRange(sel);=0A=
  if (HTMLArea.is_ie) {=0A=
    range.pasteHTML(html);=0A=
  } else {=0A=
    // construct a new document fragment with the given HTML=0A=
    var fragment =3D this._doc.createDocumentFragment();=0A=
    var div =3D this._doc.createElement("div");=0A=
    div.innerHTML =3D html;=0A=
    while (div.firstChild) {=0A=
      // the following call also removes the node from div=0A=
      fragment.appendChild(div.firstChild);=0A=
    }=0A=
    // this also removes the selection=0A=
    var node =3D this.insertNodeAtSelection(fragment);=0A=
  }=0A=
};=0A=
=0A=
/**=0A=
 *  Call this function to surround the existing HTML code in the =
selection with=0A=
 *  your tags.  FIXME: buggy!  This function will be deprecated "soon".=0A=
 */=0A=
HTMLArea.prototype.surroundHTML =3D function(startTag, endTag) {=0A=
  var html =3D this.getSelectedHTML();=0A=
  // the following also deletes the selection=0A=
  this.insertHTML(startTag + html + endTag);=0A=
};=0A=
=0A=
/// Retrieve the selected block=0A=
HTMLArea.prototype.getSelectedHTML =3D function() {=0A=
  var sel =3D this._getSelection();=0A=
  var range =3D this._createRange(sel);=0A=
  var existing =3D null;=0A=
  if (HTMLArea.is_ie) {=0A=
    existing =3D range.htmlText;=0A=
  } else {=0A=
    existing =3D HTMLArea.getHTML(range.cloneContents(), false, this);=0A=
  }=0A=
  return existing;=0A=
};=0A=
=0A=
/// Return true if we have some selection=0A=
HTMLArea.prototype.hasSelectedText =3D function() {=0A=
  // FIXME: come _on_ mishoo, you can do better than this ;-)=0A=
  return this.getSelectedHTML() !=3D '';=0A=
};=0A=
=0A=
HTMLArea.prototype._createLink =3D function(link) {=0A=
  var editor =3D this;=0A=
  var outparam =3D null;=0A=
  if (typeof link =3D=3D "undefined") {=0A=
    link =3D this.getParentElement();=0A=
    if (link) {=0A=
      if (/^img$/i.test(link.tagName))=0A=
        link =3D link.parentNode;=0A=
      if (!/^a$/i.test(link.tagName))=0A=
        link =3D null;=0A=
    }=0A=
  }=0A=
  if (!link) {=0A=
    var sel =3D editor._getSelection();=0A=
    var range =3D editor._createRange(sel);=0A=
    var compare =3D 0;=0A=
    if (HTMLArea.is_ie) {=0A=
      if(sel.type =3D=3D "Control")=0A=
      {=0A=
        compare =3D range.length;=0A=
      }=0A=
      else=0A=
      {=0A=
        compare =3D range.compareEndPoints("StartToEnd", range);=0A=
      }=0A=
    } else {=0A=
      compare =3D range.compareBoundaryPoints(range.START_TO_END, range);=0A=
    }=0A=
    if (compare =3D=3D 0) {=0A=
      alert(HTMLArea._lc("You need to select some text before creating a =
link"));=0A=
      return;=0A=
    }=0A=
    outparam =3D {=0A=
      f_href : '',=0A=
      f_title : '',=0A=
      f_target : '',=0A=
      f_usetarget : editor.config.makeLinkShowsTarget=0A=
    };=0A=
  } else=0A=
    outparam =3D {=0A=
      f_href   : HTMLArea.is_ie ? editor.stripBaseURL(link.href) : =
link.getAttribute("href"),=0A=
      f_title  : link.title,=0A=
      f_target : link.target,=0A=
      f_usetarget : editor.config.makeLinkShowsTarget=0A=
    };=0A=
  this._popupDialog(editor.config.URIs["link"], function(param) {=0A=
    if (!param)=0A=
      return false;=0A=
    var a =3D link;=0A=
    if (!a) try {=0A=
      editor._doc.execCommand("createlink", false, param.f_href);=0A=
      a =3D editor.getParentElement();=0A=
      var sel =3D editor._getSelection();=0A=
      var range =3D editor._createRange(sel);=0A=
      if (!HTMLArea.is_ie) {=0A=
        a =3D range.startContainer;=0A=
        if (!/^a$/i.test(a.tagName)) {=0A=
          a =3D a.nextSibling;=0A=
          if (a =3D=3D null)=0A=
            a =3D range.startContainer.parentNode;=0A=
        }=0A=
      }=0A=
    } catch(e) {}=0A=
    else {=0A=
      var href =3D param.f_href.trim();=0A=
      editor.selectNodeContents(a);=0A=
      if (href =3D=3D "") {=0A=
        editor._doc.execCommand("unlink", false, null);=0A=
        editor.updateToolbar();=0A=
        return false;=0A=
      }=0A=
      else {=0A=
        a.href =3D href;=0A=
      }=0A=
    }=0A=
    if (!(a && /^a$/i.test(a.tagName)))=0A=
      return false;=0A=
    a.target =3D param.f_target.trim();=0A=
    a.title =3D param.f_title.trim();=0A=
    editor.selectNodeContents(a);=0A=
    editor.updateToolbar();=0A=
  }, outparam);=0A=
};=0A=
=0A=
// Called when the user clicks on "InsertImage" button.  If an image is =
already=0A=
// there, it will just modify it's properties.=0A=
HTMLArea.prototype._insertImage =3D function(image) {=0A=
  var editor =3D this;	// for nested functions=0A=
  var outparam =3D null;=0A=
  if (typeof image =3D=3D "undefined") {=0A=
    image =3D this.getParentElement();=0A=
    if (image && !/^img$/i.test(image.tagName))=0A=
      image =3D null;=0A=
  }=0A=
  if (image) outparam =3D {=0A=
    f_base   : editor.config.baseHref,=0A=
    f_url    : HTMLArea.is_ie ? editor.stripBaseURL(image.src) : =
image.getAttribute("src"),=0A=
    f_alt    : image.alt,=0A=
    f_border : image.border,=0A=
    f_align  : image.align,=0A=
    f_vert   : image.vspace,=0A=
    f_horiz  : image.hspace=0A=
  };=0A=
  this._popupDialog(editor.config.URIs["insert_image"], function(param) {=0A=
    if (!param) {	// user must have pressed Cancel=0A=
      return false;=0A=
    }=0A=
    var img =3D image;=0A=
    if (!img) {=0A=
      var sel =3D editor._getSelection();=0A=
      var range =3D editor._createRange(sel);=0A=
      editor._doc.execCommand("insertimage", false, param.f_url);=0A=
      if (HTMLArea.is_ie) {=0A=
        img =3D range.parentElement();=0A=
        // wonder if this works...=0A=
        if (img.tagName.toLowerCase() !=3D "img") {=0A=
          img =3D img.previousSibling;=0A=
        }=0A=
      } else {=0A=
        img =3D range.startContainer.previousSibling;=0A=
        if (!img.tagName) {=0A=
          // if the cursor is at the beginning of the document=0A=
          img =3D range.startContainer.firstChild;=0A=
        }=0A=
      }=0A=
    } else {=0A=
      img.src =3D param.f_url;=0A=
    }=0A=
=0A=
    for (var field in param) {=0A=
      var value =3D param[field];=0A=
      switch (field) {=0A=
          case "f_alt"    : img.alt	 =3D value; break;=0A=
          case "f_border" : img.border =3D parseInt(value || "0"); break;=0A=
          case "f_align"  : img.align	 =3D value; break;=0A=
          case "f_vert"   : img.vspace =3D parseInt(value || "0"); break;=0A=
          case "f_horiz"  : img.hspace =3D parseInt(value || "0"); break;=0A=
      }=0A=
    }=0A=
  }, outparam);=0A=
};=0A=
=0A=
// Called when the user clicks the Insert Table button=0A=
HTMLArea.prototype._insertTable =3D function() {=0A=
  var sel =3D this._getSelection();=0A=
  var range =3D this._createRange(sel);=0A=
  var editor =3D this;	// for nested functions=0A=
  this._popupDialog(editor.config.URIs["insert_table"], function(param) {=0A=
    if (!param) {	// user must have pressed Cancel=0A=
      return false;=0A=
    }=0A=
    var doc =3D editor._doc;=0A=
    // create the table element=0A=
    var table =3D doc.createElement("table");=0A=
    // assign the given arguments=0A=
=0A=
    for (var field in param) {=0A=
      var value =3D param[field];=0A=
      if (!value) {=0A=
        continue;=0A=
      }=0A=
      switch (field) {=0A=
          case "f_width"   : table.style.width =3D value + =
param["f_unit"]; break;=0A=
          case "f_align"   : table.align	 =3D value; break;=0A=
          case "f_border"  : table.border	 =3D parseInt(value); break;=0A=
          case "f_spacing" : table.cellSpacing =3D parseInt(value); =
break;=0A=
          case "f_padding" : table.cellPadding =3D parseInt(value); =
break;=0A=
      }=0A=
    }=0A=
    var cellwidth =3D 0;=0A=
    if (param.f_fixed)=0A=
      cellwidth =3D Math.floor(100 / parseInt(param.f_cols));=0A=
    var tbody =3D doc.createElement("tbody");=0A=
    table.appendChild(tbody);=0A=
    for (var i =3D 0; i < param["f_rows"]; ++i) {=0A=
      var tr =3D doc.createElement("tr");=0A=
      tbody.appendChild(tr);=0A=
      for (var j =3D 0; j < param["f_cols"]; ++j) {=0A=
        var td =3D doc.createElement("td");=0A=
        if (cellwidth)=0A=
          td.style.width =3D cellwidth + "%";=0A=
        tr.appendChild(td);=0A=
        // Mozilla likes to see something inside the cell.=0A=
        (HTMLArea.is_gecko) && td.appendChild(doc.createElement("br"));=0A=
      }=0A=
    }=0A=
    if (HTMLArea.is_ie) {=0A=
      range.pasteHTML(table.outerHTML);=0A=
    } else {=0A=
      // insert the table=0A=
      editor.insertNodeAtSelection(table);=0A=
    }=0A=
    return true;=0A=
  }, null);=0A=
};=0A=
=0A=
/***************************************************=0A=
 *  Category: EVENT HANDLERS=0A=
 ***************************************************/=0A=
=0A=
// el is reference to the SELECT object=0A=
// txt is the name of the select field, as in config.toolbar=0A=
HTMLArea.prototype._comboSelected =3D function(el, txt) {=0A=
  this.focusEditor();=0A=
  var value =3D el.options[el.selectedIndex].value;=0A=
  switch (txt) {=0A=
      case "fontname":=0A=
      case "fontsize": this.execCommand(txt, false, value); break;=0A=
      case "formatblock":=0A=
    // (HTMLArea.is_ie) && (value =3D "<" + value + ">");=0A=
    value =3D "<" + value + ">"=0A=
    this.execCommand(txt, false, value);=0A=
    break;=0A=
      default:=0A=
    // try to look it up in the registered dropdowns=0A=
    var dropdown =3D this.config.customSelects[txt];=0A=
    if (typeof dropdown !=3D "undefined") {=0A=
      dropdown.action(this);=0A=
    } else {=0A=
      alert("FIXME: combo box " + txt + " not implemented");=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
// the execCommand function (intercepts some commands and replaces them =
with=0A=
// our own implementation)=0A=
HTMLArea.prototype.execCommand =3D function(cmdID, UI, param) {=0A=
  var editor =3D this;	// for nested functions=0A=
  this.focusEditor();=0A=
  cmdID =3D cmdID.toLowerCase();=0A=
  if (HTMLArea.is_gecko) try { this._doc.execCommand('useCSS', false, =
true); } catch (e) {}; //switch useCSS off (true=3Doff)=0A=
  switch (cmdID) {=0A=
    case "htmlmode" : this.setMode(); break;=0A=
    case "hilitecolor":=0A=
      (HTMLArea.is_ie) && (cmdID =3D "backcolor");=0A=
      if (HTMLArea.is_gecko) try { editor._doc.execCommand('useCSS', =
false, false); } catch (e) {};//switch on useCSS (mozilla bug #279330)=0A=
    case "forecolor":=0A=
      this._popupDialog(editor.config.URIs["select_color"], =
function(color) {=0A=
        if (color) { // selection not canceled=0A=
          editor._doc.execCommand(cmdID, false, "#" + color);=0A=
        }=0A=
      }, HTMLArea._colorToRgb(this._doc.queryCommandValue(cmdID)));=0A=
      break;=0A=
    case "createlink":=0A=
      this._createLink();=0A=
      break;=0A=
      case "undo":=0A=
      case "redo":=0A=
    if (this._customUndo)=0A=
      this[cmdID]();=0A=
    else=0A=
      this._doc.execCommand(cmdID, UI, param);=0A=
    break;=0A=
      case "inserttable": this._insertTable(); break;=0A=
      case "insertimage": this._insertImage(); break;=0A=
      case "about"    : this._popupDialog(editor.config.URIs["about"], =
null, this); break;=0A=
      case "showhelp" : window.open(this.config.helpURL, "ha_help"); =
break;=0A=
=0A=
      case "killword": this._wordClean(); break;=0A=
=0A=
      case "cut":=0A=
      case "copy":=0A=
      case "paste":=0A=
    try {=0A=
      this._doc.execCommand(cmdID, UI, param);=0A=
      if (this.config.killWordOnPaste)=0A=
        this._wordClean();=0A=
    } catch (e) {=0A=
      if (HTMLArea.is_gecko) {=0A=
        alert(HTMLArea._lc("The Paste button does not work in Mozilla =
based web browsers (technical security reasons). Press CTRL-V on your =
keyboard to paste directly."));=0A=
      }=0A=
    }=0A=
    break;=0A=
      case "lefttoright":=0A=
      case "righttoleft":=0A=
    var dir =3D (cmdID =3D=3D "righttoleft") ? "rtl" : "ltr";=0A=
    var el =3D this.getParentElement();=0A=
    while (el && !HTMLArea.isBlockElement(el))=0A=
      el =3D el.parentNode;=0A=
    if (el) {=0A=
      if (el.style.direction =3D=3D dir)=0A=
        el.style.direction =3D "";=0A=
      else=0A=
        el.style.direction =3D dir;=0A=
    }=0A=
    break;=0A=
      default: try { this._doc.execCommand(cmdID, UI, param); }=0A=
    catch(e) { if (this.config.debug) { alert(e + "\n\nby execCommand(" =
+ cmdID + ");"); } }=0A=
  }=0A=
=0A=
  this.updateToolbar();=0A=
  return false;=0A=
};=0A=
=0A=
/** A generic event handler for things that happen in the IFRAME's =
document.=0A=
 * This function also handles key bindings. */=0A=
HTMLArea.prototype._editorEvent =3D function(ev) {=0A=
  var editor =3D this;=0A=
  var keyEvent =3D (HTMLArea.is_ie && ev.type =3D=3D "keydown") || =
(!HTMLArea.is_ie && ev.type =3D=3D "keypress");=0A=
=0A=
  //call events of textarea=0A=
  if(typeof editor._textArea['on'+ev.type] =3D=3D "function") {=0A=
    editor._textArea['on'+ev.type]();=0A=
  }=0A=
=0A=
  if(HTMLArea.is_gecko && keyEvent && ev.ctrlKey &&  this._unLink && =
this._unlinkOnUndo)=0A=
  {=0A=
    if(String.fromCharCode(ev.charCode).toLowerCase() =3D=3D 'z')=0A=
    {=0A=
      HTMLArea._stopEvent(ev);=0A=
      this._unLink();=0A=
      editor.updateToolbar();=0A=
      return;=0A=
    }=0A=
  }=0A=
=0A=
  if (keyEvent)=0A=
  {=0A=
    for (var i in editor.plugins)=0A=
    {=0A=
      var plugin =3D editor.plugins[i].instance;=0A=
      if (typeof plugin.onKeyPress =3D=3D "function")=0A=
        if (plugin.onKeyPress(ev))=0A=
          return false;=0A=
    }=0A=
  }=0A=
=0A=
  if (keyEvent && ev.ctrlKey && !ev.altKey)=0A=
  {=0A=
    var sel =3D null;=0A=
    var range =3D null;=0A=
    var key =3D String.fromCharCode(HTMLArea.is_ie ? ev.keyCode : =
ev.charCode).toLowerCase();=0A=
    var cmd =3D null;=0A=
    var value =3D null;=0A=
    switch (key) {=0A=
        case 'a':=0A=
      if (!HTMLArea.is_ie) {=0A=
        // KEY select all=0A=
        sel =3D this._getSelection();=0A=
        sel.removeAllRanges();=0A=
        range =3D this._createRange();=0A=
        range.selectNodeContents(this._doc.body);=0A=
        sel.addRange(range);=0A=
        HTMLArea._stopEvent(ev);=0A=
      }=0A=
      break;=0A=
=0A=
      // simple key commands follow=0A=
=0A=
        case 'b': cmd =3D "bold"; break;=0A=
        case 'i': cmd =3D "italic"; break;=0A=
        case 'u': cmd =3D "underline"; break;=0A=
        case 's': cmd =3D "strikethrough"; break;=0A=
        case 'l': cmd =3D "justifyleft"; break;=0A=
        case 'e': cmd =3D "justifycenter"; break;=0A=
        case 'r': cmd =3D "justifyright"; break;=0A=
        case 'j': cmd =3D "justifyfull"; break;=0A=
        case 'z': cmd =3D "undo"; break;=0A=
        case 'y': cmd =3D "redo"; break;=0A=
        case 'v': if (HTMLArea.is_ie || editor.config.htmlareaPaste) { =
cmd =3D "paste"; } break;=0A=
        case 'n': cmd =3D "formatblock"; value =3D HTMLArea.is_ie ? =
"<p>" : "p"; break;=0A=
=0A=
        case '0': cmd =3D "killword"; break;=0A=
=0A=
      // headings=0A=
        case '1':=0A=
        case '2':=0A=
        case '3':=0A=
        case '4':=0A=
        case '5':=0A=
        case '6':=0A=
      cmd =3D "formatblock";=0A=
      value =3D "h" + key;=0A=
      if (HTMLArea.is_ie)=0A=
        value =3D "<" + value + ">";=0A=
      break;=0A=
    }=0A=
    if (cmd) {=0A=
      // execute simple command=0A=
      this.execCommand(cmd, false, value);=0A=
      HTMLArea._stopEvent(ev);=0A=
    }=0A=
  }=0A=
  else if (keyEvent)=0A=
  {=0A=
=0A=
    // IE's textRange and selection object is woefully inadequate,=0A=
    // which means this fancy stuff is gecko only sorry :-|=0A=
    // Die Bill, Die.  (IE supports it somewhat nativly though)=0A=
    if(HTMLArea.is_gecko)=0A=
    {=0A=
      var s =3D editor._getSelection()=0A=
      var autoWrap =3D function (textNode, tag)=0A=
      {=0A=
        var rightText =3D textNode.nextSibling;=0A=
        if(typeof tag =3D=3D 'string') tag =3D =
editor._doc.createElement(tag);=0A=
        var a =3D textNode.parentNode.insertBefore(tag, rightText);=0A=
        HTMLArea.removeFromParent(textNode);=0A=
        a.appendChild(textNode);=0A=
        rightText.data =3D ' ' + rightText.data;=0A=
=0A=
        if(HTMLArea.is_ie)=0A=
        {=0A=
          var r =3D editor._createRange(s);=0A=
          s.moveToElementText(rightText);=0A=
          s.move('character', 1);=0A=
        }=0A=
        else=0A=
        {=0A=
          s.collapse(rightText, 1);=0A=
        }=0A=
        HTMLArea._stopEvent(ev);=0A=
=0A=
        editor._unLink =3D function()=0A=
        {=0A=
          var t =3D a.firstChild;=0A=
          a.removeChild(t);=0A=
          a.parentNode.insertBefore(t, a);=0A=
          HTMLArea.removeFromParent(a);=0A=
          editor._unLink =3D null;=0A=
          editor._unlinkOnUndo =3D false;=0A=
        }=0A=
        editor._unlinkOnUndo =3D true;=0A=
=0A=
        return a;=0A=
      }=0A=
=0A=
      switch(ev.which)=0A=
      {=0A=
        // Space, see if the text just typed looks like a URL, or email =
address=0A=
        // and link it appropriatly=0A=
        case 32:=0A=
        {=0A=
          if(s && s.isCollapsed && s.anchorNode.nodeType =3D=3D 3 && =
s.anchorNode.data.length > 3 && s.anchorNode.data.indexOf('.') >=3D 0)=0A=
          {=0A=
            var midStart =3D =
s.anchorNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/);=0A=
            if(midStart =3D=3D -1) break;=0A=
=0A=
            if(this._getFirstAncestor(s, 'a'))=0A=
            {=0A=
              break; // already in an anchor=0A=
            }=0A=
=0A=
            var matchData =3D =
s.anchorNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/, =
'$1');=0A=
=0A=
            var m        =3D matchData.match(HTMLArea.RE_email);=0A=
            if(m)=0A=
            {=0A=
              var leftText  =3D s.anchorNode;=0A=
              var rightText =3D leftText.splitText(s.anchorOffset);=0A=
              var midText   =3D leftText.splitText(midStart);=0A=
=0A=
              autoWrap(midText, 'a').href =3D 'mailto:' + m[0];=0A=
              break;=0A=
            }=0A=
=0A=
            var m =3D matchData.match(HTMLArea.RE_url);=0A=
            if(m)=0A=
            {=0A=
              var leftText  =3D s.anchorNode;=0A=
              var rightText =3D leftText.splitText(s.anchorOffset);=0A=
              var midText   =3D leftText.splitText(midStart);=0A=
              autoWrap(midText, 'a').href =3D (m[1] ? m[1] : 'http://') =
+ m[2];=0A=
              break;=0A=
            }=0A=
          }=0A=
=0A=
        }=0A=
        break;=0A=
=0A=
        default :=0A=
        {=0A=
          if(ev.keyCode =3D=3D 27 || (this._unlinkOnUndo && ev.ctrlKey =
&& ev.which =3D=3D 122) )=0A=
          {=0A=
            if(this._unLink)=0A=
            {=0A=
              this._unLink();=0A=
              HTMLArea._stopEvent(ev);=0A=
            }=0A=
            break;=0A=
          }=0A=
          else if(ev.which || ev.keyCode =3D=3D 8 || ev.keyCode =3D=3D =
46)=0A=
          {=0A=
            this._unlinkOnUndo =3D false;=0A=
=0A=
            if(s.anchorNode && s.anchorNode.nodeType =3D=3D 3)=0A=
            {=0A=
              // See if we might be changing a link=0A=
              var a =3D this._getFirstAncestor(s, 'a');=0A=
              if(!a) break; // not an anchor=0A=
              if(!a._updateAnchTimeout)=0A=
              {=0A=
                if(   s.anchorNode.data.match(HTMLArea.RE_email)=0A=
                   && (a.href.match('mailto:' + =
s.anchorNode.data.trim()))=0A=
                  )=0A=
                {=0A=
                  var textNode =3D s.anchorNode;=0A=
                  var fn =3D function()=0A=
                    {=0A=
                      a.href =3D 'mailto:' + textNode.data.trim();=0A=
                      a._updateAnchTimeout =3D setTimeout(fn, 250);=0A=
                    }=0A=
                  a._updateAnchTimeout =3D setTimeout(fn, 250);=0A=
                  break;=0A=
                }=0A=
=0A=
                var m =3D s.anchorNode.data.match(HTMLArea.RE_url);=0A=
                if(m &&  a.href.match(s.anchorNode.data.trim()) )=0A=
                {=0A=
                  var textNode =3D s.anchorNode;=0A=
                  var fn =3D function()=0A=
                    {=0A=
                      var m =3D textNode.data.match(HTMLArea.RE_url);=0A=
                      a.href =3D (m[1] ? m[1] : 'http://') + m[2];=0A=
                      a._updateAnchTimeout =3D setTimeout(fn, 250);=0A=
                    }=0A=
                  a._updateAnchTimeout =3D setTimeout(fn, 250);=0A=
                }=0A=
              }=0A=
            }=0A=
=0A=
          }=0A=
        }=0A=
        break;=0A=
      }=0A=
    }=0A=
=0A=
    // other keys here=0A=
    switch (ev.keyCode)=0A=
    {=0A=
        case 13: // KEY enter=0A=
      if (HTMLArea.is_gecko && !ev.shiftKey && =
this.config.mozParaHandler =3D=3D 'dirty' )=0A=
      {=0A=
        this.dom_checkInsertP();=0A=
        HTMLArea._stopEvent(ev);=0A=
      }=0A=
      break;=0A=
        case 8: // KEY backspace=0A=
        case 46: // KEY delete=0A=
      if (HTMLArea.is_gecko && !ev.shiftKey) {=0A=
        if (this.dom_checkBackspace())=0A=
          HTMLArea._stopEvent(ev);=0A=
      } else if (HTMLArea.is_ie) {=0A=
        if (this.ie_checkBackspace())=0A=
          HTMLArea._stopEvent(ev);=0A=
      }=0A=
      break;=0A=
    }=0A=
  }=0A=
=0A=
  // update the toolbar state after some time=0A=
  if (editor._timerToolbar) {=0A=
    clearTimeout(editor._timerToolbar);=0A=
  }=0A=
  editor._timerToolbar =3D setTimeout(function() {=0A=
    editor.updateToolbar();=0A=
    editor._timerToolbar =3D null;=0A=
  }, 250);=0A=
};=0A=
=0A=
HTMLArea.prototype.convertNode =3D function(el, newTagName) {=0A=
  var newel =3D this._doc.createElement(newTagName);=0A=
  while (el.firstChild)=0A=
    newel.appendChild(el.firstChild);=0A=
  return newel;=0A=
};=0A=
=0A=
HTMLArea.prototype.ie_checkBackspace =3D function() {=0A=
  var sel =3D this._getSelection();=0A=
  if(HTMLArea.is_ie && sel.type =3D=3D 'Control')=0A=
  {=0A=
    var elm =3D this._activeElement(sel);=0A=
    HTMLArea.removeFromParent(elm);=0A=
    return true;=0A=
  }=0A=
=0A=
  // This bit of code preseves links when you backspace over the=0A=
  // endpoint of the link in IE.  Without it, if you have something like=0A=
  //    link_here |=0A=
  // where | is the cursor, and backspace over the last e, then the link=0A=
  // will de-link, which is a bit tedious=0A=
  var range =3D this._createRange(sel);=0A=
  var r2 =3D range.duplicate();=0A=
  r2.moveStart("character", -1);=0A=
  var a =3D r2.parentElement();=0A=
  if (a !=3D range.parentElement() &&=0A=
      /^a$/i.test(a.tagName)) {=0A=
    r2.collapse(true);=0A=
    r2.moveEnd("character", 1);=0A=
    r2.pasteHTML('');=0A=
    r2.select();=0A=
    return true;=0A=
  }=0A=
};=0A=
=0A=
HTMLArea.prototype.dom_checkBackspace =3D function() {=0A=
  var self =3D this;=0A=
  setTimeout(function() {=0A=
    var sel =3D self._getSelection();=0A=
    var range =3D self._createRange(sel);=0A=
    var SC =3D range.startContainer;=0A=
    var SO =3D range.startOffset;=0A=
    var EC =3D range.endContainer;=0A=
    var EO =3D range.endOffset;=0A=
    var newr =3D SC.nextSibling;=0A=
    if (SC.nodeType =3D=3D 3)=0A=
      SC =3D SC.parentNode;=0A=
    if (!/\S/.test(SC.tagName)) {=0A=
      var p =3D document.createElement("p");=0A=
      while (SC.firstChild)=0A=
        p.appendChild(SC.firstChild);=0A=
      SC.parentNode.insertBefore(p, SC);=0A=
      HTMLArea.removeFromParent(SC);=0A=
      var r =3D range.cloneRange();=0A=
      r.setStartBefore(newr);=0A=
      r.setEndAfter(newr);=0A=
      r.extractContents();=0A=
      sel.removeAllRanges();=0A=
      sel.addRange(r);=0A=
    }=0A=
  }, 10);=0A=
};=0A=
=0A=
/** The idea here is=0A=
 * 1. See if we are in a block element=0A=
 * 2. If we are not, then wrap the current "block" of text into a =
paragraph=0A=
 * 3. Now that we have a block element, select all the text between the =
insertion point=0A=
 *    and just AFTER the end of the block=0A=
 *    eg <p>The quick |brown fox jumped over the lazy dog.</p>|=0A=
 *                     ---------------------------------------=0A=
 * 4. Extract that from the document, making=0A=
 *       <p>The quick </p>=0A=
 *    and a document fragment with=0A=
 *       <p>brown fox jumped over the lazy dog.</p>=0A=
 * 5. Reinsert it just after the block element=0A=
 *       <p>The quick </p><p>brown fox jumped over the lazy dog.</p>=0A=
 *=0A=
 * Along the way, allow inserting blank paragraphs, which will look like =
<p><br/></p>=0A=
 */=0A=
=0A=
HTMLArea.prototype.dom_checkInsertP =3D function() {=0A=
=0A=
  // Get the insertion point, we'll scrub any highlighted text the user =
wants rid of while we are there.=0A=
  var sel =3D this._getSelection();=0A=
  var range =3D this._createRange(sel);=0A=
  if (!range.collapsed)=0A=
  {=0A=
    range.deleteContents();=0A=
  }=0A=
  this.deactivateEditor();=0A=
  //sel.removeAllRanges();=0A=
  //sel.addRange(range);=0A=
=0A=
  var SC =3D range.startContainer;=0A=
  var SO =3D range.startOffset;=0A=
  var EC =3D range.endContainer;=0A=
  var EO =3D range.endOffset;=0A=
=0A=
  // If the insertion point is character 0 of the=0A=
  // document, then insert a space character that we will wrap into a =
paragraph=0A=
  // in a bit.=0A=
  if (SC =3D=3D EC && SC =3D=3D body && !SO && !EO)=0A=
  {=0A=
    p =3D this._doc.createTextNode(" ");=0A=
    body.insertBefore(p, body.firstChild);=0A=
    range.selectNodeContents(p);=0A=
    SC =3D range.startContainer;=0A=
    SO =3D range.startOffset;=0A=
    EC =3D range.endContainer;=0A=
    EO =3D range.endOffset;=0A=
  }=0A=
=0A=
  // See if we are in a block element, if so, great.=0A=
  var p     =3D this.getAllAncestors();=0A=
=0A=
  var block =3D null;=0A=
  var body =3D this._doc.body;=0A=
  for (var i =3D 0; i < p.length; ++i)=0A=
  {=0A=
    if(HTMLArea.isParaContainer(p[i]))=0A=
    {=0A=
      break;=0A=
    }=0A=
    else if (HTMLArea.isBlockElement(p[i]) && =
!/body|html/i.test(p[i].tagName))=0A=
    {=0A=
      block =3D p[i];=0A=
      break;=0A=
    }=0A=
  }=0A=
=0A=
  // If not in a block element, we'll have to turn some stuff into a =
paragraph=0A=
  if (!block)=0A=
  {=0A=
    // We want to wrap as much stuff as possible into the paragraph in =
both directions=0A=
    // from the insertion point.  We start with the start container and =
walk back up to the=0A=
    // node just before any of the paragraph containers.=0A=
    var wrap =3D range.startContainer;=0A=
    while(wrap.parentNode && !HTMLArea.isParaContainer(wrap.parentNode))=0A=
    {=0A=
      wrap =3D wrap.parentNode;=0A=
    }=0A=
    var start =3D wrap;=0A=
    var end   =3D wrap;=0A=
=0A=
    // Now we walk up the sibling list until we hit the top of the =
document=0A=
    // or an element that we shouldn't put in a p (eg other p, div, ul, =
ol, table)=0A=
    while(start.previousSibling)=0A=
    {=0A=
      if(start.previousSibling.tagName)=0A=
      {=0A=
        if(!HTMLArea.isBlockElement(start.previousSibling))=0A=
        {=0A=
          start =3D start.previousSibling;=0A=
        }=0A=
        else=0A=
        {=0A=
          break;=0A=
        }=0A=
      }=0A=
      else=0A=
      {=0A=
        start =3D start.previousSibling;=0A=
      }=0A=
    }=0A=
=0A=
    // Same down the list=0A=
    while(end.nextSibling)=0A=
    {=0A=
      if(end.nextSibling.tagName)=0A=
      {=0A=
        if(!HTMLArea.isBlockElement(end.nextSibling))=0A=
        {=0A=
          end =3D end.nextSibling;=0A=
        }=0A=
        else=0A=
        {=0A=
          break;=0A=
        }=0A=
      }=0A=
      else=0A=
      {=0A=
        end =3D end.nextSibling;=0A=
      }=0A=
    }=0A=
=0A=
    // Select the entire block=0A=
    range.setStartBefore(start);=0A=
    range.setEndAfter(end);=0A=
=0A=
    // Make it a paragraph=0A=
    range.surroundContents(this._doc.createElement('p'));=0A=
=0A=
    // Which becomes the block element=0A=
    block =3D range.startContainer.firstChild;=0A=
=0A=
    // And finally reset the insertion point to where it was originally=0A=
    range.setStart(SC, SO);=0A=
  }=0A=
=0A=
  // The start point is the insertion point, so just move the end point =
to immediatly=0A=
  // after the block=0A=
  range.setEndAfter(block);=0A=
=0A=
  // Extract the range, to split the block=0A=
  // If we just did range.extractContents() then Mozilla does wierd stuff=0A=
  // with selections, but if we clone, then remove the original range =
and extract=0A=
  // the clone, it's quite happy.=0A=
  var r2 =3D range.cloneRange();=0A=
  sel.removeRange(range);=0A=
  var df =3D r2.extractContents();=0A=
=0A=
  if(df.childNodes.length =3D=3D 0)=0A=
  {=0A=
    df.appendChild(this._doc.createElement('p'));=0A=
    df.firstChild.appendChild(this._doc.createElement('br'));=0A=
  }=0A=
=0A=
  if(df.childNodes.length > 1)=0A=
  {=0A=
    var nb =3D this._doc.createElement('p');=0A=
    while(df.firstChild)=0A=
    {=0A=
      var s =3D df.firstChild;=0A=
      df.removeChild(s);=0A=
      nb.appendChild(s);=0A=
    }=0A=
    df.appendChild(nb);=0A=
  }=0A=
=0A=
  // If the original block is empty, put a nsbp in it.=0A=
  if (!/\S/.test(block.innerHTML))=0A=
    block.innerHTML =3D "&nbsp;";=0A=
=0A=
  p =3D df.firstChild;=0A=
  if (!/\S/.test(p.innerHTML))=0A=
    p.innerHTML =3D "<br />";=0A=
=0A=
  // If the new block is empty and it's a heading, make it a paragraph=0A=
  // note, the new block is empty when you are hitting enter at the end =
of the existing block=0A=
  if (/^\s*<br\s*\/?>\s*$/.test(p.innerHTML) && =
/^h[1-6]$/i.test(p.tagName))=0A=
  {=0A=
    df.appendChild(this.convertNode(p, "p"));=0A=
    df.removeChild(p);=0A=
  }=0A=
=0A=
  var newblock =3D block.parentNode.insertBefore(df.firstChild, =
block.nextSibling);=0A=
=0A=
  // Select the range (to set the insertion)=0A=
  // collapse to the start of the new block=0A=
  //  (remember the block might be <p><br/></p>, so if we collapsed to =
the end the <br/> would be noticable)=0A=
=0A=
  //range.selectNode(newblock.firstChild);=0A=
  //range.collapse(true);=0A=
=0A=
  this.activateEditor();=0A=
=0A=
  var sel =3D this._getSelection();=0A=
  sel.removeAllRanges();=0A=
  sel.collapse(newblock,0);=0A=
=0A=
  // scroll into view=0A=
  this.scrollToElement(newblock);=0A=
=0A=
  //this.forceRedraw();=0A=
=0A=
};=0A=
=0A=
HTMLArea.prototype.scrollToElement =3D function(e)=0A=
{=0A=
  if(HTMLArea.is_gecko)=0A=
  {=0A=
    var top  =3D 0;=0A=
    var left =3D 0;=0A=
    while(e)=0A=
    {=0A=
      top  +=3D e.offsetTop;=0A=
      left +=3D e.offsetLeft;=0A=
      if(e.offsetParent && e.offsetParent.tagName.toLowerCase() !=3D =
'body')=0A=
      {=0A=
        e =3D e.offsetParent;=0A=
      }=0A=
      else=0A=
      {=0A=
        e =3D null;=0A=
      }=0A=
    }=0A=
    this._iframe.contentWindow.scrollTo(left, top);=0A=
  }=0A=
}=0A=
=0A=
// retrieve the HTML=0A=
HTMLArea.prototype.getHTML =3D function() {=0A=
  var html =3D '';=0A=
  switch (this._editMode) {=0A=
      case "wysiwyg"  :=0A=
        {=0A=
          if (!this.config.fullPage)=0A=
            html =3D HTMLArea.getHTML(this._doc.body, false, this);=0A=
          else=0A=
            html =3D this.doctype + "\n" + =
HTMLArea.getHTML(this._doc.documentElement, true, this);=0A=
          break;=0A=
        }=0A=
      case "textmode" :=0A=
        {=0A=
          html =3D this._textArea.value;=0A=
          break;=0A=
        }=0A=
      default	        :=0A=
        {=0A=
          alert("Mode <" + mode + "> not defined!");=0A=
          return false;=0A=
        }=0A=
  }=0A=
  return html;=0A=
};=0A=
=0A=
HTMLArea.prototype.outwardHtml =3D function(html)=0A=
{=0A=
  html =3D html.replace(/<(\/?)b(\s|>|\/)/ig, "<$1strong$2");=0A=
  html =3D html.replace(/<(\/?)i(\s|>|\/)/ig, "<$1em$2");=0A=
  html =3D html.replace(/<(\/?)strike(\s|>|\/)/ig, "<$1del$2");=0A=
  =0A=
  // replace window.open to that any clicks won't open a popup in =
designMode=0A=
  html =3D html.replace("onclick=3D\"try{if(document.designMode =
&amp;&amp; document.designMode =3D=3D 'on') return false;}catch(e){} =
window.open(", "onclick=3D\"window.open(");=0A=
=0A=
  // Figure out what our server name is, and how it's referenced=0A=
  var serverBase =3D location.href.replace(/(https?:\/\/[^\/]*)\/.*/, =
'$1') + '/';=0A=
=0A=
  // IE puts this in can't figure out why=0A=
  html =3D html.replace(/https?:\/\/null\//g, serverBase);=0A=
=0A=
  // Make semi-absolute links to be truely absolute=0A=
  //  we do this just to standardize so that special replacements knows =
what=0A=
  //  to expect=0A=
  html =3D html.replace(/((href|src|background)=3D[\'\"])\/+/ig, '$1' + =
serverBase);=0A=
=0A=
  html =3D this.outwardSpecialReplacements(html);=0A=
=0A=
  html =3D this.fixRelativeLinks(html);=0A=
=0A=
  if(this.config.sevenBitClean)=0A=
  {=0A=
    html =3D html.replace(/[^ -~\r\n\t]/g, function(c){ return =
'&#'+c.charCodeAt(0)+';';});=0A=
  }=0A=
=0A=
  // ticket:56, the "greesemonkey" plugin for Firefox adds this junk,=0A=
  // so we strip it out.  Original submitter gave a plugin, but that's=0A=
  // a bit much just for this IMHO - james=0A=
  if(HTMLArea.is_gecko)=0A=
  {=0A=
    html =3D =
html.replace(/<script[\s]*src[\s]*=3D[\s]*['"]chrome:\/\/.*?["']>[\s]*<\/=
script>/ig, '');=0A=
  }=0A=
=0A=
  return html;=0A=
}=0A=
=0A=
HTMLArea.prototype.inwardHtml =3D function(html)=0A=
{=0A=
  // Midas uses b and i instead of strong and em, um, hello,=0A=
  // mozilla, this is the 21st century calling!=0A=
  if (HTMLArea.is_gecko) {=0A=
    html =3D html.replace(/<(\/?)strong(\s|>|\/)/ig, "<$1b$2");=0A=
    html =3D html.replace(/<(\/?)em(\s|>|\/)/ig, "<$1i$2");=0A=
    html =3D html.replace(/<(\/?)strike(\s|>|\/)/ig, "<$1del$2");=0A=
  }=0A=
=0A=
  // replace window.open to that any clicks won't open a popup in =
designMode=0A=
  html =3D html.replace("onclick=3D\"window.open(", =
"onclick=3D\"try{if(document.designMode &amp;&amp; document.designMode =
=3D=3D 'on') return false;}catch(e){} window.open(");=0A=
=0A=
  html =3D this.inwardSpecialReplacements(html);=0A=
=0A=
  // For IE's sake, make any URLs that are semi-absolute (=3D"/....") to =
be=0A=
  // truely absolute=0A=
  var nullRE =3D new RegExp('((href|src|background)=3D[\'"])/+', 'gi');=0A=
  html =3D html.replace(nullRE, '$1' + =
location.href.replace(/(https?:\/\/[^\/]*)\/.*/, '$1') + '/');=0A=
=0A=
  html =3D this.fixRelativeLinks(html);=0A=
  return html;=0A=
}=0A=
=0A=
HTMLArea.prototype.outwardSpecialReplacements =3D function(html)=0A=
{=0A=
  for(var i in this.config.specialReplacements)=0A=
  {=0A=
    var from =3D this.config.specialReplacements[i];=0A=
    var to   =3D i;=0A=
    // alert('out : ' + from + '=3D>' + to);=0A=
    var reg =3D new RegExp(from.replace(HTMLArea.RE_Specials, '\\$1'), =
'g');=0A=
    html =3D html.replace(reg, to.replace(/\$/g, '$$$$'));=0A=
    //html =3D html.replace(from, to);=0A=
  }=0A=
  return html;=0A=
}=0A=
=0A=
HTMLArea.prototype.inwardSpecialReplacements =3D function(html)=0A=
{=0A=
  // alert("inward");=0A=
  for(var i in this.config.specialReplacements)=0A=
  {=0A=
    var from =3D i;=0A=
    var to   =3D this.config.specialReplacements[i];=0A=
    // alert('in : ' + from + '=3D>' + to);=0A=
    //=0A=
    // html =3D html.replace(reg, to);=0A=
    // html =3D html.replace(from, to);=0A=
    var reg =3D new RegExp(from.replace(HTMLArea.RE_Specials, '\\$1'), =
'g');=0A=
    html =3D html.replace(reg, to.replace(/\$/g, '$$$$')); // IE uses =
doubled dollar signs to escape backrefs, also beware that IE also =
implements $& $_ and $' like perl.=0A=
  }=0A=
  return html;=0A=
}=0A=
=0A=
=0A=
HTMLArea.prototype.fixRelativeLinks =3D function(html)=0A=
{=0A=
=0A=
  if(typeof this.config.stripSelfNamedAnchors !=3D 'undefined' && =
this.config.stripSelfNamedAnchors)=0A=
  {=0A=
    var stripRe =3D new =
RegExp(document.location.href.replace(HTMLArea.RE_Specials, '\\$1') + =
'(#[^\'" ]*)', 'g');=0A=
    html =3D html.replace(stripRe, '$1');=0A=
  }=0A=
=0A=
=0A=
  if(typeof this.config.stripBaseHref !=3D 'undefined' && =
this.config.stripBaseHref)=0A=
  {=0A=
    var baseRe =3D null=0A=
    if(typeof this.config.baseHref !=3D 'undefined' && =
this.config.baseHref !=3D null)=0A=
    {=0A=
      baseRe =3D new =
RegExp(this.config.baseHref.replace(HTMLArea.RE_Specials, '\\$1'), 'g');=0A=
    }=0A=
    else=0A=
    {=0A=
      baseRe =3D new =
RegExp(document.location.href.replace(/([^\/]*\/?)$/, =
'').replace(HTMLArea.RE_Specials, '\\$1'), 'g');=0A=
    }=0A=
=0A=
    html =3D html.replace(baseRe, '');=0A=
  }=0A=
=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
    // This is now done in inward & outward=0A=
    // Don't know why but IE is doing this (putting http://null/ on =
links?!=0A=
    // alert(html);=0A=
    // var nullRE =3D new RegExp('https?:\/\/null\/', 'g');=0A=
    // html =3D html.replace(nullRE, =
location.href.replace(/(https?:\/\/[^\/]*\/).*/, '$1'));=0A=
    // alert(html);=0A=
  }=0A=
=0A=
  return html;=0A=
}=0A=
=0A=
// retrieve the HTML (fastest version, but uses innerHTML)=0A=
HTMLArea.prototype.getInnerHTML =3D function() {=0A=
  if(!this._doc.body) return '';=0A=
  switch (this._editMode) {=0A=
      case "wysiwyg"  :=0A=
        if (!this.config.fullPage)=0A=
          // return this._doc.body.innerHTML;=0A=
          html =3D this._doc.body.innerHTML;=0A=
        else=0A=
          html =3D this.doctype + "\n" + =
this._doc.documentElement.innerHTML;=0A=
        break;=0A=
      case "textmode" :=0A=
        html =3D this._textArea.value;=0A=
        break;=0A=
      default	    :=0A=
        alert("Mode <" + mode + "> not defined!");=0A=
        return false;=0A=
  }=0A=
=0A=
  return html;=0A=
};=0A=
=0A=
// completely change the HTML inside=0A=
HTMLArea.prototype.setHTML =3D function(html) {=0A=
  if (!this.config.fullPage)=0A=
  {=0A=
    this._doc.body.innerHTML =3D html;=0A=
  }=0A=
  else=0A=
  {=0A=
    this.setFullHTML(html);=0A=
  }=0A=
  this._textArea.value =3D html;=0A=
};=0A=
=0A=
// sets the given doctype (useful when config.fullPage is true)=0A=
HTMLArea.prototype.setDoctype =3D function(doctype) {=0A=
  this.doctype =3D doctype;=0A=
};=0A=
=0A=
/***************************************************=0A=
 *  Category: UTILITY FUNCTIONS=0A=
 ***************************************************/=0A=
=0A=
// variable used to pass the object to the popup editor window.=0A=
HTMLArea._object =3D null;=0A=
=0A=
// function that returns a clone of the given object=0A=
HTMLArea.cloneObject =3D function(obj) {=0A=
  if (!obj) return null;=0A=
  var newObj =3D new Object;=0A=
=0A=
  // check for array objects=0A=
  if (obj.constructor.toString().indexOf("function Array(") !=3D -1) {=0A=
    newObj =3D obj.constructor();=0A=
  }=0A=
=0A=
  // check for function objects (as usual, IE is fucked up)=0A=
  if (obj.constructor.toString().indexOf("function Function(") =3D=3D 1) =
{=0A=
    newObj =3D obj; // just copy reference to it=0A=
  } else for (var n in obj) {=0A=
    var node =3D obj[n];=0A=
    if (typeof node =3D=3D 'object') { newObj[n] =3D =
HTMLArea.cloneObject(node); }=0A=
    else                         { newObj[n] =3D node; }=0A=
  }=0A=
=0A=
  return newObj;=0A=
};=0A=
=0A=
// FIXME!!! this should return false for IE < 5.5=0A=
HTMLArea.checkSupportedBrowser =3D function() {=0A=
  if (HTMLArea.is_gecko) {=0A=
    if (navigator.productSub < 20021201) {=0A=
      alert("You need at least Mozilla-1.3 Alpha.\n" +=0A=
            "Sorry, your Gecko is not supported.");=0A=
      return false;=0A=
    }=0A=
    if (navigator.productSub < 20030210) {=0A=
      alert("Mozilla < 1.3 Beta is not supported!\n" +=0A=
            "I'll try, though, but it might not work.");=0A=
    }=0A=
  }=0A=
  return HTMLArea.is_gecko || HTMLArea.is_ie;=0A=
};=0A=
=0A=
// selection & ranges=0A=
=0A=
// returns the current selection object=0A=
HTMLArea.prototype._getSelection =3D function() {=0A=
  if (HTMLArea.is_ie) {=0A=
    return this._doc.selection;=0A=
  } else {=0A=
    return this._iframe.contentWindow.getSelection();=0A=
  }=0A=
};=0A=
=0A=
// returns a range for the current selection=0A=
HTMLArea.prototype._createRange =3D function(sel) {=0A=
  if (HTMLArea.is_ie) {=0A=
    return sel.createRange();=0A=
  } else {=0A=
    this.activateEditor();=0A=
    if (typeof sel !=3D "undefined") {=0A=
      try {=0A=
        return sel.getRangeAt(0);=0A=
      } catch(e) {=0A=
        return this._doc.createRange();=0A=
      }=0A=
    } else {=0A=
      return this._doc.createRange();=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
// event handling=0A=
=0A=
/** Event Flushing=0A=
 *  To try and work around memory leaks in the rather broken=0A=
 *  garbage collector in IE, HTMLArea.flushEvents can be called=0A=
 *  onunload, it will remove any event listeners (that were added=0A=
 *  through _addEvent(s)) and clear any DOM-0 events.=0A=
 */=0A=
HTMLArea._eventFlushers =3D [ ];=0A=
HTMLArea.flushEvents =3D function()=0A=
{=0A=
  var x =3D 0;=0A=
  var e =3D null;=0A=
  while(e =3D HTMLArea._eventFlushers.pop())=0A=
  {=0A=
    if(e.length =3D=3D 3)=0A=
    {=0A=
      HTMLArea._removeEvent(e[0], e[1], e[2]);=0A=
      x++;=0A=
    }=0A=
    else if (e.length =3D=3D 2)=0A=
    {=0A=
      e[0]['on' + e[1]] =3D null;=0A=
      e[0]._xinha_dom0Events[e[1]] =3D null;=0A=
      x++;=0A=
    }=0A=
  }=0A=
  =0A=
  /* =0A=
    // This code is very agressive, and incredibly slow in IE, so I've =
disabled it.=0A=
    =0A=
    if(document.all)=0A=
    {=0A=
      for(var i =3D 0; i < document.all.length; i++)=0A=
      {=0A=
        for(var j in document.all[i])=0A=
        {=0A=
          if(/^on/.test(j) && typeof document.all[i][j] =3D=3D =
'function')=0A=
          {=0A=
            document.all[i][j] =3D null;=0A=
            x++;=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
  */=0A=
  =0A=
  // alert('Flushed ' + x + ' events.');=0A=
}=0A=
=0A=
HTMLArea._addEvent =3D function(el, evname, func) {=0A=
  if (HTMLArea.is_ie) {=0A=
    el.attachEvent("on" + evname, func);=0A=
  } else {=0A=
    el.addEventListener(evname, func, true);=0A=
  }=0A=
  HTMLArea._eventFlushers.push([el, evname, func]);=0A=
};=0A=
=0A=
HTMLArea._addEvents =3D function(el, evs, func) {=0A=
  for (var i =3D evs.length; --i >=3D 0;) {=0A=
    HTMLArea._addEvent(el, evs[i], func);=0A=
  }=0A=
};=0A=
=0A=
HTMLArea._removeEvent =3D function(el, evname, func) {=0A=
  if (HTMLArea.is_ie) {=0A=
    el.detachEvent("on" + evname, func);=0A=
  } else {=0A=
    el.removeEventListener(evname, func, true);=0A=
  }=0A=
};=0A=
=0A=
HTMLArea._removeEvents =3D function(el, evs, func) {=0A=
  for (var i =3D evs.length; --i >=3D 0;) {=0A=
    HTMLArea._removeEvent(el, evs[i], func);=0A=
  }=0A=
};=0A=
=0A=
HTMLArea._stopEvent =3D function(ev) {=0A=
  if (HTMLArea.is_ie) {=0A=
    ev.cancelBubble =3D true;=0A=
    ev.returnValue =3D false;=0A=
  } else {=0A=
    ev.preventDefault();=0A=
    ev.stopPropagation();=0A=
  }=0A=
};=0A=
=0A=
/**=0A=
 * Adds a standard "DOM-0" event listener to an element.=0A=
 * The DOM-0 events are those applied directly as attributes to=0A=
 * an element - eg element.onclick =3D stuff;=0A=
 *=0A=
 * By using this function instead of simply overwriting any existing=0A=
 * DOM-0 event by the same name on the element it will trigger as well=0A=
 * as the existing ones.  Handlers are triggered one after the other=0A=
 * in the order they are added.=0A=
 *=0A=
 * Remember to return true/false from your handler, this will determine=0A=
 * whether subsequent handlers will be triggered (ie that the event will=0A=
 * continue or be canceled).=0A=
 *=0A=
 */=0A=
=0A=
HTMLArea.addDom0Event =3D function(el, ev, fn)=0A=
{=0A=
  HTMLArea._prepareForDom0Events(el, ev);=0A=
  el._xinha_dom0Events[ev].unshift(fn);=0A=
}=0A=
=0A=
=0A=
/**=0A=
 * See addDom0Event, the difference is that handlers registered using=0A=
 * prependDom0Event will be triggered before existing DOM-0 events of the=0A=
 * same name on the same element.=0A=
 */=0A=
=0A=
HTMLArea.prependDom0Event =3D function(el, ev, fn)=0A=
{=0A=
  HTMLArea._prepareForDom0Events(el, ev);=0A=
  el._xinha_dom0Events[ev].push(fn);=0A=
}=0A=
=0A=
/**=0A=
 * Prepares an element to receive more than one DOM-0 event handler=0A=
 * when handlers are added via addDom0Event and prependDom0Event.=0A=
 */=0A=
HTMLArea._prepareForDom0Events =3D function(el, ev)=0A=
{=0A=
  // Create a structure to hold our lists of event handlers=0A=
  if(typeof el._xinha_dom0Events =3D=3D 'undefined')=0A=
  {=0A=
    el._xinha_dom0Events =3D { };=0A=
    HTMLArea.freeLater(el, '_xinha_dom0Events');=0A=
  }=0A=
=0A=
  // Create a list of handlers for this event type=0A=
  if(typeof el._xinha_dom0Events[ev] =3D=3D 'undefined')=0A=
  {=0A=
    el._xinha_dom0Events[ev] =3D [ ];=0A=
    if(typeof el['on'+ev] =3D=3D 'function')=0A=
    {=0A=
      el._xinha_dom0Events[ev].push(el['on'+ev]);=0A=
    }=0A=
=0A=
    // Make the actual event handler, which runs through=0A=
    // each of the handlers in the list and executes them=0A=
    // in the correct context.=0A=
    el['on'+ev] =3D function(event)=0A=
    {=0A=
      var a =3D el._xinha_dom0Events[ev];=0A=
      // call previous submit methods if they were there.=0A=
      var allOK =3D true;=0A=
      for (var i =3D a.length; --i >=3D 0;)=0A=
      {=0A=
        // We want the handler to be a member of the form, not the =
array, so that "this" will work correctly=0A=
        el._xinha_tempEventHandler =3D a[i];=0A=
        if(el._xinha_tempEventHandler(event) =3D=3D false)=0A=
        {=0A=
          el._xinha_tempEventHandler =3D null;=0A=
          allOK =3D false;=0A=
          break;=0A=
        }=0A=
        el._xinha_tempEventHandler =3D null;=0A=
      }=0A=
      return allOK;=0A=
    }=0A=
=0A=
    HTMLArea._eventFlushers.push([el, ev]);=0A=
  }=0A=
}=0A=
=0A=
HTMLArea.prototype.notifyOn =3D function(ev, fn)=0A=
{=0A=
  if(typeof this._notifyListeners[ev] =3D=3D 'undefined')=0A=
  {=0A=
    this._notifyListeners[ev] =3D [ ];=0A=
    HTMLArea.freeLater(this, '_notifyListeners');=0A=
  }=0A=
=0A=
  this._notifyListeners[ev].push(fn);=0A=
}=0A=
=0A=
HTMLArea.prototype.notifyOf =3D function(ev, args)=0A=
{=0A=
=0A=
  if(this._notifyListeners[ev])=0A=
  {=0A=
=0A=
    for(var i =3D 0; i < this._notifyListeners[ev].length; i++)=0A=
    {=0A=
      this._notifyListeners[ev][i](ev, args);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
=0A=
HTMLArea._removeClass =3D function(el, className) {=0A=
  if (!(el && el.className)) {=0A=
    return;=0A=
  }=0A=
  var cls =3D el.className.split(" ");=0A=
  var ar =3D new Array();=0A=
  for (var i =3D cls.length; i > 0;) {=0A=
    if (cls[--i] !=3D className) {=0A=
      ar[ar.length] =3D cls[i];=0A=
    }=0A=
  }=0A=
  el.className =3D ar.join(" ");=0A=
};=0A=
=0A=
HTMLArea._addClass =3D function(el, className) {=0A=
  // remove the class first, if already there=0A=
  HTMLArea._removeClass(el, className);=0A=
  el.className +=3D " " + className;=0A=
};=0A=
=0A=
HTMLArea._hasClass =3D function(el, className) {=0A=
  if (!(el && el.className)) {=0A=
    return false;=0A=
  }=0A=
  var cls =3D el.className.split(" ");=0A=
  for (var i =3D cls.length; i > 0;) {=0A=
    if (cls[--i] =3D=3D className) {=0A=
      return true;=0A=
    }=0A=
  }=0A=
  return false;=0A=
};=0A=
=0A=
HTMLArea._blockTags =3D " body form textarea fieldset ul ol dl li div " +=0A=
"p h1 h2 h3 h4 h5 h6 quote pre table thead " +=0A=
"tbody tfoot tr td th iframe address blockquote";=0A=
HTMLArea.isBlockElement =3D function(el) {=0A=
  return el && el.nodeType =3D=3D 1 && (HTMLArea._blockTags.indexOf(" " =
+ el.tagName.toLowerCase() + " ") !=3D -1);=0A=
};=0A=
=0A=
HTMLArea._paraContainerTags =3D " body td th caption fieldset div";=0A=
HTMLArea.isParaContainer =3D function(el)=0A=
{=0A=
  return el && el.nodeType =3D=3D 1 && =
(HTMLArea._paraContainerTags.indexOf(" " + el.tagName.toLowerCase() + " =
") !=3D -1);=0A=
}=0A=
=0A=
HTMLArea._closingTags =3D " head script style div span tr td tbody table =
em strong b i strike code cite dfn abbr acronym font a title textarea =
select form ";=0A=
HTMLArea.needsClosingTag =3D function(el) {=0A=
  return el && el.nodeType =3D=3D 1 && (HTMLArea._closingTags.indexOf(" =
" + el.tagName.toLowerCase() + " ") !=3D -1);=0A=
};=0A=
=0A=
// performs HTML encoding of some given string=0A=
HTMLArea.htmlEncode =3D function(str) {=0A=
  if(typeof str.replace =3D=3D 'undefined') str =3D str.toString();=0A=
  // we don't need regexp for that, but.. so be it for now.=0A=
  str =3D str.replace(/&/ig, "&amp;");=0A=
  str =3D str.replace(/</ig, "&lt;");=0A=
  str =3D str.replace(/>/ig, "&gt;");=0A=
  str =3D str.replace(/\xA0/g, "&nbsp;"); // Decimal 160, =
non-breaking-space=0A=
  str =3D str.replace(/\x22/g, "&quot;");=0A=
  // \x22 means '"' -- we use hex reprezentation so that we don't disturb=0A=
  // JS compressors (well, at least mine fails.. ;)=0A=
  return str;=0A=
};=0A=
=0A=
// Retrieves the HTML code from the given node.	 This is a replacement =
for=0A=
// getting innerHTML, using standard DOM calls.=0A=
// Wrapper catch a Mozilla-Exception with non well formed html source =
code=0A=
HTMLArea.getHTML =3D function(root, outputRoot, editor){=0A=
    try{=0A=
        return HTMLArea.getHTMLWrapper(root,outputRoot,editor);=0A=
    }=0A=
    catch(e){=0A=
        alert(HTMLArea._lc('Your Document is not well formed. Check =
JavaScript console for details.'));=0A=
        return editor._iframe.contentWindow.document.body.innerHTML;=0A=
    }=0A=
}=0A=
=0A=
HTMLArea.getHTMLWrapper =3D function(root, outputRoot, editor, indent) {=0A=
  var html =3D "";=0A=
  if(!indent) indent =3D '';=0A=
=0A=
  switch (root.nodeType) {=0A=
    case 10:// Node.DOCUMENT_TYPE_NODE=0A=
    case 6: // Node.ENTITY_NODE=0A=
    case 12:// Node.NOTATION_NODE=0A=
      // this all are for the document type, probably not necessary=0A=
      break;=0A=
=0A=
    case 2: // Node.ATTRIBUTE_NODE=0A=
      // Never get here, this has to be handled in the ELEMENT case =
because=0A=
      // of IE crapness requring that some attributes are grabbed =
directly from=0A=
      // the attribute (nodeValue doesn't return correct values), see=0A=
      =
//http://groups.google.com/groups?hl=3Den&lr=3D&ie=3DUTF-8&oe=3DUTF-8&saf=
e=3Doff&selm=3D3porgu4mc4ofcoa1uqkf7u8kvv064kjjb4%404ax.com=0A=
      // for information=0A=
      break;=0A=
=0A=
    case 4: // Node.CDATA_SECTION_NODE=0A=
      // Mozilla seems to convert CDATA into a comment when going into =
wysiwyg mode,=0A=
      //  don't know about IE=0A=
      html +=3D (HTMLArea.is_ie ? ('\n' + indent) : '') + '<![CDATA[' + =
root.data + ']]>' ;=0A=
      break;=0A=
=0A=
    case 5: // Node.ENTITY_REFERENCE_NODE=0A=
      html +=3D '&' + root.nodeValue + ';';=0A=
      break;=0A=
=0A=
    case 7: // Node.PROCESSING_INSTRUCTION_NODE=0A=
      // PI's don't seem to survive going into the wysiwyg mode, (at =
least in moz)=0A=
      // so this is purely academic=0A=
      html +=3D (HTMLArea.is_ie ? ('\n' + indent) : '') + '<?' + =
root.target + ' ' + root.data + ' ?>';=0A=
      break;=0A=
=0A=
=0A=
      case 1: // Node.ELEMENT_NODE=0A=
      case 11: // Node.DOCUMENT_FRAGMENT_NODE=0A=
      case 9: // Node.DOCUMENT_NODE=0A=
      {=0A=
    var closed;=0A=
    var i;=0A=
    var root_tag =3D (root.nodeType =3D=3D 1) ? =
root.tagName.toLowerCase() : '';=0A=
    if (outputRoot)=0A=
      outputRoot =3D !(editor.config.htmlRemoveTags && =
editor.config.htmlRemoveTags.test(root_tag));=0A=
    if (HTMLArea.is_ie && root_tag =3D=3D "head") {=0A=
      if (outputRoot)=0A=
        html +=3D (HTMLArea.is_ie ? ('\n' + indent) : '') + "<head>";=0A=
      // lowercasize=0A=
      var save_multiline =3D RegExp.multiline;=0A=
      RegExp.multiline =3D true;=0A=
      var txt =3D root.innerHTML.replace(HTMLArea.RE_tagName, =
function(str, p1, p2) {=0A=
        return p1 + p2.toLowerCase();=0A=
      });=0A=
      RegExp.multiline =3D save_multiline;=0A=
      html +=3D txt + '\n';=0A=
      if (outputRoot)=0A=
        html +=3D (HTMLArea.is_ie ? ('\n' + indent) : '') + "</head>";=0A=
      break;=0A=
    } else if (outputRoot) {=0A=
      closed =3D (!(root.hasChildNodes() || =
HTMLArea.needsClosingTag(root)));=0A=
      html +=3D (HTMLArea.is_ie && HTMLArea.isBlockElement(root) ? ('\n' =
+ indent) : '') + "<" + root.tagName.toLowerCase();=0A=
      var attrs =3D root.attributes;=0A=
      for (i =3D 0; i < attrs.length; ++i) {=0A=
        var a =3D attrs.item(i);=0A=
        if (!a.specified && =
!(root.tagName.toLowerCase().match(/input|option/) && a.nodeName =3D=3D =
'value')) {=0A=
          continue;=0A=
        }=0A=
        var name =3D a.nodeName.toLowerCase();=0A=
        if (/_moz_editor_bogus_node/.test(name)) {=0A=
          html =3D "";=0A=
          break;=0A=
        }=0A=
        if (/(_moz)|(contenteditable)|(_msh)/.test(name)) {=0A=
          // avoid certain attributes=0A=
          continue;=0A=
        }=0A=
        var value;=0A=
        if (name !=3D "style") {=0A=
          // IE5.5 reports 25 when cellSpacing is=0A=
          // 1; other values might be doomed too.=0A=
          // For this reason we extract the=0A=
          // values directly from the root node.=0A=
          // I'm starting to HATE JavaScript=0A=
          // development.  Browser differences=0A=
          // suck.=0A=
          //=0A=
          // Using Gecko the values of href and src are converted to =
absolute links=0A=
          // unless we get them using nodeValue()=0A=
          if (typeof root[a.nodeName] !=3D "undefined" && name !=3D =
"href" && name !=3D "src" && !/^on/.test(name)) {=0A=
            value =3D root[a.nodeName];=0A=
          } else {=0A=
            value =3D a.nodeValue;=0A=
            // IE seems not willing to return the original values - it =
converts to absolute=0A=
            // links using a.nodeValue, a.value, a.stringValue, =
root.getAttribute("href")=0A=
            // So we have to strip the baseurl manually :-/=0A=
            if (HTMLArea.is_ie && (name =3D=3D "href" || name =3D=3D =
"src")) {=0A=
              value =3D editor.stripBaseURL(value);=0A=
            }=0A=
=0A=
            // High-ascii (8bit) characters in links seem to cause =
problems for some sites,=0A=
            // while this seems to be consistent with RFC 3986 Section =
2.4=0A=
            // because these are not "reserved" characters, it does seem =
to=0A=
            // cause links to international resources not to work.  See =
ticket:167=0A=
=0A=
            // IE always returns high-ascii characters un-encoded in =
links even if they=0A=
            // were supplied as % codes (it unescapes them when we pul =
the value from the link).=0A=
=0A=
            // Hmmm, very strange if we use encodeURI here, or =
encodeURIComponent in place=0A=
            // of escape below, then the encoding is wrong.  I mean, =
completely.=0A=
            // Nothing like it should be at all.  Using escape seems to =
work though.=0A=
            // It's in both browsers too, so either I'm doing something =
wrong, or=0A=
            // something else is going on?=0A=
=0A=
            if(editor.config.only7BitPrintablesInURLs && (name =3D=3D =
"href" || name =3D=3D "src"))=0A=
            {=0A=
              value =3D value.replace(/([^!-~]+)/g, function(match) { =
return escape(match); });=0A=
            }=0A=
          }=0A=
        } else { // IE fails to put style in attributes list=0A=
          // FIXME: cssText reported by IE is UPPERCASE=0A=
          value =3D root.style.cssText;=0A=
        }=0A=
        if (/^(_moz)?$/.test(value)) {=0A=
          // Mozilla reports some special tags=0A=
          // here; we don't need them.=0A=
          continue;=0A=
        }=0A=
        html +=3D " " + name + '=3D"' + HTMLArea.htmlEncode(value) + '"';=0A=
      }=0A=
      if (html !=3D "") {=0A=
        if(closed && root_tag=3D=3D"p") {=0A=
          //never use <p /> as empty paragraphs won't be visible=0A=
          html +=3D ">&nbsp;</p>";=0A=
        } else if(closed) {=0A=
          html +=3D " />";=0A=
        } else {=0A=
          html +=3D ">";=0A=
        }=0A=
      }=0A=
    }=0A=
    var containsBlock =3D false;=0A=
    for (i =3D root.firstChild; i; i =3D i.nextSibling) {=0A=
      if(!containsBlock && i.nodeType =3D=3D 1 && =
HTMLArea.isBlockElement(i)) containsBlock =3D true;=0A=
      html +=3D HTMLArea.getHTMLWrapper(i, true, editor, indent + '  ');=0A=
    }=0A=
    if (outputRoot && !closed) {=0A=
      html +=3D (HTMLArea.is_ie && HTMLArea.isBlockElement(root) && =
containsBlock ? ('\n' + indent) : '') + "</" + =
root.tagName.toLowerCase() + ">";=0A=
    }=0A=
    break;=0A=
      }=0A=
      case 3: // Node.TEXT_NODE=0A=
    html =3D /^script|style$/i.test(root.parentNode.tagName) ? root.data =
: HTMLArea.htmlEncode(root.data);=0A=
    break;=0A=
=0A=
      case 8: // Node.COMMENT_NODE=0A=
    html =3D "<!--" + root.data + "-->";=0A=
    break;=0A=
  }=0A=
  return html;=0A=
};=0A=
=0A=
/** @see getHTMLWrapper (search for "value =3D a.nodeValue;") */=0A=
=0A=
HTMLArea.prototype.stripBaseURL =3D function(string)=0A=
{=0A=
  if(this.config.baseHref=3D=3Dnull || !this.config.stripBaseHref)=0A=
  {=0A=
    return(string);=0A=
  }=0A=
  var baseurl =3D this.config.baseHref;=0A=
=0A=
  // strip host-part of URL which is added by MSIE to links relative to =
server root=0A=
  baseurl =3D baseurl.replace(/^(https?:\/\/[^\/]+)(.*)$/, '$1');=0A=
  basere =3D new RegExp(baseurl);=0A=
  return string.replace(basere, "");=0A=
};=0A=
=0A=
String.prototype.trim =3D function() {=0A=
  return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
};=0A=
=0A=
// creates a rgb-style color from a number=0A=
HTMLArea._makeColor =3D function(v) {=0A=
  if (typeof v !=3D "number") {=0A=
    // already in rgb (hopefully); IE doesn't get here.=0A=
    return v;=0A=
  }=0A=
  // IE sends number; convert to rgb.=0A=
  var r =3D v & 0xFF;=0A=
  var g =3D (v >> 8) & 0xFF;=0A=
  var b =3D (v >> 16) & 0xFF;=0A=
  return "rgb(" + r + "," + g + "," + b + ")";=0A=
};=0A=
=0A=
// returns hexadecimal color representation from a number or a rgb-style =
color.=0A=
HTMLArea._colorToRgb =3D function(v) {=0A=
  if (!v)=0A=
    return '';=0A=
=0A=
  // returns the hex representation of one byte (2 digits)=0A=
  function hex(d) {=0A=
    return (d < 16) ? ("0" + d.toString(16)) : d.toString(16);=0A=
  };=0A=
=0A=
  if (typeof v =3D=3D "number") {=0A=
    // we're talking to IE here=0A=
    var r =3D v & 0xFF;=0A=
    var g =3D (v >> 8) & 0xFF;=0A=
    var b =3D (v >> 16) & 0xFF;=0A=
    return "#" + hex(r) + hex(g) + hex(b);=0A=
  }=0A=
=0A=
  if (v.substr(0, 3) =3D=3D "rgb") {=0A=
    // in rgb(...) form -- Mozilla=0A=
    var re =3D /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/;=0A=
    if (v.match(re)) {=0A=
      var r =3D parseInt(RegExp.$1);=0A=
      var g =3D parseInt(RegExp.$2);=0A=
      var b =3D parseInt(RegExp.$3);=0A=
      return "#" + hex(r) + hex(g) + hex(b);=0A=
    }=0A=
    // doesn't match RE?!  maybe uses percentages or float numbers=0A=
    // -- FIXME: not yet implemented.=0A=
    return null;=0A=
  }=0A=
=0A=
  if (v.substr(0, 1) =3D=3D "#") {=0A=
    // already hex rgb (hopefully :D )=0A=
    return v;=0A=
  }=0A=
=0A=
  // if everything else fails ;)=0A=
  return null;=0A=
};=0A=
=0A=
// modal dialogs for Mozilla (for IE we're using the showModalDialog() =
call).=0A=
=0A=
// receives an URL to the popup dialog and a function that receives one =
value;=0A=
// this function will get called after the dialog is closed, with the =
return=0A=
// value of the dialog.=0A=
HTMLArea.prototype._popupDialog =3D function(url, action, init) {=0A=
  Dialog(this.popupURL(url), action, init);=0A=
};=0A=
=0A=
// paths=0A=
=0A=
HTMLArea.prototype.imgURL =3D function(file, plugin) {=0A=
  if (typeof plugin =3D=3D "undefined")=0A=
    return _editor_url + file;=0A=
  else=0A=
    return _editor_url + "plugins/" + plugin + "/img/" + file;=0A=
};=0A=
=0A=
HTMLArea.prototype.popupURL =3D function(file) {=0A=
  var url =3D "";=0A=
  if (file.match(/^plugin:\/\/(.*?)\/(.*)/)) {=0A=
    var plugin =3D RegExp.$1;=0A=
    var popup =3D RegExp.$2;=0A=
    if (!/\.html$/.test(popup))=0A=
      popup +=3D ".html";=0A=
    url =3D _editor_url + "plugins/" + plugin + "/popups/" + popup;=0A=
  } else if(file.match(/^\/.*?/))=0A=
            url =3D file;=0A=
        else=0A=
    url =3D _editor_url + this.config.popupURL + file;=0A=
  return url;=0A=
};=0A=
=0A=
/**=0A=
 * FIX: Internet Explorer returns an item having the _name_ equal to the =
given=0A=
 * id, even if it's not having any id.  This way it can return a =
different form=0A=
 * field even if it's not a textarea.  This workarounds the problem by=0A=
 * specifically looking to search only elements having a certain tag =
name.=0A=
 */=0A=
HTMLArea.getElementById =3D function(tag, id) {=0A=
  var el, i, objs =3D document.getElementsByTagName(tag);=0A=
  for (i =3D objs.length; --i >=3D 0 && (el =3D objs[i]);)=0A=
    if (el.id =3D=3D id)=0A=
      return el;=0A=
  return null;=0A=
};=0A=
=0A=
=0A=
/** Use some CSS trickery to toggle borders on tables */=0A=
=0A=
HTMLArea.prototype._toggleBorders =3D function()=0A=
{=0A=
  tables =3D this._doc.getElementsByTagName('TABLE');=0A=
  if(tables.length !=3D 0)=0A=
  {=0A=
   if(!this.borders)=0A=
   {=0A=
    name =3D "bordered";=0A=
    this.borders =3D true;=0A=
   }=0A=
   else=0A=
   {=0A=
     name =3D "";=0A=
     this.borders =3D false;=0A=
   }=0A=
=0A=
   for (var ix=3D0;ix < tables.length;ix++)=0A=
   {=0A=
     if(this.borders)=0A=
     {=0A=
        // flashing the display forces moz to listen (JB:18-04-2005) - =
#102=0A=
        if(HTMLArea.is_gecko)=0A=
        {=0A=
            tables[ix].style.display=3D"none";=0A=
            tables[ix].style.display=3D"table";=0A=
        }=0A=
        HTMLArea._addClass(tables[ix], 'htmtableborders');=0A=
     }=0A=
     else=0A=
     {=0A=
       HTMLArea._removeClass(tables[ix], 'htmtableborders');=0A=
     }=0A=
   }=0A=
  }=0A=
  return true;=0A=
}=0A=
=0A=
=0A=
HTMLArea.addClasses =3D function(el, classes)=0A=
  {=0A=
    if(el !=3D null)=0A=
    {=0A=
      var thiers =3D el.className.trim().split(' ');=0A=
      var ours   =3D classes.split(' ');=0A=
      for(var x =3D 0; x < ours.length; x++)=0A=
      {=0A=
        var exists =3D false;=0A=
        for(var i =3D 0; exists =3D=3D false && i < thiers.length; i++)=0A=
        {=0A=
          if(thiers[i] =3D=3D ours[x])=0A=
          {=0A=
            exists =3D true;=0A=
          }=0A=
        }=0A=
        if(exists =3D=3D false)=0A=
        {=0A=
          thiers[thiers.length] =3D ours[x];=0A=
        }=0A=
      }=0A=
      el.className =3D thiers.join(' ').trim();=0A=
    }=0A=
  }=0A=
=0A=
HTMLArea.removeClasses =3D function(el, classes)=0A=
{=0A=
  var existing    =3D el.className.trim().split();=0A=
  var new_classes =3D [ ];=0A=
  var remove      =3D classes.trim().split();=0A=
=0A=
  for(var i =3D 0; i < existing.length; i++)=0A=
  {=0A=
    var found =3D false;=0A=
    for(var x =3D 0; x < remove.length && !found; x++)=0A=
    {=0A=
      if(existing[i] =3D=3D remove[x])=0A=
      {=0A=
        found =3D true;=0A=
      }=0A=
    }=0A=
    if(!found)=0A=
    {=0A=
      new_classes[new_classes.length] =3D existing[i];=0A=
    }=0A=
  }=0A=
  return new_classes.join(' ');=0A=
}=0A=
=0A=
/** Alias these for convenience */=0A=
HTMLArea.addClass       =3D HTMLArea._addClass;=0A=
HTMLArea.removeClass    =3D HTMLArea._removeClass;=0A=
HTMLArea._addClasses    =3D HTMLArea.addClasses;=0A=
HTMLArea._removeClasses =3D HTMLArea.removeClasses;=0A=
=0A=
/** Use XML HTTPRequest to post some data back to the server and do =
something=0A=
 * with the response (asyncronously!), this is used by such things as =
the tidy functions=0A=
 */=0A=
HTMLArea._postback =3D function(url, data, handler)=0A=
{=0A=
  var req =3D null;=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
   req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
  }=0A=
  else=0A=
  {=0A=
   req =3D new XMLHttpRequest();=0A=
  }=0A=
=0A=
  var content =3D '';=0A=
  for(var i in data)=0A=
  {=0A=
    content +=3D (content.length ? '&' : '') + i + '=3D' + =
encodeURIComponent(data[i]);=0A=
  }=0A=
=0A=
  function callBack()=0A=
  {=0A=
    if(req.readyState =3D=3D 4)=0A=
    {=0A=
      if(req.status =3D=3D 200)=0A=
      {=0A=
        if(typeof handler =3D=3D 'function')=0A=
        handler(req.responseText, req);=0A=
      }=0A=
      else=0A=
      {=0A=
        alert('An error has occurred: ' + req.statusText);=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  req.onreadystatechange =3D callBack;=0A=
=0A=
  req.open('POST', url, true);=0A=
  req.setRequestHeader=0A=
  (=0A=
      'Content-Type',=0A=
      'application/x-www-form-urlencoded; charset=3DUTF-8'=0A=
  );=0A=
  //alert(content);=0A=
  req.send(content);=0A=
}=0A=
=0A=
HTMLArea._getback =3D function(url, handler)=0A=
{=0A=
  var req =3D null;=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
   req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
  }=0A=
  else=0A=
  {=0A=
   req =3D new XMLHttpRequest();=0A=
  }=0A=
=0A=
  function callBack()=0A=
  {=0A=
    if(req.readyState =3D=3D 4)=0A=
    {=0A=
      if(req.status =3D=3D 200)=0A=
      {=0A=
        handler(req.responseText, req);=0A=
      }=0A=
      else=0A=
      {=0A=
        alert('An error has occurred: ' + req.statusText);=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  req.onreadystatechange =3D callBack;=0A=
  req.open('GET', url, true);=0A=
  req.send(null);=0A=
}=0A=
=0A=
HTMLArea._geturlcontent =3D function(url)=0A=
{=0A=
  var req =3D null;=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
   req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
  }=0A=
  else=0A=
  {=0A=
   req =3D new XMLHttpRequest();=0A=
  }=0A=
=0A=
  // Synchronous!=0A=
  req.open('GET', url, false);=0A=
  req.send(null);=0A=
  if(req.status =3D=3D 200)=0A=
  {=0A=
    return req.responseText;=0A=
  }=0A=
  else=0A=
  {=0A=
    return '';=0A=
  }=0A=
=0A=
}=0A=
=0A=
/**=0A=
 * Unless somebody already has, make a little function to debug things=0A=
 */=0A=
if(typeof dump =3D=3D 'undefined')=0A=
{=0A=
  function dump(o) {=0A=
    var s =3D '';=0A=
    for (var prop in o) {=0A=
      s +=3D prop + ' =3D ' + o[prop] + '\n';=0A=
    }=0A=
=0A=
    x =3D window.open("", "debugger");=0A=
    x.document.write('<pre>' + s + '</pre>');=0A=
  }=0A=
}=0A=
=0A=
=0A=
HTMLArea.arrayContainsArray =3D function(a1, a2)=0A=
{=0A=
  var all_found =3D true;=0A=
  for(var x =3D 0; x < a2.length; x++)=0A=
  {=0A=
    var found =3D false;=0A=
    for(var i =3D 0; i < a1.length; i++)=0A=
    {=0A=
      if(a1[i] =3D=3D a2[x])=0A=
      {=0A=
        found =3D true;=0A=
        break;=0A=
      }=0A=
    }=0A=
    if(!found)=0A=
    {=0A=
      all_found =3D false;=0A=
      break;=0A=
    }=0A=
  }=0A=
  return all_found;=0A=
}=0A=
=0A=
HTMLArea.arrayFilter =3D function(a1, filterfn)=0A=
{=0A=
  var new_a =3D [ ];=0A=
  for(var x =3D 0; x < a1.length; x++)=0A=
  {=0A=
    if(filterfn(a1[x]))=0A=
      new_a[new_a.length] =3D a1[x];=0A=
  }=0A=
=0A=
  return new_a;=0A=
}=0A=
=0A=
HTMLArea.uniq_count =3D 0;=0A=
HTMLArea.uniq =3D function(prefix)=0A=
{=0A=
  return prefix + HTMLArea.uniq_count++;=0A=
}=0A=
=0A=
/** New language handling functions **/=0A=
=0A=
=0A=
/** Load a language file.=0A=
 *  This function should not be used directly, HTMLArea._lc will use it =
when necessary.=0A=
 * @param context Case sensitive context name, eg 'HTMLArea', =
'TableOperations', ...=0A=
 */=0A=
HTMLArea._loadlang =3D function(context)=0A=
{=0A=
  if(typeof _editor_lcbackend =3D=3D "string")=0A=
  {=0A=
    //use backend=0A=
    var url =3D _editor_lcbackend;=0A=
    url =3D url.replace(/%lang%/, _editor_lang);=0A=
    url =3D url.replace(/%context%/, context);=0A=
  }=0A=
  else=0A=
  {=0A=
    //use internal files=0A=
    if(context !=3D 'HTMLArea') {=0A=
      var url =3D =
_editor_url+"plugins/"+context+"/lang/"+_editor_lang+".js";=0A=
    } else {=0A=
      var url =3D _editor_url+"lang/"+_editor_lang+".js";=0A=
    }=0A=
  }=0A=
=0A=
  var lang;=0A=
  var langData =3D HTMLArea._geturlcontent(url);=0A=
  if(langData !=3D "") {=0A=
    try {=0A=
        eval('lang =3D ' + langData);=0A=
    } catch(Error) {=0A=
        alert('Error reading Language-File =
('+url+'):\n'+Error.toString());=0A=
        lang =3D { }=0A=
    }=0A=
  } else {=0A=
    lang =3D { };=0A=
  }=0A=
=0A=
  return lang;=0A=
}=0A=
=0A=
/** Return a localised string.=0A=
 * @param string    English language string=0A=
 * @param context   Case sensitive context name, eg 'HTMLArea' =
(default), 'TableOperations'...=0A=
 * @param replace   Replace $variables in String, eg {foo: =
'replaceText'} ($foo in string will be replaced)=0A=
 */=0A=
HTMLArea._lc =3D function(string, context, replace)=0A=
{=0A=
  var ret;=0A=
  if(_editor_lang =3D=3D "en")=0A=
  {=0A=
    if(typeof string =3D=3D 'object' && string.string) {=0A=
        ret =3D string.string;=0A=
    } else {=0A=
        ret =3D string;=0A=
    }=0A=
  }=0A=
  else=0A=
  {=0A=
    if(typeof HTMLArea._lc_catalog =3D=3D 'undefined')=0A=
    {=0A=
      HTMLArea._lc_catalog =3D [ ];=0A=
    }=0A=
=0A=
    if(typeof context =3D=3D 'undefined')=0A=
    {=0A=
      context =3D 'HTMLArea';=0A=
    }=0A=
=0A=
    if(typeof HTMLArea._lc_catalog[context] =3D=3D 'undefined')=0A=
    {=0A=
      HTMLArea._lc_catalog[context] =3D HTMLArea._loadlang(context);=0A=
    }=0A=
=0A=
    var key;=0A=
    if(typeof string =3D=3D 'object' && string.key)=0A=
    {=0A=
      key =3D string.key;=0A=
    }=0A=
    else=0A=
    {=0A=
      key =3D string;=0A=
    }=0A=
=0A=
    if(typeof HTMLArea._lc_catalog[context][key] =3D=3D 'undefined')=0A=
    {=0A=
      if(context=3D=3D'HTMLArea')=0A=
      {=0A=
        // Indicate it's untranslated=0A=
        if(typeof string =3D=3D 'object' && string.string) {=0A=
          ret =3D string.string;=0A=
        } else {=0A=
          ret =3D string;=0A=
        }=0A=
      }=0A=
      else=0A=
      {=0A=
        //if string is not found and context is not HTMLArea try if it =
is in HTMLArea=0A=
        return HTMLArea._lc(string, 'HTMLArea', replace);=0A=
      }=0A=
    }=0A=
    else=0A=
    {=0A=
      ret =3D HTMLArea._lc_catalog[context][key];=0A=
    }=0A=
  }=0A=
=0A=
  if(typeof string =3D=3D 'object' && string.replace)=0A=
  {=0A=
    replace =3D string.replace;=0A=
  }=0A=
  if(typeof replace !=3D "undefined")=0A=
  {=0A=
    for(var i in replace)=0A=
    {=0A=
      ret =3D ret.replace('$'+i, replace[i]);=0A=
    }=0A=
  }=0A=
=0A=
  return ret;=0A=
}=0A=
=0A=
HTMLArea.hasDisplayedChildren =3D function(el)=0A=
{=0A=
  var children =3D el.childNodes;=0A=
  for(var i =3D0; i < children.length;i++)=0A=
  {=0A=
    if(children[i].tagName)=0A=
    {=0A=
      if(children[i].style.display !=3D 'none')=0A=
      {=0A=
        return true;=0A=
      }=0A=
    }=0A=
  }=0A=
  return false;=0A=
}=0A=
=0A=
=0A=
HTMLArea._loadback =3D function(src, callback)=0A=
{=0A=
  var head =3D document.getElementsByTagName("head")[0];=0A=
  var evt =3D HTMLArea.is_ie ? "onreadystatechange" : "onload";=0A=
=0A=
  var script =3D document.createElement("script");=0A=
  script.type =3D "text/javascript";=0A=
  script.src =3D src;=0A=
  script[evt] =3D function()=0A=
  {=0A=
    if(HTMLArea.is_ie && =
!/loaded|complete/.test(window.event.srcElement.readyState))  return;=0A=
    callback();=0A=
  }=0A=
  head.appendChild(script);=0A=
};=0A=
=0A=
HTMLArea.collectionToArray =3D function(collection)=0A=
{=0A=
  var array =3D [ ];=0A=
  for(var i =3D 0; i < collection.length; i++)=0A=
  {=0A=
    array.push(collection.item(i));=0A=
  }=0A=
  return array;=0A=
}=0A=
=0A=
if(!Array.prototype.append)=0A=
{=0A=
  Array.prototype.append  =3D function(a)=0A=
  {=0A=
    for(var i =3D 0; i<a.length;i++)=0A=
    {=0A=
      this.push(a[i]);=0A=
    }=0A=
    return this;=0A=
  }=0A=
}=0A=
=0A=
HTMLArea.makeEditors =3D function(editor_names, default_config, =
plugin_names)=0A=
{=0A=
  if(typeof default_config =3D=3D 'function')=0A=
  {=0A=
    default_config =3D default_config();=0A=
  }=0A=
=0A=
  var editors =3D { };=0A=
  for(var x =3D 0; x < editor_names.length; x++)=0A=
  {=0A=
    var editor =3D new HTMLArea(editor_names[x], =
HTMLArea.cloneObject(default_config));=0A=
    editor.registerPlugins(plugin_names);=0A=
    editors[editor_names[x]] =3D editor;=0A=
  }=0A=
  return editors;=0A=
}=0A=
=0A=
HTMLArea.startEditors =3D function(editors)=0A=
{=0A=
  for(var i in editors)=0A=
  {=0A=
    if(editors[i].generate) editors[i].generate();=0A=
  }=0A=
}=0A=
=0A=
HTMLArea.prototype.registerPlugins =3D function(plugin_names) {=0A=
  if(plugin_names)=0A=
  {=0A=
    for(var i =3D 0; i < plugin_names.length; i++)=0A=
    {=0A=
      this.registerPlugin(eval(plugin_names[i]));=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
/** Utility function to base64_encode some arbitrary data, uses the =
builtin btoa() if it exists (Moz) */=0A=
=0A=
HTMLArea.base64_encode =3D  function(input)=0A=
{=0A=
  var keyStr =3D =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=3D";=0A=
  var output =3D "";=0A=
  var chr1, chr2, chr3;=0A=
  var enc1, enc2, enc3, enc4;=0A=
  var i =3D 0;=0A=
=0A=
  do {=0A=
    chr1 =3D input.charCodeAt(i++);=0A=
    chr2 =3D input.charCodeAt(i++);=0A=
    chr3 =3D input.charCodeAt(i++);=0A=
=0A=
    enc1 =3D chr1 >> 2;=0A=
    enc2 =3D ((chr1 & 3) << 4) | (chr2 >> 4);=0A=
    enc3 =3D ((chr2 & 15) << 2) | (chr3 >> 6);=0A=
    enc4 =3D chr3 & 63;=0A=
=0A=
    if (isNaN(chr2)) {=0A=
       enc3 =3D enc4 =3D 64;=0A=
    } else if (isNaN(chr3)) {=0A=
       enc4 =3D 64;=0A=
    }=0A=
=0A=
    output =3D output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +=0A=
       keyStr.charAt(enc3) + keyStr.charAt(enc4);=0A=
  } while (i < input.length);=0A=
=0A=
  return output;=0A=
}=0A=
=0A=
/** Utility function to base64_decode some arbitrary data, uses the =
builtin atob() if it exists (Moz) */=0A=
=0A=
HTMLArea.base64_decode =3Dfunction(input)=0A=
{=0A=
  var keyStr =3D =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=3D";=0A=
  var output =3D "";=0A=
  var chr1, chr2, chr3;=0A=
  var enc1, enc2, enc3, enc4;=0A=
  var i =3D 0;=0A=
=0A=
  // remove all characters that are not A-Z, a-z, 0-9, +, /, or =3D=0A=
  input =3D input.replace(/[^A-Za-z0-9\+\/\=3D]/g, "");=0A=
=0A=
  do {=0A=
    enc1 =3D keyStr.indexOf(input.charAt(i++));=0A=
    enc2 =3D keyStr.indexOf(input.charAt(i++));=0A=
    enc3 =3D keyStr.indexOf(input.charAt(i++));=0A=
    enc4 =3D keyStr.indexOf(input.charAt(i++));=0A=
=0A=
    chr1 =3D (enc1 << 2) | (enc2 >> 4);=0A=
    chr2 =3D ((enc2 & 15) << 4) | (enc3 >> 2);=0A=
    chr3 =3D ((enc3 & 3) << 6) | enc4;=0A=
=0A=
    output =3D output + String.fromCharCode(chr1);=0A=
=0A=
    if (enc3 !=3D 64) {=0A=
       output =3D output + String.fromCharCode(chr2);=0A=
    }=0A=
    if (enc4 !=3D 64) {=0A=
       output =3D output + String.fromCharCode(chr3);=0A=
    }=0A=
  } while (i < input.length);=0A=
=0A=
  return output;=0A=
}=0A=
=0A=
HTMLArea.removeFromParent =3D function(el)=0A=
{=0A=
  if(!el.parentNode) return;=0A=
  var pN =3D el.parentNode;=0A=
  pN.removeChild(el);=0A=
  return el;=0A=
}=0A=
=0A=
HTMLArea.hasParentNode =3D function(el)=0A=
{=0A=
  if(el.parentNode)=0A=
  {=0A=
    // When you remove an element from the parent in IE it makes the =
parent=0A=
    // of the element a document fragment.  Moz doesn't.=0A=
    if(el.parentNode.nodeType =3D=3D 11)=0A=
    {=0A=
      return false;=0A=
    }=0A=
    return true;=0A=
  }=0A=
=0A=
  return false;=0A=
}=0A=
=0A=
HTMLArea.getOuterHTML =3D function(element)=0A=
{=0A=
  if(HTMLArea.is_ie)=0A=
  {=0A=
    return element.outerHTML;=0A=
  }=0A=
  else=0A=
  {=0A=
    return (new XMLSerializer()).serializeToString(element);=0A=
  }=0A=
}=0A=
=0A=
HTMLArea.toFree =3D [ ];=0A=
HTMLArea.freeLater =3D function(obj,prop)=0A=
{=0A=
  HTMLArea.toFree.push({o:obj,p:prop});=0A=
}=0A=
=0A=
HTMLArea.free =3D function(obj, prop)=0A=
{=0A=
  if(obj && !prop)=0A=
  {=0A=
    for(var p in obj)=0A=
    {=0A=
      HTMLArea.free(obj, p);=0A=
    }=0A=
  }=0A=
  else if (obj)=0A=
  {=0A=
    obj[prop] =3D null;=0A=
  }=0A=
}=0A=
=0A=
/** IE's Garbage Collector is broken very badly.  We will do our best to =0A=
 *   do it's job for it, but we can't be perfect.=0A=
 */=0A=
=0A=
HTMLArea.collectGarbageForIE =3D function() =0A=
{  =0A=
  HTMLArea.flushEvents();   =0A=
  for(var x =3D 0; x < HTMLArea.toFree.length; x++)=0A=
  {=0A=
    if(!HTMLArea.toFree[x].o) alert("What is " + x + ' ' + =
HTMLArea.toFree[x].o);=0A=
    HTMLArea.free(HTMLArea.toFree[x].o, HTMLArea.toFree[x].p);=0A=
  }=0A=
}=0A=
=0A=
HTMLArea.init();=0A=
HTMLArea.addDom0Event(window,'unload',HTMLArea.collectGarbageForIE);=0A=

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js

(function(){=0A=
function aa(){var a=3Dba.cookie,b=3DMath.round((new =
Date).getTime()/1000),c=3Dh.google_analytics_domain_name,d=3Dtypeof =
c=3D=3D"undefined"?ca("auto"):ca(c),e=3Da.indexOf("__utma=3D"+d+".")>-1,f=
=3Da.indexOf("__utmb=3D"+d)>-1,g=3Da.indexOf("__utmc=3D"+d)>-1,i,k=3D{};i=
f(e){i=3Da.split("__utma=3D"+d+".")[1].split(";")[0].split(".");k.sid=3Df=
&&g?i[3]+"":h&&h.gaGlobal&&h.gaGlobal.sid?h.gaGlobal.sid:b+"";k.vid=3Di[0=
]+"."+i[1];k.from_cookie=3Dj}else{k.sid=3Dh&&h.gaGlobal&&h.gaGlobal.sid?h=
.gaGlobal.sid:b+"";k.vid=3Dh&&h.gaGlobal&&h.gaGlobal.vid?=0A=
h.gaGlobal.vid:(da()^ea()&2147483647)+"."+b;k.from_cookie=3Dm}k.dh=3Dd;k.=
hid=3Dh&&h.gaGlobal&&h.gaGlobal.hid?h.gaGlobal.hid:da();h.gaGlobal=3Dk;re=
turn k}function da(){return Math.round(Math.random()*2147483647)}=0A=
function ea(){var =
a=3Dba.cookie?ba.cookie:"",b=3Dh.history.length,c,d,e=3D[n.appName,n.vers=
ion,n.language?n.language:n.browserLanguage,n.platform,n.userAgent,n.java=
Enabled()?1:0].join("");if(h.screen)e+=3Dh.screen.width+"x"+h.screen.heig=
ht+h.screen.colorDepth;else =
if(h.java){d=3Djava.awt.Toolkit.getDefaultToolkit().getScreenSize();e+=3D=
d.screen.width+"x"+d.screen.height}e+=3Da;e+=3Dba.referrer?ba.referrer:""=
;c=3De.length;while(b>0)e+=3Db--^c++;return fa(e)}=0A=
function fa(a){var =
b=3D1,c=3D0,d,e;if(!(a=3D=3Dundefined||a=3D=3D"")){b=3D0;for(d=3Da.length=
-1;d>=3D0;d--){e=3Da.charCodeAt(d);b=3D(b<<6&268435455)+e+(e<<14);c=3Db&2=
66338304;b=3Dc!=3D0?b^c>>21:b}}return b}function =
ca(a){if(!a||a=3D=3D""||a=3D=3D"none")return =
1;if("auto"=3D=3Da){a=3Dba.domain;if("www."=3D=3Da.substring(0,4))a=3Da.s=
ubstring(4,a.length)}return fa(a.toLowerCase())}function ga(){}function =
ha(a){p&&p.Xb(a)}function ia(a){p&&p.Yb(a)}function ja(a){p&&p.Wb(a)}=0A=
function =
s(){this.I=3Dthis.Kb();this.pa=3Dm;if(!this.I){this.pa=3Dthis.gb();this.p=
a||ia("Browser does not allow cookies")}}=0A=
function ka(){if(navigator.plugins&&navigator.mimeTypes.length){var =
a=3Dnavigator.plugins["Shockwave Flash"];if(a&&a.description)return =
a.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s)+r/,".")}else =
if(navigator.userAgent&&navigator.userAgent.indexOf("Windows =
CE")>=3D0){var b=3D3,c=3D1;while(c)try{c=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash."+(b+1));b++}catch(d){c=3Dt}=
return b.toString()}else if(la("msie")&&!window.opera){var =
c=3Dt;try{c=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(d){var b=3D=0A=
0;try{c=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");b=3D6;c.AllowScriptAcces=
s=3D"always"}catch(d){if(b=3D=3D6)return b.toString()}try{c=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(d){}}if(c!=3Dt){var =
b=3Dc.GetVariable("$version").split(" ")[1];return =
b.replace(/,/g,".")}}return"0"}function ma(a,b){if(b){var =
c=3Dna(b);if(c){var =
d=3Doa("div");d.innerHTML=3Da;pa(c,d)}}window.console&&typeof =
window.console.log=3D=3D"function"&&window.console.log(a)}function =
qa(a){return a!=3Dt?'"'+a+'"':'""'}=0A=
function ra(a){return typeof =
encodeURIComponent=3D=3D"function"?encodeURIComponent(a):escape(a)}functi=
on u(a,b){if(a&&b)window.google_ad_url+=3D"&"+a+"=3D"+b}function =
v(a){var b=3Dwindow,c=3Dsa[a]||ta[a]||t,d=3Db[a];u(c,d)}function =
w(a,b){b&&u(a,ra(b))}function x(a){var =
b=3Dwindow,c=3Dsa[a]||ta[a]||t,d=3Db[a];w(c,d)}function ua(a,b){var =
c=3Dwindow,d=3Dsa[a]||ta[a]||t,e=3Dc[a];if(d&&e&&typeof =
e=3D=3D"object")e=3De[b%e.length];u(d,e)}=0A=
function va(a,b){var =
c=3Da.screen,d=3Dnavigator.javaEnabled(),e=3D-b.getTimezoneOffset();if(c)=
{u("u_h",c.height);u("u_w",c.width);u("u_ah",c.availHeight);u("u_aw",c.av=
ailWidth);u("u_cd",c.colorDepth)}u("u_tz",e);u("u_his",history.length);u(=
"u_java",d);navigator.plugins&&u("u_nplug",navigator.plugins.length);navi=
gator.mimeTypes&&u("u_nmime",navigator.mimeTypes.length)}=0A=
function =
wa(a){if(!a.google_enable_first_party_cookie)return;if(p=3D=3Dt)p=3Dnew =
ga;if(a._GA_googleCookieHelper=3D=3Dt)a._GA_googleCookieHelper=3Dnew =
s;if(!a._google_cookie_fetched){a._google_cookie_fetched=3Dj;a._GA_google=
CookieHelper.kb(xa(a.google_ad_client))}}function =
xa(a){if(a){a=3Da.toLowerCase();if(a.substring(0,3)!=3D"ca-")a=3D"ca-"+a}=
return a}function =
ya(a){if(a){a=3Da.toLowerCase();if(a.substring(0,9)!=3D"dist-aff-")a=3D"d=
ist-aff-"+a}return a}=0A=
function za(a){var b=3D"google_unique_id";if(a[b])++a[b];else =
a[b]=3D1;return a[b]}function Aa(){var =
a=3DMath.random();if(a<0.0010)return 30143001;else if(a<0.0020)return =
30143002;return 0}=0A=
function Ba(a,b,c,d){var =
e=3Dza(a),f=3Da.google_container_id||d||"google_ad_div"+e;c=3Dc.substring=
(0,2000);c=3Dc.replace(/%\w?$/,"");var =
g=3D"script";if((a.google_ad_output=3D=3D"js"||a.google_ad_output=3D=3D"j=
son_html")&&(a.google_ad_request_done||a.google_radlink_request_done))b.w=
rite("<"+g+' language=3D"JavaScript1.1" src=3D'+qa(c)+"></"+g+">");else =
if(a.google_ad_output=3D=3D"html")if(a.google_expandable_iframe||Ca=3D=3D=
30143002){var =
i=3DDa(f,parseInt(a.google_ad_width,10),parseInt(a.google_ad_height,10),b=
),k=3DEa(e,a,i);a["google_expandable_ad_slot"+=0A=
e]=3Dnew z(c,k)}else{var l=3D'<iframe name=3D"google_ads_frame" =
width=3D'+qa(a.google_ad_width)+" height=3D"+qa(a.google_ad_height)+" =
frameborder=3D"+qa(a.google_ad_frameborder)+" src=3D"+qa(c)+' =
marginwidth=3D"0" marginheight=3D"0" vspace=3D"0" hspace=3D"0" =
allowtransparency=3D"true" =
scrolling=3D"no"></iframe>';a.google_container_id?Fa(a.google_container_i=
d,b,l):b.write(l)}else =
a.google_ad_output=3D=3D"textlink"&&b.write("<"+g+' =
language=3D"JavaScript1.1" src=3D'+qa(c)+"></"+g+">")}=0A=
function Da(a,b,c,d){var =
e=3DGa(a);if(e){e.style.display=3D"block";e.style.height=3Dc+"px";e.style=
.visibility=3D"visible";e.style.width=3Db+"px"}else{d.write('<ins =
id=3D"'+a+'" =
style=3D"width:'+b+"px;height:"+c+'px;position:relative;margin:0;padding:=
0;display:block;visibility:visible;border:none"></ins>');e=3DGa(a)}return=
 e}=0A=
function Ea(a,b,c){var =
d=3DHa().createElement("IFRAME");d.id=3D"google_ads_frame"+a;d.allowTrans=
parency=3Dj;d.frameBorder=3Db.google_ad_frameborder||0;d.height=3Db.googl=
e_ad_height;d.hspace=3D0;d.marginHeight=3D0;d.marginWidth=3D0;d.name=3D"g=
oogle_ads_frame";d.scrolling=3D"no";d.style.left=3D0;d.style.position=3D"=
absolute";d.style.top=3D0;d.style.zIndex=3D999;d.vspace=3D0;d.width=3Db.g=
oogle_ad_width;c.appendChild(d);return d}=0A=
function Ia(a){for(var b in sa)a[b]=3Dt;for(var b in =
ta){if(b=3D=3D"google_correlator")continue;a[b]=3Dt}a.google_container_id=
=3Dt}function Ja(a){if(a.google_ad_format)return =
a.google_ad_format.indexOf("_0ads")>0;return =
a.google_ad_output!=3D"html"&&a.google_num_radlinks>0}function =
Ka(a){return a&&a.indexOf("_sdo")!=3D-1}=0A=
function La(a){var b=3Dt,c=3Dwindow,d=3Ddocument,e=3Dnew =
Date,f=3De.getTime(),g=3Dc.google_ad_format,i=3DMa(c);if(c.google_cpa_cho=
ice!=3Db){c.google_ad_url=3Di+"/cpa/ads?";c.google_ad_url+=3D"client=3D"+=
escape(xa(c.google_ad_client));c.google_ad_region=3D"_google_cpa_region_"=
;v("google_cpa_choice");if(typeof =
d.characterSet!=3D"undefined")w("oe",d.characterSet);else typeof =
d.charset!=3D"undefined"&&w("oe",d.charset)}else =
if(Ka(g)){c.google_ad_url=3Di+"/pagead/sdo?";c.google_ad_url+=3D"client=3D=
"+escape(ya(c.google_ad_client))}else{c.google_ad_url=3D=0A=
i+"/pagead/ads?";c.google_ad_url+=3D"client=3D"+escape(xa(c.google_ad_cli=
ent))}v("google_ad_host");v("google_ad_host_tier_id");var =
k=3Dc.google_num_slots_by_client,l=3Dc.google_num_slots_by_channel,o=3Dc.=
google_prev_ad_formats_by_region,q=3Dc.google_prev_ad_slotnames_by_region=
;if(c.google_ad_region=3D=3Db&&c.google_ad_section!=3Db)c.google_ad_regio=
n=3Dc.google_ad_section;var =
r=3Dc.google_ad_region=3D=3Db?"":c.google_ad_region;if(Ka(g)){c.google_nu=
m_sdo_slots=3Dc.google_num_sdo_slots?c.google_num_sdo_slots+1:1;if(c.goog=
le_num_sdo_slots>=0A=
4)return m}else =
if(Ja(c)){c.google_num_0ad_slots=3Dc.google_num_0ad_slots?c.google_num_0a=
d_slots+1:1;if(c.google_num_0ad_slots>3)return m}else =
if(c.google_cpa_choice=3D=3Db){c.google_num_ad_slots=3Dc.google_num_ad_sl=
ots?c.google_num_ad_slots+1:1;if(c.google_num_slots_to_rotate){o[r]=3Db;q=
[r]=3Db;if(c.google_num_slot_to_show=3D=3Db)c.google_num_slot_to_show=3Df=
%c.google_num_slots_to_rotate+1;if(c.google_num_slot_to_show!=3Dc.google_=
num_ad_slots)return m}else if(c.google_num_ad_slots>6&&r=3D=3D"")return =
m}u("dt",e.getTime());=0A=
v("google_language");c.google_country?v("google_country"):v("google_gl");=
v("google_region");x("google_city");x("google_hints");v("google_safe");v(=
"google_encoding");v("google_last_modified_time");x("google_alternate_ad_=
url");v("google_alternate_color");v("google_skip");v("google_targeting");=
var =
y=3Dc.google_ad_client;if(k[y])k[y]+=3D1;else{k[y]=3D1;k.length+=3D1}if(o=
[r])if(!Ka(g)){w("prev_fmts",o[r].toLowerCase());k.length>1&&u("slot",k[y=
])}q[r]&&w("prev_slotnames",q[r].toLowerCase());if(g&&!c.google_ad_slot){=
w("format",=0A=
g.toLowerCase());Ka(g)||(o[r]=3Do[r]?o[r]+","+g:g)}if(c.google_ad_slot)q[=
r]=3Dq[r]?q[r]+","+c.google_ad_slot:c.google_ad_slot;v("google_max_num_ad=
s");u("output",c.google_ad_output);v("google_adtest");v("google_ad_callba=
ck");v("google_ad_slot");x("google_correlator");c.google_new_domain_check=
ed=3D=3D1&&c.google_new_domain_enabled=3D=3D0&&u("dblk",1);if(c.google_ad=
_channel){x("google_ad_channel");var =
M=3D"",rb=3Dc.google_ad_channel.split(/[+, ]/);for(var =
Ra=3D0;Ra<rb.length;Ra++){var Sa=3Drb[Ra];if(l[Sa])M+=3DSa+"+";else =
l[Sa]=3D=0A=
1}w("pv_ch",M)}if(c.google_ad_host_channel){x("google_ad_host_channel");v=
ar =
zc=3DNa(c.google_ad_host_channel,c.google_viewed_host_channels);w("pv_h_c=
h",zc)}c.google_enable_first_party_cookie&&w("cookie",c._GA_googleCookieH=
elper.rb());x("google_page_url");ua("google_color_bg",f);ua("google_color=
_text",f);ua("google_color_link",f);ua("google_color_url",f);ua("google_c=
olor_border",f);ua("google_color_line",f);c.google_reuse_colors?u("reuse_=
colors",1):u("reuse_colors",0);v("google_kw_type");x("google_kw");=0A=
x("google_contents");v("google_num_radlinks");v("google_max_radlink_len")=
;v("google_rl_filtering");v("google_rl_mode");v("google_rt");x("google_rl=
_dest_url");v("google_num_radlinks_per_unit");v("google_ad_type");v("goog=
le_image_size");v("google_ad_region");if(c.google_expandable_iframe=3D=3D=
=3Dm)c.google_allow_expandable_ads=3D"off";else{Ca=3DAa();u("eid",Ca);if(=
!c.google_expandable_iframe&&Ca!=3D30143002)c.google_allow_expandable_ads=
=3D"off"}v("google_allow_expandable_ads");v("google_feedback");x("google_=
referrer_url");=0A=
x("google_page_location");u("frm",c.google_iframing);v("google_bid");v("g=
oogle_ctr_threshold");v("google_cust_age");v("google_cust_gender");v("goo=
gle_cust_interests");v("google_cust_id");v("google_cust_job");v("google_c=
ust_u_url");v("google_cust_l");v("google_cust_lh");v("google_cust_ch");v(=
"google_ed");v("google_video_doc_id");v("google_video_product_type");x("g=
oogle_ui_features");x("google_only_ads_with_video");x("google_disable_vid=
eo_autoplay");a&&w("ff",Oa(a));if(c.top.location=3D=3Dd.location&&d.body)=
{var sb=3D=0A=
d.body.scrollHeight,tb=3Dd.body.clientHeight;tb&&sb&&w("cc",Math.round(tb=
*100/sb))}aa();u("ga_vid",c.gaGlobal.vid);u("ga_sid",c.gaGlobal.sid);u("g=
a_hid",c.gaGlobal.hid);u("ga_fc",c.gaGlobal.from_cookie);x("google_analyt=
ics_uacct");v("google_ad_override");v("google_flash_version");va(c,e);ret=
urn j}=0A=
function Na(a,b){var c=3Da.split("|"),d=3D-1,e=3D[];for(var =
f=3D0;f<c.length;f++){var g=3Dc[f].split(/[+, ]/);b[f]||(b[f]=3D{});var =
i=3D"";for(var k=3D0;k<g.length;k++){var =
l=3Dg[k];if(b[f][l])i+=3D"+"+l;else =
b[f][l]=3D1}i=3Di.slice(1);e[f]=3Di;if(i!=3D"")d=3Df}var =
o=3D"";if(d>-1){for(var f=3D0;f<d;f++)o+=3De[f]+"|";o+=3De[d]}return o}=0A=
function Pa(){var a=3Dwindow,b=3Ddocument;wa(a);var =
c;if(Math.random()<0.01){var =
d=3D"google_temp_span";if(!Ga(d)){b.write("<span =
id=3D"+d+"></span>");c=3DGa(d)}}var =
e=3DLa(c);c&&Qa(c);if(!e)return;Ba(a,b,a.google_ad_url);Ia(a)}function =
Ta(){Pa();return j}=0A=
function Ua(a,b){var =
c=3Db.documentElement;if(a.top.location=3D=3Db.location)return =
m;if(a.google_ad_width&&a.google_ad_height){var =
d=3D1,e=3D1;if(a.innerHeight){d=3Da.innerWidth;e=3Da.innerHeight}else =
if(c&&c.clientHeight){d=3Dc.clientWidth;e=3Dc.clientHeight}else =
if(b.body){d=3Db.body.clientWidth;e=3Db.body.clientHeight}if(e>2*a.google=
_ad_height||d>2*a.google_ad_width)return m}return j}=0A=
function Va(a){var =
b=3Dwindow,c=3Dt,d=3Db.onerror;b.onerror=3Da;if(b.google_ad_frameborder=3D=
=3Dc)b.google_ad_frameborder=3D0;if(b.google_ad_output=3D=3Dc)b.google_ad=
_output=3D"html";if(Ka(b.google_ad_format)){var =
e=3Db.google_ad_format.match(/^(\d+)x(\d+)_.*/);if(e){b.google_ad_width=3D=
parseInt(e[1],10);b.google_ad_height=3DparseInt(e[2],10);b.google_ad_outp=
ut=3D"html"}}if(b.google_ad_format=3D=3Dc&&b.google_ad_output=3D=3D"html"=
)b.google_ad_format=3Db.google_ad_width+"x"+b.google_ad_height;Wa(b,docum=
ent);if(b.google_num_slots_by_channel=3D=3D=0A=
c)b.google_num_slots_by_channel=3D[];if(b.google_viewed_host_channels=3D=3D=
c)b.google_viewed_host_channels=3D[];if(b.google_num_slots_by_client=3D=3D=
c)b.google_num_slots_by_client=3D[];if(b.google_prev_ad_formats_by_region=
=3D=3Dc)b.google_prev_ad_formats_by_region=3D[];if(b.google_prev_ad_slotn=
ames_by_region=3D=3Dc)b.google_prev_ad_slotnames_by_region=3D[];if(b.goog=
le_correlator=3D=3Dc)b.google_correlator=3D(new =
Date).getTime();if(b.google_adslot_loaded=3D=3Dc)b.google_adslot_loaded=3D=
{};if(b.google_adContentsBySlot=3D=3Dc)b.google_adContentsBySlot=3D=0A=
{};if(b.google_flash_version=3D=3Dc)b.google_flash_version=3Dka();if(b.go=
ogle_new_domain_checked=3D=3Dc)b.google_new_domain_checked=3D0;if(b.googl=
e_new_domain_enabled=3D=3Dc)b.google_new_domain_enabled=3D0;b.onerror=3Dd=
}function la(a){if(a in Xa)return Xa[a];return =
Xa[a]=3Dnavigator.userAgent.toLowerCase().indexOf(a)!=3D-1}=0A=
function Ya(a){var =
b=3D{},c=3Da.split("?"),d=3Dc[c.length-1].split("&");for(var =
e=3D0;e<d.length;e++){var =
f=3Dd[e].split("=3D");if(f[0])try{b[f[0].toLowerCase()]=3Df.length>1?wind=
ow.decodeURIComponent?decodeURIComponent(f[1].replace(/\+/g," =
")):unescape(f[1]):""}catch(g){}}return b}function Za(){var =
a=3Dwindow,b=3DYa(document.URL);if(b.google_ad_override){a.google_ad_over=
ride=3Db.google_ad_override;a.google_adtest=3D"on"}}function =
$a(a,b){for(var c in b)a["google_"+c]=3Db[c]}=0A=
function ab(a,b){if(!b)return a.location;return a.referrer}function =
bb(a,b){if(!b&&a.google_referrer_url=3D=3Dt)return"0";else =
if(b&&a.google_referrer_url=3D=3Dt)return"1";else =
if(!b&&a.google_referrer_url!=3Dt)return"2";else =
if(b&&a.google_referrer_url!=3Dt)return"3";return"4"}function =
cb(a,b,c,d){a.page_url=3Dab(c,d);a.page_location=3Dt}function =
db(a,b,c,d){a.page_url=3Db.google_page_url;a.page_location=3Dab(c,d)||"EM=
PTY"}=0A=
function eb(a,b){var =
c=3D{},d=3DUa(a,b);c.iframing=3Dbb(a,d);!!a.google_page_url?db(c,a,b,d):c=
b(c,a,b,d);c.last_modified_time=3Db.location=3D=3Dc.page_url?Date.parse(b=
.lastModified)/1000:t;c.referrer_url=3Dd?a.google_referrer_url:a.google_p=
age_url&&a.google_referrer_url?a.google_referrer_url:b.referrer;return =
c}function fb(a){var =
b=3D{},c=3Da.URL.substring(a.URL.lastIndexOf("http"));b.iframing=3Dt;b.pa=
ge_url=3Dc;b.page_location=3Da.location;b.last_modified_time=3Dt;b.referr=
er_url=3Dc;return b}=0A=
function Wa(a,b){var =
c;c=3Da.google_page_url=3D=3Dt&&gb[b.domain]?fb(b):eb(a,b);$a(a,c)}functi=
on Fa(a,b,c){if(a){var =
d=3Db.getElementById(a);if(d&&c&&c.length!=3D""){d.style.visibility=3D"vi=
sible";d.innerHTML=3Dc}}}=0A=
function hb(a){var =
b=3Da.google_page_location||a.google_page_url;if(!b)return =
m;b=3Db.toString();if(b.indexOf("http://")=3D=3D0)b=3Db.substring(7,b.len=
gth);else =
if(b.indexOf("https://")=3D=3D0)b=3Db.substring(8,b.length);var =
c=3Db.indexOf("/");if(c=3D=3D-1)c=3Db.length;var =
d=3Db.substring(0,c),e=3Dd.split("."),f=3Dm;if(e.length>=3D3)f=3De[e.leng=
th-3]in ib;if(e.length>=3D2)f=3Df||e[e.length-2]in ib;return f}=0A=
function =
jb(a,b,c){if(a.google_new_domain_checked=3D=3D0){a.google_random_number=3D=
Math.random();if(a.google_random_number<c){var =
d=3D"http://googleads.g.doubleclick.net/pagead/test_domain.js",e=3D"scrip=
t";b.write("<"+e+' =
src=3D"'+d+'"></'+e+">");a.google_new_domain_checked=3D1}}}function =
Ma(a){var =
b=3D"http://googleads.g.doubleclick.net",c=3D"http://pagead2.googlesyndic=
ation.com";if(!hb(a)&&a.google_new_domain_enabled=3D=3D1)return b;return =
c}var =
m=3Dfalse,t=3Dnull,j=3Dtrue,ba=3Ddocument,n=3Dnavigator,h=3Dwindow;var =
sa=3D{google_ad_channel:"channel",google_ad_host:"host",google_ad_host_ch=
annel:"h_ch",google_ad_host_tier_id:"ht_id",google_ad_region:"region",goo=
gle_ad_section:"region",google_ad_type:"ad_type",google_adtest:"adtest",g=
oogle_allow_expandable_ads:"ea",google_alternate_ad_url:"alternate_ad_url=
",google_alternate_color:"alt_color",google_bid:"bid",google_city:"gcs",g=
oogle_color_bg:"color_bg",google_color_border:"color_border",google_color=
_line:"color_line",google_color_link:"color_link",google_color_text:"colo=
r_text",=0A=
google_color_url:"color_url",google_contents:"contents",google_country:"g=
l",google_cust_age:"cust_age",google_cust_ch:"cust_ch",google_cust_gender=
:"cust_gender",google_cust_id:"cust_id",google_cust_interests:"cust_inter=
ests",google_cust_job:"cust_job",google_cust_l:"cust_l",google_cust_lh:"c=
ust_lh",google_cust_u_url:"cust_u_url",google_disable_video_autoplay:"dis=
able_video_autoplay",google_ed:"ed",google_encoding:"oe",google_feedback:=
"feedback_link",google_flash_version:"flash",google_gl:"gl",google_hints:=
"hints",=0A=
google_kw:"kw",google_kw_type:"kw_type",google_language:"hl",google_refer=
rer_url:"ref",google_region:"gr",google_reuse_colors:"reuse_colors",googl=
e_safe:"adsafe",google_targeting:"targeting",google_ui_features:"ui",goog=
le_video_doc_id:"video_doc_id",google_video_product_type:"video_product_t=
ype",google_page_url:"url"},ta=3D{google_ad_format:"format",google_ad_out=
put:"output",google_ad_callback:"callback",google_ad_override:"google_ad_=
override",google_ad_slot:"slotname",google_analytics_uacct:"ga_wpids",=0A=
google_correlator:"correlator",google_cpa_choice:"cpa_choice",google_ctr_=
threshold:"ctr_t",google_image_size:"image_size",google_last_modified_tim=
e:"lmt",google_max_num_ads:"num_ads",google_max_radlink_len:"max_radlink_=
len",google_num_radlinks:"num_radlinks",google_num_radlinks_per_unit:"num=
_radlinks_per_unit",google_only_ads_with_video:"only_ads_with_video",goog=
le_page_location:"loc",google_rl_dest_url:"rl_dest_url",google_rl_filteri=
ng:"rl_filtering",google_rl_mode:"rl_mode",google_rt:"rt",google_skip:"sk=
ip"};ga.prototype.Xb=3Dfunction(){};ga.prototype.Yb=3Dfunction(){};ga.pro=
totype.Wb=3Dfunction(){};var =
p=3Dt;s.prototype.fa=3D"__gads=3D";s.prototype.Q=3D"GoogleAdServingTest=3D=
";s.prototype.rb=3Dfunction(){return =
this.I};s.prototype.setCookieInfo=3Dfunction(a){this.C=3Da._cookies_[0];i=
f(this.C!=3Dt){this.I=3Dthis.C._value_;this.Vb()}};s.prototype.lb=3Dfunct=
ion(a){var b=3D(new Date).valueOf(),c=3Dnew Date;c.setTime(b+a);return =
c};=0A=
s.prototype.kb=3Dfunction(a){if(this.I!=3Dt||!this.pa){ha("Skipping =
fetch cookie call");return}var =
b=3D"script",c=3Ddocument.domain,d=3D"http://partner.googleadservices.com=
/gampad/cookie.js?callback=3D_GA_googleCookieHelper.setCookieInfo&client=3D=
"+ra(a)+"&domain=3D"+ra(c);ha("Issuing a fetch cookie call with <a =
href=3D'"+d+"'>"+d+"</a>");document.write("<"+b+' =
src=3D"'+d+'"></'+b+">")};=0A=
s.prototype.gb=3Dfunction(){document.cookie=3Dthis.Q+"Good";var =
a=3Dthis.Ea(this.Q),b=3Da=3D=3D"Good";if(b){var =
c=3Dthis.lb(-1);document.cookie=3Dthis.Q+"; =
expires=3D"+c.toGMTString()}return b};s.prototype.Kb=3Dfunction(){var =
a=3Dthis.Ea(this.fa);a!=3Dt?ha("Read first party cookie: "+a):ia("No =
first party cookie found");return a};s.prototype.Ea=3Dfunction(a){var =
b=3Ddocument.cookie,c=3Db.indexOf(a),d=3Dt;if(c!=3D-1){var =
e=3Dc+a.length,f=3Db.indexOf(";",e);if(f=3D=3D-1)f=3Db.length;d=3Db.subst=
ring(e,f)}return d};=0A=
s.prototype.Vb=3Dfunction(){if(this.C=3D=3Dt)ia("Skipping cookie =
creation: no cookie info");else if(this.I=3D=3Dt)ja("Skipping cookie =
creation: no cookie value");else{var a=3Dnew =
Date;a.setTime(1000*this.C._expires_);var =
b=3Dthis.C._domain_,c=3Dthis.fa+this.I+"; expires=3D"+a.toGMTString()+"; =
path=3D"+this.C._path_+"; domain=3D."+b;document.cookie=3Dc;ha("Written =
cookie: "+c)}};var kb=3Dkb||{},A=3Dthis,mb=3Dfunction(a,b){var =
c=3Da.split("."),d=3DA,e;!(c[0]in d)&&d.execScript&&d.execScript("var =
"+c[0]);while(c.length&&(e=3Dc.shift()))if(!c.length&&lb(b))d[e]=3Db;else=
 d=3Dd[e]?d[e]:(d[e]=3D{})},nb=3Dfunction(a,b){var =
c=3Da.split("."),d=3Db||A;for(var e;e=3Dc.shift();)if(d[e])d=3Dd[e];else =
return t;return d};=0A=
var B=3Dfunction(a){var b=3Dtypeof a;if(b=3D=3D"object")if(a){if(typeof =
a.length=3D=3D"number"&&typeof =
a.splice!=3D"undefined"&&!ob(a,"length"))return"array";if(typeof =
a.call!=3D"undefined")return"function"}else return"null";else =
if(b=3D=3D"function"&&typeof =
a.call=3D=3D"undefined")return"object";return b};=0A=
if(Object.prototype.propertyIsEnumerable)var ob=3Dfunction(a,b){return =
Object.prototype.propertyIsEnumerable.call(a,b)};else =
ob=3Dfunction(a,b){if(b in a)for(var c in =
a)if(c=3D=3Db&&Object.prototype.hasOwnProperty.call(a,b))return j;return =
m};var lb=3Dfunction(a){return typeof a!=3D"undefined"};var =
pb=3Dfunction(a){var b=3DB(a);return =
b=3D=3D"array"||b=3D=3D"object"&&typeof a.length=3D=3D"number"};=0A=
var C=3Dfunction(a){return B(a)=3D=3D"function"},qb=3Dfunction(a){var =
b=3DB(a);return =
b=3D=3D"object"||b=3D=3D"array"||b=3D=3D"function"},wb=3Dfunction(a){if(a=
.hasOwnProperty&&a.hasOwnProperty(ub)){var b=3Da[ub];if(b)return =
b}a[ub]||(a[ub]=3D++vb);return =
a[ub]},ub=3D"closure_hashCode_",vb=3D0,D=3Dfunction(a,b){var =
c=3Da.Zb;if(arguments.length>2){var =
d=3DArray.prototype.slice.call(arguments,2);c&&d.unshift.apply(d,c);c=3Dd=
}b=3Da.ac||b;a=3Da.$b||a;var e,f=3Db||A;e=3Dc?function(){var =
g=3DArray.prototype.slice.call(arguments);g.unshift.apply(g,c);return =
a.apply(f,=0A=
g)}:function(){return =
a.apply(f,arguments)};e.Zb=3Dc;e.ac=3Db;e.$b=3Da;return =
e},E=3DDate.now||function(){return(new =
Date).getTime()},xb=3Dfunction(a,b){mb(a,b)},F=3Dfunction(a,b){function =
c(){}c.prototype=3Db.prototype;a.q=3Db.prototype;a.prototype=3Dnew =
c;a.prototype.constructor=3Da};var =
yb=3Dfunction(a,b){this.x=3Dlb(a)?a:0;this.y=3Dlb(b)?b:0};yb.prototype.to=
String=3Dfunction(){return"("+this.x+", "+this.y+")"};var =
zb=3Dfunction(a,b){this.width=3Da;this.height=3Db};zb.prototype.toString=3D=
function(){return"("+this.width+" x =
"+this.height+")"};zb.prototype.ceil=3Dfunction(){this.width=3DMath.ceil(=
this.width);this.height=3DMath.ceil(this.height);return =
this};zb.prototype.floor=3Dfunction(){this.width=3DMath.floor(this.width)=
;this.height=3DMath.floor(this.height);return =
this};zb.prototype.round=3Dfunction(){this.width=3DMath.round(this.width)=
;this.height=3DMath.round(this.height);return this};=0A=
zb.prototype.scale=3Dfunction(a){this.width*=3Da;this.height*=3Da;return =
this};var Ab=3Dfunction(a){return =
a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Gb=3Dfunction(a,b){if(b)return =
a.replace(Bb,"&amp;").replace(Cb,"&lt;").replace(Db,"&gt;").replace(Eb,"&=
quot;");else{if(!Fb.test(a))return =
a;if(a.indexOf("&")!=3D-1)a=3Da.replace(Bb,"&amp;");if(a.indexOf("<")!=3D=
-1)a=3Da.replace(Cb,"&lt;");if(a.indexOf(">")!=3D-1)a=3Da.replace(Db,"&gt=
;");if(a.indexOf('"')!=3D-1)a=3Da.replace(Eb,"&quot;");return =
a}},Bb=3D/&/g,Cb=3D/</g,Db=3D/>/g,Eb=3D/\"/g,Fb=3D/[&<>\"]/,Hb=3Dfunction=
(a,b){var c=3Db.length;for(var d=3D0;d<c;d++){var e=3D=0A=
c=3D=3D1?b:b.charAt(d);if(a.charAt(0)=3D=3De&&a.charAt(a.length-1)=3D=3De=
)return a.substring(1,a.length-1)}return a},Jb=3Dfunction(a,b){var =
c=3D0,d=3DAb(String(a)).split("."),e=3DAb(String(b)).split("."),f=3DMath.=
max(d.length,e.length);for(var g=3D0;c=3D=3D0&&g<f;g++){var =
i=3Dd[g]||"",k=3De[g]||"",l=3Dnew RegExp("(\\d*)(\\D*)","g"),o=3Dnew =
RegExp("(\\d*)(\\D*)","g");do{var =
q=3Dl.exec(i)||["","",""],r=3Do.exec(k)||["","",""];if(q[0].length=3D=3D0=
&&r[0].length=3D=3D0)break;var =
y=3Dq[1].length=3D=3D0?0:parseInt(q[1],10),M=3Dr[1].length=3D=3D0?0:parse=
Int(r[1],=0A=
10);c=3DIb(y,M)||Ib(q[2].length=3D=3D0,r[2].length=3D=3D0)||Ib(q[2],r[2])=
}while(c=3D=3D0)}return c},Ib=3Dfunction(a,b){if(a<b)return-1;else =
if(a>b)return 1;return 0};E();var =
Kb,Lb,Mb,Nb,Ob,Pb,Qb,Rb,Sb,Tb,Ub,Vb=3Dfunction(){var =
a=3Dm,b=3Dm,c=3Dm,d=3Dm,e=3Dm,f=3Dm,g=3Dm,i=3Dm,k=3Dm,l=3D"";if(A.navigat=
or){var =
o=3DA.navigator,q=3Do.userAgent;a=3Dq.indexOf("Opera")=3D=3D0;b=3D!a&&q.i=
ndexOf("MSIE")!=3D-1;c=3D!a&&q.indexOf("WebKit")!=3D-1;k=3Dc&&q.indexOf("=
Mobile")!=3D-1;d=3D!a&&!c&&o.product=3D=3D"Gecko";e=3Dd&&o.vendor=3D=3D"C=
amino";var =
r,y;if(a)r=3DA.opera.version();else{if(d)y=3D/rv\:([^\);]+)(\)|;)/;else =
if(b)y=3D/MSIE\s+([^\);]+)(\)|;)/;else =
if(c)y=3D/WebKit\/(\S+)/;if(y){y.test(q);r=3DRegExp.$1}}l=3Do.platform||"=
";f=3Dl.indexOf("Mac")!=3D=0A=
-1;g=3Dl.indexOf("Win")!=3D-1;i=3Dl.indexOf("Linux")!=3D-1}Kb=3Da;Lb=3Db;=
Mb=3Dd;Nb=3De;Ob=3Dc;Pb=3Dk;Qb=3Dr;Rb=3Dl;Sb=3Df;Tb=3Dg;Ub=3Di};Vb();var =
Wb=3DKb,G=3DLb,Xb=3DMb,H=3DOb,Yb=3DPb;var =
Zb=3Dfunction(a,b,c){if(a.indexOf)return =
a.indexOf(b,c);if(Array.indexOf)return Array.indexOf(a,b,c);var =
d=3Dc=3D=3Dt?0:c<0?Math.max(0,a.length+c):c;for(var =
e=3Dd;e<a.length;e++)if(e in a&&a[e]=3D=3D=3Db)return =
e;return-1},$b=3Dfunction(a,b,c){if(a.forEach)a.forEach(b,c);else =
if(Array.forEach)Array.forEach(a,b,c);else{var d=3Da.length,e=3Dtypeof =
a=3D=3D"string"?a.split(""):a;for(var f=3D0;f<d;f++)f in =
e&&b.call(c,e[f],f,a)}},ac=3Dfunction(a,b){if(a.contains)return =
a.contains(b);return Zb(a,b)>-1},bc=3Dfunction(a,b){var c=3DZb(a,=0A=
b),d;if(d=3Dc!=3D-1)Array.prototype.splice.call(a,c,1).length=3D=3D1;retu=
rn d};var cc=3Dfunction(a){if(B(a)=3D=3D"array")return =
a.concat();else{var b=3D[];for(var =
c=3D0,d=3Da.length;c<d;c++)b[c]=3Da[c];return b}};var =
dc=3Dfunction(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var ec;var =
Ha=3Dfunction(){ec||(ec=3Dnew I);return ec},gc=3Dfunction(a){return =
a?new I(fc(a)):Ha()};=0A=
var na=3Dfunction(a){return typeof =
a=3D=3D"string"?document.getElementById(a):a},Ga=3Dna,ic=3Dfunction(a,b){=
dc(b,function(c,d){if(d=3D=3D"style")a.style.cssText=3Dc;else =
if(d=3D=3D"class")a.className=3Dc;else =
if(d=3D=3D"for")a.htmlFor=3Dc;else if(d in =
hc)a.setAttribute(hc[d],c);else =
a[d]=3Dc})},hc=3D{cellpadding:"cellPadding",cellspacing:"cellSpacing",col=
span:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"w=
idth",usemap:"useMap",frameborder:"frameBorder"},jc=3Dfunction(a){var =
b=3Da||A||window,c=3Db.document;if(H&&!(Jb(Qb,=0A=
"500")>=3D0)&&!Yb){if(typeof =
b.innerHeight=3D=3D"undefined")b=3Dwindow;var =
d=3Db.innerHeight,e=3Db.document.documentElement.scrollHeight;if(b=3D=3Db=
.top)if(e<d)d-=3D15;return new zb(b.innerWidth,d)}var =
f=3Dgc(c),g=3Df.nb()=3D=3D"CSS1Compat"&&(!Wb||Wb&&Jb(Qb,"9.50")>=3D0)?c.d=
ocumentElement:c.body;return new =
zb(g.clientWidth,g.clientHeight)},oa=3Dfunction(){var a=3DHa();return =
a.qa.apply(a,arguments)};var =
pa=3Dfunction(a,b){a.appendChild(b)},Qa=3Dfunction(a){return =
a&&a.parentNode?a.parentNode.removeChild(a):t};=0A=
var kc=3DH&&Jb(Qb,"521")<=3D0,lc=3Dfunction(a,b){if(typeof =
a.contains!=3D"undefined"&&!kc&&b.nodeType=3D=3D1)return =
a=3D=3Db||a.contains(b);if(typeof =
a.compareDocumentPosition!=3D"undefined")return =
a=3D=3Db||Boolean(a.compareDocumentPosition(b)&16);while(b&&a!=3Db)b=3Db.=
parentNode;return b=3D=3Da},fc=3Dfunction(a){return =
a.nodeType=3D=3D9?a:a.ownerDocument||a.document},mc=3Dfunction(a){if(a&&t=
ypeof a.length=3D=3D"number")if(qb(a))return typeof =
a.item=3D=3D"function"||typeof a.item=3D=3D"string";else if(C(a))return =
typeof a.item=3D=3D"function";return m},=0A=
I=3Dfunction(a){this.u=3Da||A.document||document};I.prototype.ob=3Dfuncti=
on(){return =
this.u};I.prototype.qa=3Dfunction(a,b){if(G&&b&&b.name)a=3D"<"+a+' =
name=3D"'+Gb(b.name)+'">';var =
c=3Dthis.createElement(a);b&&ic(c,b);if(arguments.length>2){function =
d(g){if(g)this.appendChild(c,typeof =
g=3D=3D"string"?this.createTextNode(g):g)}for(var =
e=3D2;e<arguments.length;e++){var =
f=3Darguments[e];pb(f)&&!(qb(f)&&f.nodeType>0)?$b(mc(f)?cc(f):f,d,this):d=
.call(this,f)}}return c};I.prototype.createElement=3Dfunction(a){return =
this.u.createElement(a)};=0A=
I.prototype.createTextNode=3Dfunction(a){return =
this.u.createTextNode(a)};I.prototype.nb=3Dfunction(){if(this.u.compatMod=
e)return this.u.compatMode;if(H){var =
a=3Dthis.qa("div",{style:"position:absolute;width:0;height:0;width:1"}),b=
=3Da.style.width=3D=3D"1px"?"BackCompat":"CSS1Compat";return =
this.u.compatMode=3Db}return"BackCompat"};=0A=
I.prototype.wa=3Dfunction(){var =
a=3Dthis.u,b,c;if(!H&&a.compatMode=3D=3D"CSS1Compat"){b=3Da.documentEleme=
nt.scrollLeft;c=3Da.documentElement.scrollTop}else{b=3Da.body.scrollLeft;=
c=3Da.body.scrollTop}return new =
yb(b,c)};I.prototype.appendChild=3Dpa;I.prototype.removeNode=3DQa;I.proto=
type.contains=3Dlc;var nc,oc=3Dfunction(a,b){var =
c=3Dfc(a);if(c.defaultView&&c.defaultView.getComputedStyle){var =
d=3Dc.defaultView.getComputedStyle(a,"");if(d)return d[b]}return t};=0A=
var pc=3Dfunction(a,b){return =
oc(a,b)||(a.currentStyle?a.currentStyle[b]:t)||a.style[b]},qc=3Dfunction(=
a){var =
b;b=3Da?a.nodeType=3D=3D9?a:fc(a):Ha().ob();if(G&&b.compatMode!=3D"CSS1Co=
mpat")return b.body;return b.documentElement},rc=3Dfunction(a){var =
b=3Dfc(a),c=3DXb&&b.getBoxObjectFor&&pc(a,"position")=3D=3D"absolute"&&(a=
.style.top=3D=3D""||a.style.left=3D=3D"");if(typeof =
nc=3D=3D"undefined")nc=3DNb&&!(Jb(Qb,"1.8.0.11")>=3D0);var d=3Dnew =
yb(0,0),e=3Dqc(b);if(a=3D=3De)return d;var =
f=3Dt,g;if(a.getBoundingClientRect&&!c){g=3Da.getBoundingClientRect();=0A=
var i=3Dgc(b).wa();d.x=3Dg.left+i.x;d.y=3Dg.top+i.y}else =
if(b.getBoxObjectFor&&!c&&!nc){g=3Db.getBoxObjectFor(a);var =
k=3Db.getBoxObjectFor(e);d.x=3Dg.screenX-k.screenX;d.y=3Dg.screenY-k.scre=
enY}else{f=3Da;do{d.x+=3Df.offsetLeft;d.y+=3Df.offsetTop;if(H&&pc(f,"posi=
tion")=3D=3D"fixed"){d.x+=3Db.body.scrollLeft;d.y+=3Db.body.scrollTop;bre=
ak}f=3Df.offsetParent}while(f&&f!=3Da);if(Wb||H&&pc(a,"position")=3D=3D"a=
bsolute")d.y-=3Db.body.offsetTop;f=3Da.offsetParent;while(f&&f!=3Db.body)=
{d.x-=3Df.scrollLeft;if(!Wb||f.tagName!=3D"TR")d.y-=3Df.scrollTop;f=3D=0A=
f.offsetParent}}if(Xb&&a.getBoundingClientRect){var =
l=3Dpc(a,"position");if(l=3D=3D"static"||l=3D=3D"relative"){d.x=3DMath.fl=
oor(d.x);d.y=3DMath.floor(d.y)}}return d},sc=3Dfunction(a){var b=3Dnew =
yb;if(a.nodeType=3D=3D1)if(a.getBoundingClientRect){var =
c=3Da.getBoundingClientRect();b.x=3Dc.left;b.y=3Dc.top}else{var =
d=3Dgc(a).wa(),e=3Drc(a);b.x=3De.x-d.x;b.y=3De.y-d.y}else{b.x=3Da.clientX=
;b.y=3Da.clientY}return b};Xb&&!(Jb(Qb,"1.9")>=3D0);=0A=
var Oa=3Dfunction(a){var b=3Dfc(a),c=3D"";if(b.createTextRange){var =
d=3Db.body.createTextRange();d.moveToElementText(a);c=3Dd.queryCommandVal=
ue("FontName")}if(!c){c=3Dpc(a,"fontFamily");if(Wb&&Ub)c=3Dc.replace(/ =
\[[^\]]*\]/,"")}var e=3Dc.split(",");if(e.length>1)c=3De[0];return =
Hb(c,"\"'")};var =
J=3Dfunction(){};J.prototype.va=3Dm;J.prototype.dispose=3Dfunction(){if(!=
this.va){this.b();this.va=3Dj}};J.prototype.b=3Dfunction(){};var =
tc=3Dfunction(a){if(/^\s*$/.test(a))return m;var =
b=3D/\\["\\\/bfnrtu]/g,c=3D/"[^"\\\n\r\u2028\u2029\x00-\x1f\x7f-\x9f]*"|t=
rue|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,d=3D/(?:^|:|,)(?:[\s\u=
2028\u2029]*\[)+/g,e=3D/^[\],:{}\s\u2028\u2029]*$/;return =
e.test(a.replace(b,"@").replace(c,"]").replace(d,""))},uc=3Dfunction(a){v=
ar b=3DString(a);if(typeof b.parseJSON=3D=3D"function")return =
b.parseJSON();if(tc(a))try{return eval("("+a+")")}catch(c){}throw =
Error("Invalid JSON string: "+a);},vc=3Dt,xc=3Dfunction(a){vc||(vc=3D=0A=
new wc);return =
vc.serialize(a)},wc=3Dfunction(){};wc.prototype.serialize=3Dfunction(a){i=
f(a!=3Dt&&typeof a.toJSONString=3D=3D"function")return =
a.toJSONString();var b=3D[];this.ca(a,b);return b.join("")};=0A=
wc.prototype.ca=3Dfunction(a,b){switch(typeof a){case =
"string":this.Ia(a,b);break;case "number":this.Pb(a,b);break;case =
"boolean":b.push(a);break;case "undefined":b.push("null");break;case =
"object":if(a=3D=3Dt){b.push("null");break}if(B(a)=3D=3D"array"){this.Ob(=
a,b);break}this.Qb(a,b);break;case "function":break;default:throw =
Error("Unknown type: "+typeof a);}};var =
yc=3D{'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":=
"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"};=0A=
wc.prototype.Ia=3Dfunction(a,b){b.push('"',a.replace(/[\\\"\x00-\x1f\x80-=
\uffff]/g,function(c){if(c in yc)return yc[c];var =
d=3Dc.charCodeAt(0),e=3D"\\u";if(d<16)e+=3D"000";else =
if(d<256)e+=3D"00";else if(d<4096)e+=3D"0";return =
yc[c]=3De+d.toString(16)}),'"')};wc.prototype.Pb=3Dfunction(a,b){b.push(i=
sFinite(a)&&!isNaN(a)?a:"null")};wc.prototype.Ob=3Dfunction(a,b){var =
c=3Da.length;b.push("[");var d=3D"";for(var =
e=3D0;e<c;e++){b.push(d);this.ca(a[e],b);d=3D","}b.push("]")};=0A=
wc.prototype.Qb=3Dfunction(a,b){b.push("{");var c=3D"";for(var d in =
a){var e=3Da[d];if(typeof =
e!=3D"function"){b.push(c);this.Ia(d,b);b.push(":");this.ca(e,b);c=3D","}=
}b.push("}")};var Cc=3Dfunction(a,b){try{var c=3DAc(a),d=3D"Message: =
"+Gb(c.message)+'\nUrl: <a href=3D"view-source:'+c.fileName+'" =
target=3D"_new">'+c.fileName+"</a>\nLine: "+c.lineNumber+"\n\nBrowser =
stack:\n"+Gb(c.stack+"-> ")+"[end]\n\nJS stack =
traversal:\n"+Gb(Bc(b)+"-> ");return d}catch(e){return"Exception trying =
to expose exception! You win, we lose. "+e}},Ac=3Dfunction(a){var =
b=3Dnb("document.location.href");return typeof =
a=3D=3D"string"?{message:a,name:"Unknown error",lineNumber:"Not =
available",fileName:b,stack:"Not available"}:=0A=
!a.lineNumber||!a.fileName||!a.stack?{message:a.message,name:a.name,lineN=
umber:a.lineNumber||a.line||"Not =
available",fileName:a.fileName||a.sourceURL||b,stack:a.stack||"Not =
available"}:a},Bc=3Dfunction(a){return =
Dc(a||arguments.callee.caller,[])},Dc=3Dfunction(a,b){var =
c=3D[];if(ac(b,a))c.push("[...circular reference...]");else =
if(a&&b.length<50){c.push(Ec(a)+"(");var d=3Da.arguments;for(var =
e=3D0;e<d.length;e++){e>0&&c.push(", ");var f,g=3Dd[e];switch(typeof =
g){case "object":f=3Dg?"object":"null";break;case "string":f=3D=0A=
g;break;case "number":f=3DString(g);break;case =
"boolean":f=3Dg?"true":"false";break;case =
"function":f=3DEc(g);f=3Df?f:"[fn]";break;case =
"undefined":default:f=3Dtypeof =
g;break}if(f.length>40)f=3Df.substr(0,40)+"...";c.push(f)}b.push(a);c.pus=
h(")\n");try{c.push(Dc(a.caller,b))}catch(i){c.push("[exception trying =
to get caller]\n")}}else a?c.push("[...long =
stack...]"):c.push("[end]");return c.join("")},Ec=3Dfunction(a){var =
b=3DString(a);if(!Fc[b]){var c=3D/function ([^\(]+)/.exec(b);if(c){var =
d=3Dc[1];Fc[b]=3Dd}else Fc[b]=3D=0A=
"[Anonymous]"}return Fc[b]},Fc=3D{};var =
K=3Dfunction(a,b,c,d,e){this.nc=3Dtypeof =
e=3D=3D"number"?e:Gc++;this.oc=3Dd||E();this.p=3Da;this.gc=3Db;this.kc=3D=
c};K.prototype.ib=3Dt;K.prototype.hb=3Dt;var =
Gc=3D0;K.prototype.Rb=3Dfunction(a){this.ib=3Da};K.prototype.Sb=3Dfunctio=
n(a){this.hb=3Da};K.prototype.U=3Dfunction(){return =
this.p};K.prototype.da=3Dfunction(a){this.p=3Da};K.prototype.xa=3Dfunctio=
n(){return this.gc};var =
L=3Dfunction(a){this.Db=3Da;this.Y=3Dt;this.cc=3D{};this.ya=3D[]};L.proto=
type.p=3Dt;var =
N=3Dfunction(a,b){this.name=3Da;this.value=3Db};N.prototype.toString=3Dfu=
nction(){return this.name};new N("OFF",Infinity);new N("SHOUT",1200);var =
Hc=3Dnew N("SEVERE",1000),Ic=3Dnew N("WARNING",900),Jc=3Dnew =
N("INFO",800),Kc=3Dnew N("CONFIG",700),Lc=3Dnew N("FINE",500);new =
N("FINER",400);var Mc=3Dnew N("FINEST",300);new =
N("ALL",0);L.prototype.V=3Dfunction(){return =
this.Db};L.prototype.ga=3Dfunction(a){this.ya.push(a)};L.prototype.pb=3Df=
unction(){return this.Y};=0A=
L.prototype.da=3Dfunction(a){this.p=3Da};L.prototype.U=3Dfunction(){retur=
n this.p};L.prototype.X=3Dfunction(a){if(this.p)return =
a.value>=3Dthis.p.value;if(this.Y)return this.Y.X(a);return =
m};L.prototype.log=3Dfunction(a,b,c){if(!this.X(a))return;var d=3Dnew =
K(a,String(b),this.Db);if(c){d.Rb(c);d.Sb(Cc(c,arguments.callee.caller))}=
this.wb(d)};L.prototype.severe=3Dfunction(a,b){this.log(Hc,a,b)};L.protot=
ype.warning=3Dfunction(a,b){this.log(Ic,a,b)};L.prototype.info=3Dfunction=
(a,b){this.log(Jc,a,b)};=0A=
L.prototype.fine=3Dfunction(a,b){this.log(Lc,a,b)};L.prototype.finest=3Df=
unction(a,b){this.log(Mc,a,b)};L.prototype.wb=3Dfunction(a){if(!this.X(a.=
U()))return;var =
b=3Dthis;while(b){b.Sa(a);b=3Db.pb()}};L.prototype.Sa=3Dfunction(a){for(v=
ar =
b=3D0;b<this.ya.length;b++)this.ya[b](a)};L.prototype.Tb=3Dfunction(a){th=
is.Y=3Da};L.prototype.Pa=3Dfunction(a,b){this.cc[a]=3Db};=0A=
var Nc=3D{},Oc=3Dt,Pc=3Dfunction(){if(!Oc){Oc=3Dnew =
L("");Nc[""]=3DOc;Oc.da(Kc)}},Rc=3Dfunction(a){Pc();return a in =
Nc?Nc[a]:Qc(a)},Qc=3Dfunction(a){var b=3Dnew =
L(a),c=3Da.split("."),d=3Dc[c.length-1];c.length=3Dc.length-1;var =
e=3Dc.join("."),f=3DRc(e);f.Pa(d,b);b.Tb(f);Nc[a]=3Db;return b};var =
Sc=3D{"1":"NativeMessagingTransport","2":"FrameElementMethodTransport","3=
":"IframeRelayTransport","4":"IframePollingTransport","5":"FlashTransport=
","6":"NixTransport"},O=3D"SETUP_ACK",Tc=3D{},Vc=3Dfunction(a,b){var =
c=3Db||Uc,d=3Dc.length,e=3D"";while(a-- =
>0)e+=3Dc.charAt(Math.floor(Math.random()*d));return =
e},Uc=3D"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",=
P=3DRc("goog.net.xpc");var =
Q=3Dfunction(){};F(Q,J);Q.prototype.g=3D0;Q.prototype.V=3Dfunction(){retu=
rn Sc[this.g]||""};var =
R=3Dfunction(a){this.a=3Da;this.N=3D[];this.fc=3DD(this.eb,this)};F(R,Q);=
R.prototype.g=3D2;R.prototype.n=3D0;R.prototype.J=3D1;R.prototype.Z=3Dm;R=
.prototype.Ub=3D0;R.prototype.connect=3Dfunction(){this.aa=3Dwindow.paren=
t=3D=3Dthis.a.f?this.J:this.n;if(this.aa=3D=3Dthis.n){this.j=3Dthis.a.w;t=
his.j.XPC_toOuter=3DD(this.za,this)}else this.ja()};=0A=
R.prototype.ja=3Dfunction(){var =
a=3Dj;try{if(!this.j)this.j=3Dwindow.frameElement;if(this.j&&this.j.XPC_t=
oOuter){this.Ca=3Dthis.j.XPC_toOuter;this.j.XPC_toOuter.XPC_toInner=3DD(t=
his.za,this);a=3Dm;this.send("tp",O);this.a.m()}}catch(b){P.severe("excep=
tion caught while attempting setup: =
"+b)}if(a){if(!this.Qa)this.Qa=3DD(this.ja,this);window.setTimeout(this.Q=
a,100)}};=0A=
R.prototype.H=3Dfunction(a){if(this.aa=3D=3Dthis.n&&!this.a.k()&&a=3D=3DO=
){this.Ca=3Dthis.j.XPC_toOuter.XPC_toInner;this.a.m()}else throw =
Error("Got unexpected transport =
message.");};R.prototype.za=3Dfunction(a,b){if(!this.Z&&this.N.length=3D=3D=
0)this.a.o(a,b);else{this.N.push({serviceName:a,payload:b});if(this.N.len=
gth=3D=3D1)this.Ub=3Dwindow.setTimeout(this.fc,1)}};R.prototype.eb=3Dfunc=
tion(){while(this.N.length){var =
a=3Dthis.N.shift();this.a.o(a.serviceName,a.payload)}};=0A=
R.prototype.send=3Dfunction(a,b){this.Z=3Dj;this.Ca(a,b);this.Z=3Dm};R.pr=
ototype.b=3Dfunction(){R.q.b.call(this);this.Ca=3Dt;this.j=3Dt};var =
S=3Dfunction(a){this.a=3Da;this.O=3Dthis.a.c.ppu;this.jc=3Dthis.a.c.lpu;t=
his.ba=3D[]},Wc,Xc,Yc;F(S,Q);S.prototype.g=3D4;S.prototype.P=3D0;S.protot=
ype.B=3Dm;S.prototype.connect=3Dfunction(){this.Za()};S.prototype.Za=3Dfu=
nction(){P.fine("constructing sender frames.");var =
a=3Dthis.a.name+"_msg";this.zb=3Dthis.oa(a);this.Cb=3Dwindow.frames[a];a=3D=
this.a.name+"_ack";this.Ma=3Dthis.oa(a);this.Oa=3Dwindow.frames[a];this.l=
a()};=0A=
S.prototype.oa=3Dfunction(a){var =
b=3DHa().createElement("iframe"),c=3Db.style;c.position=3D"absolute";c.to=
p=3D"-10px";c.left=3D"10px";c.width=3D"1px";c.height=3D"1px";b.id=3Db.nam=
e=3Da;b.src=3Dthis.O+"#INITIAL";document.body.appendChild(b);return b};=0A=
S.prototype.la=3Dfunction(){this.Va&&window.clearTimeout(this.Va);if(this=
.Aa("msg")&&this.Aa("ack")){P.fine("foreign frames =
present");this.Ab=3Dnew =
Zc(this,this.a.f.frames[this.a.name+"_msg"],D(this.Hb,this));this.Na=3Dne=
w =
Zc(this,this.a.f.frames[this.a.name+"_ack"],D(this.Gb,this));this.na()}el=
se{P.finest("foreign frames not (yet) =
present");if(!this.Ua)this.Ua=3DD(this.la,this);this.Va=3Dwindow.setTimeo=
ut(this.Ua,100)}};=0A=
S.prototype.Aa=3Dfunction(a){try{var =
b=3Dthis.a.f.frames[this.a.name+"_"+a];if(!b||b.location.href.indexOf(thi=
s.jc)!=3D0)return m}catch(c){return m}return j};=0A=
S.prototype.na=3Dfunction(){var =
a=3Dthis.a.f.frames;if(a[this.a.name+"_ack"]&&a[this.a.name+"_msg"]){this=
.Bb=3Dnew $c(this.O,this.Cb);this.R=3Dnew =
$c(this.O,this.Oa);P.fine("local frames =
ready");window.setTimeout(D(function(){this.Bb.send("SETUP");this.mc=3Dj;=
this.B=3Dj;P.fine("SETUP =
sent")},this),100)}else{if(!this.Wa)this.Wa=3DD(this.na,this);window.setT=
imeout(this.Wa,100);P.fine("local frames not (yet) present")}};=0A=
S.prototype.ma=3Dfunction(){if(this.Ha&&this.Jb){this.a.m();if(this.D){P.=
fine("delivering queued messages ("+this.D.length+")");for(var =
a=3D0,b;a<this.D.length;a++){b=3Dthis.D[a];this.a.o(b.service,b.payload)}=
delete this.D}}else P.finest("checking if connected: ack =
sent:"+this.Ha+", ack rcvd: "+this.Jb)};=0A=
S.prototype.Hb=3Dfunction(a){P.finest("msg received: =
"+a);if(a=3D=3D"SETUP"){if(!this.R)return;this.R.send(O);P.finest("SETUP_=
ACK sent");this.Ha=3Dj;this.ma()}else if(this.a.k()||this.Ha){var =
b=3Da.indexOf("|"),c=3Da.substring(0,b),d=3Da.substring(b+1);b=3Dc.indexO=
f(",");if(b=3D=3D-1){var e=3Dc;this.R.send("ACK:"+e);this.ta(d)}else{var =
e=3Dc.substring(0,b);this.R.send("ACK:"+e);var =
f=3Dc.substring(b+1).split("/");f[0]=3DparseInt(f[0],10);f[1]=3DparseInt(=
f[1],10);if(f[0]=3D=3D1)this.Da=3D[];this.Da.push(d);if(f[0]=3D=3Df[1]){t=
his.ta(this.Da.join(""));=0A=
delete this.Da}}}else P.warning("received msg, but channel is not =
connected")};S.prototype.Gb=3Dfunction(a){P.finest("ack received: =
"+a);if(a=3D=3DO){this.B=3Dm;this.Jb=3Dj;this.ma()}else =
if(this.a.k()){if(!this.B){P.warning("got unexpected ack");return}var =
b=3DparseInt(a.split(":")[1],10);if(b=3D=3Dthis.P){this.B=3Dm;this.Ga()}e=
lse P.warning("got ack with wrong sequence")}else P.warning("received =
ack, but channel not connected")};=0A=
S.prototype.Ga=3Dfunction(){if(this.B||!this.ba.length)return;var =
a=3Dthis.ba.shift();++this.P;this.Bb.send(this.P+a);P.finest("msg sent: =
"+this.P+a);this.B=3Dj};S.prototype.ta=3Dfunction(a){var =
b=3Da.indexOf(":"),c=3Da.substr(0,b),d=3Da.substring(b+1);if(this.a.k())t=
his.a.o(c,d);else{(this.D||(this.D=3D[])).push({service:c,payload:d});P.f=
inest("queued delivery")}};S.prototype.K=3D3800;=0A=
S.prototype.send=3Dfunction(a,b){var =
c=3Da+":"+b;if(!G||b.length<=3Dthis.K)this.ba.push("|"+c);else{var =
d=3Db.length,e=3DMath.ceil(d/this.K),f=3D0,g=3D1;while(f<d){this.ba.push(=
","+g+"/"+e+"|"+c.substr(f,this.K));g++;f+=3Dthis.K}}this.Ga()};S.prototy=
pe.b=3Dfunction(){S.q.b.call(this);var =
a=3Dad;bc(a,this.Ab);bc(a,this.Na);this.Ab=3Dthis.Na=3Dt;Qa(this.zb);Qa(t=
his.Ma);this.zb=3Dthis.Ma=3Dt;this.Cb=3Dthis.Oa=3Dt};=0A=
var ad=3D[],cd=3Dfunction(){var a=3Dm;try{for(var =
b=3D0,c=3Dad.length;b<c;b++)a=3Da||ad[b].receive()}catch(d){P.info("recei=
ve_() failed: "+d);ad[b].d.a.Eb();if(!ad.length)return}var =
e=3DE();if(a)Wc=3De;var =
f=3De-Wc<1000?10:100;Xc=3Dwindow.setTimeout(bd,f)},bd=3DD(cd,S),dd=3Dfunc=
tion(){P.fine("starting =
receive-timer");Wc=3DE();Xc&&window.clearTimeout(Xc);Xc=3Dwindow.setTimeo=
ut(bd,10)},$c=3Dfunction(a,b){this.O=3Da;this.Nb=3Db;this.sa=3D0};=0A=
$c.prototype.send=3Dfunction(a){this.sa=3D++this.sa%2;var =
b=3Dthis.O+"#"+this.sa+encodeURIComponent(a);try{if(H)this.Nb.location.hr=
ef=3Db;else this.Nb.location.replace(b)}catch(c){P.severe("sending =
failed",c)}Yc=3DE()};var =
Zc=3Dfunction(a,b,c){this.d=3Da;this.Ib=3Db;this.bc=3Dc;this.cb=3Dthis.Ib=
.location.href.split("#")[0]+"#INITIAL";ad.push(this);dd()};Zc.prototype.=
receive=3Dfunction(){var =
a=3Dthis.Ib.location.href;if(a!=3Dthis.cb){this.cb=3Da;var =
b=3Da.split("#")[1];if(b){b=3Db.substr(1);this.bc(decodeURIComponent(b))}=
return j}else return m};var =
T=3Dfunction(a,b){J.call(this);this.xb=3Db;this.v=3D[];this.ab(a)};F(T,J)=
;T.prototype.S=3Dt;T.prototype.T=3Dt;T.prototype.G=3Dfunction(a){this.S=3D=
a};T.prototype.Ka=3Dfunction(a){this.T=3Da};T.prototype.i=3Dfunction(){if=
(this.v.length)return this.v.pop();return =
this.ra()};T.prototype.A=3Dfunction(a){this.v.length<this.xb?this.v.push(=
a):this.ua(a)};T.prototype.ab=3Dfunction(a){if(a>this.xb)throw =
Error("[goog.structs.SimplePool] Initial cannot be greater than =
max");for(var b=3D0;b<a;b++)this.v.push(this.ra())};=0A=
T.prototype.ra=3Dfunction(){return =
this.S?this.S():{}};T.prototype.ua=3Dfunction(a){if(this.T)this.T(a);else=
 if(C(a.dispose))a.dispose();else for(var b in a)delete =
a[b]};T.prototype.b=3Dfunction(){T.q.b.call(this);var =
a=3Dthis.v;while(a.length)this.ua(a.pop());delete this.v};var =
ed=3Dfunction(a,b){this.type=3Da;this.target=3Db;this.currentTarget=3Dthi=
s.target};F(ed,J);ed.prototype.b=3Dfunction(){delete this.type;delete =
this.target;delete =
this.currentTarget};ed.prototype.F=3Dm;ed.prototype.$=3Dj;ed.prototype.st=
opPropagation=3Dfunction(){this.F=3Dj};ed.prototype.preventDefault=3Dfunc=
tion(){this.$=3Dm};var =
U=3Dfunction(a,b){a&&this.init(a,b)};F(U,ed);U.prototype.type=3Dt;U.proto=
type.target=3Dt;U.prototype.relatedTarget=3Dt;U.prototype.offsetX=3D0;U.p=
rototype.offsetY=3D0;U.prototype.clientX=3D0;U.prototype.clientY=3D0;U.pr=
ototype.screenX=3D0;U.prototype.screenY=3D0;U.prototype.button=3D0;U.prot=
otype.keyCode=3D0;U.prototype.charCode=3D0;U.prototype.ctrlKey=3Dm;U.prot=
otype.altKey=3Dm;U.prototype.shiftKey=3Dm;U.prototype.metaKey=3Dm;U.proto=
type.h=3Dt;=0A=
U.prototype.init=3Dfunction(a,b){this.type=3Da.type;this.target=3Da.targe=
t||a.srcElement;this.currentTarget=3Db;this.relatedTarget=3Da.relatedTarg=
et?a.relatedTarget:this.type=3D=3D"mouseover"?a.fromElement:this.type=3D=3D=
"mouseout"?a.toElement:t;this.offsetX=3Dtypeof =
a.layerX=3D=3D"number"?a.layerX:a.offsetX;this.offsetY=3Dtypeof =
a.layerY=3D=3D"number"?a.layerY:a.offsetY;this.clientX=3Dtypeof =
a.clientX=3D=3D"number"?a.clientX:a.pageX;this.clientY=3Dtypeof =
a.clientY=3D=3D"number"?a.clientY:a.pageY;this.screenX=3Da.screenX||0;thi=
s.screenY=3Da.screenY||=0A=
0;this.button=3Da.button;this.keyCode=3Da.keyCode||0;this.charCode=3Da.ch=
arCode||(this.type=3D=3D"keypress"?a.keyCode:0);this.ctrlKey=3Da.ctrlKey;=
this.altKey=3Da.altKey;this.shiftKey=3Da.shiftKey;this.metaKey=3Da.metaKe=
y;this.h=3Da;delete this.$;delete =
this.F};U.prototype.stopPropagation=3Dfunction(){this.F=3Dj;if(this.h.sto=
pPropagation)this.h.stopPropagation();else this.h.cancelBubble=3Dj};=0A=
U.prototype.preventDefault=3Dfunction(){this.$=3Dm;if(this.h.preventDefau=
lt)this.h.preventDefault();else{this.h.returnValue=3Dm;try{this.h.keyCode=
=3D-1}catch(a){}}};U.prototype.mb=3Dfunction(){return =
this.h};U.prototype.b=3Dfunction(){U.q.b.call(this);this.h=3Dt};var =
V=3Dfunction(){},fd=3D0;V.prototype.W=3Dt;V.prototype.listener=3Dt;V.prot=
otype.proxy=3Dt;V.prototype.src=3Dt;V.prototype.type=3Dt;V.prototype.capt=
ure=3Dt;V.prototype.handler=3Dt;V.prototype.key=3D0;V.prototype.removed=3D=
m;V.prototype.ka=3Dm;V.prototype.init=3Dfunction(a,b,c,d,e,f){if(C(a))thi=
s.W=3Dj;else if(a&&a.handleEvent&&C(a.handleEvent))this.W=3Dm;else throw =
Error("Invalid listener =
argument");this.listener=3Da;this.proxy=3Db;this.src=3Dc;this.type=3Dd;th=
is.capture=3D!!e;this.handler=3Df;this.ka=3Dm;this.key=3D++fd;this.remove=
d=3Dm};=0A=
V.prototype.handleEvent=3Dfunction(a){if(this.W)return =
this.listener.call(this.handler||this.src,a);return =
this.listener.handleEvent.call(this.listener,a)};var =
gd=3D{},W=3D{},hd=3D{},id=3Dnew =
T(0,600);id.G(function(){return{t:0}});id.Ka(function(a){a.t=3D0});var =
jd=3Dnew =
T(0,600);jd.G(function(){return[]});jd.Ka(function(a){a.length=3D0;delete=
 a.M;delete a.Ba});var kd=3Dnew T(0,600);kd.G(function(){var =
a=3Dfunction(b){return ld.call(a.src,a.key,b)};return a});var =
md=3Dfunction(){return new V},nd=3Dnew T(0,600);nd.G(md);=0A=
var od=3Dfunction(){return new U},pd=3Dfunction(){var =
a=3Dt;if(G){a=3Dnew T(0,600);a.G(od)}return =
a},qd=3Dpd(),rd=3D"on",sd=3D{},td=3Dfunction(a,b,c,d,e){if(b)if(B(b)=3D=3D=
"array"){for(var f=3D0;f<b.length;f++)td(a,b[f],c,d,e);return t}else{var =
g=3D!!d,i=3DW;b in i||(i[b]=3Did.i());i=3Di[b];if(!(g in =
i)){i[g]=3Did.i();i.t++}i=3Di[g];var =
k=3Dwb(a),l,o;if(i[k]){l=3Di[k];for(var =
f=3D0;f<l.length;f++){o=3Dl[f];if(o.listener=3D=3Dc&&o.handler=3D=3De){if=
(o.removed)break;return l[f].key}}}else{l=3Di[k]=3Djd.i();i.t++}var =
q=3Dkd.i();q.src=3Da;o=3Dnd.i();o.init(c,=0A=
q,a,b,g,e);var =
r=3Do.key;q.key=3Dr;l.push(o);gd[r]=3Do;hd[k]||(hd[k]=3Djd.i());hd[k].pus=
h(o);if(a.addEventListener){if(a=3D=3DA||!a.ec)a.addEventListener(b,q,g)}=
else a.attachEvent(ud(b),q);return r}else throw Error("Invalid event =
type");},vd=3Dfunction(a,b,c,d,e){if(B(b)=3D=3D"array"){for(var =
f=3D0;f<b.length;f++)vd(a,b[f],c,d,e);return t}var =
g=3D!!d,i=3Dwd(a,b,g);if(!i)return m;for(var =
f=3D0;f<i.length;f++)if(i[f].listener=3D=3Dc&&i[f].capture=3D=3Dg&&i[f].h=
andler=3D=3De)return xd(i[f].key);return =
m},xd=3Dfunction(a){if(!gd[a])return m;=0A=
var b=3Dgd[a];if(b.removed)return m;var =
c=3Db.src,d=3Db.type,e=3Db.proxy,f=3Db.capture;if(c.removeEventListener){=
if(c=3D=3DA||!c.ec)c.removeEventListener(d,e,f)}else =
c.detachEvent&&c.detachEvent(ud(d),e);var =
g=3Dwb(c),i=3DW[d][f][g];if(hd[g]){var =
k=3Dhd[g];bc(k,b);k.length=3D=3D0&&delete =
hd[g]}b.removed=3Dj;i.Ba=3Dj;yd(d,f,g,i);delete gd[a];return =
j},yd=3Dfunction(a,b,c,d){if(!d.M)if(d.Ba){for(var =
e=3D0,f=3D0;e<d.length;e++){if(d[e].removed){nd.A(d[e]);continue}if(e!=3D=
f)d[f]=3Dd[e];f++}d.length=3Df;d.Ba=3Dm;if(f=3D=3D0){jd.A(d);delete =
W[a][b][c];=0A=
W[a][b].t--;if(W[a][b].t=3D=3D0){id.A(W[a][b]);delete =
W[a][b];W[a].t--}if(W[a].t=3D=3D0){id.A(W[a]);delete =
W[a]}}}},wd=3Dfunction(a,b,c){var d=3DW;if(b in d){d=3Dd[b];if(c in =
d){d=3Dd[c];var e=3Dwb(a);if(d[e])return d[e]}}return =
t},ud=3Dfunction(a){if(a in sd)return sd[a];return =
sd[a]=3Drd+a},Ad=3Dfunction(a,b,c,d){var e=3D1,f=3DW;if(b in =
f){f=3Df[b];if(c in f){f=3Df[c];var g=3Dwb(a);if(f[g]){var =
i=3Df[g];if(i.M)i.M++;else i.M=3D1;try{var k=3Di.length;for(var =
l=3D0;l<k;l++){var =
o=3Di[l];if(o&&!o.removed)e&=3Dzd(o,d)!=3D=3Dm}}finally{i.M--;yd(b,c,=0A=
g,i)}}}}return Boolean(e)},zd=3Dfunction(a,b){var =
c=3Da.handleEvent(b);a.ka&&xd(a.key);return =
c},ld=3Dfunction(a,b){if(!gd[a])return j;var =
c=3Dgd[a],d=3Dc.type,e=3DW;if(!(d in e))return j;e=3De[d];var =
f;if(G){var g=3Db||nb("window.event"),i=3Dj in =
e;if(i){if(g.keyCode<0||g.returnValue!=3Dundefined)return =
j;Bd(g)}wb(c.src);var k=3Dqd.i();k.init(g,this);f=3Dj;try{if(i){var =
l=3Djd.i();for(var =
o=3Dk.currentTarget;o;o=3Do.parentNode)l.push(o);for(var =
q=3Dl.length-1;!k.F&&q>=3D0;q--){k.currentTarget=3Dl[q];f&=3DAd(l[q],d,j,=
k)}for(var q=3D0;!k.F&&=0A=
q<l.length;q++){k.currentTarget=3Dl[q];f&=3DAd(l[q],d,m,k)}}else =
f=3Dzd(c,k)}finally{if(l){l.length=3D0;jd.A(l)}k.dispose();qd.A(k)}return=
 f}var r=3Dnew U(b,this);try{f=3Dzd(c,r)}finally{r.dispose()}return =
f},Bd=3Dfunction(a){var =
b=3Dm;if(a.keyCode=3D=3D0)try{a.keyCode=3D-1;return}catch(c){b=3Dj}if(b||=
a.returnValue=3D=3Dundefined)a.returnValue=3Dj};var =
X=3Dfunction(a){this.a=3Da;this.ic=3Dthis.a.c.pru;this.Fb=3Dthis.a.c.ifri=
d;H&&Cd()};F(X,Q);if(H){var =
Dd=3D[],Ed=3D0,Cd=3Dfunction(){Ed||(Ed=3Dwindow.setTimeout(function(){Fd(=
)},1000))},Fd=3Dfunction(a){var =
b=3DE(),c=3Da||3000;while(Dd.length&&b-Dd[0].timestamp>=3Dc){var =
d=3DDd.shift().iframeElement;Qa(d);P.finest("iframe =
removed")}Ed=3Dwindow.setTimeout(Gd,1000)},Gd=3Dfunction(){Fd()}}X.protot=
ype.g=3D3;X.prototype.connect=3Dfunction(){this.send("tp","SETUP")};=0A=
X.prototype.H=3Dfunction(a){if(a=3D=3D"SETUP"){this.send("tp",O);this.a.m=
()}else a=3D=3DO&&this.a.m()};=0A=
X.prototype.send=3Dfunction(a,b){if(G){var =
c=3Ddocument.createElement("div");c.innerHTML=3D'<iframe =
onload=3D"this.xpcOnload()"></iframe>';var =
d=3Dc.childNodes[0];d.xpcOnload=3DHd}else{var =
d=3Ddocument.createElement("iframe");H?Dd.push({timestamp:E(),iframeEleme=
nt:d}):td(d,"load",Hd)}var =
e=3Dd.style;e.visibility=3D"hidden";e.width=3Dd.style.height=3D"0px";e.po=
sition=3D"absolute";var =
f=3Dthis.ic;f+=3D"#"+this.a.name;if(this.Fb)f+=3D","+this.Fb;f+=3D"|"+a+"=
:"+encodeURIComponent(b);d.src=3Df;document.body.appendChild(d);P.finest(=
"msg sent: "+=0A=
f)};var =
Hd=3Dfunction(){P.finest("iframe-load");Qa(this);this.xpcOnload=3Dt};wind=
ow.xpcRelay=3Dfunction(a,b){var =
c=3Db.indexOf(":"),d=3Db.substring(0,c),e=3Db.substring(c+1);Tc[a].o(d,de=
codeURIComponent(e))};X.prototype.b=3Dfunction(){X.q.b.call(this);H&&Fd(0=
)};var Y=3Dfunction(a){this.a=3Da};F(Y,Q);Y.prototype.g=3D1;var =
Id=3Dm,Kd=3Dfunction(){if(!Id){td(C(window.postMessage)?window:document,"=
message",Jd,m,Y);Id=3Dj}},Jd=3Dfunction(a){var =
b=3Da.mb().data,c=3Db.indexOf("|"),d=3Db.indexOf(":");if(c=3D=3D-1||d=3D=3D=
-1)return;var =
e=3Db.substring(0,c),f=3Db.substring(c+1,d),g=3Db.substring(d+1),i=3DTc[e=
];i?i.o(f,g):P.severe('error delivering msg: no channel named =
"'+e+'"')};Y.prototype.H=3Dfunction(a){switch(a){case =
"SETUP":this.send("tp",O);case O:this.a.m();break}};=0A=
Y.prototype.connect=3Dfunction(){Kd();this.send("tp","SETUP")};Y.prototyp=
e.send=3Dfunction(a,b){var c=3Dthis.a.f;if(!c){P.fine("send(): window =
not ready");return}var =
d=3DC(window.postMessage)?c:c.document;this.send=3Dfunction(e,f){d.postMe=
ssage(this.a.name+"|"+e+":"+f,"*")};this.send(a,b)};Y.prototype.b=3Dfunct=
ion(){Y.q.b.call(this);vd(document,"message",this.lc,m,this)};var =
Z=3Dfunction(a){this.a=3Da;this.Ra=3Da.at||"";this.Mb=3Da.rat||"";Ld();th=
is[Md]=3Dthis.L;this[Nd]=3Dthis.$a};F(Z,Q);=0A=
var =
Od=3D"GRPC____NIXVBS_wrapper",Pd=3D"GRPC____NIXVBS_get_wrapper",Md=3D"GRP=
C____NIXJS_handle_message",Nd=3D"GRPC____NIXJS_create_channel",Qd=3D"GRPC=
____NIXVBS_container",Ld=3Dfunction(){if(window.nix_setup_complete)return=
;var a=3D"Class "+Od+"\n Private m_Transport\nPrivate m_Auth\nPublic Sub =
SetTransport(transport)\nIf isEmpty(m_Transport) Then\nSet m_Transport =
=3D transport\nEnd If\nEnd Sub\nPublic Sub SetAuth(auth)\nIf =
isEmpty(m_Auth) Then\nm_Auth =3D auth\nEnd If\nEnd Sub\nPublic Function =
GetAuthToken()\n GetAuthToken =3D m_Auth\nEnd Function\nPublic Sub =
SendMessage(service, payload)\n Call m_Transport."+Md+=0A=
"(service, payload)\nEnd Sub\nPublic Sub CreateChannel(channel)\n Call =
m_Transport."+Nd+"(channel)\nEnd Sub\nPublic Sub "+Qd+"()\n End Sub\nEnd =
Class\n Function "+Pd+"(transport, auth)\nDim wrap\nSet wrap =3D New =
"+Od+"\nwrap.SetTransport transport\nwrap.SetAuth auth\nSet "+Pd+" =3D =
wrap\nEnd =
Function";try{window.execScript(a,"vbscript");window.nix_setup_complete=3D=
j}catch(b){P.severe("exception caught while attempting global setup: =
"+b)}};Z.prototype.g=3D6;Z.prototype.n=3D0;Z.prototype.J=3D1;Z.prototype.=
z=3Dm;=0A=
Z.prototype.l=3Dt;Z.prototype.connect=3Dfunction(){this.aa=3Dwindow.paren=
t=3D=3Dthis.a.f?this.J:this.n;this.aa=3D=3Dthis.n?this.ia():this.ha()};Z.=
prototype.ia=3Dfunction(){if(this.z)return;var =
a=3Dthis.a.w;try{a.contentWindow.opener=3Dwindow[Pd](this,this.Ra);this.z=
=3Dj}catch(b){P.severe("exception caught while attempting setup: =
"+b)}this.z||window.setTimeout(D(this.ia,this),100)};=0A=
Z.prototype.ha=3Dfunction(){if(this.z)return;try{var =
a=3Dwindow.opener;if(a&&Qd in a){this.l=3Da;var =
b=3Dthis.l.GetAuthToken();if(b!=3Dthis.Mb){P.severe("Invalid auth token =
from other =
party");return}this.l.CreateChannel(window[Pd](this,this.Ra));this.z=3Dj;=
this.a.m()}}catch(c){P.severe("exception caught while attempting setup: =
"+c);return}this.z||window.setTimeout(D(this.ha,this),100)};=0A=
Z.prototype.$a=3Dfunction(a){if(typeof a!=3D"unknown"||!(Qd in =
a))P.severe("Invalid NIX channel given to =
createChannel_");this.l=3Da;var =
b=3Dthis.l.GetAuthToken();if(b!=3Dthis.Mb){P.severe("Invalid auth token =
from other =
party");return}this.a.m()};Z.prototype.L=3Dfunction(a,b){function =
c(){this.a.o(a,b)}window.setTimeout(D(c,this),1)};Z.prototype.send=3Dfunc=
tion(a,b){typeof this.l!=3D=3D"unknown"&&P.severe("NIX channel not =
connected");this.l.SendMessage(a,b)};Z.prototype.b=3Dfunction(){Z.q.b.cal=
l(this);this.l=3Dt};var =
$=3Dfunction(a){this.c=3Da;this.name=3Dthis.c.cn||Vc(10);this.Ja=3D{};Tc[=
this.name]=3Dthis;td(window,"unload",Rd);P.info("CrossPageChannel =
created: =
"+this.name)};F($,J);$.prototype.d=3Dt;$.prototype.ea=3D1;$.prototype.k=3D=
function(){return =
this.ea=3D=3D2};$.prototype.f=3Dt;$.prototype.w=3Dt;$.prototype.La=3Dfunc=
tion(a){this.f=3Da};=0A=
$.prototype.bb=3Dfunction(){if(this.d)return;if(!this.c.tp)if(C(document.=
postMessage)||C(window.postMessage))this.c.tp=3D1;else =
if(Xb)this.c.tp=3D2;else if(G&&this.c.pru)this.c.tp=3D3;else =
if(G)this.c.tp=3D6;else =
if(this.c.lpu&&this.c.ppu)this.c.tp=3D4;switch(this.c.tp){case =
1:this.d=3Dnew Y(this);break;case 6:this.d=3Dnew Z(this);break;case =
2:this.d=3Dnew R(this);break;case 3:this.d=3Dnew X(this);break;case =
4:this.d=3Dnew S(this);break}if(this.d)P.info("Transport created: =
"+this.d.V());else throw Error("CrossPageChannel: No suitable transport =
found!");=0A=
};$.prototype.db=3Dm;$.prototype.Ya=3Dm;$.prototype.connect=3Dfunction(a)=
{this.dc=3Da;if(this.db){this.Ya=3Dj;return}if(this.c.ifrid)this.w=3Dna(t=
his.c.ifrid);if(this.w){var =
b=3Dthis.w.contentWindow;b||(b=3Dwindow.frames[this.c.ifrid]);this.La(b)}=
if(!this.f)if(window=3D=3Dtop)throw Error("CrossPageChannel: Can't =
connect, peer window-object not set.");else =
this.La(window.parent);this.bb();this.d.connect()};=0A=
$.prototype.close=3Dfunction(){if(!this.k())return;this.ea=3D3;this.d.dis=
pose();this.d=3Dt;P.info('Channel "'+this.name+'" =
closed')};$.prototype.m=3Dfunction(){if(this.k())return;this.ea=3D2;P.inf=
o('Channel "'+this.name+'" =
connected');this.dc()};$.prototype.Eb=3Dfunction(){P.info("Transport =
Error");this.close()};$.prototype.Lb=3Dfunction(a,b,c){this.Ja[a]=3D{name=
:a,callback:b,jsonEncoded:!!c}};=0A=
$.prototype.send=3Dfunction(a,b){if(!this.k()){P.severe("Can't send. =
Channel not connected.");return}if(this.f.closed){P.severe("Peer has =
disappeared.");this.close();return}if(qb(b))b=3Dxc(b);this.d.send(a,b)};$=
.prototype.o=3Dfunction(a,b){if(!a||a=3D=3D"tp")this.d.H(b);else =
if(this.k()){var =
c=3Dthis.Ja[a];if(c){if(c.jsonEncoded)try{b=3Duc(b)}catch(d){P.info("Erro=
r parsing JSON-encoded payload.");return}c.callback(b)}else =
P.info('CrossPageChannel::deliver_(): No such service: "'+a+'" (payload: =
'+b+")")}else P.info("CrossPageChannel::deliver_(): Not connected.")};=0A=
$.prototype.b=3Dfunction(){$.q.b.call(this);this.close();this.f=3Dt;this.=
w=3Dt;delete this.Ja;Tc[this.name]=3Dt};var Rd=3Dfunction(){for(var a in =
Tc){var b=3DTc[a];b&&b.dispose()}};var =
Sd=3DRc("ExpansionUtil");Sd.ga(function(a){ma("API: =
"+a.xa(),"console")});var =
Td=3DRc("goog.net.xpc");Td.ga(function(a){ma("XPC: =
"+a.xa(),"console")});var Ud=3Dfunction(a){var =
b=3Da||document.location.protocol+"//"+document.location.host;return =
b+"/favicon.ico"};var =
z=3Dfunction(a,b){this.s=3Db.width;this.r=3Db.height;this.Ta=3DVc(10);thi=
s.hc=3Dthis.qb(a,document);this.e=3Db;this.e.src=3Dthis.yb(document,a);th=
is.vb(this.sb(document))};z.prototype.yb=3Dfunction(a,b){return =
b+(b.indexOf("?")=3D=3D-1?"?":"&")+"w=3D"+this.s+"&h=3D"+this.r+"&xpc=3D"=
+this.Ta+"&p=3D"+escape(a.location.protocol+"//"+a.location.host)};z.prot=
otype.sb=3Dfunction(){var =
a=3D{};a.ifrid=3Dthis.e.id;a.pu=3Dthis.e.src;a.cn=3Dthis.Ta;a.ppu=3DUd(th=
is.hc);a.lpu=3DUd();return a};=0A=
z.prototype.vb=3Dfunction(a){this.a=3Dnew =
$(a);this.a.Lb("expandable_ad",D(this.L,this));this.a.connect(function(){=
})};z.prototype.qb=3Dfunction(a,b){var =
c=3Da.indexOf("//"),d=3Dc>0,e=3Dd?a.substring(0,c):b.location.protocol,f=3D=
d?a.substring(c+2):b.location.host,g=3Df.indexOf("/");if(d&&g>0)f=3Df.sub=
string(0,g);return =
e+"//"+f};z.prototype.L=3Dfunction(a){Sd.info("handleMessage("+a+")");var=
 b=3Da.split("_"),c=3Db[0];if(c=3D=3D"expand")this.ub(b);else =
c=3D=3D"collapse"?this.tb():Sd.info("ExpandableAdSlot.callback(): =
unknown message received")};=0A=
z.prototype.Fa=3Dfunction(a){this.a.send("expandable_ad",a)};z.prototype.=
ub=3Dfunction(a){var b,c;for(var d in a){var =
e=3Da[d].charAt(0);if(e=3D=3D"w")b=3DparseInt(a[d].substring(1),10);else =
if(e=3D=3D"h")c=3DparseInt(a[d].substring(1),10)}var =
f=3Dthis.fb(b,c);this.jb(b,c,f);this.Fa("ok_expand_w"+b+"_h"+c+"_d"+f)};z=
.prototype.tb=3Dfunction(){this.Xa();this.Fa("ok_collapse_w"+this.s+"_h"+=
this.r)};=0A=
z.prototype.Xa=3Dfunction(){this.e.style.width=3Dthis.s+"px";this.e.style=
.height=3Dthis.r+"px";this.e.style.left=3D"0";this.e.style.top=3D"0";this=
.e.style.zIndex=3D999};z.prototype.jb=3Dfunction(a,b,c){this.e.style.posi=
tion=3D"absolute";this.e.style.width=3Da+"px";this.e.style.height=3Db+"px=
";this.e.style.zIndex=3D9999;if(a>this.s&&(c=3D=3D0||c=3D=3D3))this.e.sty=
le.left=3D"-"+(a-this.s)+"px";if(b>this.r&&(c=3D=3D1||c=3D=3D0))this.e.st=
yle.top=3D"-"+(b-this.r)+"px"};=0A=
z.prototype.fb=3Dfunction(a,b){var =
c=3Dsc(this.e),d=3Djc(window),e=3Da-this.s,f=3Db-this.r,g=3Dc.y,i=3Df>g,k=
=3Dd.height-(c.y+this.r),l=3Di||k>=3Dg,o=3Dc.x,q=3De>o,r=3Dd.width-(c.x+t=
his.s),y=3Dq||r>=3Do,M=3D0;if(l&&y)M=3D2;else if(l&&!y)M=3D3;else =
if(!l&&y)M=3D1;else if(!l&&!y)M=3D0;return =
M};xb("ExpandableAdSlot",z);var Ca=3D0;var Xa=3D{};var =
gb=3D{};gb["ad.yieldmanager.com"]=3Dj;window.google_render_ad=3DPa;var =
ib=3D{google:1,googlegroups:1,gmail:1,googlemail:1,orkut:1,googleimages:1=
,googleprint:1};Za();Va(Ta);jb(window,document,0.0010);var =
Vd=3D"script";document.write("<"+Vd+"> window.google_render_ad(); =
</"+Vd+">");=0A=
})()=0A=

------=_NextPart_000_0153_01C9281B.1E2D67D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.google-analytics.com/urchin.js

//-- Google Analytics Urchin Module=0A=
//-- Copyright 2007 Google, All Rights Reserved.=0A=
=0A=
//-- Urchin On Demand Settings ONLY=0A=
var _uacct=3D"";			// set up the Urchin Account=0A=
var _userv=3D1;			// service mode (0=3Dlocal,1=3Dremote,2=3Dboth)=0A=
=0A=
//-- UTM User Settings=0A=
var _ufsc=3D1;			// set client info flag (1=3Don|0=3Doff)=0A=
var _udn=3D"auto";		// (auto|none|domain) set the domain name for cookies=0A=
var _uhash=3D"on";		// (on|off) unique domain hash for cookies=0A=
var _utimeout=3D"1800";   	// set the inactive session timeout in seconds=0A=
var _ugifpath=3D"/__utm.gif";	// set the web path to the __utm.gif file=0A=
var _utsp=3D"|";			// transaction field separator=0A=
var _uflash=3D1;			// set flash version detect option (1=3Don|0=3Doff)=0A=
var _utitle=3D1;			// set the document title detect option =
(1=3Don|0=3Doff)=0A=
var _ulink=3D0;			// enable linker functionality (1=3Don|0=3Doff)=0A=
var _uanchor=3D0;			// enable use of anchors for campaign =
(1=3Don|0=3Doff)=0A=
var _utcp=3D"/";			// the cookie path for tracking=0A=
var _usample=3D100;		// The sampling % of visitors to track (1-100).=0A=
=0A=
//-- UTM Campaign Tracking Settings=0A=
var _uctm=3D1;			// set campaign tracking module (1=3Don|0=3Doff)=0A=
var _ucto=3D"15768000";		// set timeout in seconds (6 month default)=0A=
var _uccn=3D"utm_campaign";	// name=0A=
var _ucmd=3D"utm_medium";		// medium (cpc|cpm|link|email|organic)=0A=
var _ucsr=3D"utm_source";		// source=0A=
var _uctr=3D"utm_term";		// term/keyword=0A=
var _ucct=3D"utm_content";	// content=0A=
var _ucid=3D"utm_id";		// id number=0A=
var _ucno=3D"utm_nooverride";	// don't override=0A=
=0A=
//-- Auto/Organic Sources and Keywords=0A=
var _uOsr=3Dnew Array();=0A=
var _uOkw=3Dnew Array();=0A=
_uOsr[0]=3D"google";	_uOkw[0]=3D"q";=0A=
_uOsr[1]=3D"yahoo";	_uOkw[1]=3D"p";=0A=
_uOsr[2]=3D"msn";		_uOkw[2]=3D"q";=0A=
_uOsr[3]=3D"aol";		_uOkw[3]=3D"query";=0A=
_uOsr[4]=3D"aol";		_uOkw[4]=3D"encquery";=0A=
_uOsr[5]=3D"lycos";	_uOkw[5]=3D"query";=0A=
_uOsr[6]=3D"ask";		_uOkw[6]=3D"q";=0A=
_uOsr[7]=3D"altavista";	_uOkw[7]=3D"q";=0A=
_uOsr[8]=3D"netscape";	_uOkw[8]=3D"query";=0A=
_uOsr[9]=3D"cnn";	_uOkw[9]=3D"query";=0A=
_uOsr[10]=3D"looksmart";	_uOkw[10]=3D"qt";=0A=
_uOsr[11]=3D"about";	_uOkw[11]=3D"terms";=0A=
_uOsr[12]=3D"mamma";	_uOkw[12]=3D"query";=0A=
_uOsr[13]=3D"alltheweb";	_uOkw[13]=3D"q";=0A=
_uOsr[14]=3D"gigablast";	_uOkw[14]=3D"q";=0A=
_uOsr[15]=3D"voila";	_uOkw[15]=3D"rdata";=0A=
_uOsr[16]=3D"virgilio";	_uOkw[16]=3D"qs";=0A=
_uOsr[17]=3D"live";	_uOkw[17]=3D"q";=0A=
_uOsr[18]=3D"baidu";	_uOkw[18]=3D"wd";=0A=
_uOsr[19]=3D"alice";	_uOkw[19]=3D"qs";=0A=
_uOsr[20]=3D"yandex";	_uOkw[20]=3D"text";=0A=
_uOsr[21]=3D"najdi";	_uOkw[21]=3D"q";=0A=
_uOsr[22]=3D"aol";	_uOkw[22]=3D"q";=0A=
_uOsr[23]=3D"club-internet"; _uOkw[23]=3D"query";=0A=
_uOsr[24]=3D"mama";	_uOkw[24]=3D"query";=0A=
_uOsr[25]=3D"seznam";	_uOkw[25]=3D"q";=0A=
_uOsr[26]=3D"search";	_uOkw[26]=3D"q";=0A=
_uOsr[27]=3D"wp";	_uOkw[27]=3D"szukaj";=0A=
_uOsr[28]=3D"onet";	_uOkw[28]=3D"qt";=0A=
_uOsr[29]=3D"netsprint";	_uOkw[29]=3D"q";=0A=
_uOsr[30]=3D"google.interia";	_uOkw[30]=3D"q";=0A=
_uOsr[31]=3D"szukacz";	_uOkw[31]=3D"q";=0A=
_uOsr[32]=3D"yam";	_uOkw[32]=3D"k";=0A=
_uOsr[33]=3D"pchome";	_uOkw[33]=3D"q";=0A=
_uOsr[34]=3D"kvasir";	_uOkw[34]=3D"searchExpr";=0A=
_uOsr[35]=3D"sesam";	_uOkw[35]=3D"q";=0A=
_uOsr[36]=3D"ozu"; _uOkw[36]=3D"q";=0A=
_uOsr[37]=3D"terra"; _uOkw[37]=3D"query";=0A=
_uOsr[38]=3D"nostrum"; _uOkw[38]=3D"query";=0A=
_uOsr[39]=3D"mynet"; _uOkw[39]=3D"q";=0A=
_uOsr[40]=3D"ekolay"; _uOkw[40]=3D"q";=0A=
_uOsr[41]=3D"search.ilse"; _uOkw[41]=3D"search_for";=0A=
=0A=
//-- Auto/Organic Keywords to Ignore=0A=
var _uOno=3Dnew Array();=0A=
//_uOno[0]=3D"urchin";=0A=
//_uOno[1]=3D"urchin.com";=0A=
//_uOno[2]=3D"www.urchin.com";=0A=
=0A=
//-- Referral domains to Ignore=0A=
var _uRno=3Dnew Array();=0A=
//_uRno[0]=3D".urchin.com";=0A=
=0A=
//-- **** Don't modify below this point ***=0A=
var =
_uff,_udh,_udt,_ubl=3D0,_udo=3D"",_uu,_ufns=3D0,_uns=3D0,_ur=3D"-",_ufno=3D=
0,_ust=3D0,_ubd=3Ddocument,_udl=3D_ubd.location,_udlh=3D"",_uwv=3D"1.3";=0A=
var _ugifpath2=3D"http://www.google-analytics.com/__utm.gif";=0A=
if (_udl.hash) _udlh=3D_udl.href.substring(_udl.href.indexOf('#'));=0A=
if (_udl.protocol=3D=3D"https:") =
_ugifpath2=3D"https://ssl.google-analytics.com/__utm.gif";=0A=
if (!_utcp || _utcp=3D=3D"") _utcp=3D"/";=0A=
function urchinTracker(page) {=0A=
 if (_udl.protocol=3D=3D"file:") return;=0A=
 if (_uff && (!page || page=3D=3D"")) return;=0A=
 var a,b,c,xx,v,z,k,x=3D"",s=3D"",f=3D0,nv=3D0;=0A=
 var nx=3D" expires=3D"+_uNx()+";";=0A=
 var dc=3D_ubd.cookie;=0A=
 _udh=3D_uDomain();=0A=
 if (!_uVG()) return;=0A=
 _uu=3DMath.round(Math.random()*2147483647);=0A=
 _udt=3Dnew Date();=0A=
 _ust=3DMath.round(_udt.getTime()/1000);=0A=
 a=3Ddc.indexOf("__utma=3D"+_udh+".");=0A=
 b=3Ddc.indexOf("__utmb=3D"+_udh);=0A=
 c=3Ddc.indexOf("__utmc=3D"+_udh);=0A=
 if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
 if (_utimeout && _utimeout!=3D"") {=0A=
  x=3Dnew Date(_udt.getTime()+(_utimeout*1000));=0A=
  x=3D" expires=3D"+x.toGMTString()+";";=0A=
 }=0A=
 if (_ulink) {=0A=
  if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
  s+=3D_udl.search;=0A=
  if(s && s!=3D"" && s.indexOf("__utma=3D")>=3D0) {=0A=
   if (!(_uIN(a=3D_uGC(s,"__utma=3D","&")))) a=3D"-";=0A=
   if (!(_uIN(b=3D_uGC(s,"__utmb=3D","&")))) b=3D"-";=0A=
   if (!(_uIN(c=3D_uGC(s,"__utmc=3D","&")))) c=3D"-";=0A=
   v=3D_uGC(s,"__utmv=3D","&");=0A=
   z=3D_uGC(s,"__utmz=3D","&");=0A=
   k=3D_uGC(s,"__utmk=3D","&");=0A=
   xx=3D_uGC(s,"__utmx=3D","&");=0A=
   if ((k*1) !=3D ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) =
{_ubl=3D1;a=3D"-";b=3D"-";c=3D"-";xx=3D"-";z=3D"-";v=3D"-";}=0A=
   if (a!=3D"-" && b!=3D"-" && c!=3D"-") f=3D1;=0A=
   else if(a!=3D"-") f=3D2;=0A=
  }=0A=
 }=0A=
 if(f=3D=3D1) {=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+c+"; path=3D"+_utcp+";"+_udo;=0A=
 } else if (f=3D=3D2) {=0A=
  a=3D_uFixA(s,"&",_ust);=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
  _ufns=3D1;=0A=
 } else if (a>=3D0 && b>=3D0 && c>=3D0) {=0A=
   b =3D _uGC(dc,"__utmb=3D"+_udh,";");=0A=
   b =3D ("-" =3D=3D b) ? _udh : b;  =0A=
  _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A=
 } else {=0A=
  if (a>=3D0) a=3D_uFixA(_ubd.cookie,";",_ust);=0A=
  else {=0A=
   a=3D_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";=0A=
   nv=3D1;=0A=
  }=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
  _ufns=3D1;=0A=
 }=0A=
 if (_ulink && xx && xx!=3D"" && xx!=3D"-") {=0A=
   xx=3D_uUES(xx);=0A=
   if (xx.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmx=3D"+xx+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 if (_ulink && v && v!=3D"" && v!=3D"-") {=0A=
  v=3D_uUES(v);=0A=
  if (v.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmv=3D"+v+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 var wc=3Dwindow;=0A=
 var c=3D_ubd.cookie;=0A=
 if(wc && wc.gaGlobal && wc.gaGlobal.dh=3D=3D_udh){=0A=
  var g=3Dwc.gaGlobal;=0A=
  var ua=3Dc.split("__utma=3D"+_udh+".")[1].split(";")[0].split(".");=0A=
  if(g.sid)ua[3]=3Dg.sid;=0A=
  if(nv>0){=0A=
   ua[2]=3Dua[3];=0A=
   if(g.vid){=0A=
    var v=3Dg.vid.split(".");=0A=
    ua[0]=3Dv[0];=0A=
    ua[1]=3Dv[1];=0A=
   }=0A=
  }=0A=
  _ubd.cookie=3D"__utma=3D"+_udh+"."+ua.join(".")+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 _uInfo(page);=0A=
 _ufns=3D0;=0A=
 _ufno=3D0;=0A=
 if (!page || page=3D=3D"") _uff=3D1;=0A=
}=0A=
function _uGH() {=0A=
 var hid;=0A=
 var wc=3Dwindow;=0A=
 if (wc && wc.gaGlobal && wc.gaGlobal.hid) {=0A=
  hid=3Dwc.gaGlobal.hid;=0A=
 } else {=0A=
  hid=3DMath.round(Math.random()*0x7fffffff);=0A=
  if (!wc.gaGlobal) wc.gaGlobal=3D{};=0A=
  wc.gaGlobal.hid=3Dhid;=0A=
 }=0A=
 return hid;=0A=
}=0A=
function _uInfo(page) {=0A=
 var p,s=3D"",dm=3D"",pg=3D_udl.pathname+_udl.search;=0A=
 if (page && page!=3D"") pg=3D_uES(page,1);=0A=
 _ur=3D_ubd.referrer;=0A=
 if (!_ur || _ur=3D=3D"") { _ur=3D"-"; }=0A=
 else {=0A=
  dm=3D_ubd.domain;=0A=
  if(_utcp && _utcp!=3D"/") dm+=3D_utcp;=0A=
  p=3D_ur.indexOf(dm);=0A=
  if ((p>=3D0) && (p<=3D8)) { _ur=3D"0"; }=0A=
  if (_ur.indexOf("[")=3D=3D0 && =
_ur.lastIndexOf("]")=3D=3D(_ur.length-1)) { _ur=3D"-"; }=0A=
 }=0A=
 s+=3D"&utmn=3D"+_uu;=0A=
 if (_ufsc) s+=3D_uBInfo();=0A=
 if (_uctm) s+=3D_uCInfo();=0A=
 if (_utitle && _ubd.title && _ubd.title!=3D"") =
s+=3D"&utmdt=3D"+_uES(_ubd.title);=0A=
 if (_udl.hostname && _udl.hostname!=3D"") =
s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A=
 if (_usample && _usample !=3D 100) s+=3D"&utmsp=3D"+_uES(_usample);=0A=
 s+=3D"&utmhid=3D"+_uGH();=0A=
 s+=3D"&utmr=3D"+_ur;=0A=
 s+=3D"&utmp=3D"+pg;=0A=
 if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
  var i=3Dnew Image(1,1);=0A=
  i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
  i.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
  var i2=3Dnew Image(1,1);=0A=
  =
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
  i2.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 return;=0A=
}=0A=
function _uVoid() { return; }=0A=
function _uCInfo() {=0A=
 if (!_ucto || _ucto=3D=3D"") { _ucto=3D"15768000"; }=0A=
 if (!_uVG()) return;=0A=
 var =
c=3D"",t=3D"-",t2=3D"-",t3=3D"-",o=3D0,cs=3D0,cn=3D0,i=3D0,z=3D"-",s=3D""=
;=0A=
 if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
 s+=3D_udl.search;=0A=
 var x=3Dnew Date(_udt.getTime()+(_ucto*1000));=0A=
 var dc=3D_ubd.cookie;=0A=
 x=3D" expires=3D"+x.toGMTString()+";";=0A=
 if (_ulink && !_ubl) {=0A=
  z=3D_uUES(_uGC(s,"__utmz=3D","&"));=0A=
  if (z!=3D"-" && z.indexOf(";")=3D=3D-1) { =
_ubd.cookie=3D"__utmz=3D"+z+"; path=3D"+_utcp+";"+x+_udo; return ""; }=0A=
 }=0A=
 z=3Ddc.indexOf("__utmz=3D"+_udh+".");=0A=
 if (z>-1) { z=3D_uGC(dc,"__utmz=3D"+_udh+".",";"); }=0A=
 else { z=3D"-"; }=0A=
 t=3D_uGC(s,_ucid+"=3D","&");=0A=
 t2=3D_uGC(s,_ucsr+"=3D","&");=0A=
 t3=3D_uGC(s,"gclid=3D","&");=0A=
 if ((t!=3D"-" && t!=3D"") || (t2!=3D"-" && t2!=3D"") || (t3!=3D"-" && =
t3!=3D"")) {=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"utmcid=3D"+_uEC(t);=0A=
  if (t2!=3D"-" && t2!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmcsr=3D"+_uEC(t2); }=0A=
  if (t3!=3D"-" && t3!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmgclid=3D"+_uEC(t3); }=0A=
  t=3D_uGC(s,_uccn+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmccn=3D"+_uEC(t);=0A=
  else c+=3D"|utmccn=3D(not+set)";=0A=
  t=3D_uGC(s,_ucmd+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmcmd=3D"+_uEC(t);=0A=
  else  c+=3D"|utmcmd=3D(not+set)";=0A=
  t=3D_uGC(s,_uctr+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmctr=3D"+_uEC(t);=0A=
  else { t=3D_uOrg(1); if (t!=3D"-" && t!=3D"") =
c+=3D"|utmctr=3D"+_uEC(t); }=0A=
  t=3D_uGC(s,_ucct+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmcct=3D"+_uEC(t);=0A=
  t=3D_uGC(s,_ucno+"=3D","&");=0A=
  if (t=3D=3D"1") o=3D1;=0A=
  if (z!=3D"-" && o=3D=3D1) return "";=0A=
 }=0A=
 if (c=3D=3D"-" || c=3D=3D"") { c=3D_uOrg(); if (z!=3D"-" && =
_ufno=3D=3D1)  return ""; }=0A=
 if (c=3D=3D"-" || c=3D=3D"") { if (_ufns=3D=3D1)  c=3D_uRef(); if =
(z!=3D"-" && _ufno=3D=3D1)  return ""; }=0A=
 if (c=3D=3D"-" || c=3D=3D"") {=0A=
  if (z=3D=3D"-" && _ufns=3D=3D1) { =
c=3D"utmccn=3D(direct)|utmcsr=3D(direct)|utmcmd=3D(none)"; }=0A=
  if (c=3D=3D"-" || c=3D=3D"") return "";=0A=
 }=0A=
 if (z!=3D"-") {=0A=
  i=3Dz.indexOf(".");=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  t=3Dz.substring(i+1,z.length);=0A=
  if (t.toLowerCase()=3D=3Dc.toLowerCase()) cs=3D1;=0A=
  t=3Dz.substring(0,i);=0A=
  if ((i=3Dt.lastIndexOf(".")) > -1) {=0A=
   t=3Dt.substring(i+1,t.length);=0A=
   cn=3D(t*1);=0A=
  }=0A=
 }=0A=
 if (cs=3D=3D0 || _ufns=3D=3D1) {=0A=
  t=3D_uGC(dc,"__utma=3D"+_udh+".",";");=0A=
  if ((i=3Dt.lastIndexOf(".")) > 9) {=0A=
   _uns=3Dt.substring(i+1,t.length);=0A=
   _uns=3D(_uns*1);=0A=
  }=0A=
  cn++;=0A=
  if (_uns=3D=3D0) _uns=3D1;=0A=
  _ubd.cookie=3D"__utmz=3D"+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; =
path=3D"+_utcp+"; "+x+_udo;=0A=
 }=0A=
 if (cs=3D=3D0 || _ufns=3D=3D1) return "&utmcn=3D1";=0A=
 else return "&utmcr=3D1";=0A=
}=0A=
function _uRef() {=0A=
 if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
 var i=3D0,h,k,n;=0A=
 if ((i=3D_ur.indexOf("://"))<0 || _uGCse()) return "";=0A=
 h=3D_ur.substring(i+3,_ur.length);=0A=
 if (h.indexOf("/") > -1) {=0A=
  k=3Dh.substring(h.indexOf("/"),h.length);=0A=
  if (k.indexOf("?") > -1) k=3Dk.substring(0,k.indexOf("?"));=0A=
  h=3Dh.substring(0,h.indexOf("/"));=0A=
 }=0A=
 h=3Dh.toLowerCase();=0A=
 n=3Dh;=0A=
 if ((i=3Dn.indexOf(":")) > -1) n=3Dn.substring(0,i);=0A=
 for (var ii=3D0;ii<_uRno.length;ii++) {=0A=
  if ((i=3Dn.indexOf(_uRno[ii].toLowerCase())) > -1 && =
n.length=3D=3D(i+_uRno[ii].length)) { _ufno=3D1; break; }=0A=
 }=0A=
 if (h.indexOf("www.")=3D=3D0) h=3Dh.substring(4,h.length);=0A=
 return =
"utmccn=3D(referral)|utmcsr=3D"+_uEC(h)+"|"+"utmcct=3D"+_uEC(k)+"|utmcmd=3D=
referral";=0A=
}=0A=
function _uOrg(t) {=0A=
 if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
 var i=3D0,h,k;=0A=
 if ((i=3D_ur.indexOf("://"))<0 || _uGCse()) return "";=0A=
 h=3D_ur.substring(i+3,_ur.length);=0A=
 if (h.indexOf("/") > -1) {=0A=
  h=3Dh.substring(0,h.indexOf("/"));=0A=
 }=0A=
 for (var ii=3D0;ii<_uOsr.length;ii++) {=0A=
  if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {=0A=
   if ((i=3D_ur.indexOf("?"+_uOkw[ii]+"=3D")) > -1 || =
(i=3D_ur.indexOf("&"+_uOkw[ii]+"=3D")) > -1) {=0A=
    k=3D_ur.substring(i+_uOkw[ii].length+2,_ur.length);=0A=
    if ((i=3Dk.indexOf("&")) > -1) k=3Dk.substring(0,i);=0A=
    for (var yy=3D0;yy<_uOno.length;yy++) {=0A=
     if (_uOno[yy].toLowerCase()=3D=3Dk.toLowerCase()) { _ufno=3D1; =
break; }=0A=
    }=0A=
    if (t) return _uEC(k);=0A=
    else return =
"utmccn=3D(organic)|utmcsr=3D"+_uEC(_uOsr[ii])+"|"+"utmctr=3D"+_uEC(k)+"|=
utmcmd=3Dorganic";=0A=
   }=0A=
  }=0A=
 }=0A=
 return "";=0A=
}=0A=
function _uGCse() {=0A=
 var h,p;=0A=
 h=3Dp=3D_ur.split("://")[1];=0A=
 if(h.indexOf("/")>-1) {=0A=
  h=3Dh.split("/")[0];=0A=
  p=3Dp.substring(p.indexOf("/")+1,p.length);=0A=
 }=0A=
 if(p.indexOf("?")>-1) {=0A=
  p=3Dp.split("?")[0];=0A=
 }=0A=
 if(h.toLowerCase().indexOf("google")>-1) {=0A=
  if(_ur.indexOf("?q=3D")>-1 || _ur.indexOf("&q=3D")>-1) {=0A=
   if (p.toLowerCase().indexOf("cse")>-1) {=0A=
    return true;=0A=
   }=0A=
  }=0A=
 }=0A=
}=0A=
function _uBInfo() {=0A=
 var sr=3D"-",sc=3D"-",ul=3D"-",fl=3D"-",cs=3D"-",je=3D1;=0A=
 var n=3Dnavigator;=0A=
 if (self.screen) {=0A=
  sr=3Dscreen.width+"x"+screen.height;=0A=
  sc=3Dscreen.colorDepth+"-bit";=0A=
 } else if (self.java) {=0A=
  var j=3Djava.awt.Toolkit.getDefaultToolkit();=0A=
  var s=3Dj.getScreenSize();=0A=
  sr=3Ds.width+"x"+s.height;=0A=
 }=0A=
 if (n.language) { ul=3Dn.language.toLowerCase(); }=0A=
 else if (n.browserLanguage) { ul=3Dn.browserLanguage.toLowerCase(); }=0A=
 je=3Dn.javaEnabled()?1:0;=0A=
 if (_uflash) fl=3D_uFlash();=0A=
 if (_ubd.characterSet) cs=3D_uES(_ubd.characterSet);=0A=
 else if (_ubd.charset) cs=3D_uES(_ubd.charset);=0A=
 return =
"&utmcs=3D"+cs+"&utmsr=3D"+sr+"&utmsc=3D"+sc+"&utmul=3D"+ul+"&utmje=3D"+j=
e+"&utmfl=3D"+fl;=0A=
}=0A=
function __utmSetTrans() {=0A=
 var e;=0A=
 if (_ubd.getElementById) e=3D_ubd.getElementById("utmtrans");=0A=
 else if (_ubd.utmform && _ubd.utmform.utmtrans) =
e=3D_ubd.utmform.utmtrans;=0A=
 if (!e) return;=0A=
 var l=3De.value.split("UTM:");=0A=
 var i,i2,c;=0A=
 if (_userv=3D=3D0 || _userv=3D=3D2) i=3Dnew Array();=0A=
 if (_userv=3D=3D1 || _userv=3D=3D2) { i2=3Dnew Array(); c=3D_uGCS(); }=0A=
=0A=
 for (var ii=3D0;ii<l.length;ii++) {=0A=
  l[ii]=3D_uTrim(l[ii]);=0A=
  if (l[ii].charAt(0)!=3D'T' && l[ii].charAt(0)!=3D'I') continue;=0A=
  var r=3DMath.round(Math.random()*2147483647);=0A=
  if (!_utsp || _utsp=3D=3D"") _utsp=3D"|";=0A=
  var f=3Dl[ii].split(_utsp),s=3D"";=0A=
  if (f[0].charAt(0)=3D=3D'T') {=0A=
   s=3D"&utmt=3Dtran"+"&utmn=3D"+r;=0A=
   f[1]=3D_uTrim(f[1]); if(f[1]&&f[1]!=3D"") =
s+=3D"&utmtid=3D"+_uES(f[1]);=0A=
   f[2]=3D_uTrim(f[2]); if(f[2]&&f[2]!=3D"") =
s+=3D"&utmtst=3D"+_uES(f[2]);=0A=
   f[3]=3D_uTrim(f[3]); if(f[3]&&f[3]!=3D"") =
s+=3D"&utmtto=3D"+_uES(f[3]);=0A=
   f[4]=3D_uTrim(f[4]); if(f[4]&&f[4]!=3D"") =
s+=3D"&utmttx=3D"+_uES(f[4]);=0A=
   f[5]=3D_uTrim(f[5]); if(f[5]&&f[5]!=3D"") =
s+=3D"&utmtsp=3D"+_uES(f[5]);=0A=
   f[6]=3D_uTrim(f[6]); if(f[6]&&f[6]!=3D"") =
s+=3D"&utmtci=3D"+_uES(f[6]);=0A=
   f[7]=3D_uTrim(f[7]); if(f[7]&&f[7]!=3D"") =
s+=3D"&utmtrg=3D"+_uES(f[7]);=0A=
   f[8]=3D_uTrim(f[8]); if(f[8]&&f[8]!=3D"") =
s+=3D"&utmtco=3D"+_uES(f[8]);=0A=
  } else {=0A=
   s=3D"&utmt=3Ditem"+"&utmn=3D"+r;=0A=
   f[1]=3D_uTrim(f[1]); if(f[1]&&f[1]!=3D"") =
s+=3D"&utmtid=3D"+_uES(f[1]);=0A=
   f[2]=3D_uTrim(f[2]); if(f[2]&&f[2]!=3D"") =
s+=3D"&utmipc=3D"+_uES(f[2]);=0A=
   f[3]=3D_uTrim(f[3]); if(f[3]&&f[3]!=3D"") =
s+=3D"&utmipn=3D"+_uES(f[3]);=0A=
   f[4]=3D_uTrim(f[4]); if(f[4]&&f[4]!=3D"") =
s+=3D"&utmiva=3D"+_uES(f[4]);=0A=
   f[5]=3D_uTrim(f[5]); if(f[5]&&f[5]!=3D"") =
s+=3D"&utmipr=3D"+_uES(f[5]);=0A=
   f[6]=3D_uTrim(f[6]); if(f[6]&&f[6]!=3D"") =
s+=3D"&utmiqt=3D"+_uES(f[6]);=0A=
  }=0A=
  if (_udl.hostname && _udl.hostname!=3D"") =
s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A=
  if (_usample && _usample !=3D 100) s+=3D"&utmsp=3D"+_uES(_usample);=0A=
=0A=
  if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
   i[ii]=3Dnew Image(1,1);=0A=
   i[ii].src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
   i[ii].onload=3Dfunction() { _uVoid(); }=0A=
  }=0A=
  if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
   i2[ii]=3Dnew Image(1,1);=0A=
   =
i2[ii].src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D=
"+c;=0A=
   i2[ii].onload=3Dfunction() { _uVoid(); }=0A=
  }=0A=
 }=0A=
 return;=0A=
}=0A=
function _uFlash() {=0A=
 var f=3D"-",n=3Dnavigator;=0A=
 if (n.plugins && n.plugins.length) {=0A=
  for (var ii=3D0;ii<n.plugins.length;ii++) {=0A=
   if (n.plugins[ii].name.indexOf('Shockwave Flash')!=3D-1) {=0A=
    f=3Dn.plugins[ii].description.split('Shockwave Flash ')[1];=0A=
    break;=0A=
   }=0A=
  }=0A=
 } else {=0A=
  var fl;=0A=
  try {=0A=
   fl =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");=0A=
   f =3D fl.GetVariable("$version");=0A=
  } catch(e) {}=0A=
  if (f =3D=3D "-") {=0A=
   try {=0A=
    fl =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");=0A=
    f =3D "WIN 6,0,21,0";=0A=
    fl.AllowScriptAccess =3D "always";=0A=
    f =3D fl.GetVariable("$version");=0A=
   } catch(e) {}=0A=
  }=0A=
  if (f =3D=3D "-") {=0A=
   try {=0A=
    fl =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash");=0A=
    f =3D fl.GetVariable("$version");=0A=
   } catch(e) {}=0A=
  }=0A=
  if (f !=3D "-") {=0A=
   f =3D f.split(" ")[1].split(",");=0A=
   f =3D f[0] + "." + f[1] + " r" + f[2];=0A=
  }=0A=
 }=0A=
 return f;=0A=
}=0A=
function __utmLinkerUrl(l,h) {=0A=
 var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
 var dc=3D_ubd.cookie;=0A=
 var iq =3D l.indexOf("?");=0A=
 var ih =3D l.indexOf("#");=0A=
 var url=3Dl;=0A=
 if (dc) {=0A=
  a=3D_uES(_uGC(dc,"__utma=3D"+_udh+".",";"));=0A=
  b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
  c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
  x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
  z=3D_uES(_uGC(dc,"__utmz=3D"+_udh+".",";"));=0A=
  v=3D_uES(_uGC(dc,"__utmv=3D"+_udh+".",";"));=0A=
  k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
  =
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
 }=0A=
 if (p) {=0A=
  if (h && ih>-1) return;=0A=
  if (h) { url=3Dl+"#"+p; }=0A=
  else {=0A=
   if (iq=3D=3D-1 && ih=3D=3D-1) url=3Dl+"?"+p;=0A=
   else if (ih=3D=3D-1) url=3Dl+"&"+p;=0A=
   else if (iq=3D=3D-1) url=3Dl.substring(0,ih-1)+"?"+p+l.substring(ih);=0A=
   else url=3Dl.substring(0,ih-1)+"&"+p+l.substring(ih);=0A=
  }=0A=
 }=0A=
 return url;=0A=
}=0A=
function __utmLinker(l,h) {=0A=
 if (!_ulink || !l || l=3D=3D"") return;=0A=
 _udl.href=3D__utmLinkerUrl(l,h);=0A=
}=0A=
function __utmLinkPost(f,h) {=0A=
 if (!_ulink || !f || !f.action) return;=0A=
 f.action=3D__utmLinkerUrl(f.action, h);=0A=
 return;=0A=
}=0A=
function __utmSetVar(v) {=0A=
 if (!v || v=3D=3D"") return;=0A=
 if (!_udo || _udo =3D=3D "") {=0A=
  _udh=3D_uDomain();=0A=
  if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
 }=0A=
 if (!_uVG()) return;=0A=
 var r=3DMath.round(Math.random() * 2147483647);=0A=
 _ubd.cookie=3D"__utmv=3D"+_udh+"."+_uES(v)+"; path=3D"+_utcp+"; =
expires=3D"+_uNx()+";"+_udo;=0A=
 var s=3D"&utmt=3Dvar&utmn=3D"+r;=0A=
 if (_usample && _usample !=3D 100) s+=3D"&utmsp=3D"+_uES(_usample);=0A=
 if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
  var i=3Dnew Image(1,1);=0A=
  i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
  i.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
  var i2=3Dnew Image(1,1);=0A=
  =
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
  i2.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
}=0A=
function _uGCS() {=0A=
 var t,c=3D"",dc=3D_ubd.cookie;=0A=
 if ((t=3D_uGC(dc,"__utma=3D"+_udh+".",";"))!=3D"-") =
c+=3D_uES("__utma=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmx=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmx=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmz=3D"+_udh+".",";"))!=3D"-") =
c+=3D_uES("__utmz=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmv=3D"+_udh+".",";"))!=3D"-") =
c+=3D_uES("__utmv=3D"+t+";");=0A=
 if (c.charAt(c.length-1)=3D=3D"+") c=3Dc.substring(0,c.length-1);=0A=
 return c;=0A=
}=0A=
function _uGC(l,n,s) {=0A=
 if (!l || l=3D=3D"" || !n || n=3D=3D"" || !s || s=3D=3D"") return "-";=0A=
 var i,i2,i3,c=3D"-";=0A=
 i=3Dl.indexOf(n);=0A=
 i3=3Dn.indexOf("=3D")+1;=0A=
 if (i > -1) {=0A=
  i2=3Dl.indexOf(s,i); if (i2 < 0) { i2=3Dl.length; }=0A=
  c=3Dl.substring((i+i3),i2);=0A=
 }=0A=
 return c;=0A=
}=0A=
function _uDomain() {=0A=
 if (!_udn || _udn=3D=3D"" || _udn=3D=3D"none") { _udn=3D""; return 1; }=0A=
 if (_udn=3D=3D"auto") {=0A=
  var d=3D_ubd.domain;=0A=
  if (d.substring(0,4)=3D=3D"www.") {=0A=
   d=3Dd.substring(4,d.length);=0A=
  }=0A=
  _udn=3Dd;=0A=
 }=0A=
 _udn =3D _udn.toLowerCase(); =0A=
 if (_uhash=3D=3D"off") return 1;=0A=
 return _uHash(_udn);=0A=
}=0A=
function _uHash(d) {=0A=
 if (!d || d=3D=3D"") return 1;=0A=
 var h=3D0,g=3D0;=0A=
 for (var i=3Dd.length-1;i>=3D0;i--) {=0A=
  var c=3DparseInt(d.charCodeAt(i));=0A=
  h=3D((h << 6) & 0xfffffff) + c + (c << 14);=0A=
  if ((g=3Dh & 0xfe00000)!=3D0) h=3D(h ^ (g >> 21));=0A=
 }=0A=
 return h;=0A=
}=0A=
function _uFixA(c,s,t) {=0A=
 if (!c || c=3D=3D"" || !s || s=3D=3D"" || !t || t=3D=3D"") return "-";=0A=
 var a=3D_uGC(c,"__utma=3D"+_udh+".",s);=0A=
 var lt=3D0,i=3D0;=0A=
 if ((i=3Da.lastIndexOf(".")) > 9) {=0A=
  _uns=3Da.substring(i+1,a.length);=0A=
  _uns=3D(_uns*1)+1;=0A=
  a=3Da.substring(0,i);=0A=
  if ((i=3Da.lastIndexOf(".")) > 7) {=0A=
   lt=3Da.substring(i+1,a.length);=0A=
   a=3Da.substring(0,i);=0A=
  }=0A=
  if ((i=3Da.lastIndexOf(".")) > 5) {=0A=
   a=3Da.substring(0,i);=0A=
  }=0A=
  a+=3D"."+lt+"."+t+"."+_uns;=0A=
 }=0A=
 return a;=0A=
}=0A=
function _uTrim(s) {=0A=
  if (!s || s=3D=3D"") return "";=0A=
  while ((s.charAt(0)=3D=3D' ') || (s.charAt(0)=3D=3D'\n') || =
(s.charAt(0,1)=3D=3D'\r')) s=3Ds.substring(1,s.length);=0A=
  while ((s.charAt(s.length-1)=3D=3D' ') || =
(s.charAt(s.length-1)=3D=3D'\n') || (s.charAt(s.length-1)=3D=3D'\r')) =
s=3Ds.substring(0,s.length-1);=0A=
  return s;=0A=
}=0A=
function _uEC(s) {=0A=
  var n=3D"";=0A=
  if (!s || s=3D=3D"") return "";=0A=
  for (var i=3D0;i<s.length;i++) {if (s.charAt(i)=3D=3D" ") n+=3D"+"; =
else n+=3Ds.charAt(i);}=0A=
  return n;=0A=
}=0A=
function __utmVisitorCode(f) {=0A=
 var r=3D0,t=3D0,i=3D0,i2=3D0,m=3D31;=0A=
 var a=3D_uGC(_ubd.cookie,"__utma=3D"+_udh+".",";");=0A=
 if ((i=3Da.indexOf(".",0))<0) return;=0A=
 if ((i2=3Da.indexOf(".",i+1))>0) r=3Da.substring(i+1,i2); else return =
"";  =0A=
 if ((i=3Da.indexOf(".",i2+1))>0) t=3Da.substring(i2+1,i); else return =
"";  =0A=
 if (f) {=0A=
  return r;=0A=
 } else {=0A=
  var c=3Dnew =
Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T'=
,'U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');=0A=
  return =
c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r=
&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5=
&m]+c[t&m];=0A=
 }=0A=
}=0A=
function _uIN(n) {=0A=
 if (!n) return false;=0A=
 for (var i=3D0;i<n.length;i++) {=0A=
  var c=3Dn.charAt(i);=0A=
  if ((c<"0" || c>"9") && (c!=3D".")) return false;=0A=
 }=0A=
 return true;=0A=
}=0A=
function _uES(s,u) {=0A=
 if (typeof(encodeURIComponent) =3D=3D 'function') {=0A=
  if (u) return encodeURI(s);=0A=
  else return encodeURIComponent(s);=0A=
 } else {=0A=
  return escape(s);=0A=
 }=0A=
}=0A=
function _uUES(s) {=0A=
 if (typeof(decodeURIComponent) =3D=3D 'function') {=0A=
  return decodeURIComponent(s);=0A=
 } else {=0A=
  return unescape(s);=0A=
 }=0A=
}=0A=
function _uVG() {=0A=
 if((_udn.indexOf("www.google.") =3D=3D 0 || _udn.indexOf(".google.") =
=3D=3D 0 || _udn.indexOf("google.") =3D=3D 0) && _utcp=3D=3D'/' && =
_udn.indexOf("google.org")=3D=3D-1) {=0A=
  return false;=0A=
 }=0A=
 return true;=0A=
}=0A=
function _uSP() {=0A=
 var s=3D100;=0A=
 if (_usample) s=3D_usample;=0A=
 if(s>=3D100 || s<=3D0) return true;=0A=
 return ((__utmVisitorCode(1)%10000)<(s*100));=0A=
}=0A=
function urchinPathCopy(p){=0A=
 var d=3Ddocument,nx,tx,sx,i,c,cs,t,h,o;=0A=
 cs=3Dnew Array("a","b","c","v","x","z");=0A=
 h=3D_uDomain(); if (_udn && _udn!=3D"") o=3D" domain=3D"+_udn+";";=0A=
 nx=3D_uNx()+";";=0A=
 tx=3Dnew Date(); tx.setTime(tx.getTime()+(_utimeout*1000));=0A=
 tx=3Dtx.toGMTString()+";";=0A=
 sx=3Dnew Date(); sx.setTime(sx.getTime()+(_ucto*1000));=0A=
 sx=3Dsx.toGMTString()+";";=0A=
 for (i=3D0;i<6;i++){=0A=
  t=3D" expires=3D";=0A=
  if (i=3D=3D1) t+=3Dtx; else if (i=3D=3D2) t=3D""; else if (i=3D=3D5) =
t+=3Dsx; else t+=3Dnx;=0A=
  c=3D_uGC(d.cookie,"__utm"+cs[i]+"=3D"+h,";");=0A=
  if (c!=3D"-") d.cookie=3D"__utm"+cs[i]+"=3D"+c+"; path=3D"+p+";"+t+o;=0A=
 }=0A=
}=0A=
function _uCO() {=0A=
 if (!_utk || _utk=3D=3D"" || _utk.length<10) return;=0A=
 var d=3D'www.google.com';=0A=
 if (_utk.charAt(0)=3D=3D'!') d=3D'analytics.corp.google.com';=0A=
 _ubd.cookie=3D"GASO=3D"+_utk+"; path=3D"+_utcp+";"+_udo;=0A=
 var sc=3Ddocument.createElement('script');=0A=
 sc.type=3D'text/javascript';=0A=
 sc.id=3D"_gasojs";=0A=
 =
sc.src=3D'https://'+d+'/analytics/reporting/overlay_js?gaso=3D'+_utk+'&'+=
Math.random();=0A=
 document.getElementsByTagName('head')[0].appendChild(sc);  =0A=
}=0A=
function _uGT() {=0A=
 var h=3Dlocation.hash, a;=0A=
 if (h && h!=3D"" && h.indexOf("#gaso=3D")=3D=3D0) {=0A=
  a=3D_uGC(h,"gaso=3D","&");=0A=
 } else {=0A=
  a=3D_uGC(_ubd.cookie,"GASO=3D",";");=0A=
 }=0A=
 return a;=0A=
}=0A=
var _utk=3D_uGT();=0A=
if (_utk && _utk!=3D"" && _utk.length>10 && _utk.indexOf("=3D")=3D=3D-1) =
{=0A=
 if (window.addEventListener) {=0A=
  window.addEventListener('load', _uCO, false); =0A=
 } else if (window.attachEvent) { =0A=
  window.attachEvent('onload', _uCO);=0A=
 }=0A=
}=0A=
=0A=
function _uNx() {=0A=
  return (new Date((new Date()).getTime()+63072000000)).toGMTString();=0A=
}=0A=

------=_NextPart_000_0153_01C9281B.1E2D67D0--

