From: Subject: =?Windows-1252?Q?El_blog_de_Jorge_Mestre_=BB_=93La_tierra_es_plana=94_e?= =?Windows-1252?Q?n_espa=F1ol?= Date: Tue, 24 Jan 2006 13:31:44 +0100 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_00C5_01C620EA.84C9EDA0" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 This is a multi-part message in MIME format. ------=_NextPart_000_00C5_01C620EA.84C9EDA0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.jorgemestre.com/?p=23 =EF=BB=BF El blog de Jorge Mestre =C2=BB = =E2=80=9CLa tierra es plana=E2=80=9D en espa=C3=B1ol

El=20 blog de Jorge Mestre

Todo lo que a mi me gusta, a un clic.

=E2=80=9CLa = tierra es plana=E2=80=9D en=20 espa=C3=B1ol

Jue 12 Ene = 2006
Categoria: Varios , Pol=C3=ADtica=20 internacional -  
Despu=C3=A9s de varios a=C3=B1os sin traducirse ninguna = obra al espa=C3=B1ol del=20 periodista Thomas L. Friedman, desde este mes de enero = ya est=C3=A1=20 a la venta su obra =E2=80=9CLa tierra es plana=E2=80=9D (The = world is flat) una=20 aut=C3=A9ntica delicia de libro que ofrece las claves de la = globalizaci=C3=B3n actual. Si=20 para comprar el =C3=BAltimo de Harry Potter se montaron colas y colas, = es una pena=20 que en este caso no lo conocieran ni en la librer=C3=ADa donde yo lo he = adquirido. No=20 dir=C3=A9 el nombre porque me temo que me habr=C3=ADa pasado = tambi=C3=A9n en cualquier otra.=20 Friedman suele escribir los mi=C3=A9rcoles en el NYT y ha hecho = de su libro=20 un aut=C3=A9ntico bestseller en EE UU.  =20

Deja tu comentario

Name (requerido)

Website

=20 =

Archived Entry

  • Post Date :=20
  • Jueves, Ene 12th, 2006 at 5:35 pm=20
  • Category :=20
  • Varios and Pol=C3=ADtica=20 internacional=20
  • Do More :=20
  • You can leave a=20 response, or trackback= from=20 your own site.

=C2=A9 Jorge = Mestre. Todos=20 los derechos reservados. | Dise=C3=B1o por Mauro=20 Sotelo.

------=_NextPart_000_00C5_01C620EA.84C9EDA0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.jorgemestre.com/wp-content/images/tierraplana.gif R0lGODlhYACTAOYAAFdJN5WHcE+YwQx2tqmqp3llR+Tl4Xd4dggJCxV7t+nq5bi4tYaHhIlzVcnV 2GdoZ5iZlyooJCeEuqelnunm3rXL1GdWPNvd2Yi1zGqlxkdISEM5KjOKvDYxKDY3N8HCvVZXV+Lj 4JK6zuHi3ajF0m1cQtna1bO0sOzt6NTb2qOTeNHSzcC4qHWryDEtJiQjH8nKxtTV0LykdKqTZ8au e/Lz7pSUkczNyebo46ONZ5qEXeLj3klAMuLi3N7g28TFwObk3YBrTP///7Sec/Hq36ibhIdxT7GZ boVvUY96V+Pk3/fs4Ih7Z+Pk4Pr79eDi3UWTwKKKYOXm4+Tj3ezn3ltTR0w/Lpu+z3RgQdfY08bH w8/Qy7OsnvT18L2+uXtxYX+Afr7Q1l5OOo6PjJ+gnSAfHB5/uUFCQs/Mwff48u/w6qDA0K6vrDyO vlyexE5PT15gXhUWGG9wbzIzM1FEMiAhIi8wMCssLX+wyuPj4QNytDw9PZeMej9AP+Dh3eDh3CH5 BAAAAAAALAAAAABgAJMAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWm pyM7OyOHqqyEqrGxI6k7f7Wyq3+5r4K4uoW1vaNKrMWgSgoKw4LJKL1KzZs4Cx4eYAqECtUeD1Ks OxcgHnvl5R4MB3N9NwTk5nvdUnDve2cgZDgGD/V9IBAGbKEgY+1AtkwKCCBA8AAFIRRyFsb5gOOP EhN1Fmpc+ADEQhgQNmrso8CDyIVg1PQ5iUDOMgVvFtaJYQChQoYOm5mwgyAOggMOe1wYA+ZAGQRz GIA54TEOyIVyyECAYIPNjj0I6jBg8OBomRUaEJQBw0BOxokoYJxFACHnJQVs/6C6TdjTpwcftv4o qBEjI4gaatTEdBoSAZmDUhT4wGpHSg0ncBayiRkhxOOIhtOMqYvgzTJMcDm6RRHZDmYCB/9IgXHU 8wiYPZ/GqXMnQh05DhnHCLHiTE8vlFeEiBETAQEUYc9EnljxLQGfDQUZWPECARwY0FOvzvgGx+vB N0LG8bkQTu6e1iL41CAlbJz0Pvfg+OBz6cIDakDfxC0IhQ3JQoRVxxY1qaZWZ8vgAF5hYHxwwgla 1LQSeT2BsAVyPUnUGQw1HNDTD2qYdFdelSTkkxxOoKBGDYM9AMZKCIyR03YIjoBDWGWEtxABQtQA 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 GAgAOw== ------=_NextPart_000_00C5_01C620EA.84C9EDA0 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_00C5_01C620EA.84C9EDA0 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 . 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_00C5_01C620EA.84C9EDA0 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 01; var thisyear =3D 2006; 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ércoles', 'Jueves', 'Viernes', 'Sá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 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_year1)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;i1){ 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_00C5_01C620EA.84C9EDA0 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 /()\n?/i;=0A= HTMLArea.RE_head =3D /((.|\n)*?)<\/head>/i;=0A= HTMLArea.RE_body =3D /]*>((.|\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 '' -- use any css measurement, eg width =3D = '75%'=0A= //=0A= // height =3D 'auto' -- the height of the original textarea=0A= // height =3D '' -- 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= // 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 ...)=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 (chr 20) except cr, lf and tab and above (~, = 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= "— font —": '',=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= "— size —" : "",=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= "— format —" : "",=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('', ''); }, // 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('', = '');=0A= * },=0A= * context : "p" // will be disabled if outside a =

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=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= * =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= * =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 "\n";=0A= html +=3D "\n";=0A= html +=3D "\n";=0A= if(typeof editor.config.baseHref !=3D 'undefined' && = editor.config.baseHref !=3D null)=0A= {=0A= html +=3D "\n";=0A= }=0A= html +=3D "\n";=0A= html +=3D "\n";=0A= =0A= if(editor.config.pageStyle)=0A= {=0A= html +=3D "";=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 "";=0A= //html +=3D "\n";=0A= }=0A= }=0A= html +=3D "\n";=0A= html +=3D "\n";=0A= html +=3D editor.inwardHtml(editor._textArea.value);=0A= html +=3D "\n";=0A= html +=3D "";=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 /((.|\n)*?)<\/html>/i;=0A= html =3D html.replace(html_re, "$1");=0A= this._doc.op