From: "Guardado por Microsoft Internet Explorer 7"
Subject: =?Windows-1252?Q?=ABAscender_solo_por_ser_mujer_es_lo_peor_que_nos_puede_?=
	=?Windows-1252?Q?ocurrir=BB?=
Date: Thu, 6 Dec 2007 21:09:25 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_014B_01C8384C.47BD2FF0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545

This is a multi-part message in MIME format.

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>=ABAscender solo por ser mujer es lo peor que nos =
puede ocurrir=BB</TITLE>
<META content=3D"=ABAscender solo por ser mujer es lo peor que nos puede =
ocurrir=BB"=20
name=3Dtitle>
<META content=3D" =ABASCENDER SOLO   MUJER   PEOR   PUEDE OCURRIR=BB " =
name=3Dkeywords>
<META=20
content=3D"Laura Gonz=E1lez Molero, ourensana de 42 a=F1os, ha sido =
elegida directiva del a=F1o por la Fedepe (Federaci=F3n Espa=F1ola de =
Mujeres Directivas, Ejecutivas, Profesionales y Empresarias). Gonz=E1lez =
ha protagonizado una mete=F3rica ascensi=F3n que la ha llevado desde las =
aulas de Farmacia de la Complutense a la presidencia del todopoderoso =
Grupo Merck en Espa=F1a. Es el claro ejemplo de mujer de =E9xito en el =
siglo XXI."=20
name=3Ddescription>
<META http-equiv=3Dcontent-type =
content=3Dtext/html;charset=3DISO-8859-1>
<META content=3D"1 days" name=3Drevisit-after>
<META content=3Dindex,follow name=3Drobots>
<META http-equiv=3Drefresh content=3D900>
<META content=3D"La Voz de Galicia" name=3Dauthor>
<META content=3DCanalvoz name=3Dorganization>
<META content=3D"A Coru=F1a, Galicia, Espa=F1a, U.E." name=3Dlocality>
<META content=3Des name=3DLanguage>
<META http-equiv=3Dexpires content=3D0>
<META http-equiv=3Dlast-modified content=3D0>
<META http-equiv=3Dcache-control content=3D"no-cache, must-revalidate">
<META http-equiv=3Dpragma content=3Dno-cache>
<STYLE type=3Dtext/css>@import url( =
/ficheros/35C4A72D0A80E0AB015CD9C02FAF6B75/LVDG_estilos_publicidad.css =
);
@import url( /ficheros/018559E20A80B1A2007834EB7A15FD5A/LVDG_pie.css );
@import url( =
/ficheros/BC6E26530A80E0AB01A4181C30ACA8D9/LVDG_estilos_cliche_seccion.cs=
s );
@import url( =
/ficheros/B7387A190A80E0AB01984A9D6A6AF959/LVDG_estilos_generales.css );
@import url( =
/ficheros/4914AF6D0A80B1A100E6A73D7E2305B3/LVDG_estilos_capa_transparente=
.css );
@import url( =
/ficheros/4C89F4C00A80E0AB015D8D75A69A82EB/LVDG_estilos_caja_clasificados=
.css );
@import url( =
/ficheros/4C879A360A80E0AB015D8D7526830E6F/LVDG_estilos_caja_relnot.css =
);
@import url( =
/ficheros/4C89595B0A80E0AB015D8D75C10D0DEE/LVDG_estilos_caja_ptrcn.css =
);
@import url( =
/ficheros/327027100A80E0AB01A3E41FC713AF4D/LVDG_estilos_piezas_caja_catal=
ogo.css );
@import url( =
/ficheros/4C88D3620A80E0AB015D8D75B9C5111B/LVDG_estilos_caja_encuentros.c=
ss );
@import url( =
/ficheros/4C86F55B0A80E0AB015D8D75E7DB9570/LVDG_estilos_caja_pasos.css =
);
@import url( =
/ficheros/BC6FCC230A80E0AB01A4181CC75C3517/LVDG_estilos_sector_info.css =
);
@import url( =
/ficheros/B2CC47C00A80E0AB00B113C7912EC5AE/LVDG_estilos_piezas_opiniones.=
css );
@import url( =
/ficheros/327027100A80E0AB01A3E41FC713AF4D/LVDG_estilos_piezas_caja_catal=
ogo.css );
@import url( /ficheros/1191926985177370/LVDG_estilos_enviar_noticia.css =
);
@import url( =
/ficheros/76D3865F0A80B1A100AE997B485F3286/LVDG_estilos_detalle.css );
@import url( =
/ficheros/A20A9B030A80E0AB007BFC04A7AF50C3/LVDG_estilos_utnot.css );
@import url( =
/ficheros/76E596D70A80B1A100AE997B308D7528/LVDG_estilos_localizador.css =
);
@import url( =
/ficheros/B2CB05AB0A80E0AB00B113C752A3F9E8/LVDG_estilos_envia_opinion.css=
 );
@import url( =
/ficheros/4C89595B0A80E0AB015D8D75C10D0DEE/LVDG_estilos_caja_ptrcn.css =
);
@import url( =
/ficheros/78FAE94D0A80E0AB01CEE792BBC05A90/LVDG_estilos_sector_cabecero_m=
ini.css );
@import url( =
/ficheros/4914AF6D0A80B1A100E6A73D7E2305B3/LVDG_estilos_capa_transparente=
.css );
</STYLE>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/558124BE0A80E0AB012F41A585B4=
5977/LVDG_script.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/8CC01D870A80B1A20163C85B0702=
5780/Traduccion_Idioma.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/D9494AAE0A80B1A1006261C96634=
ABEC/script_ventana.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/93D696360A80E09D0176E9C0E8D2=
FCCA/LVDG_fechasUtil.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/CEC5A24A0A80B1A101301D480042=
16CC/LVDG_seovoz.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597585708264/LVDG_AjaxJD=
om.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597630143481/LVDG_AjaxXp=
ath.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597715663939/LVDG_Lector=
XML.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/290D96910A80B1A1008F337B78D9=
049E/LVDG_validaciones_opinas.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597743995408/LVDG_Lector=
XSLT.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1192035251129886921/LVDG_val=
idaciones_envio_noticia.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597562672697/LVDG_AjaxMi=
sc.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597793386605/LVDG_Client=
eRSS.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/518EE9620A80B197011F7B3D4E9A=
130D/LVDG_banners.js"=20
type=3Dtext/javascript>//</SCRIPT>

<SCRIPT=20
src=3D"http://www.lavozdegalicia.es/ficheros/1189597663711607/LVDG_AjaXSL=
T.js"=20
type=3Dtext/javascript>//</SCRIPT>

<META content=3D"MSHTML 6.00.6000.16448" name=3DGENERATOR></HEAD>
<BODY>
<DIV class=3D"maq detnoti01">
<DIV class=3Dinterst>
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('x95');</SCRIPT>

<DIV class=3Dinterst>
<DIV class=3Dizq>
<DIV class=3Dno>LVDG_PUBLICIDAD:Position1</DIV>
<DIV class=3D"area pub" id=3Dp01>
<DIV class=3D"mod p01">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('Position1');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('p01');</SCRIPT>
</DIV>
<DIV class=3Dizq>
<DIV class=3Dno>LVDG_PUBLICIDAD:x17</DIV>
<DIV class=3D"area pub" id=3Dp02>
<DIV class=3D"mod p02">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('x17');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('p02');</SCRIPT>
</DIV></DIV></DIV>
<DIV class=3D"sct cab" id=3Dcabecero>
<DIV class=3D"area auto"><A class=3Dcabecera=20
href=3D"http://www.lavozdegalicia.es/portada/index.htm" tilte=3D"Ir a =
Portada">
<H1>La Voz de Galicia &nbsp;</H1>
<DL class=3Dno>
  <DT>lavozdegalicia.es=20
  <DD>Edicion digital de La Voz de Galicia </DD></DL></A>
<DIV class=3D"menu serv">
<DIV class=3D"izq idiom"><STRONG class=3Dno>Elegir idioma:</STRONG>
<SCRIPT language=3Djavascript>if (idioma()) document.write('<a =
class=3D"pestana" href=3D"javascript:CrearCookie(\'idioma_session\', =
\'es\');window.location=3Dgal2es(window.location)">Edici=F3n en =
castellano</a>');=0A=
					else document.write('<a class=3D"pestana" =
href=3D"javascript:CrearCookie(\'idioma_session\',\'ga\');traducir();">Ed=
ici=F3n en galego</a>');</SCRIPT>
 </DIV>
<DIV class=3D"der ed_imp"><STRONG>Edici=F3n Impresa:</STRONG> <A=20
href=3D"http://www.lavozdegalicia.es/VentaPDF/">Diario en PDF</A> | <A=20
href=3D"http://www.lavozdegalicia.es/VentaPDF/">Hemeroteca</A> =
</DIV></DIV>
<DIV class=3Dpanel>
<DIV class=3D"area der">
<H2 class=3Dno>Buscador de contenidos</H2>
<FORM class=3Dbusca id=3DfrmQuery name=3DfrmQuery =
onsubmit=3DgoToBuscador() action=3D#=20
method=3Dpost target=3D_blank><INPUT id=3Dquery type=3Dhidden =
name=3Dquery> <INPUT=20
id=3DrbFilter type=3Dhidden value=3D0 name=3DrbFilter> <INPUT =
id=3DrbFilter type=3Dhidden=20
value=3D0 name=3DrbDonde> <INPUT id=3Dtxt_busqueda type=3Dhidden =
name=3Dtxt_busqueda>=20
<INPUT type=3Dhidden value=3D0 name=3Dpag>=20
<FIELDSET><INPUT class=3Dbrd id=3Dbuscador_txt name=3Dbuscador_txt> =
</FIELDSET>=20
<FIELDSET><LEGEND class=3Dno>Elige:</LEGEND><LABEL for=3Dbuscavoz><SPAN=20
class=3Dno>Buscar en el</SPAN> Peri=F3dico <INPUT id=3Dbuscavoz =
type=3Dradio CHECKED=20
value=3D0 name=3Ddonde> </LABEL><LABEL class=3Dnostrum =
for=3Dnostrum><SPAN=20
class=3Dno>Buscar en la</SPAN> Web <INPUT id=3Dnostrum type=3Dradio =
value=3D1=20
name=3Ddonde> </LABEL><INPUT class=3Dboton type=3Dsubmit value=3Dbuscar> =
</FIELDSET>=20
</FORM></DIV></DIV>
<SCRIPT languaje=3D"javascript">function goToBuscador() {=0A=
				if (document.getElementById('buscavoz').checked) {=0A=
					=
document.frmQuery.action=3D'http://www.lavozdegalicia.es/SSEE/buscavoz/re=
sultados.jsp';=0A=
					=
document.getElementById('query').value=3Ddocument.getElementById('buscado=
r_txt').value;=0A=
					document.form_cab_buscavoz.submit();=0A=
				} else {=0A=
					=
document.frmQuery.action=3D'http://www.lavozdegalicia.es/buscaweb/lista_r=
esultados_web.jsp';=0A=
					=
document.getElementById('txt_busqueda').value=3Ddocument.getElementById('=
buscador_txt').value;=0A=
					return enviar_noxtrum(document.form_cab_buscavoz);=0A=
				}=0A=
			}</SCRIPT>
</DIV>
<DIV class=3Dindx>
<H2 class=3Dno>Indice de contenidos</H2>
<UL class=3Dmenu>
  <LI class=3D"inl mg_inf">
  <H3 class=3Dno>actualidad</H3>
  <UL class=3Dinl>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://www.lavozdegalicia.es/portada/index.htm">Portada</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin =
xmlns:xml=3D"http://www.w3.org/XML/1998/namespace"><A=20
      href=3D"http://www.lavozdegalicia.es/24horas/index.htm">24 =
Horas</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/lomas/index.htm"=20
      xmlns:xml=3D"http://www.w3.org/XML/1998/namespace">Lo m=E1s =
visto</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/fotos/index.htm"=20
      xmlns:xml=3D"http://www.w3.org/XML/1998/namespace">Fotos</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/videos/index.htm"=20
      xmlns:xml=3D"http://www.w3.org/XML/1998/namespace">V=EDdeos</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/tiempo/index.htm"=20
      xmlns:xml=3D"http://www.w3.org/XML/1998/namespace">El Tiempo</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/hemeroteca/index.htm"=20
      xmlns:xml=3D"http://www.w3.org/XML/1998/namespace">Hemeroteca =
web</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/mapaweb/index.htm"=20
      xmlns:xml=3D"http://www.w3.org/XML/1998/namespace">Mapa web</A> =
</LI></UL>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://www.lavozdegalicia.es/galicia/index.htm">Galicia</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/coruna/index.htm">A=20
      Coru=F1a</A>=20
      <LI class=3Dfin><A =
href=3D"http://www.lavozdegalicia.es/amarina/index.htm">A=20
      Mari=F1a</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/arousa/index.htm">Arousa</A>=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/barbanza/index.htm">Barbanza</A>=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/carballo/index.htm">Carballo</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/deza/index.htm">Deza</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/ferrol/index.htm">Ferrol</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/lemos/index.htm">Lemos</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/lugo/index.htm">Lugo</A>=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/ourense/index.htm">Ourense</A>=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/pontevedra/index.htm">Pontevedra</A>=
=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/santiago/index.htm">Santiago</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/vigo/index.htm">Vigo</A> =
</LI></UL>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    =
href=3D"http://www.lavozdegalicia.es/deportes/index.htm">Deportes</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/deportes/liga/index.htm">Liga</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/formula1/index.htm">F=F3rmula =
1</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/motos/index.htm">MotoGP</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/motor/index.htm">Motor</A> =
</LI></UL>
    <LI class=3Ditem>
    <H4><A class=3D"pestana off"=20
    =
href=3D"http://www.lavozdegalicia.es/sociedad/index.htm">Sociedad</A> =
</H4>
    <UL class=3Dsub>
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/cultura/index.htm">Cultura</A>=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/genteytelevision/index.htm">Gente</A=
>=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/tendencias/index.htm">Tendencias</A>=
=20
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/tecnologia/index.htm">Tecnolog=EDa</=
A>=20
      <LI class=3Dfin><A href=3D"http://lavozdegalicia.canal-si.com/"=20
      target=3D_blank>Canal Si</A>=20
      <LI class=3Dfin><A href=3D"http://lavozdegalicia.laguiatv.com/"=20
      target=3D_blank>La Gu=EDa TV</A>=20
      <LI class=3Dfin><A href=3D"http://lavozdegalicia.hoymujer.com/"=20
      target=3D_blank>Hoy mujer</A>=20
      <LI class=3Dfin><A =
href=3D"http://lavozdegalicia.xlsemanal.com/web/home.php"=20
      target=3D_blank>XLSemanal</A> </LI></UL>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://www.lavozdegalicia.es/dinero/index.htm">Dinero</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin><A =
href=3D"http://bolsa.lavozdegalicia.es/index.asp">Bolsa</A>=20
      </LI></UL>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://www.lavozdegalicia.es/espana/index.htm">Espa=F1a</A> =
</H4>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://www.lavozdegalicia.es/mundo/index.htm">Mundo</A> =
</H4>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    =
href=3D"http://www.lavozdegalicia.es/opinion/index.htm">Opini=F3n</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin><A=20
      =
href=3D"http://www.lavozdegalicia.es/cartasdirector/index.htm">Cartas al =

      Director</A> </LI></UL>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    =
href=3D"http://www.lavozdegalicia.es/participa/index.htm">Participa</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/blogs/index.htm">Blogs</A>=20
      <LI class=3Dfin><A=20
      =
onclick=3D"javascript:window.open('http://www.lavozdegalicia.com/charlas_=
2007/index.jsp', 'popup', 'width=3D645,height=3D700, scrollbars=3Dyes, =
resize=3Dno');"=20
      =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">Encuentros</A>=20

      <LI class=3Dfin><A=20
      href=3D"http://chat.lavoz.es:8090/chat/world/html/index.html"=20
      target=3D_blank>Chat</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://www.lavozdegalicia.es/relatos/index.htm">Relatos de =
Ver=E1n</A>=20
      </LI></UL>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://ocio.lavozdegalicia.es/inicio/index.htm">Ocio</A> =
</H4>
    <UL class=3D"sub no">
      <LI class=3Dfin><A =
href=3D"http://ocio.lavozdegalicia.es/se_cine/index.htm"=20
      target=3D_blank>Cine</A>=20
      <LI class=3Dfin><A =
href=3D"http://ocio.lavozdegalicia.es/se_musica/index.htm"=20
      target=3D_blank>M=FAsica</A>=20
      <LI class=3Dfin><A=20
      href=3D"http://ocio.lavozdegalicia.es/se_escapate/index.htm"=20
      target=3D_blank>Esc=E1pate</A>=20
      <LI class=3Dfin><A =
href=3D"http://ocio.lavozdegalicia.es/se_arte/index.htm"=20
      target=3D_blank>Arte</A> </LI></UL></LI></UL>
  <LI class=3D"inl mg_util">
  <H3 class=3Dno>utilidades</H3>
  <UL class=3Dinl>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    =
href=3D"http://www.lavozdegalicia.es/servicios/index.htm">Servicios</A> =
</H4>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    =
href=3D"http://www.lavozdegalicia.es/clasificados/index.htm">Clasificados=
</A>=20
    </H4>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    =
href=3D"http://www.lavozdegalicia.es/infocanales/index.htm">Infocanales</=
A>=20
    </H4>
    <LI class=3Ditem>
    <H4><A class=3Dpestana=20
    href=3D"http://www.lavozdegalicia.es/edicionimpresa/index.htm">Ed. =
Impresa</A>=20
    </H4></LI></UL></LI></UL></DIV></DIV>
<DIV class=3D"sct brd det" id=3Ddetalle>
<DIV class=3D"area izq a660">
<DIV class=3D"area auto">
<DIV class=3Dnot>
<H1 class=3Dtitulo><EM class=3Dtitulillo>Entrevista | laura gonz=E1lez =
molero</EM> <EM=20
class=3Dcargo>presidenta de merck espa=F1a</EM> =ABAscender solo por ser =
mujer es lo=20
peor que nos puede ocurrir=BB </H1>
<P class=3Dentradilla>La ouresana, presidenta del grupo farmac=E9utico =
multinacional=20
en Espa=F1a, acaba de ser elegida directiva del a=F1o</P>
<DL class=3Dlocalizador>
  <DT class=3Dno>Autor:=20
  <DD class=3Dfirma>Sara Carreira
  <SCRIPT language=3Djavascript>var d =3D new =
Date(1196722800000);</SCRIPT>
   </DD>
  <DT class=3Dno>Fecha de publicaci=F3n:=20
  <DD class=3Dfecha>
  <SCRIPT language=3Djavascript>document.write(d.getDate() + "/" + =
(parseInt(d.getMonth())+1) + "/" + d.getFullYear());</SCRIPT>
  </DD></DL>
<UL class=3D"utnot nomr">
  <LI class=3Dservnot>
  <UL class=3Dinl>
    <LI><A class=3D"serv env"=20
    =
onclick=3D"javascript:document.getElementById('enviar_popup').className=3D=
''"=20
    =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">Enviar</A>=20
    </LI>
    <LI><A class=3D"serv imp"=20
    =
href=3D"http://www.lavozdegalicia.es/SSEE/print.jsp?idContenido=3D0003_63=
73803&amp;idSeccion=3D9D6C287F0A80B197016535BF85FB5200">Imprimir</A>=20
    </LI>
    <LI><A class=3D"ser vol" =
href=3D"javascript:history.back()">Volver</A>=20
  </LI></UL></LI></UL>
<P class=3Dtexto>Laura Gonz=E1lez Molero, ourensana de 42 a=F1os, ha =
sido elegida=20
directiva del a=F1o por la Fedepe (Federaci=F3n Espa=F1ola de Mujeres =
Directivas,=20
Ejecutivas, Profesionales y Empresarias). Gonz=E1lez ha protagonizado =
una=20
mete=F3rica ascensi=F3n que la ha llevado desde las aulas de Farmacia de =
la=20
Complutense a la presidencia del todopoderoso Grupo Merck en Espa=F1a. =
Es el claro=20
ejemplo de mujer de =E9xito en el siglo XXI.</P>
<P class=3Dtexto>-Aunque ocupe un exigente puesto directivo, es firme =
partidaria=20
de la vida familiar. =BFC=F3mo concilia ambas?</P>
<P class=3Dtexto>-Lo importante es planificar nuestra vida y dedicar =
tiempo a la=20
empresa, pero tambi=E9n a nuestra familia. Yo tengo una =FAnica agenda =
en la que lo=20
apunto todo, desde reuniones a visitas al m=E9dico.</P>
<P class=3Dtexto>-=BFLa mujer es m=E1s organizada que el hombre?</P>
<P class=3Dtexto>-Yo creo en las personas, y creo que hay hombres muy =
organizados=20
y mujeres que no lo son. Pero en t=E9rminos generales, hist=F3ricamente =
las mujeres=20
estamos m=E1s acostumbradas a la intendencia, la organizaci=F3n, la =
log=EDstica, y eso=20
como colectivo se nota. Pero la capacidad de las personas es muy amplia, =
y no=20
utilizamos todo lo que da de s=ED nuestro intelecto. Yo creo adem=E1s =
que cuando te=20
exigen es cuando te vuelves competitivo.</P>
<P class=3Dtexto>-=BFExiste el techo de cristal para las mujeres en la =
direcci=F3n de=20
las empresas?</P>
<P class=3Dtexto>-En algunos sectores muy tradicionales s=ED existe, =
pero en el m=EDo,=20
como ocurre con los de la tecnolog=EDa, las mujeres son las que ocupan =
los puestos=20
m=E1s relevantes. Son sectores muy din=E1micos y en ellos se ha buscado =
el talento=20
al margen del g=E9nero o el estado civil.</P>
<P class=3Dtexto>-=BFEst=E1 a favor de las cuotas obligatorias por ley =
para que las=20
mujeres est=E9n en los consejos de administraci=F3n?</P>
<P class=3Dtexto>-No, estoy en contra, porque puede ocurrir que se =
llegue a hacer=20
a la inversa. Los cargos y promociones deben tener en cuenta los valores =
reales=20
de los profesionales. Ascendernos solo por ser mujeres es lo peor que =
nos puede=20
ocurrir porque es posible que en el futuro se vaya a volver contra =
nosotras.</P>
<P class=3Dtexto>-Entonces, =BFc=F3mo consiguen las mujeres llegar a la =
alta=20
direcci=F3n? =BFCon una conciliaci=F3n real de la vida familiar y =
laboral por parte de=20
los hombres?</P>
<P class=3Dtexto>-Sin duda. Y eso lo estamos viendo cada d=EDa en las =
entrevistas.=20
Los j=F3venes que acceden al mercado laboral quieren calidad de vida. =
Eso les pasa=20
tanto a hombres como a mujeres, con o sin hijos. Eso es algo que est=E1 =
cambiando.=20
Los ciclos econ=F3micos son muy cortos y las empresas han de apostar por =
el=20
verdadero talento; las compa=F1=EDas dejan de ser competitivas, pierden =
mercados y=20
entonces se paran a pensar en el potencial interno y muchos han optado =
por las=20
mujeres.</P>
<UL class=3D"utnot nomr">
  <LI class=3Dcomnot>Compartir <SPAN class=3Dno>la noticia en:</SPAN> <A =

  class=3D"ico del_ico"=20
  title=3D"A=F1adir a Delicious la noticia '=ABAscender solo por ser =
mujer es lo peor que nos puede ocurrir=BB'"=20
  =
href=3D"http://del.icio.us/post?title=3D&amp;url=3Dhttp://www.lavozdegali=
cia.es/sociedad/2007/12/04/0003_6373803.htm"><SPAN=20
  class=3Dno>del.icio.us</SPAN> </A><SPAN>,</SPAN> <A class=3D"ico =
tech_ico"=20
  title=3D"A=F1adir a Technorati la noticia '=ABAscender solo por ser =
mujer es lo peor que nos puede ocurrir=BB'"=20
  =
href=3D"http://www.technorati.com/search/http://www.lavozdegalicia.es/soc=
iedad/2007/12/04/0003_6373803.htm"><SPAN=20
  class=3Dno>technorati</SPAN> </A><SPAN>,</SPAN> <A class=3D"ico =
yahoo_ico"=20
  title=3D"A=F1adir a Yahoo la noticia '=ABAscender solo por ser mujer =
es lo peor que nos puede ocurrir=BB'"=20
  =
href=3D"http://myweb2.search.yahoo.com/myresults/bookmarklet?u=3Dhttp://w=
ww.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm"><SPAN=20
  class=3Dno>yahoo</SPAN> </A><SPAN>,</SPAN> <A class=3D"ico digg_ico"=20
  title=3D"A=F1adir a Digg la noticia '=ABAscender solo por ser mujer es =
lo peor que nos puede ocurrir=BB'"=20
  =
href=3D"http://www.digg.com/submit?url=3Dhttp://www.lavozdegalicia.es/soc=
iedad/2007/12/04/0003_6373803.htm"><SPAN=20
  class=3Dno>digg</SPAN> </A><SPAN>,</SPAN> <A class=3D"ico meneame_ico" =

  title=3D"A=F1adir a Men=E9ame la noticia '=ABAscender solo por ser =
mujer es lo peor que nos puede ocurrir=BB'"=20
  =
href=3D"http://meneame.net/submit.php?url=3Dhttp://www.lavozdegalicia.es/=
sociedad/2007/12/04/0003_6373803.htm"><SPAN=20
  class=3Dno>men=E9ame</SPAN> </A><SPAN>,</SPAN> <A class=3D"ico =
chuza_ico"=20
  title=3D"A=F1adir a Chuza la noticia '=ABAscender solo por ser mujer =
es lo peor que nos puede ocurrir=BB'"=20
  =
href=3D"http://chuza.org/submit.php?url=3Dhttp://www.lavozdegalicia.es/so=
ciedad/2007/12/04/0003_6373803.htm"><SPAN=20
  class=3Dno>chuza</SPAN> </A><SPAN>,</SPAN> <EM><A=20
  =
onclick=3D"javascript:window.open('http://www.lavozdegalicia.es/estaticos=
/compartir.htm','compartir','width=3D710,height=3D430,toolbar=3Dno')"=20
  =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">=BFC=F3mo=20
  compartir?</A> </EM></LI>
  <LI class=3Dservnot>
  <UL class=3Dinl>
    <LI><A class=3D"serv env"=20
    =
onclick=3D"javascript:document.getElementById('enviar_popup').className=3D=
''"=20
    =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">Enviar</A>=20
    </LI>
    <LI><A class=3D"serv imp"=20
    title=3D"Imprimir la noticia '=ABAscender solo por ser mujer es lo =
peor que nos puede ocurrir=BB'"=20
    =
href=3D"http://www.lavozdegalicia.es/SSEE/print.jsp?idContenido=3D0003_63=
73803&amp;idSeccion=3D9D6C287F0A80B197016535BF85FB5200">Imprimir</A>=20
    </LI>
    <LI><A class=3D"ser vol" =
href=3D"javascript:history.back()">Volver</A>=20
  </LI></UL></LI></UL>
<DIV class=3Dno id=3Denviar_popup>
<DIV class=3D"area auto  ftrans"></DIV>
<DIV class=3Dporter>
<DIV class=3Dspok>
<DIV class=3Darrstr>
<H2 class=3D"area auto"><EM class=3D"blq  izq">ENVIAR NOTICIA</EM> <A=20
class=3D"boton der cerrar"=20
onclick=3D"javascript:document.getElementById('enviar_popup').className=3D=
'no'"=20
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">&nbsp;</A>=20
</H2></DIV>
<DIV class=3D"caja brd contrans">
<DIV class=3Dnoticia>
<H2 class=3Dtitulo><EM class=3Dtitulillo>Entrevista | laura gonz=E1lez =
molero</EM>=20
=ABAscender solo por ser mujer es lo peor que nos puede ocurrir=BB </H2>
<P class=3Dentradilla>La ouresana, presidenta del grupo farmac=E9utico =
multinacional=20
en Espa=F1a, acaba de ser elegida directiva del a=F1o</P></DIV>
<FORM id=3Denvio_noticia name=3Denvio_noticia_amigo=20
onsubmit=3D"return validaEnviar(this)"=20
action=3Dhttp://www.lavozdegalicia.es/SSEE/enviarNoticia.jsp =
method=3Dpost><EM=20
class=3Dder>* Campos obligatorios</EM>=20
<FIELDSET><LEGEND>Enviar a:</LEGEND><LABEL for=3Dpara><EM>*</EM> Uno o =
varios=20
correos electr=F3nicos separados por punto y coma: <TEXTAREA =
class=3D"brd  t620" id=3Dpara name=3Dpara rows=3D5>&nbsp;</TEXTAREA>=20
</LABEL></FIELDSET>=20
<FIELDSET><LEGEND>Tus datos:</LEGEND><LABEL class=3D"area izq"=20
for=3Dcorreo><EM>*</EM> Tu correo: <INPUT class=3D"brd  t223" =
id=3Dcorreo maxLength=3D30=20
name=3Dcorreo> </LABEL><LABEL class=3D"area der" for=3Dnombre><EM>*</EM> =
Tu nombre:=20
<INPUT class=3D"brd  t148" id=3Dnombre maxLength=3D50 name=3Dnombre> =
</LABEL></FIELDSET>=20
<INPUT class=3D"boton  der" type=3Dsubmit value=3DEnviar name=3Denviar> =
<INPUT=20
type=3Dhidden value=3D0003_6373803 name=3Dref> <INPUT type=3Dhidden=20
value=3Dhttp://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
=20
name=3Durl> </FORM></DIV></DIV></DIV></DIV>
<DIV class=3Dno id=3Denviar_ok_popup>
<DIV class=3D"area auto  ftrans"></DIV>
<DIV class=3Dporter>
<DIV class=3Dspok>
<DIV class=3Darrstr>
<H2 class=3D"area auto"><EM class=3D"blq  izq">ENVIAR NOTICIA</EM> <A=20
class=3D"boton der cerrar"=20
onclick=3D"javascript:document.getElementById('enviar_popup').className=3D=
'no'"=20
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">&nbsp;</A>=20
</H2></DIV>
<DIV class=3D"caja brd contrans">
<H3>Su env=EDo se ha realizado correctamente</H3>
<P>En breve los contactos recibir=E1n en su correo electr=F3nico un =
enlace a la=20
noticia</P>
<P><STRONG>Gracias por usar nuestros servicios</STRONG> </P>
<P><A class=3D"boton der"=20
onclick=3D"javascript:document.getElementById('enviar_ok_popup').classNam=
e=3D'no'"=20
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">Cerrar</A>=20
</P></DIV></DIV></DIV></DIV>
<DIV class=3Dno id=3Denviar_error_popup>
<DIV class=3D"area auto  ftrans"></DIV>
<DIV class=3Dporter>
<DIV class=3Dspok>
<DIV class=3Darrstr>
<H2 class=3D"area auto"><EM class=3D"blq  izq">ENVIAR NOTICIA</EM> <A=20
class=3D"boton der cerrar"=20
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">&nbsp;</A>=20
</H2></DIV>
<DIV class=3D"caja brd contrans">
<H3>Se ha producido un error <BR>No se ha podido realizar el env=EDo =
</H3>
<P>Revise sus datos y <A=20
onclick=3D"javascript:document.getElementById('enviar_popup').className=3D=
'';javascript:document.getElementById('enviar_error_popup').className=3D'=
no'"=20
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">vuelva=20
a intentarlo</A> </P>
<P>Si se vuelve a producir un error, es posible que el servicio est=E1=20
moment=E1neamente no disponible. Int=E9ntelo m=E1s tarde.</P>
<P><STRONG>Disculpe las molestias. Gracias por usar nuestros =
servicios</STRONG>=20
</P>
<P><A class=3D"boton der"=20
onclick=3D"javascript:document.getElementById('enviar_error_popup').class=
Name=3D'no'"=20
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#">Cerrar</A>=20
</P></DIV></DIV></DIV></DIV>
<SCRIPT languaje=3D"javascript">var params =3D window.location.search;=0A=
			var okParamIni =3D params.indexOf("ok=3D");=0A=
			var okParamFin =3D okParamIni+4;=0A=
			var okParam =3D "";=0A=
			if (okParamIni > -1) {=0A=
				okParam =3D params.substring(okParamIni+3,okParamFin);=0A=
			}=0A=
			if (okParam=3D=3D"1")=0A=
				document.getElementById('enviar_ok_popup').className=3D''=0A=
			if (okParam=3D=3D"0")=0A=
				=
document.getElementById('enviar_error_popup').className=3D''</SCRIPT>
</DIV>
<SCRIPT =
type=3Dtext/javascript>seovoz("6F43844A0A80B198009B6976337B3445","0003","=
=ABAscender solo por ser mujer es lo peor que nos puede =
ocurrir=BB","0003_6373803","9D6C287F0A80B197016535BF85FB5200");</SCRIPT>

<DIV class=3Dno>LVDG_PUBLICIDAD_MIVA:</DIV>
<DIV class=3D"caja miva">
<SCRIPT=20
src=3D"http://affiliate.es.espotting.com/search/content/implementations/E=
spottingContentInclude.js"=20
type=3Dtext/javascript>=0A=
    <noscript />=0A=
  </SCRIPT>

<SCRIPT type=3Dtext/javascript>createEspottingContentPage ("voz001", =
"vozdegalicia.xsl", 3, 1223);</SCRIPT>
</DIV></DIV></DIV>
<DIV class=3D"area der a330">
<DIV class=3D"caja relacionados">
<DIV class=3D"img i316"><SPAN class=3Dbrd><IMG=20
alt=3D"=ABAscender solo por ser mujer es lo peor que nos puede =
ocurrir=BB"=20
src=3D"http://www.lavozdegalicia.es/default/2007/12/04/0012_2226955/Foto/=
g4p32f1.jpg">=20
</SPAN>
<DIV class=3D"area auto relimg">
<DIV class=3Dpiefoto>| santi m. amil</DIV></DIV></DIV>
<H2 class=3Drot>Relacionados de la noticia</H2>
<UL class=3Drel>
  <LI class=3D""><A=20
  =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373804.htm=
">=ABLlega=20
  un momento en que solo el dinero no llega=BB</A> </LI></UL><SPAN=20
class=3Dno>&nbsp;</SPAN> </DIV>
<DIV class=3Dno>LVDG_PUBLICIDAD:Position3</DIV>
<DIV class=3D"area pub" id=3Dp03>
<DIV class=3D"mod p03">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('Position3');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('p03');</SCRIPT>

<DIV id=3D00801190114525456453>Cargando</DIV>
<SCRIPT languaje=3D"javascript">function refresca00801190114525456453() {=0A=
				rss('ext', 'http://www.lavozdegalicia.es/estaticos/caja_lo_mas.htm', =
'', '00801190114525456453');=0A=
			}=0A=
			=0A=
			refresca00801190114525456453();=0A=
			var refresco =3D 300 * 1000;=0A=
			setInterval("refresca00801190114525456453()",refresco);</SCRIPT>

<DIV class=3Dno>LVDG_PUBLICIDAD:x51</DIV>
<DIV class=3D"area pub" id=3Dm03>
<DIV class=3D"mod m03">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('x51');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('m03');</SCRIPT>

<DIV class=3Dno>LVDG_PUBLICIDAD_EXTERNOS:x32</DIV>
<DIV class=3D"area pub" id=3Dp04>
<DIV class=3D"mod p04">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('x32');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('p04');</SCRIPT>

<DIV class=3Dno>LVDG_PUBLICIDAD_EXTERNOS:08A</DIV>
<DIV class=3Dno>LVDG_PUBLICIDAD_EXTERNOS:08B</DIV>
<DIV class=3Dno>LVDG_PUBLICIDAD_EXTERNOS:08C</DIV>
<DIV class=3Dno>LVDG_PUBLICIDAD_EXTERNOS:08D</DIV>
<DIV class=3Dno>LVDG_PUBLICIDAD_EXTERNOS:08E</DIV></DIV></DIV>
<DIV class=3D"sct pie">
<DIV class=3D"area auto">
<DIV class=3D"area izq pub">
<DIV class=3Dno>LVDG_PUBLICIDAD:x19</DIV>
<DIV class=3D"area pub" id=3Dp05>
<DIV class=3D"mod p05">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('x19');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('p05');</SCRIPT>
</DIV>
<DIV class=3D"area der pub">
<DIV class=3Dno>LVDG_PUBLICIDAD:x18</DIV>
<DIV class=3D"area pub" id=3Dp06>
<DIV class=3D"mod p06">
<SCRIPT=20
type=3Dtext/javascript>configuracionOAS('www.lavozdegalicia.es/sociedad')=
;</SCRIPT>

<SCRIPT type=3Dtext/javascript>OAS_AD('x18');</SCRIPT>
</DIV></DIV>
<SCRIPT type=3Dtext/javascript>muestra('p06');</SCRIPT>
</DIV></DIV>
<DIV class=3D"area auto">
<DIV class=3D"caja enlaces">
<DIV class=3D"area izq a660">
<DIV class=3Dmnmenu>
<H5 class=3Dno>Otros enlaces de inter=E9s:</H5>
<UL>
  <LI class=3Dltit>
  <H6>Webs del grupo</H6>
  <UL class=3Dsubl>
    <LI><A href=3D"http://www.radiovoz.com/">RadioVoz</A>=20
    <LI><A href=3D"http://www.vozaudiovisual.es/">Voz Audiovisual</A>=20
    <LI><A href=3D"http://www.sondaxe.es/">Sondaxe</A>=20
    <LI><A href=3D"http://www.canalvoz.com/">Canalvoz</A>=20
    <LI><A href=3D"http://www.voznatura.com/home/index.php">Voz =
Natura</A>=20
    <LI><A=20
    =
href=3D"http://www.fundacionsantiagoreyfernandezlatorre.com/">Fundaci=F3n=
</A>=20
    <LI><A href=3D"http://www.prensaescuela.es/web/home/home.php">Prensa =

    Escuela</A>=20
    <LI><A href=3D"http://www.escuelademedios.com/">Escuela de =
Medios</A> </LI></UL>
  <LI class=3Dltit>
  <H6>Tarifas web</H6>
  <UL class=3Dsubl>
    <LI><A =
href=3D"http://www.lavozdegalicia.es/tarifas/tarifasdigital.pdf"=20
    target=3D_blank>Consulta</A> </LI></UL>
  <LI class=3Dltit>
  <H6>Contacte con nosotros</H6>
  <UL class=3Dsubl>
    <LI><A href=3D"mailto:webvoz@lavoz.es">webvoz@lavoz.es</A>=20
</LI></UL></LI></UL></DIV></DIV>
<DIV class=3D"area der a157">
<UL class=3Dlegal>
  <LI><A href=3D"http://www.lavozdegalicia.es/estaticos/avisolegal.pdf"=20
  target=3D_blank>Aviso legal</A>=20
  <LI><A =
href=3D"http://www.lavozdegalicia.es/estaticos/politicadeprivacidad.pdf" =

  target=3D_blank>Pol=EDtica de privacidad</A>=20
  <LI><A =
href=3D"http://www.lavozdegalicia.es/estaticos/condicionesgenerales.pdf" =

  target=3D_blank>Condiciones generales</A>=20
  <LI><A href=3D"http://www.lavozdegalicia.es/rss/">RSS</A>=20
</LI></UL></DIV></DIV></DIV>
<DIV class=3D"area auto copy">
<DIV class=3D"area izq a495">
<DIV class=3Dcaja><A=20
href=3D"http://www.confianzaonline.org/codigoetico/codigoetico.php"=20
target=3D_blank><IMG=20
alt=3D"Confianza oline. Enlace a m=E1s informaci=F3n sobre el =
certificado"=20
src=3D"http://www.lavozdegalicia.es/img/logos/lg_confianza.gif"></A> =
<STRONG>=A9=20
Copyright LA VOZ DE GALICIA S.A.<BR>Pol=EDgono de Sab=F3n, Arteixo, A =
CORU=D1A=20
(Espa=F1a)</STRONG><BR>R.M. de A Coru=F1a: tomo 2438 del Archivo, =
Secci=F3n General,=20
folio 114 vto., hoja C-2141. CIF: A-15000649. </DIV></DIV>
<DIV class=3D"area der a495">
<UL class=3Dcomercial>
  <LI><EM>Comercializa publicidad local: </EM><A class=3Dcvoz_ico=20
  =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#"><SPAN=20
  class=3Dno>canal voz</SPAN></A> </LI>
  <LI><EM>Comercializa publicidad nacional: </EM><A =
class=3Dcmvocento_ico=20
  =
href=3D"http://www.lavozdegalicia.es/sociedad/2007/12/04/0003_6373803.htm=
#"><SPAN=20
  class=3Dno>cmvocento</SPAN></A> </LI></UL></DIV></DIV></DIV></DIV><!-- =
Condiciones generales --><!-- Politica privacidad --><!-- Aviso legal =
--><!-- Como compartir -->
<SCRIPT type=3Dtext/javascript>var =
IVW=3D"http://lavozdegalicia.ojdinteractiva.com/cgi-bin/ivw/CP/sociedad" =
+ idiom;

			document.write("<img =
src=3D\""+IVW+"?r=3D"+escape(document.referrer)+"\" width=3D\"1\" =
height=3D\"1\" name=3D\"ojd\" alt=3D\"ojd\"\/>");</SCRIPT>
<NOSCRIPT><IMG height=3D1 alt=3Dojd src=3D"" width=3D1 name=3Dojd>=20
</NOSCRIPT><!--OK--></BODY></HTML>

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://www.lavozdegalicia.es/default/2007/12/04/0012_2226955/Foto/g4p32f1.jpg

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p
LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P
T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCAFwATwDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDmBTqa
BT64D0iJO/1paE6t9aU0EjJvuVbs/wDVn61Vm+4at2Y/ct9aQMo6r0Ws5fvDHrWlqvRazV+8taQ2
JkXIzwKnBz3qGMcCpgOOlZSNEL+NFG32pce1SMKAaMe1G0UgFzRRtpMUALQDRxS4HrSGFApVQt0z
Ucs0UZwDuP1xTUW9hOSRJx6UuM9jVBr1z904HsKrTTzH75Yr7GtFRb6ke1t0NfAxyKTHPSsTzJFz
+8b2IPWnpdzpwHLd+eafsH3BVl1Rsn6UhxVSK+VuJRtPrVsFWGVbIrJxcdzRNPYTiigijFIYcUfh
RijFAB+FFGOOtJigBaTNLigigBPwoFLikxTAOPSk79KXFG2gQnFHHpRtoxQA8U4njikpT0rUkjT7
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

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.lavozdegalicia.es/img/logos/lg_confianza.gif

R0lGODlhIAAiAPcAABgAcez20azROmytAFmfAK6N049nu9zqr0UAoe7X/3uzAKyPzNDD4sTbeeTu
vXNDqezl85vEIkgHj8Gs2bnWYfD/j6p1+qWFxrHRSv////H135K/ANvL7l8lnH9Ss0IAiNTkm7uO
/6Z0773pQcu53/r3/1ESlHg7x5df6pXBEdjzkfD/sywAgLKYzd7H/Yq5AFkcmrWV4WYvovz/36OA
z6LHLdjM5+b5rsLabanZH8Kxy7mi0556xJPCAXSvAM/+VWqnAMat5cu45PLp/4BB1ejwxVQXluv/
sM/ii///8XZHrObZ+X68AGMppToAh73Ya///tMjvXOL/eZx7vce03U0Ok+Xc7vT62/Xy+IRTxIdc
tqXFKbbUVdvO6CUAeseZ/9bF3loZlP3l/1sgm7Sa0pfCGfb55WOlANfootbB8MKr3JPTAPP62eHx
q/zz/429AOrd/IO1AEsJkfbt/3xMrqeJyN/U6MnmdOb6s3iwAKjLN72W+K6TzP//5q3NQoFQu4NK
zenxyoHEAL/ZcaTQIrbUWPH22GsxpUEAi2Ipnu/p9t7T7TEAgbyk1M6839bH5ZHABZ3FKzwAiZRt
vnNBqufX/8ev67ab0FgelysAfX9SrlyiAPDe/7vWZJPNAPjk//j/3NHD5L2t3q5/+JfCEFcXoer9
rsXec6vWLc+46///+f//vYlet5nEG/f/5tzqqL+X/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAAAgACIA
AAj/AN8oGECwoMGDCBPmEYijyKuHECNKnCjRAZKBgTJo3Mixo8ePGQi+AkmyZAZDQICM/LiAh8mP
KFV+LJHJy6KXHWOu7EgJkRFEODnq9FiCUQcZEqpoBNEAiaqSQztOYCRDxhgWYkYQGHAmD9SUOzca
QFS1CqCQLzZsAKKHZFSOlCRU/SBiFZA3eBW8cQvWIx25MqqcSDIg7Vo/fGV2rOOkagegP86k9PRV
MUcrLBJpRpQlAxQpFdx8Shx2o5EqVRN9KCXiiwUELBSBfMuRSibNmjF92I1JDiLZHmlzpMMId9Xj
gZ08Ct4XpBJGMJAfhwHgAXPLHy84YSTBiHcJjCQt/4CZss3LUJPGqJ8UiiSolCtCfMBkwgiM01Wq
GJHBvoR/KlqMYUJ9MAwoCRF9pHREBjvsAMEjE9igiCJWLLLIDiQ8YmEXXUBgoSMTdGgHJwkCsUIC
jVCRQSMkUAEBGRm86MgijmRQRwYXaBQKFqxotEMGbKRkCgoauZiBInXU8YgVF1DBgCN2WLfDAgzY
kAEDGSygSQYzwDeKHVgw0EgJlsQAwRAe0JDBEpMUoAYNamTwRxAxcMABDy3AUuINGfBxSQap7JHG
RpVUopELGsEx2hyV6BCEEBpV8h52GUQhCBMZ9KBCBgIQksEdnXiCRwCo5LBGHxxd0dxGQMQBBBcR
xGfRyRM1ZIDEICm8QAGsbQm1qkY+DLBJA61ocIYfrSCBQSGkBLKJHpCUkdOvJ0VQSAaDZHAACCDU
0IAD2aIBAhKRaOArpUElVkS6QQGhABJmGCLvvPTWa2+9Zhyw0EAp9evvvwAHvFBAADs=

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/35C4A72D0A80E0AB015CD9C02FAF6B75/LVDG_estilos_publicidad.css

.interst {
	MARGIN-LEFT: auto; WIDTH: 990px; MARGIN-RIGHT: auto
}
.pub {
	BACKGROUND: url(/img/pub.gif) no-repeat 3px center
}
.a660 .pub {
	WIDTH: 100%
}
DIV > .pub {
	WIDTH: auto! important
}
.a330 .pub {
	PADDING-LEFT: 7px; BACKGROUND: url(/img/pub.gif) no-repeat 7px center
}
.a330 .a200 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 7px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; PADDING-TOP: 11px
}
.mod {
	CLEAR: both; BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 7px 0px 7px 11px; =
BORDER-LEFT: 0px; COLOR: #000; PADDING-TOP: 0px; BORDER-BOTTOM: 0px
}
.p01 {
	WIDTH: 728px; HEIGHT: 90px
}
.p05 {
	WIDTH: 728px; HEIGHT: 90px
}
.p02 {
	WIDTH: 240px; HEIGHT: 90px
}
.p06 {
	WIDTH: 240px; HEIGHT: 90px
}
.m01 {
	WIDTH: 640px; HEIGHT: 50px
}
.m04 {
	WIDTH: 640px; HEIGHT: 50px
}
.m02 {
	WIDTH: 220px; HEIGHT: 90px
}
.p03 {
	WIDTH: 300px
}
.m03 {
	WIDTH: 300px; HEIGHT: 140px
}
.m05 {
	WIDTH: 300px; HEIGHT: 90px
}
.m07 {
	WIDTH: 140px; HEIGHT: 140px
}
.p04 {
=09
}
.pubpie {
	BACKGROUND: url(/img/f_dot.gif) repeat-x left bottom
}
.a209 {
	WIDTH: 209px
}
.pubtext {
	MARGIN-RIGHT: 7px! important
}
.enlcs {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BACKGROUND-IMAGE: none! important; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; =
BORDER-RIGHT-WIDTH: 0px
}
.tienda {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BACKGROUND-IMAGE: none! important; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; =
BORDER-RIGHT-WIDTH: 0px
}
.enlcs {
	MARGIN: 7px
}
.enlcs H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; =
PADDING-TOP: 7px
}
.pubcont H2 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; TEXT-TRANSFORM: uppercase; COLOR: =
#666
}
.pubcont H2 A {
	TEXT-TRANSFORM: none
}
.pubcont H2 .mini {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
FONT-WEIGHT: normal! important; FONT-SIZE: 10px; PADDING-BOTTOM: 0px! =
important; MARGIN: 0px; TEXT-TRANSFORM: none; PADDING-TOP: 0px! =
important
}
.pubcont UL {
	BORDER-TOP-WIDTH: 1px; BACKGROUND: url(/img/f_dot.gif) repeat-x left =
bottom; PADDING-BOTTOM: 6px
}
.pubcont .auto {
	BORDER-TOP-WIDTH: 1px; BACKGROUND: url(/img/f_dot.gif) repeat-x left =
bottom; PADDING-BOTTOM: 6px
}
.pubcont UL {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; =
PADDING-TOP: 7px
}
.pubcont LI {
	MARGIN-BOTTOM: 7px; FONT: 11px arial, geneva, verdana, helvetica, =
sans-serif; LIST-STYLE-TYPE: none
}
.pubcont LI A {
	DISPLAY: block; TEXT-TRANSFORM: uppercase; COLOR: #c00
}
.pubcont .url {
	FONT-WEIGHT: bolder; TEXT-TRANSFORM: none; COLOR: #134d86
}
.pubcont SPAN.der {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; FONT-WEIGHT: bolder; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.publicidad .cliche {
	FONT-SIZE: 12px; MARGIN: 0px 7px 0px 12px; FONT-FAMILY: georgia, times =
new roman, serif
}
.publicidad .titulillo {
	FONT-SIZE: 11px
}
.publicidad .titulo {
	FONT-WEIGHT: normal; FONT-SIZE: 11px
}
.a330 .publicidad .p04 {
	BACKGROUND: url(/img/pubh.gif) no-repeat center top; MARGIN: 0px 0px =
0px 3px; PADDING-TOP: 10px
}
.a330 .publicidad > .p04 {
	MARGIN: 0px 0px 0px 7px
}
.a330 .publicidad .caja {
	MARGIN-TOP: 0px; MARGIN-LEFT: 0px
}
.a330 .publicidad .mono .img {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: =
#cc0
}
.a330 .publicidad .cxg {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(/img/logos/lg_cxg.gif) no-repeat left top; PADDING-BOTTOM: 0px; =
MARGIN: 0px; PADDING-TOP: 30px
}
.a330 .publicidad .cxg A {
	PADDING-RIGHT: 2px; DISPLAY: block; PADDING-LEFT: 2px; BACKGROUND: =
url(/img/f_dot.gif) repeat-x center top; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px
}
.miva {
	MARGIN-TOP: 17px; MARGIN-BOTTOM: 10px
}
.miva TABLE {
	BORDER-RIGHT: 0px; PADDING-RIGHT: 0px! important; BORDER-TOP: 0px; =
PADDING-LEFT: 0px! important; PADDING-BOTTOM: 0px! important; MARGIN: =
0px; BORDER-LEFT: 0px; WIDTH: 100%! important; PADDING-TOP: 0px! =
important; BORDER-BOTTOM: 0px
}
.miva TABLE TD {
	PADDING-RIGHT: 4px! important; BORDER-TOP: #ccc 1px solid; =
PADDING-LEFT: 4px! important; PADDING-BOTTOM: 4px! important; FONT: 10px =
"Trebuchet MS", Arial, Verdana; TEXT-TRANSFORM: uppercase! important; =
PADDING-TOP: 4px! important; BORDER-BOTTOM: #ccc 1px solid; =
BACKGROUND-COLOR: #ffffea! important
}
.miva TABLE.mivadd TD {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT: 12px Arial, Verdana; =
TEXT-TRANSFORM: none! important; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px; =
BACKGROUND-COLOR: #fff! important
}
.miva A.mivadescription {
	COLOR: #134d86! important
}
.miva TABLE.mivadd {
	WIDTH: 100%! important
}
.miva A.mivadir {
	FONT: 10px "Trebuchet MS", Arial, Verdana; COLOR: #134d86; =
TEXT-DECORATION: underline
}
.miva A.mivadir:hover {
	COLOR: #cc3333
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/018559E20A80B1A2007834EB7A15FD5A/LVDG_pie.css

.a157 {
	WIDTH: 157px
}
.pie {
	PADDING-BOTTOM: 40px
}
.enlaces {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 0px
}
.enlaces .mnmenu {
	MARGIN-TOP: 7px; COLOR: #666
}
.mnmenu UL {
	BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: =
inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; LIST-STYLE-TYPE: =
none
}
.mnmenu UL LI.ltit {
	DISPLAY: block; FONT-SIZE: 10px
}
.mnmenu LI.ltit H6 {
	DISPLAY: inline; FONT-WEIGHT: bolder; FONT-SIZE: 10px
}
.mnmenu UL.subl LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FONT-WEIGHT: =
normal; FONT-SIZE: 10px; PADDING-BOTTOM: 0px; MARGIN: 2px 4px 0px; =
LINE-HEIGHT: 16px; PADDING-TOP: 0px
}
.mnmenu A {
	TEXT-DECORATION: underline
}
.legal LI {
	LIST-STYLE-TYPE: none; TEXT-ALIGN: right
}
.legal A {
	FONT-WEIGHT: bolder; FONT-SIZE: 10px; TEXT-DECORATION: underline
}
.legal .enlc_rss {
	PADDING-RIGHT: 25px; BACKGROUND: url(../img/icos/rss_ico.gif) no-repeat =
right 2px
}
.enlaces H2 .boton {
	MARGIN-TOP: 10px; FONT-SIZE: 10px
}
.copy {
	BACKGROUND: url(/img/f_dot.gif) repeat-x left top; COLOR: #000
}
.copy .a495 .caja IMG {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FLOAT: left; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px
}
.derechos {
	BACKGROUND: url(/img/f_dot.gif) repeat-x left top; FONT: 10px trebuchet =
ms, lucida grande, tahoma, arial, geneva, verdana, helvetica, =
sans-serif; COLOR: #666
}
.pie UL.comercial {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; MARGIN: 4px 0px 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.pie UL.comercial LI {
	CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 10px/10px =
"trebuchet ms", "lucida grande", tahoma, arial, geneva, verdana, =
helvetica, sans-serif; PADDING-TOP: 0px; HEIGHT: 18px; TEXT-ALIGN: right
}
UL.comercial LI EM {
	CLEAR: left; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 3px 0px 0px; WIDTH: 435px; =
PADDING-TOP: 0px; FONT-STYLE: normal; TEXT-ALIGN: right
}
UL.comercial > EM {
	WIDTH: 450px
}
UL.comercial LI A {
	CLEAR: right; FLOAT: right
}
.cmvocento_ico {
	BACKGROUND: url(/img/icos/cmvocento.gif) no-repeat left top; WIDTH: =
60px; HEIGHT: 18px
}
.cvoz_ico {
	BACKGROUND: url(/img/icos/cvoz.gif) no-repeat left top; WIDTH: 60px; =
HEIGHT: 18px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/BC6E26530A80E0AB01A4181C30ACA8D9/LVDG_estilos_cliche_seccion.css

.clisec {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(/img/f_dot.gif) repeat-x left bottom; PADDING-BOTTOM: 4px; MARGIN: =
7px; WIDTH: 100%; PADDING-TOP: 21px; POSITION: relative; TEXT-ALIGN: =
left
}
* > .clisec {
	WIDTH: auto
}
.clisec H1 {
	DISPLAY: inline; FONT: 25px Georgia, "Times New Roman", Times, serif; =
TEXT-TRANSFORM: uppercase; COLOR: #666
}
.utsec {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; RIGHT: 7px; PADDING-BOTTOM: 0px; =
MARGIN: 0px; BOTTOM: 7px; PADDING-TOP: 0px; POSITION: absolute
}
.utsec LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.utsec A {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: 6px center; PADDING-LEFT: =
27px; FONT-SIZE: 13px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; =
BACKGROUND-REPEAT: no-repeat
}
.vol {
	BACKGROUND-IMAGE: url(/img/icos/vol.gif)
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/B7387A190A80E0AB01984A9D6A6AF959/LVDG_estilos_generales.css

BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #fff; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; FONT-FAMILY: =
trebuchet ms, lucida grande, tahoma, arial, geneva, verdana, helvetica, =
sans-serif; TEXT-ALIGN: center
}
.maq {
	CLEAR: both; FONT-SIZE: 11px; MARGIN: 0px auto; WIDTH: 992px
}
* > .maq {
	WIDTH: 990px
}
* {
	LINE-HEIGHT: 120%
}
* {
	BORDER-RIGHT: #cfcac0 0px solid; BORDER-TOP: #cfcac0 0px solid; =
BORDER-LEFT: #cfcac0 0px solid; BORDER-BOTTOM: #cfcac0 0px solid
}
A {
	COLOR: #134d86; TEXT-DECORATION: none
}
A:hover {
	TEXT-DECORATION: underline
}
FORM {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
FIELDSET {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
LEGEND {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
SELECT {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
INPUT {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
LABEL {
	CLEAR: none; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
LABEL {
	FONT-SIZE: 11px
}
INPUT {
	VERTICAL-ALIGN: middle
}
SELECT {
	VERTICAL-ALIGN: middle
}
INPUT.brd {
	BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: =
1px; VERTICAL-ALIGN: middle; POSITION: relative; BORDER-RIGHT-WIDTH: 1px
}
* > INPUT.brd {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px
}
* INPUT[type=3D'radio'] {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
DIV {
	CLEAR: none; WIDTH: auto; TEXT-ALIGN: left
}
DL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
DT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
DD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
UL {
	CLEAR: left; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 20px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
UL LI {
	FONT-SIZE: 13px; LINE-HEIGHT: 16px
}
OL LI {
	FONT-SIZE: 12px; COLOR: #000; LINE-HEIGHT: 14px; LIST-STYLE-TYPE: =
decimal
}
OL {
	PADDING-LEFT: 0px; MARGIN-LEFT: 24px
}
* > OL {
	PADDING-LEFT: 21px; MARGIN-LEFT: 0px
}
DIV:unknown {
	CLEAR: both; DISPLAY: block; OVERFLOW: hidden; LINE-HEIGHT: 0; content: =
" "
}
DIV:unknown {
	CLEAR: both; DISPLAY: block; OVERFLOW: hidden; LINE-HEIGHT: 0; content: =
" "
}
UL:unknown {
	CLEAR: both; DISPLAY: block; OVERFLOW: hidden; LINE-HEIGHT: 0; content: =
" "
}
UL:unknown {
	CLEAR: both; DISPLAY: block; OVERFLOW: hidden; LINE-HEIGHT: 0; content: =
" "
}
DL:unknown {
	CLEAR: both; DISPLAY: block; OVERFLOW: hidden; LINE-HEIGHT: 0; content: =
" "
}
DL:unknown {
	CLEAR: both; DISPLAY: block; OVERFLOW: hidden; LINE-HEIGHT: 0; content: =
" "
}
H1 {
	DISPLAY: none
}
H2 {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
H3 {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
H4 {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
H5 {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
H6 {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
H2 {
	FONT-SIZE: 21px
}
H3 {
	FONT-SIZE: 17px
}
H4 {
	FONT-SIZE: 14px
}
H5 {
	FONT-SIZE: 12px
}
.sct {
	CLEAR: both; BORDER-TOP: medium none; MARGIN: 0px; WIDTH: 100%; =
PADDING-TOP: 1px; POSITION: relative
}
.area {
	POSITION: relative
}
.auto {
	WIDTH: 100%
}
* > .auto {
	WIDTH: auto
}
.a50pct {
	WIDTH: 50%
}
.a990 {
	WIDTH: 990px
}
.a660 {
	WIDTH: 660px
}
.a495 {
	WIDTH: 495px
}
.a330 {
	WIDTH: 330px
}
.a247 {
	WIDTH: 247px
}
.a165 {
	WIDTH: 165px
}
.a418 {
	WIDTH: 418px
}
.a242 {
	WIDTH: 242px
}
.a253 {
	WIDTH: 253px
}
.a216 {
	WIDTH: 216px
}
.a209 {
	WIDTH: 209px
}
.a162 {
	WIDTH: 162px
}
.a157 {
	WIDTH: 157px
}
.a153 {
	WIDTH: 153px
}
.a200 {
	WIDTH: 200px
}
.a123 {
	WIDTH: 123px
}
.a235 {
	WIDTH: 235px
}
.a167 {
	WIDTH: 167px
}
.a825 {
	WIDTH: 825px
}
.a143 {
	WIDTH: 143px
}
.brd {
	BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: =
1px; BORDER-RIGHT-WIDTH: 1px
}
.fnd {
	BACKGROUND: no-repeat right bottom
}
.izq {
	FLOAT: left
}
.der {
	FLOAT: right
}
.absizq {
	DISPLAY: block; Z-INDEX: 1; LEFT: 7px; POSITION: absolute; TOP: 7px
}
.absder {
	DISPLAY: block; Z-INDEX: 1; RIGHT: 7px; POSITION: absolute; TOP: 7px
}
.mrg7 {
	MARGIN: 7px
}
.pdg7 {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; =
PADDING-TOP: 7px
}
.nomr {
	MARGIN: 0px
}
.nopd {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; PADDING-TOP: 0px! important
}
.inl {
	CLEAR: none; BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: 0px; =
PADDING-TOP: 0px; BORDER-BOTTOM: 0px; LIST-STYLE-TYPE: none; POSITION: =
relative; TEXT-ALIGN: left
}
.blq {
	CLEAR: none; BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: 0px; =
PADDING-TOP: 0px; BORDER-BOTTOM: 0px; LIST-STYLE-TYPE: none; POSITION: =
relative; TEXT-ALIGN: left
}
.inl {
	DISPLAY: inline
}
.blq {
	DISPLAY: block
}
.inl:unknown {
	DISPLAY: none
}
.inl:unknown {
	DISPLAY: none
}
.blq:unknown {
	DISPLAY: none
}
.blq:unknown {
	DISPLAY: none
}
.no {
	DISPLAY: none
}
.nov {
	DISPLAY: block; VISIBILITY: hidden; FONT: 0px/0px Arial
}
.act .a660 {
	BACKGROUND: url(/img/f_dot.gif) repeat-y right top
}
.act .a660 .noticias {
	BACKGROUND: url(/img/f_dot.gif) repeat-y 410px top
}
.not {
	BACKGROUND: url(/img/f_dot.gif) repeat-x left top
}
.crp {
	BACKGROUND: url(/img/f_dot.gif) repeat-y 658px top
}
.col2 {
	BACKGROUND: url(/img/f_dot.gif) repeat-y 50% top
}
.f_clr {
	BACKGROUND-COLOR: #f8f8f8
}
.caja {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; OVERFLOW: =
hidden; WIDTH: 100%; PADDING-TOP: 7px; POSITION: relative
}
* > .caja {
	WIDTH: auto
}
.izq .brd {
	MARGIN: 7px 0px 7px 7px
}
.der .brd {
	MARGIN: 7px 7px 7px 0px
}
.menu {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; POSITION: relative
}
.menu UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.menu DL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.menu DT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.menu DD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
* .pestana {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; =
BORDER-LEFT-WIDTH: 1px; BORDER-LEFT-COLOR: #bbb5a6; BACKGROUND: #f4f5f7; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-BOTTOM-COLOR: #bbb5a6; PADDING-BOTTOM: =
0px; MARGIN: 0px; TEXT-TRANSFORM: uppercase; COLOR: #fff; =
BORDER-TOP-COLOR: #bbb5a6; PADDING-TOP: 0px; POSITION: relative; =
BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: =
#bbb5a6
}
* .off {
	COLOR: #000; BACKGROUND-COLOR: #fff; TEXT-DECORATION: none
}
* .pestana:hover {
	COLOR: #000; BACKGROUND-COLOR: #fff; TEXT-DECORATION: none
}
* A.pestana:hover {
	BACKGROUND-COLOR: #ff6
}
.boton {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 6px; DISPLAY: inline; =
PADDING-LEFT: 6px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 1px; =
FONT-SIZE: 11px; BORDER-LEFT-COLOR: #dcd6c2; BORDER-BOTTOM-WIDTH: 1px; =
BORDER-BOTTOM-COLOR: #8c8266; PADDING-BOTTOM: 2px; CURSOR: pointer; =
COLOR: #134d86; BORDER-TOP-COLOR: #dcd6c2; LINE-HEIGHT: 17px; =
PADDING-TOP: 2px; POSITION: relative; BACKGROUND-COLOR: #fff; =
TEXT-ALIGN: center; BORDER-RIGHT-WIDTH: 1px; TEXT-DECORATION: none; =
BORDER-RIGHT-COLOR: #8c8266
}
.boton:hover {
	COLOR: #c00; TEXT-DECORATION: none
}
.boton:active {
	BORDER-LEFT-COLOR: #8c8266; BORDER-BOTTOM-COLOR: #dcd6c2; =
BORDER-TOP-COLOR: #8c8266; BORDER-RIGHT-COLOR: #dcd6c2
}
INPUT.boton {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; CURSOR: pointer; PADDING-TOP: 0px
}
INPUT[class=3D'boton'] {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px
}
.mas {
	CLEAR: right; DISPLAY: block; FLOAT: right; MARGIN: 0px 7px 7px; =
TEXT-ALIGN: right
}
* .nav {
	CLEAR: none; MARGIN: 7px 0px 0px; POSITION: relative; TEXT-ALIGN: right
}
* .nav .boton {
	CLEAR: none; TEXT-TRANSFORM: capitalize; BACKGROUND-REPEAT: no-repeat; =
POSITION: relative; HEIGHT: 15px
}
* .nav .ant {
	BACKGROUND-POSITION: left center; PADDING-LEFT: 14px; BACKGROUND-IMAGE: =
url(/img/ant.gif)
}
* .nav .sig {
	PADDING-RIGHT: 14px; BACKGROUND-POSITION: right center; =
BACKGROUND-IMAGE: url(/img/sig.gif)
}
* .nav .ant {
	BACKGROUND-COLOR: #134d86
}
* .nav .sig {
	BACKGROUND-COLOR: #134d86
}
* .nav .sig:hover {
	BACKGROUND-COLOR: #c00
}
* .nav .ant:hover {
	BACKGROUND-COLOR: #c00
}
.a242 .brd .nav {
	PADDING-RIGHT: 7px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
* > .a242 .brd .nav {
	MARGIN: 0px 0px 7px
}
.cliche {
	CLEAR: left; DISPLAY: block; FONT-WEIGHT: normal; TEXT-TRANSFORM: =
uppercase; FONT-FAMILY: palatino, georgia, times new roman, serif
}
.rot {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 7px; DISPLAY: block; =
PADDING-LEFT: 7px; BORDER-LEFT-WIDTH: 0px; BORDER-LEFT-COLOR: #cfcac0; =
BACKGROUND: #f9f9f7; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: =
#cfcac0; PADDING-BOTTOM: 0px; FONT: 16px palatino, georgia, times new =
roman, serif; OVERFLOW: hidden; TEXT-TRANSFORM: uppercase; WIDTH: 100%; =
BORDER-TOP-COLOR: #cfcac0; PADDING-TOP: 0px; TEXT-ALIGN: left; =
BORDER-RIGHT-WIDTH: 0px; BORDER-RIGHT-COLOR: #cfcac0
}
* > .rot {
	WIDTH: auto
}
.rot .mini {
	FONT: 10px trebuchet ms, lucida grande, tahoma, arial, geneva, verdana, =
helvetica, sans-serif; TEXT-TRANSFORM: none; COLOR: #a2a2a1; =
PADDING-TOP: 4px
}
.cliche {
	MARGIN: 0px 0px 2px
}
.subcl {
	MARGIN: 0px 0px 2px
}
.cintillo {
	MARGIN: 0px 0px 2px
}
.titulillo {
	MARGIN: 0px 0px 2px
}
.titulo {
	MARGIN: 0px 0px 2px
}
.entradilla {
	MARGIN: 0px 0px 2px
}
.autor {
	MARGIN: 0px 0px 2px
}
.ante {
	MARGIN: 0px 0px 2px
}
.fecha {
	MARGIN: 0px 0px 2px
}
.subcl {
	MARGIN-TOP: -6px; FONT-SIZE: 11px; MARGIN-BOTTOM: 14px; TEXT-TRANSFORM: =
uppercase; POSITION: relative
}
.titulillo {
	DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 16px; TEXT-TRANSFORM: =
uppercase; COLOR: #c00; FONT-STYLE: normal; FONT-FAMILY: georgia, times =
new roman, serif
}
.cargo {
	DISPLAY: block; FONT-WEIGHT: bolder; FONT-SIZE: 11px; COLOR: #9a8f7a; =
FONT-STYLE: normal; FONT-FAMILY: georgia, times new roman, serif
}
.cintillo {
	BACKGROUND-POSITION: left top; DISPLAY: block; MARGIN-BOTTOM: 3px; =
BACKGROUND-REPEAT: no-repeat; HEIGHT: 35px
}
.titulillo SPAN {
	DISPLAY: none
}
.cintillo SPAN {
	DISPLAY: none
}
.cargo SPAN {
	DISPLAY: none
}
.titulo {
	FONT-WEIGHT: normal; FONT-SIZE: 17px
}
.prime .titulo {
	FONT-WEIGHT: normal; FONT-SIZE: 21px
}
.entradilla {
	FONT-WEIGHT: normal; FONT-SIZE: 14px; MARGIN-BOTTOM: 7px; COLOR: #666; =
FONT-FAMILY: georgia, times new roman, serif
}
.entradilla:unknown {
	DISPLAY: none; content: ""
}
.entradilla:unknown {
	DISPLAY: none; content: ""
}
.fecha {
	MARGIN-TOP: -2px; FONT-SIZE: 11px; BORDER-BOTTOM-WIDTH: 1px
}
.autor {
	DISPLAY: block; FONT-WEIGHT: bolder; TEXT-TRANSFORM: capitalize; =
FONT-STYLE: normal
}
.not {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
7px; MARGIN: 0px 7px; WIDTH: 100%; PADDING-TOP: 12px; POSITION: relative
}
* > .not {
	WIDTH: auto
}
.not .rot {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 4px; PADDING-LEFT: 4px; =
BORDER-LEFT-WIDTH: 1px; BORDER-LEFT-COLOR: #ccc; BACKGROUND: #eceae6; =
BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #ccc; PADDING-BOTTOM: =
4px; MARGIN: 0px 1px; FONT: bolder 13px georgia, times new roman, serif; =
COLOR: #c00; BORDER-TOP-COLOR: #ccc; PADDING-TOP: 4px; TEXT-ALIGN: =
center; BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: #ccc
}
.rel LI {
	MARGIN-TOP: 0px; LIST-STYLE-IMAGE: url(/img/f_dot_rel.gif); =
MARGIN-BOTTOM: 4px; COLOR: #000; FONT-FAMILY: georgia, times new roman, =
serif
}
.not UL:unknown {
	DISPLAY: none
}
.not UL:unknown {
	DISPLAY: none
}
.not UL LI:unknown {
	DISPLAY: none
}
.not UL LI:unknown {
	DISPLAY: none
}
.ico {
	PADDING-LEFT: 4px
}
* > .ico {
	PADDING-LEFT: 0px; MARGIN-LEFT: 4px
}
.op {
	LIST-STYLE-IMAGE: url(/img/icos/op.gif)! important
}
.op EM {
	COLOR: #cc0000
}
.dc {
	LIST-STYLE-IMAGE: url(/img/icos/dc.gif)! important
}
.ft {
	LIST-STYLE-IMAGE: url(/img/icos/ft.gif)! important
}
.vd {
	LIST-STYLE-IMAGE: url(/img/icos/vd.gif)! important
}
.pdf {
	LIST-STYLE-IMAGE: url(/img/icos/pdf.gif)! important
}
.a418 .not {
	MARGIN-RIGHT: 14px
}
.gran {
	BACKGROUND-IMAGE: none; BACKGROUND-COLOR: #fff
}
.gran .titulo {
	FONT-WEIGHT: normal; FONT-SIZE: 29px
}
.gran .entradilla {
	FONT-SIZE: 16px; COLOR: #000
}
.a418 .titulo {
	FONT-WEIGHT: normal; FONT-SIZE: 21px
}
.a418 .entradlla {
	FONT-SIZE: 12px
}
.a418 .prime .titulo {
	FONT-SIZE: 29px
}
.a253 .titulo {
	FONT-WEIGHT: bolder; FONT-SIZE: 14px
}
.a209 .titulo {
	FONT-WEIGHT: bolder; FONT-SIZE: 14px
}
.a165 .titulillo {
	FONT-WEIGHT: normal; FONT-SIZE: 10px
}
.a165 .titulo {
	FONT-SIZE: 11px
}
.a242 .not {
	MARGIN-LEFT: 0px; MARGIN-RIGHT: 7px
}
.a242 .brd .not {
	MARGIN-LEFT: 7px
}
IMG {
	BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: block; =
PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: 0px; =
PADDING-TOP: 0px; BORDER-BOTTOM: 0px
}
.img {
	CLEAR: none; OVERFLOW: hidden; POSITION: relative; TEXT-ALIGN: left
}
.img .brd {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 1px; DISPLAY: block; =
PADDING-LEFT: 1px; BORDER-LEFT-WIDTH: 0px; Z-INDEX: 100; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 5px; MARGIN: 0px; PADDING-TOP: =
1px; POSITION: relative; BORDER-RIGHT-WIDTH: 0px
}
* > .der .brd {
	MARGIN-LEFT: 3px
}
* > .izq .brd {
	MARGIN-RIGHT: 3px
}
.img .relimg {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
7px; MARGIN: 0px 3px; PADDING-TOP: 0px
}
.img .autor {
	CLEAR: right; FLOAT: right; MARGIN: 0px; FONT: 9px georgia, times new =
roman, serif; OVERFLOW: hidden; TEXT-TRANSFORM: capitalize; WIDTH: 30%; =
TEXT-ALIGN: right
}
.img .piefoto {
	CLEAR: left; FLOAT: left; WIDTH: 68%
}
.i642 IMG {
	WIDTH: 642px
}
.i459 IMG {
	WIDTH: 459px
}
.i395 IMG {
	WIDTH: 395px
}
.i390 IMG {
	WIDTH: 390px
}
.i316 IMG {
	WIDTH: 316px
}
.i306 IMG {
	WIDTH: 300px
}
.i300 IMG {
	WIDTH: 300px
}
.i231 IMG {
	WIDTH: 231px
}
.i154 IMG {
	WIDTH: 154px
}
.i149 IMG {
	WIDTH: 149px
}
.i146 IMG {
	WIDTH: 146px
}
.i143 IMG {
	WIDTH: 143px
}
.i124 IMG {
	WIDTH: 124px
}
.i100 IMG {
	WIDTH: 100px
}
.i75 IMG {
	WIDTH: 75px
}
.i63 IMG {
	WIDTH: 63px
}
.i45 IMG {
	WIDTH: 45px
}
.i35 IMG {
	WIDTH: 35px
}
.a510 {
	WIDTH: 510px
}
.a400 {
	WIDTH: 400px
}
.a310 {
	WIDTH: 310px
}
.a150 {
	WIDTH: 150px
}
.notv04 .titulo {
	CLEAR: both
}
.not .img {
	CLEAR: both
}
.not .der {
	CLEAR: right
}
.not .izq {
	CLEAR: left
}
.not .i231 {
	WIDTH: 233px
}
.not .i316 {
	WIDTH: 316px
}
.nopd .prime {
	BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium =
none; BORDER-BOTTOM: medium none
}
.nopd .prime .titulillo {
	FONT-WEIGHT: normal; COLOR: #000
}
.nopd .img .lrg {
	MARGIN: 0px 0px 1px; WIDTH: 100%
}
.nopd H2.cliche {
	COLOR: #c00
}
.nopd H2.cliche {
	FONT-SIZE: 17px; MARGIN: 2px 7px
}
.a165 H2.cliche {
	MARGIN: 2px 0px
}
.nopd .subcl {
	MARGIN-LEFT: 7px; MARGIN-RIGHT: 7px
}
.mdt {
	MARGIN-RIGHT: 7px
}
.a660 .md7 {
	MARGIN-RIGHT: 7px
}
.mi7 {
	MARGIN-LEFT: 7px
}
.a660 .mi7 {
	MARGIN-LEFT: 7px
}
.pd7 {
	PADDING-RIGHT: 7px
}
.pi7 {
	PADDING-LEFT: 7px
}
.a242 .brd .not {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px 7px; PADDING-TOP: =
0px
}
.a242 .brd .rel {
	MARGIN-TOP: 0px; PADDING-TOP: 0px
}
.a242 .brd .nav {
	MARGIN: 7px 0px
}
.a330 .caja {
	MARGIN-LEFT: 7px
}
.a330 .brd {
	MARGIN-LEFT: 7px
}
.a323 .caja {
	MARGIN-LEFT: 7px
}
.a323 .brd {
	MARGIN-LEFT: 7px
}
.a330 .cliche {
	FONT-SIZE: 17px; COLOR: #666
}
.a330 .brd {
	BACKGROUND: #fff
}
.a330 .brd .auto {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.a330 .brd .i75 .brd {
	MARGIN: 0px
}
.cint_idnot_184 {
	BACKGROUND-IMAGE: url(/img/cintillos/cint_idnot_184.jpg)
}
.links {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; BACKGROUND: =
#eceae6; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; PADDING-TOP: =
0px; LIST-STYLE-TYPE: none; POSITION: relative
}
* > .links {
	WIDTH: auto
}
.links LI {
	PADDING-RIGHT: 0px; DISPLAY: block! important; PADDING-LEFT: 7px; =
FLOAT: left; PADDING-BOTTOM: 4px; MARGIN: 0px; WIDTH: 151px; =
PADDING-TOP: 4px; LIST-STYLE-TYPE: none; POSITION: relative
}
.links > LI {
	WIDTH: 144px
}
.links EM {
	DISPLAY: inline! important; FONT-WEIGHT: bolder; COLOR: #c00; =
FONT-STYLE: normal
}
.subcliche {
	TEXT-TRANSFORM: uppercase; BACKGROUND-COLOR: #fff
}
H3.subcliche {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; FONT: =
24px/28px palatino, georgia, times new roman, serif; COLOR: #666; =
MARGIN-RIGHT: 3px; PADDING-TOP: 6px
}
H3.cliche {
	PADDING-TOP: 7px
}
H4.subcliche {
	MARGIN: 6px; FONT: 18px/22px palatino, georgia, times new roman, serif; =
COLOR: #000
}
H5.subcliche {
	MARGIN: 6px; FONT: bold 14px/18px trebuchet ms, lucida grande, tahoma, =
arial, geneva, verdana, helvetica, sans-serif
}
.rvoz {
	COLOR: #c00! important
}
.caja .subcliche {
	PADDING-LEFT: 0px
}
.col3 .a253 .subcliche {
	MARGIN-LEFT: 17px
}
.col3 .a418 H4.subcliche {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; MARGIN: 0px =
8px; PADDING-TOP: 6px
}
.col2c12 .a418 .subcliche {
	MARGIN-LEFT: 14px
}
.col3 .a253 .caja .subcliche {
	MARGIN-LEFT: 0px
}
.g {
	MARGIN-LEFT: 7px
}
.clear {
	CLEAR: both; DISPLAY: block; FONT-SIZE: 1px; LINE-HEIGHT: 1px
}
.a330 .galego {
	BORDER-RIGHT: #fff 0.8em solid; PADDING-RIGHT: 0px! important; =
BORDER-TOP: #fff 0.8em solid; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; BORDER-LEFT: #fff 0.8em =
solid; PADDING-TOP: 0px! important; BORDER-BOTTOM: #fff 0.8em solid; =
BACKGROUND-COLOR: #eceae6
}
.a330 .galego H4 {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 0.3em; PADDING-LEFT: 0.3em; =
BORDER-LEFT-WIDTH: 1px; BORDER-LEFT-COLOR: #ccc; BORDER-BOTTOM-WIDTH: =
0px; BORDER-BOTTOM-COLOR: #ccc; PADDING-BOTTOM: 0.1em; COLOR: #cc0000; =
BORDER-TOP-COLOR: #ccc; PADDING-TOP: 0.3em; LETTER-SPACING: normal; =
BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: #ccc
}
.a330 .galego H4 EM {
	PADDING-LEFT: 0.2em; COLOR: #369; FONT-STYLE: normal
}
.a330 .galego P {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; =
BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; PADDING-BOTTOM: 0.5em; =
MARGIN: 0px; PADDING-TOP: 0.5em; BORDER-RIGHT-WIDTH: 1px
}
.der .video {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.a253 .video {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.actualidad .a242 .video {
	PADDING-LEFT: 7px
}
.actualidad .a253 .video {
	PADDING-LEFT: 7px
}
.a242 .video OBJECT {
	WIDTH: 234px; HEIGHT: 194px
}
.a253 .video OBJECT {
	WIDTH: 234px; HEIGHT: 194px
}
.a242 .nopd .video {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.a242 .nopd .video OBJECT {
	WIDTH: 231px; HEIGHT: 192px
}
.a165 .video {
	MARGIN-BOTTOM: 7px
}
.a165 .video OBJECT {
	WIDTH: 160px; HEIGHT: 133px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4914AF6D0A80B1A100E6A73D7E2305B3/LVDG_estilos_capa_transparente.css

.ftrans {
	DISPLAY: block; Z-INDEX: 5000; BACKGROUND: none transparent scroll =
repeat 0% 0%; FILTER: alpha(opacity=3D60); LEFT: 0px; WIDTH: 100%; =
POSITION: absolute; TOP: 0px; HEIGHT: 1200%; opacity: 0.6; -moz-opacity: =
0.6
}
* > .ftrans {
	POSITION: fixed; HEIGHT: 100%
}
.porter {
	Z-INDEX: 5001; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; =
TEXT-ALIGN: center
}
* > .porter {
	POSITION: fixed
}
.spok {
	BORDER-RIGHT: #ccc 4px solid; BORDER-TOP: #ccc 4px solid; Z-INDEX: =
5002; MARGIN: 4% auto; BORDER-LEFT: #ccc 4px solid; WIDTH: 440px; =
BORDER-BOTTOM: #ccc 4px solid; BACKGROUND-COLOR: #fff
}
.arrstr {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: =
#ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
}
.arrstr H2 {
	PADDING-RIGHT: 2px; PADDING-LEFT: 7px; PADDING-BOTTOM: 4px; MARGIN: =
0px; FONT: bolder 15px georgia, times new roman, serif; OVERFLOW: =
hidden; TEXT-TRANSFORM: capitalize; COLOR: #666; PADDING-TOP: 4px
}
.arrstr EM {
	FONT-STYLE: normal
}
.arrstr H2 .cerrar {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; FONT-SIZE: 1px; =
RIGHT: 4px; BACKGROUND: url(/img/f_aspa.gif) no-repeat center center; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 11px; =
LINE-HEIGHT: 1px; PADDING-TOP: 0px; POSITION: absolute; TOP: 4px; =
HEIGHT: 11px
}
.contrans {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; FONT: =
12px/17px arial, tahoma, geneva, helvetica, sans-serif; OVERFLOW: auto; =
MAX-HEIGHT: 400px; PADDING-TOP: 7px; HEIGHT: auto
}
.contrans H3 {
	FONT-SIZE: 13px
}
.contrans UL {
	FONT: 12px/17px arial, tahoma, geneva, helvetica, sans-serif
}
.contrans LI {
	FONT: 12px/17px arial, tahoma, geneva, helvetica, sans-serif
}
.contrans DL {
	MARGIN-TOP: 14px
}
.contrans DD {
	MARGIN-TOP: 4px; MARGIN-BOTTOM: 14px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4C89F4C00A80E0AB015D8D75A69A82EB/LVDG_estilos_caja_clasificados.css

.clasificados FIELDSET {
	CLEAR: both; BACKGROUND-POSITION: center top; DISPLAY: block; =
BORDER-BOTTOM-WIDTH: 1px; MARGIN-BOTTOM: 10px; PADDING-BOTTOM: 14px; =
WIDTH: 100%; PADDING-TOP: 48px; BACKGROUND-REPEAT: no-repeat; =
TEXT-ALIGN: center
}
.clasificados > FIELDSET {
	WIDTH: auto
}
.clasificados INPUT.brd {
	Z-INDEX: 1; WIDTH: 180px
}
.clasificados UL {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; WIDTH: 100%; PADDING-TOP: 0px
}
* > .clasificados UL {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; MARGIN: =
0px 10px; PADDING-TOP: 0px
}
.clasificados UL LI {
	CLEAR: none; PADDING-LEFT: 10px; BACKGROUND: url(/img/f_li.gif) =
no-repeat left center; FLOAT: left; WIDTH: 49.9%; COLOR: #8c8266
}
.clasificados UL > LI {
	PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; =
LIST-STYLE-TYPE: square
}
.tvgtucoche {
	BACKGROUND-IMAGE: url(/img/logos/lg_tvgtcoche.gif)
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4C879A360A80E0AB015D8D7526830E6F/LVDG_estilos_caja_relnot.css

.a330 .relnot {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; BACKGROUND: url(/img/f_dot.gif) =
#fff repeat-x left bottom; PADDING-BOTTOM: 7px; MARGIN: 0px 0px 7px; =
PADDING-TOP: 7px
}
.a330 .relnot .img .brd {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.a330 .relnot .img .relimg {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 7px
}
.a330 .relnot H2.rot {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; PADDING-BOTTOM: 3px; =
MARGIN: 7px 0px; FONT: bolder 15px georgia, times new roman, serif; =
TEXT-TRANSFORM: none; COLOR: #666; PADDING-TOP: 3px; BORDER-RIGHT-WIDTH: =
1px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4C89595B0A80E0AB015D8D75C10D0DEE/LVDG_estilos_caja_ptrcn.css

.ptrcn {
	MARGIN: 7px
}
.ptrcn .rot {
	BORDER-TOP-WIDTH: 1px! important; BACKGROUND-POSITION: 7px bottom; =
BORDER-LEFT-WIDTH: 1px! important; BORDER-BOTTOM-WIDTH: 1px! important; =
BACKGROUND-REPEAT: no-repeat; HEIGHT: 24px; BORDER-RIGHT-WIDTH: 1px! =
important
}
.ptrcn LI {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; BACKGROUND: =
url(/img/f_dot.gif) repeat-x left bottom; PADDING-BOTTOM: 4px; MARGIN: =
0px; PADDING-TOP: 4px; LIST-STYLE-TYPE: none
}
.prtcoru .rot {
	BACKGROUND-IMAGE: url(/img/logos/lg_prtcoru.gif)
}
.consorcio .rot {
	BACKGROUND-IMAGE: url(/img/logos/lg_consorcio.gif)
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/327027100A80E0AB01A3E41FC713AF4D/LVDG_estilos_piezas_caja_catalogo.css

.ctlg {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN-RIGHT: 7px; =
PADDING-TOP: 20px; POSITION: relative
}
.ctlg H3 {
	CLEAR: none; BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
DISPLAY: inline; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: =
0px; MARGIN: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: =
0px; TEXT-ALIGN: left
}
.ctlg .pestana {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; =
PADDING-BOTTOM: 2px; MARGIN: 0px 4px 0px 0px; TEXT-TRANSFORM: none; =
COLOR: #000; PADDING-TOP: 4px; POSITION: relative; TOP: -3px; =
BORDER-RIGHT-WIDTH: 1px
}
* > .ctlg .pestana {
	MARGIN: 0px; TOP: -3px
}
.ctlg .off {
	Z-INDEX: 100; BORDER-BOTTOM-COLOR: #fff
}
.ctlg .cliche {
	CLEAR: both; FLOAT: left; POSITION: relative
}
.ctlg .item {
	CLEAR: left; BACKGROUND: #fff; FLOAT: left; WIDTH: 100%; POSITION: =
relative
}
.ctlg .cont {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; PADDING-BOTTOM: 7px; =
MARGIN: 0px; WIDTH: 100%; PADDING-TOP: 7px; BORDER-RIGHT-WIDTH: 1px
}
* > .ctlg .cont {
	WIDTH: auto
}
.ctlg .cont UL.ult {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: =
relative
}
.ctlg .cont .ult LI {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 4px 0px 4px 36px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; =
POSITION: relative
}
.ctlg .cont .ult LI EM {
	DISPLAY: block; LEFT: -36px; FONT: bolder 11px arial, geneva, =
helvetica, sans-serif; COLOR: #c33; POSITION: absolute; TOP: 2px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Location: http://www.lavozdegalicia.es/ficheros/4C88D3620A80E0AB015D8D75B9C5111B/LVDG_estilos_caja_encuentros.css

.encuentros .invitado {
	FONT-WEIGHT: bolder
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4C86F55B0A80E0AB015D8D75E7DB9570/LVDG_estilos_caja_pasos.css

.a330 .pasos {
	FONT-SIZE: 13px
}
.pasos P {
	BACKGROUND-POSITION: left top; PADDING-LEFT: 30px; BACKGROUND-REPEAT: =
no-repeat
}
.pasos P STRONG {
	FONT-WEIGHT: normal; FONT-SIZE: 17px
}
.paso_01 {
	BACKGROUND-IMAGE: url(/img/paso_01.gif)
}
.paso_02 {
	BACKGROUND-IMAGE: url(/img/paso_02.gif)
}
.paso_03 {
	BACKGROUND-IMAGE: url(/img/paso_03.gif)
}
.pasos .links {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; BACKGROUND: =
#eceae6; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; PADDING-TOP: =
0px; LIST-STYLE-TYPE: none
}
.pasos > .links {
	WIDTH: auto
}
.pasos .links LI {
	PADDING-RIGHT: 0px; DISPLAY: block! important; PADDING-LEFT: 7px; =
FLOAT: left; PADDING-BOTTOM: 4px; MARGIN: 0px; WIDTH: 144px; =
PADDING-TOP: 4px; LIST-STYLE-TYPE: none; POSITION: relative
}
.pasos .links EM {
	DISPLAY: inline! important; FONT-WEIGHT: bolder; COLOR: #c00; =
FONT-STYLE: normal
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/BC6FCC230A80E0AB01A4181CC75C3517/LVDG_estilos_sector_info.css

.actualidad {
	BORDER-RIGHT: 0px double; BORDER-TOP: 0px double; MARGIN: 7px 0px; =
BORDER-LEFT: 0px double; BORDER-BOTTOM: 3px double
}
.actualidad .a495 {
	BACKGROUND: url(/img/f_dot.gif) repeat-y 244px top
}
.actualidad .a242 DIV.not {
	MARGIN-LEFT: 7px
}
.actualidad .a242 .caja DIV.not {
	MARGIN-LEFT: 7px
}
.actualidad .g {
	FONT-SIZE: 27px; BACKGROUND: #fff; MARGIN: 0px 7px; COLOR: #666
}
.actualidad .a165 .prim {
	MARGIN-RIGHT: 7px
}
.actualidad .a165 .prim H3.cliche {
	COLOR: #c33
}
.actualidad .a165 .prim .titulo {
	FONT-SIZE: 18px
}
.info .a165 .debate {
	PADDING-LEFT: 0px; MARGIN-BOTTOM: 14px
}
.info .a165 .nopd .not {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
MARGIN-LEFT: 0px; PADDING-TOP: 7px
}
.info .nots {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
14px; PADDING-TOP: 0px
}
.info .nots .ocio {
	MARGIN: 0px
}
.info .nots .not {
	MARGIN-LEFT: 0px
}
.info .a660 {
	BACKGROUND: url(/img/f_dot.gif) repeat-y right top
}
.info .auto {
	MARGIN: 7px 0px
}
.img .relimg {
	MARGIN: 0px 3px
}
.info .sub_info {
	BACKGROUND: url(/img/f_dot.gif) repeat-x left bottom
}
.info .sub_info .a418 {
	BACKGROUND: url(/img/f_dot.gif) repeat-y 410px top; MARGIN: 7px 0px
}
.info .sub_info .a418 .auto {
	BACKGROUND: url(/img/f_dot.gif) repeat-y 205px top
}
.info .sub_info .a242 {
	MARGIN: 7px 0px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/B2CC47C00A80E0AB00B113C7912EC5AE/LVDG_estilos_piezas_opiniones.css

.a660 .coment {
	FONT-FAMILY: georgia, times new roman, serif
}
.a660 .coment LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; FONT: 11px =
trebuchet ms, lucida grande, tahoma, arial, geneva, verdana, helvetica, =
sans-serif; MARGIN-LEFT: 7px; COLOR: #000; PADDING-TOP: 7px; =
LIST-STYLE-TYPE: none
}
.a660 .coment LI * {
	FONT-FAMILY: georgia, times new roman, serif
}
.a660 .coment H4 {
	FONT-SIZE: 18px
}
.a660 .coment H3 {
	FONT-SIZE: 12px; COLOR: #660; POSITION: relative
}
.a660 .coment H3 EM {
	FONT-WEIGHT: normal; LEFT: -37px; WIDTH: 30px; FONT-STYLE: normal; =
POSITION: absolute; TEXT-ALIGN: right
}
.a660 .coment .localizador {
	MARGIN-TOP: 4px; FONT-SIZE: 11px
}
.a660 .coment P {
	FONT-SIZE: 12px; MARGIN: 4px 0px; COLOR: #666; LINE-HEIGHT: 150%
}
.a660 .coment P A {
	TEXT-DECORATION: underline
}
.a660 .coment P A:hover {
	COLOR: #cc0000
}
.a660 .coment A.opina {
	PADDING-LEFT: 24px; BACKGROUND: url(/img/icos/op.gif) no-repeat 4px =
0px; FONT: 11px trebuchet ms, lucida grande, tahoma, arial, geneva, =
verdana, helvetica, sans-serif
}
.a660 .coment .navopi {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(/img/f_dot.gif) repeat-x left top; PADDING-BOTTOM: 0px; MARGIN: 7px =
0px; PADDING-TOP: 0px; POSITION: relative; TEXT-ALIGN: left
}
.a660 .coment .sup {
	BACKGROUND: url(/img/f_dot.gif) repeat-x left bottom
}
.a660 .coment .navopi {
	FONT: 12px trebuchet ms, lucida grande, tahoma, arial, geneva, verdana, =
helvetica, sans-serif
}
.a660 .coment .navopi H2.cliche {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 2px; MARGIN: =
0px; FONT: 21px georgia, times new roman, serif; PADDING-TOP: 5px
}
.a660 .coment .navopi .nav {
	DISPLAY: block; RIGHT: 0px; POSITION: absolute; TOP: -7px
}
* > .a660 .coment .navopi .nav {
	TOP: 0px
}
.a660 .coment .navopi P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; FONT: 15px/15px georgia, times new roman, serif; COLOR: #333; =
PADDING-TOP: 5px
}
.a660 .coment .navopi P EM {
	FONT-WEIGHT: bolder; COLOR: #c00; FONT-STYLE: normal
}
.a660 .coment .navopi .nav .boton {
	TEXT-TRANSFORM: capitalize
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/327027100A80E0AB01A3E41FC713AF4D/LVDG_estilos_piezas_caja_catalogo.css

.ctlg {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN-RIGHT: 7px; =
PADDING-TOP: 20px; POSITION: relative
}
.ctlg H3 {
	CLEAR: none; BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; =
DISPLAY: inline; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: =
0px; MARGIN: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: =
0px; TEXT-ALIGN: left
}
.ctlg .pestana {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; =
PADDING-BOTTOM: 2px; MARGIN: 0px 4px 0px 0px; TEXT-TRANSFORM: none; =
COLOR: #000; PADDING-TOP: 4px; POSITION: relative; TOP: -3px; =
BORDER-RIGHT-WIDTH: 1px
}
* > .ctlg .pestana {
	MARGIN: 0px; TOP: -3px
}
.ctlg .off {
	Z-INDEX: 100; BORDER-BOTTOM-COLOR: #fff
}
.ctlg .cliche {
	CLEAR: both; FLOAT: left; POSITION: relative
}
.ctlg .item {
	CLEAR: left; BACKGROUND: #fff; FLOAT: left; WIDTH: 100%; POSITION: =
relative
}
.ctlg .cont {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; PADDING-BOTTOM: 7px; =
MARGIN: 0px; WIDTH: 100%; PADDING-TOP: 7px; BORDER-RIGHT-WIDTH: 1px
}
* > .ctlg .cont {
	WIDTH: auto
}
.ctlg .cont UL.ult {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: =
relative
}
.ctlg .cont .ult LI {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 4px 0px 4px 36px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; =
POSITION: relative
}
.ctlg .cont .ult LI EM {
	DISPLAY: block; LEFT: -36px; FONT: bolder 11px arial, geneva, =
helvetica, sans-serif; COLOR: #c33; POSITION: absolute; TOP: 2px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1191926985177370/LVDG_estilos_enviar_noticia.css

.contrans .noticia {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; =
PADDING-TOP: 7px; BACKGROUND-COLOR: #f8f2eb
}
.contrans .noticia .titulo {
	FONT-WEIGHT: bolder; FONT-SIZE: 13px
}
.contrans .noticia .titulo EM {
	FONT-SIZE: 11px
}
.contrans .noticia .entradilla {
	FONT-SIZE: 11px
}
#enviar_popup FORM {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; MARGIN: 0px =
7px; WIDTH: 100%; PADDING-TOP: 7px; POSITION: relative
}
* > #enviar_popup FORM {
	WIDTH: auto
}
#enviar_popup FIELDSET {
	CLEAR: both; DISPLAY: block; PADDING-BOTTOM: 14px; POSITION: relative
}
#enviar_popup LEGEND {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; LEFT: -7px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: bolder 13px georgia, times new =
roman, times, serif; PADDING-TOP: 0px; POSITION: relative
}
* > #enviar_popup LEGEND {
	LEFT: 0px
}
#enviar_popup LABEL {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; FONT: 12px trebuchet ms, tahoma, geneva, helvetica, sans serif; =
WIDTH: auto; PADDING-TOP: 3px
}
#enviar_popup INPUT {
	CLEAR: both; DISPLAY: block; FONT-SIZE: 12px; MARGIN: 0px
}
#enviar_popup TEXTAREA {
	CLEAR: both; DISPLAY: block; FONT-SIZE: 12px; MARGIN: 0px
}
* > #enviar_popup INPUT {
	MARGIN: 5px 0px 0px
}
* > #enviar_popup TEXTAREA {
	MARGIN: 5px 0px 0px
}
.t223 {
	WIDTH: 223px
}
.t148 {
	WIDTH: 148px
}
#enviar_popup FORM EM {
	COLOR: #c00; FONT-STYLE: normal
}
#enviar_popup EM.der {
	FONT-SIZE: 10px; RIGHT: 0px; POSITION: absolute; TOP: 4px
}
#enviar_popup TEXTAREA {
	WIDTH: 100%; HEIGHT: 43px
}
#enviar_ok_popup H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; MARGIN: 0px =
7px; FONT: bolder 14px georgia, times new roman, times, serif; COLOR: =
#c00; PADDING-TOP: 7px
}
#enviar_ok_popup P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; MARGIN: 0px =
7px; FONT: 13px/19px trebuchet ms, tahoma, geneva, helvetica, sans =
serif; PADDING-TOP: 7px
}
#enviar_error_popup H3 {
	BORDER-RIGHT: #e3e2dd 1px solid; PADDING-RIGHT: 7px; BORDER-TOP: =
#e3e2dd 1px solid; DISPLAY: block; PADDING-LEFT: 70px; BACKGROUND: =
url(/img/icos/error_enviar.gif) #ffc no-repeat 14px 14px; =
PADDING-BOTTOM: 14px; MARGIN: 21px 7px 14px; FONT: bolder 14px/21px =
georgia, times new roman, times, serif; BORDER-LEFT: #e3e2dd 1px solid; =
COLOR: #c00; PADDING-TOP: 7px; BORDER-BOTTOM: #e3e2dd 1px solid
}
#enviar_error_popup P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; MARGIN: 0px =
7px; FONT: 13px/19px trebuchet ms, tahoma, geneva, helvetica, sans =
serif; PADDING-TOP: 7px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/76D3865F0A80B1A100AE997B485F3286/LVDG_estilos_detalle.css

.det {
	BACKGROUND: url(/img/f_dot_det.gif) repeat-y 660px 2px
}
.det .auto .not {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.a330 .relacionados {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; BACKGROUND: url(/img/f_dot.gif) =
#fff repeat-x left bottom; PADDING-BOTTOM: 7px; MARGIN: 0px 0px 7px; =
PADDING-TOP: 7px
}
.a330 .relacionados .img .brd {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.a330 .relacionados .img .relimg {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 7px
}
.a330 .relacionados H2.rot {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; PADDING-BOTTOM: 3px; =
MARGIN: 7px 0px; FONT: bolder 15px georgia, times new roman, serif; =
TEXT-TRANSFORM: none; COLOR: #666; PADDING-TOP: 3px; BORDER-RIGHT-WIDTH: =
1px
}
.det H1.titulo {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; FONT-SIZE: 37px; =
PADDING-BOTTOM: 7px; PADDING-TOP: 7px
}
.det H1.titulo EM.titulillo {
	FONT-SIZE: 18px
}
.det H1.titulo EM.cargo {
	FONT-WEIGHT: bolder; FONT-SIZE: 16px; COLOR: #9a8f7a
}
.det .texto {
	FONT: 16px/145% Verdana, Arial, Helvetica, sans-serif; OVERFLOW: =
hidden; WIDTH: 100%
}
.det .entradilla {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 19px; PADDING-BOTTOM: =
14px; LINE-HEIGHT: 120%; PADDING-TOP: 0px
}
.det .texto A {
	TEXT-DECORATION: underline
}
.det .texto A:hover {
	COLOR: #c00
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/A20A9B030A80E0AB007BFC04A7AF50C3/LVDG_estilos_utnot.css

.utnot {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(/img/f_dot.gif) repeat-x left top; PADDING-BOTTOM: 2px; MARGIN: 16px =
0px 0px; OVERFLOW: hidden; PADDING-TOP: 2px; LIST-STYLE-TYPE: none; =
POSITION: relative; HEIGHT: 30px
}
* > .utnot {
	HEIGHT: 26px
}
.utnot LI {
	CLEAR: none; FLOAT: left
}
.utnot SPAN {
	DISPLAY: none
}
.utnot EM {
	FONT-WEIGHT: bolder; MARGIN-LEFT: 7px; COLOR: #c00; FONT-STYLE: normal
}
.opnot {
	PADDING-RIGHT: 7px; MARGIN-TOP: 4px; DISPLAY: inline; LINE-HEIGHT: =
20px; MARGIN-RIGHT: 7px
}
.opnot A {
	BACKGROUND-POSITION: 2px 50%; PADDING-LEFT: 20px; BACKGROUND-IMAGE: =
url(/img/icos/op.gif); BACKGROUND-REPEAT: no-repeat
}
.votnot {
	DISPLAY: inline; LINE-HEIGHT: 30px
}
.votnot DL {
	DISPLAY: inline
}
.votnot DT {
	DISPLAY: inline
}
.votnot DD {
	DISPLAY: inline
}
.star {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: url(/img/star.gif) =
no-repeat; PADDING-BOTTOM: 0px; MARGIN: 4px 2px 0px 0px; WIDTH: 16px; =
PADDING-TOP: 0px; POSITION: relative; HEIGHT: 16px
}
* > .star {
	MARGIN: 0px
}
.on {
	BACKGROUND-IMAGE: url(/img/star_on.gif)
}
.star:active {
	BACKGROUND-IMAGE: url(/img/star_on.gif)
}
.star:hover {
	BACKGROUND-IMAGE: url(/img/star_ov.gif)
}
.utnot .servnot {
	DISPLAY: block; FLOAT: right
}
.utnot .servnot .inl EM {
	VISIBILITY: hidden
}
.servnot {
	RIGHT: -7px; POSITION: absolute; TOP: 7px; TEXT-ALIGN: right
}
.utnot .servnot LI {
	BACKGROUND: url(/img/f_dot.gif) #fff repeat-y right top
}
.utnot .servnot LI.nobrd {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.servnot A {
	CLEAR: none; PADDING-RIGHT: 7px; BACKGROUND-POSITION: left center; =
DISPLAY: inline; PADDING-LEFT: 20px; FONT-SIZE: 13px; PADDING-BOTTOM: =
0px; MARGIN: 0px 7px; WIDTH: auto; LINE-HEIGHT: 20px; PADDING-TOP: 0px; =
BACKGROUND-REPEAT: no-repeat
}
A.imp {
	BACKGROUND-IMAGE: url(/img/icos/imp.gif)
}
A.vol {
	BACKGROUND-IMAGE: url(/img/icos/vol.gif)
}
A.env {
	BACKGROUND-IMAGE: url(/img/icos/en.gif)
}
A.tmenos {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; MARGIN-LEFT: 0px; MARGIN-RIGHT: =
0px
}
A.tmas {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; MARGIN-LEFT: 0px; MARGIN-RIGHT: =
0px
}
A.tmenos {
	BACKGROUND-IMAGE: url(/img/icos/texto_menos.gif)
}
A.tmas {
	PADDING-RIGHT: 7px; BACKGROUND-IMAGE: url(/img/icos/texto_mas.gif)
}
.comnot {
	FONT-SIZE: 11px; LINE-HEIGHT: 30px
}
.comnot A.ico {
	BACKGROUND-POSITION: left bottom; WIDTH: 27px; BACKGROUND-REPEAT: =
no-repeat; HEIGHT: 24px
}
.comnot > A.ico {
	PADDING-LEFT: 27px; MARGIN: 0px
}
.del_ico {
	BACKGROUND-IMAGE: url(/img/icos/delicious.gif)
}
.tech_ico {
	BACKGROUND-IMAGE: url(/img/icos/technorati.gif)
}
.yahoo_ico {
	BACKGROUND-IMAGE: url(/img/icos/yahoo.gif)
}
.digg_ico {
	BACKGROUND-IMAGE: url(/img/icos/digg.gif)
}
.meneame_ico {
	BACKGROUND-IMAGE: url(/img/icos/meneame.gif)
}
.chuza_ico {
	BACKGROUND-IMAGE: url(/img/icos/chuza.gif)
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/76E596D70A80B1A100AE997B308D7528/LVDG_estilos_localizador.css

.a660 DL.localizador {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 7px =
0px; COLOR: #000; PADDING-TOP: 0px
}
.a660 DL.localizador DT.si {
	DISPLAY: inline; LIST-STYLE-TYPE: none
}
.a660 DL.localizador DD {
	DISPLAY: inline; LIST-STYLE-TYPE: none
}
.a660 DL.localizador DD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 6px; FONT-SIZE: 11px; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 0px 6px; BORDER-LEFT: #000 1px solid; LINE-HEIGHT: =
11px; PADDING-TOP: 0px; FONT-FAMILY: georgia, times new roman, serif
}
.a660 DL.localizador DT.si {
	FONT-WEIGHT: bolder
}
.a660 DL.localizador DD.firma {
	FONT-WEIGHT: bolder
}
.a660 DL.localizador DD.autor {
	FONT-WEIGHT: bolder
}
.a660 DL.localizador DD.firma {
	PADDING-LEFT: 0px; MARGIN-LEFT: 0px; BORDER-LEFT: 0px
}
.a660 DL.localizador DD.autor {
	PADDING-LEFT: 0px; MARGIN-LEFT: 0px; BORDER-LEFT: 0px
}
.a660 DL.localizador .firma EM {
	FONT-WEIGHT: normal; COLOR: #666; FONT-STYLE: normal
}
.a660 DL.localizador .firma {
	TEXT-TRANSFORM: capitalize
}
.a660 DL.localizador .localizacion {
	TEXT-TRANSFORM: capitalize
}
.a660 DL.localizador .localizacion {
	BORDER-RIGHT: #000 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: #000 0px =
solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 6px; =
BORDER-LEFT: #000 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #000 0px =
solid
}
.a660 DL.localizador .fecha {
	BORDER-RIGHT: #000 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: #000 0px =
solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 6px; =
BORDER-LEFT: #000 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #000 0px =
solid
}
.a660 DL.localizador DD A {
	TEXT-DECORATION: underline
}
.a660 DL.localizador DD.trackback A {
	COLOR: #c00
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/B2CB05AB0A80E0AB00B113C752A3F9E8/LVDG_estilos_envia_opinion.css

.a660 .coment {
	FONT-FAMILY: trebuchet, tahoma, andale mono, geneva, arial, helvetica, =
sans-serif
}
.a660 .coment H2.cliche {
	FONT: 17px georgia, times new roman, serif; COLOR: #666
}
.a660 .coment .mini {
	FONT: 11px trebuchet, tahoma, andale mono, geneva, arial, helvetica, =
sans-serif; COLOR: #c00; TEXT-ALIGN: right
}
.a660 .coment FORM {
	CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
BACKGROUND: #f8f8f8; PADDING-BOTTOM: 0px; MARGIN: 7px 0px; WIDTH: 100%; =
PADDING-TOP: 12px; FONT-FAMILY: trebuchet, tahoma, andale mono, geneva, =
arial, helvetica, sans-serif
}
.bluegray {
	BACKGROUND: #f8f8f8
}
.a660 .coment > FORM {
	WIDTH: auto
}
.a660 .coment FIELDSET {
	CLEAR: both; DISPLAY: block
}
.auto .a660 .coment INPUT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.auto .a660 .coment TEXTAREA {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.a660 .coment FIELDSET LABEL {
	FLOAT: left; MARGIN: 4px
}
.a660 .coment FIELDSET LABEL EM {
	PADDING-RIGHT: 4px; DISPLAY: block; PADDING-LEFT: 4px; FONT-WEIGHT: =
bolder; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; FONT-STYLE: normal
}
.a660 .coment FIELDSET LABEL EM SPAN {
	COLOR: #c00
}
.a660 .coment FIELDSET INPUT {
	CLEAR: left; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 13px trebuchet ms, lucida =
grande, tahoma, arial, geneva, verdana, helvetica, sans-serif; =
PADDING-TOP: 0px
}
.a660 .coment FIELDSET TEXTAREA {
	CLEAR: left; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 13px trebuchet ms, lucida =
grande, tahoma, arial, geneva, verdana, helvetica, sans-serif; =
PADDING-TOP: 0px
}
.t260 {
	WIDTH: 260px
}
.t170 {
	WIDTH: 170px
}
.t620 {
	WIDTH: 620px
}
.a660 .coment FIELDSET P {
	CLEAR: both; PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: =
8px; PADDING-TOP: 8px
}
.a660 .coment FIELDSET P A {
	CLEAR: both; DISPLAY: block
}
.a660 .coment .boton {
	CLEAR: right; MARGIN-TOP: 4px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4C89595B0A80E0AB015D8D75C10D0DEE/LVDG_estilos_caja_ptrcn.css

.ptrcn {
	MARGIN: 7px
}
.ptrcn .rot {
	BORDER-TOP-WIDTH: 1px! important; BACKGROUND-POSITION: 7px bottom; =
BORDER-LEFT-WIDTH: 1px! important; BORDER-BOTTOM-WIDTH: 1px! important; =
BACKGROUND-REPEAT: no-repeat; HEIGHT: 24px; BORDER-RIGHT-WIDTH: 1px! =
important
}
.ptrcn LI {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; BACKGROUND: =
url(/img/f_dot.gif) repeat-x left bottom; PADDING-BOTTOM: 4px; MARGIN: =
0px; PADDING-TOP: 4px; LIST-STYLE-TYPE: none
}
.prtcoru .rot {
	BACKGROUND-IMAGE: url(/img/logos/lg_prtcoru.gif)
}
.consorcio .rot {
	BACKGROUND-IMAGE: url(/img/logos/lg_consorcio.gif)
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/78FAE94D0A80E0AB01CEE792BBC05A90/LVDG_estilos_sector_cabecero_mini.css

.cab {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN-BOTTOM: 0px; BORDER-LEFT: =
0px; BORDER-BOTTOM: 0px
}
* > .cab {
	WIDTH: 992px
}
.cab .serv {
	CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
FONT-SIZE: 11px; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; =
PADDING-TOP: 14px
}
.cab serv .idiom {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.cab .serv .idiom .pestana {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 7px; MARGIN-TOP: 13px; DISPLAY: =
block; PADDING-LEFT: 7px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 1px; =
BACKGROUND: #fff; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 4px; =
TEXT-TRANSFORM: none; COLOR: #134d86; PADDING-TOP: 4px; =
BORDER-RIGHT-WIDTH: 1px
}
.cab .serv .idiom .pestana:hover {
	TEXT-DECORATION: underline
}
.cab .serv .ed_imp {
	PADDING-RIGHT: 100px; FONT-SIZE: 10px; BACKGROUND: =
url(/img/f_verimp.gif) no-repeat right top; LINE-HEIGHT: 10px; =
PADDING-TOP: 22px
}
.cab .serv .ed_imp STRONG {
	FONT-WEIGHT: normal; TEXT-TRANSFORM: uppercase; COLOR: #666
}
.cab .serv .ed_imp A {
	FONT-WEIGHT: bolder; MARGIN: 0px 3px
}
.panel {
	BORDER-TOP-WIDTH: 1px; CLEAR: both; BORDER-LEFT-WIDTH: 1px; BACKGROUND: =
url(/img/f_rayas.gif) #fff repeat-x left top; BORDER-BOTTOM-WIDTH: 0px; =
MARGIN: 0px; WIDTH: 100%; POSITION: relative; HEIGHT: 65px; TEXT-ALIGN: =
left; BORDER-RIGHT-WIDTH: 1px
}
* > .panel {
	WIDTH: auto
}
.cabecera {
	DISPLAY: block; Z-INDEX: 1; BACKGROUND: none transparent scroll repeat =
0% 0%; FILTER: =
progid:DXImageTransform.microsoft.alphaimageloader(enabled=3Dtrue, =
sizingMethod=3Dscale src=3D'/img/cabecera_mini.png'); LEFT: 7px; WIDTH: =
293px; CURSOR: pointer; BOTTOM: 7px; POSITION: absolute; HEIGHT: 50px
}
* > .cabecera {
	BACKGROUND: url(/img/cabecera_mini.png) no-repeat
}
.panel .hoy {
	CLEAR: none; PADDING-RIGHT: 220px; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; WIDTH: auto; PADDING-TOP: 15px; FONT-FAMILY: georgia, times new =
roman, serif; TEXT-ALIGN: right
}
.panel .hoy STRONG {
	CLEAR: both; DISPLAY: block
}
.panel .hoy SPAN.hora {
	CLEAR: both; DISPLAY: block
}
.panel .hoy .hora {
	COLOR: #666; FONT-FAMILY: trebuchet ms, lucida grande, geneva, tahoma, =
arial, helvetica, sans-serif
}
.panel .hoy .hora EM {
	FONT-WEIGHT: bolder; COLOR: #ba1617; FONT-STYLE: normal
}
.busca {
	RIGHT: 14px; WIDTH: 180px; POSITION: absolute; TOP: 14px
}
.busca FIELDSET {
	DISPLAY: block
}
.busca .nostrum {
	PADDING-RIGHT: 44px; BACKGROUND: url(/img/logos/lg_nostrum.gif) =
no-repeat right top; MARGIN-LEFT: 6px
}
.busca INPUT.brd {
	MARGIN: 0px 0px 4px; WIDTH: 120px
}
.busca .boton {
	RIGHT: 0px; POSITION: absolute; TOP: 0px
}
.indx {
	BORDER-LEFT-COLOR: #bbb5a6; BORDER-BOTTOM-COLOR: #bbb5a6; =
BORDER-TOP-COLOR: #bbb5a6; BORDER-RIGHT-COLOR: #bbb5a6
}
.indx * {
	BORDER-LEFT-COLOR: #bbb5a6; BORDER-BOTTOM-COLOR: #bbb5a6; =
BORDER-TOP-COLOR: #bbb5a6; BORDER-RIGHT-COLOR: #bbb5a6
}
.indx {
	BORDER-TOP-WIDTH: 0px; CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: block; =
PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 1px; FONT-SIZE: 11px; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 7px; MARGIN: 0px; PADDING-TOP: =
0px; POSITION: relative; BORDER-RIGHT-WIDTH: 1px
}
.indx H4 {
	DISPLAY: inline; FONT-WEIGHT: normal; FONT-SIZE: 13px; LINE-HEIGHT: =
20px
}
.indx > H4 {
	LINE-HEIGHT: 21px
}
.indx UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.indx LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.indx .menu {
	BACKGROUND: url(/img/f_cabecero_gris.gif) repeat-x left top; WIDTH: =
100%
}
.indx LI {
	DISPLAY: inline
}
.indx .inl {
	DISPLAY: inline
}
.indx .mg_inf {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 1px; =
BACKGROUND: url(/img/f_cabecero_rojo.gif) repeat-x right top; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
* > .indx .mg_inf {
	BACKGROUND-POSITION: right top
}
.indx .mg_soc {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BACKGROUND-COLOR: #036
}
.indx .mg_util {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 1px
}
.indx .item {
	PADDING-RIGHT: 1px; DISPLAY: inline; PADDING-LEFT: 1px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.indx .pestana {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 3px; DISPLAY: inline; =
PADDING-LEFT: 3px; BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 13px; BACKGROUND: =
none transparent scroll repeat 0% 0%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 19px; PADDING-TOP: 0px; =
BORDER-RIGHT-WIDTH: 0px
}
.indx .off {
	BACKGROUND: #fff; PADDING-BOTTOM: 1px
}
.indx .sub {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; =
BACKGROUND: url(/img/f_dot.gif) #fff repeat-x left bottom; FLOAT: left; =
PADDING-BOTTOM: 9px; WIDTH: 100%; PADDING-TOP: 7px
}
.indx .sub LI A {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 0px; COLOR: =
#000; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 1px
}
.indx .sub .fin A {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: =
0px
}
.indx .sub LI > A {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: =
0px
}
.indx .sub LI:unknown {
	content: "|"
}
.indx .sub LI.fin:unknown {
	content: ""
}
.indx .mg_inf A.pestana:hover {
	BACKGROUND: url(/img/f_cabecero_rojo_pulsado.gif) repeat-x right =
center; COLOR: #fff
}
.indx .mg_util A.pestana:hover {
	BACKGROUND: url(/img/f_cabecero_gris_pulsado.gif) repeat-x right =
center; COLOR: #fff
}
.indx .mg_inf A.off:hover {
	BACKGROUND: #fff; COLOR: #000; TEXT-DECORATION: underline
}
.indx .mg_util A.off:hover {
	BACKGROUND: #fff; COLOR: #000; TEXT-DECORATION: underline
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/4914AF6D0A80B1A100E6A73D7E2305B3/LVDG_estilos_capa_transparente.css

.ftrans {
	DISPLAY: block; Z-INDEX: 5000; BACKGROUND: none transparent scroll =
repeat 0% 0%; FILTER: alpha(opacity=3D60); LEFT: 0px; WIDTH: 100%; =
POSITION: absolute; TOP: 0px; HEIGHT: 1200%; opacity: 0.6; -moz-opacity: =
0.6
}
* > .ftrans {
	POSITION: fixed; HEIGHT: 100%
}
.porter {
	Z-INDEX: 5001; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; =
TEXT-ALIGN: center
}
* > .porter {
	POSITION: fixed
}
.spok {
	BORDER-RIGHT: #ccc 4px solid; BORDER-TOP: #ccc 4px solid; Z-INDEX: =
5002; MARGIN: 4% auto; BORDER-LEFT: #ccc 4px solid; WIDTH: 440px; =
BORDER-BOTTOM: #ccc 4px solid; BACKGROUND-COLOR: #fff
}
.arrstr {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: =
#ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
}
.arrstr H2 {
	PADDING-RIGHT: 2px; PADDING-LEFT: 7px; PADDING-BOTTOM: 4px; MARGIN: =
0px; FONT: bolder 15px georgia, times new roman, serif; OVERFLOW: =
hidden; TEXT-TRANSFORM: capitalize; COLOR: #666; PADDING-TOP: 4px
}
.arrstr EM {
	FONT-STYLE: normal
}
.arrstr H2 .cerrar {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; FONT-SIZE: 1px; =
RIGHT: 4px; BACKGROUND: url(/img/f_aspa.gif) no-repeat center center; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 11px; =
LINE-HEIGHT: 1px; PADDING-TOP: 0px; POSITION: absolute; TOP: 4px; =
HEIGHT: 11px
}
.contrans {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; FONT: =
12px/17px arial, tahoma, geneva, helvetica, sans-serif; OVERFLOW: auto; =
MAX-HEIGHT: 400px; PADDING-TOP: 7px; HEIGHT: auto
}
.contrans H3 {
	FONT-SIZE: 13px
}
.contrans UL {
	FONT: 12px/17px arial, tahoma, geneva, helvetica, sans-serif
}
.contrans LI {
	FONT: 12px/17px arial, tahoma, geneva, helvetica, sans-serif
}
.contrans DL {
	MARGIN-TOP: 14px
}
.contrans DD {
	MARGIN-TOP: 4px; MARGIN-BOTTOM: 14px
}

------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/558124BE0A80E0AB012F41A585B45977/LVDG_script.js

function ObjetoListaInteractiva(){=0A=
=0A=
=0A=
=0A=
	this.list =3D new Array();=0A=
=0A=
	this.listaNombres =3D new Array();=0A=
=0A=
	this.listaCombos =3D new Array();=0A=
=0A=
	this.listaPestanas =3D new Array();=0A=
	=0A=
	this.listaEnlaces =3D new Array();=0A=
=0A=
	this.elementosVisibles =3D1;=0A=
=0A=
	this.posicion=3D0;=0A=
=0A=
	this.modoOff=3D"";=0A=
=0A=
	this.modoOn=3D"";=0A=
=0A=
	this.modoPestanaOff=3D"";=0A=
=0A=
	this.modoPestanaOn=3D"";=0A=
=0A=
	this.anadir=3Danadir;=0A=
=0A=
	this.mostrarAnterior=3DmostrarAnterior;=0A=
=0A=
	this.mostrarSiguiente=3DmostrarSiguiente;=0A=
=0A=
	this.mostrarPaginaAnterior=3DmostrarPaginaAnterior;=0A=
=0A=
	this.mostrarPaginaSiguiente=3DmostrarPaginaSiguiente;=0A=
=0A=
	this.borrarTodos=3DborrarTodos;=0A=
=0A=
	this.setElementosVisibles=3DsetElementosVisibles;=0A=
=0A=
	this.getElementosVisibles=3DgetElementosVisibles;=0A=
=0A=
	this.setModoOn=3DsetModoOn;=0A=
=0A=
	this.getModoOn=3DgetModoOn;=0A=
=0A=
	this.setModoOff=3DsetModoOff;=0A=
=0A=
	this.getModoOff=3DgetModoOff;=0A=
=0A=
	this.setModoPestanaOn=3DsetModoPestanaOn;=0A=
=0A=
	this.getModoPestanaOn=3DgetModoPestanaOn;=0A=
=0A=
	this.setModoPestanaOff=3DsetModoPestanaOff;=0A=
=0A=
	this.getModoPestanaOff=3DgetModoPestanaOff;=0A=
=0A=
	this.hacerInvisible=3DhacerInvisible;=0A=
=0A=
	this.hacerVisible=3DhacerVisible;=0A=
=0A=
	this.init=3Dinit;=0A=
	=0A=
	this.init2=3Dinit2;=0A=
=0A=
	this.setNombre=3DsetNombre;=0A=
=0A=
	this.getNombre=3DgetNombre;=0A=
=0A=
	this.ocultarTodos=3DocultarTodos;=0A=
=0A=
	this.insertOption=3DinsertOption;=0A=
=0A=
	this.anadirCombo=3DanadirCombo;=0A=
=0A=
	this.mostrarCombo=3DmostrarCombo;=0A=
=0A=
	this.mostrarPestana=3DmostrarPestana;=0A=
=0A=
	this.anadirPestanas=3DanadirPestanas;=0A=
=0A=
	this.getPosicion=3DgetPosicion;=0A=
	=0A=
	this.mostrarCapa=3DmostrarCapa;=0A=
	this.mostrarAleatorio=3DmostrarAleatorio;=0A=
=0A=
	this.setEnlace=3DsetEnlace;=0A=
=0A=
	this.getEnlace=3DgetEnlace;=0A=
	=0A=
	this.enlaceSeccion=3DenlaceSeccion;=0A=
	=0A=
	this.enlaceSeccionCategoria=3DenlaceSeccionCategoria;=0A=
	=0A=
	this.pasas=3Dpasas;=0A=
	=0A=
	this.llamarOJD=3DllamarOJD;=0A=
}=0A=
=0A=
//Devuelve el objeto por ID=0A=
=0A=
	function getObject(id) {=0A=
		if( window.mmIsOpera ) return(document.getElementById(id));=0A=
		if (document.all) return(document.all[id]);=0A=
		if (document.getElementById) return(document.getElementById(id));=0A=
		return(false);=0A=
	}=0A=
=0A=
//devuelve la posici=F3n en la que se encuentra el objeto=0A=
=0A=
//Esta funci=F3n se utiliza para mostrar el n=FAmero de foto que se =
est=E1 mostrando en un album=0A=
=0A=
function getPosicion(){=0A=
=0A=
	//sumamos uno a la posici=F3n, porque empieza en 0.=0A=
=0A=
	return this.posicion+1;=0A=
=0A=
}=0A=
=0A=
function anadirCombo(select){=0A=
=0A=
		this.listaCombos.push(select);=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function anadirPestanas(pestana){=0A=
=0A=
		this.listaPestanas.push(pestana);=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function insertOption()=0A=
=0A=
{=0A=
=0A=
=0A=
=0A=
	for (var i =3D 0; i < this.list.length; i++) {=0A=
=0A=
			=0A=
=0A=
	  for (var j =3D 0; j < this.listaCombos.length; j++) {=0A=
=0A=
		  var y=3Ddocument.createElement('option');=0A=
=0A=
		  y.text=3Dthis.getNombre(this.list[i]);=0A=
=0A=
		  y.value=3Dthis.list[i];=0A=
=0A=
		  var x=3Ddocument.getElementById(this.listaCombos[j]);=0A=
=0A=
		  try=0A=
=0A=
		  {=0A=
=0A=
		    x.add(y,null); // standards compliant=0A=
=0A=
		  }=0A=
=0A=
		  catch(ex)=0A=
=0A=
		  {=0A=
=0A=
		    x.add(y); // IE only=0A=
=0A=
		  }=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function mostrarPestana(id){=0A=
=0A=
	this.ocultarTodos();=0A=
=0A=
	this.hacerVisible(id);=0A=
=0A=
	//Recorremos las pestanas para ponerlas en modo off=0A=
=0A=
	for (var i =3D 0; i < this.listaPestanas.length; i++) {=0A=
=0A=
		=
document.getElementById(this.listaPestanas[i]).className=3Dthis.getModoPe=
stanaOff();=0A=
=0A=
	}=0A=
=0A=
	//Ponemos la seleccionada en modo On=0A=
=0A=
	=
document.getElementById("pestana"+id).className=3Dthis.getModoPestanaOn()=
;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function mostrarCombo(id){=0A=
=0A=
		var x=3Ddocument.getElementById(id);=0A=
=0A=
		//Si el seleccionado es el 0 no hacemos nada=0A=
=0A=
		if (x.selectedIndex=3D=3D0){=0A=
=0A=
			return;=0A=
=0A=
		}=0A=
=0A=
		this.ocultarTodos();=0A=
=0A=
		//situamos la posicion, ser=E1 la seleccionada -1=0A=
=0A=
		this.posicion=3Dx.selectedIndex-1;=0A=
=0A=
		this.hacerVisible(x.options[x.selectedIndex].value);=0A=
=0A=
		//Recorremos los combos para seleccionar el indice seleccionado=0A=
=0A=
		for (var i =3D 0; i < this.listaCombos.length; i++) {=0A=
=0A=
			var combos=3Ddocument.getElementById(this.listaCombos[i]);=0A=
=0A=
			combos.options[x.selectedIndex].selected=3Dtrue;=0A=
=0A=
		}=0A=
=0A=
		=0A=
=0A=
		=0A=
=0A=
}=0A=
=0A=
function llamarOJD(seccion){=0A=
	url =3D =
"http://lavozdegalicia.ojdinteractiva.com/cgi-bin/ivw/CP/"+seccion+"?r=3D=
"+escape(document.referrer);=0A=
	if (document.getElementById("ojd")!=3Dnull){=0A=
		document.getElementById("ojd").src=3Durl;=0A=
	}=0A=
}	=0A=
=0A=
=0A=
function anadir(id){=0A=
=0A=
		this.list.push(id);=0A=
=0A=
}=0A=
=0A=
	=0A=
=0A=
function setNombre(id, nombre){=0A=
=0A=
		this.listaNombres[id]=3Dnombre;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function getNombre(id){=0A=
=0A=
		return(this.listaNombres[id]);=0A=
=0A=
}=0A=
=0A=
function setEnlace(id, enlace){=0A=
=0A=
		this.listaEnlaces[id]=3Denlace;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function getEnlace(id){=0A=
=0A=
		return(this.listaEnlaces[id]);=0A=
=0A=
}=0A=
=0A=
function ocultarTodos(){=0A=
=0A=
		for (var i =3D 0; i < this.list.length; i++) {=0A=
=0A=
			this.hacerInvisible(this.list[i]);=0A=
=0A=
		}=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function mostrarPaginaAnterior(){=0A=
=0A=
	for (var i =3D 0; i < this.getElementosVisibles(); i++) {=0A=
=0A=
		this.mostrarAnterior();=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
function mostrarPaginaSiguiente(){=0A=
=0A=
	for (var i =3D 0; i < this.getElementosVisibles(); i++) {=0A=
=0A=
		this.mostrarSiguiente();=0A=
=0A=
	}=0A=
=0A=
=0A=
=0A=
}=0A=
=0A=
function mostrarAnterior(){=0A=
=0A=
	if (this.list.length=3D=3D1)	{=0A=
=0A=
		return;=0A=
=0A=
	}=0A=
=0A=
	if (this.list[this.posicion-1]!=3Dnull){=0A=
=0A=
		this.hacerVisible(this.list[this.posicion-1]);=0A=
=0A=
		=
this.hacerInvisible(this.list[this.posicion+(this.getElementosVisibles()-=
1)]);=0A=
=0A=
		this.posicion=3Dthis.posicion-1;=0A=
=0A=
	}=0A=
=0A=
	else{=0A=
=0A=
		//Si el salto es de uno, mostramos el ultimo =0A=
=0A=
		if (this.getElementosVisibles()=3D=3D1){=0A=
=0A=
			this.hacerVisible(this.list[this.list.length-1]);=0A=
=0A=
			this.hacerInvisible(this.list[this.posicion]);=0A=
=0A=
			this.posicion=3Dthis.list.length-1;=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
			=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function mostrarSiguiente(){=0A=
=0A=
	if (this.list.length=3D=3D1)	{=0A=
=0A=
		return;=0A=
=0A=
	}=0A=
=0A=
	if (this.list[this.posicion+this.getElementosVisibles()]!=3Dnull){=0A=
=0A=
		=
this.hacerVisible(this.list[this.posicion+this.getElementosVisibles()]);=0A=
=0A=
		this.hacerInvisible(this.list[this.posicion]);=0A=
=0A=
		this.posicion=3Dthis.posicion+1;=0A=
=0A=
	}=0A=
=0A=
	else{=0A=
=0A=
		//Si el salto es de uno, empezamos de nuevo=0A=
=0A=
		if (this.getElementosVisibles()=3D=3D1){=0A=
=0A=
			this.hacerVisible(this.list[0]);=0A=
=0A=
			this.hacerInvisible(this.list[this.posicion]);=0A=
=0A=
			this.posicion=3D0;=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
function pasas(direccion, url){=0A=
	if (document.getElementById("ojd")!=3Dnull){=0A=
		document.getElementById("ojd").src=3Durl;=0A=
	}=0A=
	if (direccion=3D=3D"1"){=0A=
		this.mostrarSiguiente();=0A=
	}else {=0A=
		this.mostrarAnterior();=0A=
	}=0A=
}=0A=
=0A=
=0A=
=0A=
function borrarTodos(){=0A=
=0A=
	for (var i =3D 0; i <=3D this.list.length; i++) {=0A=
=0A=
		this.list.pop();=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function setElementosVisibles(numero){=0A=
=0A=
	this.elementosVisibles=3Dnumero;=0A=
=0A=
}=0A=
=0A=
function getElementosVisibles(){=0A=
=0A=
	return this.elementosVisibles;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function setModoOn(clase){=0A=
=0A=
	this.modoOn=3Dclase;=0A=
=0A=
}=0A=
=0A=
function getModoOn(){=0A=
=0A=
	return this.modoOn;=0A=
=0A=
}=0A=
=0A=
function setModoOff(clase){=0A=
=0A=
	return this.modoOff=3Dclase;=0A=
=0A=
}=0A=
=0A=
function getModoOff(){=0A=
=0A=
	return this.modoOff;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function setModoPestanaOn(clase){=0A=
=0A=
	this.modoPestanaOn=3Dclase;=0A=
=0A=
}=0A=
=0A=
function getModoPestanaOn(){=0A=
=0A=
	return this.modoPestanaOn;=0A=
=0A=
}=0A=
=0A=
function setModoPestanaOff(clase){=0A=
=0A=
	return this.modoPestanaOff=3Dclase;=0A=
=0A=
}=0A=
=0A=
function getModoPestanaOff(){=0A=
=0A=
	return this.modoPestanaOff;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function init(){=0A=
=0A=
	//hacemos visible el numero de elementos visibles configurados=0A=
=0A=
	for (var i =3D 0; i < this.getElementosVisibles(); i++) {=0A=
=0A=
		this.hacerVisible(this.list[i]);=0A=
=0A=
	}=0A=
=0A=
	//Si tienes pestanas ponemos la primera como seleccionada=0A=
=0A=
	if (this.listaPestanas.length!=3D0){=0A=
=0A=
		=
document.getElementById(this.listaPestanas[0]).className=3Dthis.getModoPe=
stanaOn();=0A=
=0A=
	}=0A=
=0A=
	this.insertOption();=0A=
=0A=
}=0A=
=0A=
=0A=
function init2(){=0A=
=0A=
	//hacemos visible el numero de elementos visibles configurados=0A=
=0A=
	for (var i =3D 0; i < this.getElementosVisibles(); i++) {=0A=
=0A=
		document.getElementById(this.list[i]).className=3Dthis.getModoOn();=0A=
=0A=
	}=0A=
=0A=
	//Si tienes pestanas ponemos la primera como seleccionada=0A=
=0A=
	if (this.listaPestanas.length!=3D0){=0A=
=0A=
		=
document.getElementById(this.listaPestanas[0]).className=3Dthis.getModoPe=
stanaOn();=0A=
=0A=
	}=0A=
=0A=
	this.insertOption();=0A=
=0A=
}=0A=
=0A=
function hacerInvisible(id){=0A=
=0A=
		document.getElementById(id).className=3Dthis.getModoOff();=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function hacerVisible(id){=0A=
=0A=
		capa =3D document.getElementById(id);=0A=
		cnjIMG =3D capa.getElementsByTagName('img');=0A=
		for (var i=3D0; i<cnjIMG.length; i++) {=0A=
			if (cnjIMG[i].attributes.getNamedItem('longdesc')!=3Dnull){=0A=
				if =
(cnjIMG[i].attributes.getNamedItem('longdesc').value=3D=3D"cambiar"){=0A=
					cnjIMG[i].src=3DcnjIMG[i].attributes.getNamedItem('id').value;=0A=
				}=0A=
	        }=0A=
		}=0A=
		document.getElementById(id).className=3Dthis.getModoOn();=0A=
}=0A=
=0A=
function mostrarCapa(id){=0A=
=0A=
	this.ocultarTodos();=0A=
=0A=
	this.hacerVisible(id);=0A=
=0A=
}=0A=
=0A=
function mostrarAleatorio (){=0A=
	var tope=3Dthis.list.length;=0A=
	var VerElemento=3DMath.floor(Math.random()*tope);=0A=
	this.hacerInvisible(this.list[this.posicion]);=0A=
	this.hacerVisible(this.list[VerElemento]);=0A=
	this.posicion=3DVerElemento;=0A=
}=0A=
=0A=
function enlaceSeccion(id){=0A=
		=0A=
		var x=3Ddocument.getElementById(id);=0A=
=0A=
		//Si el seleccionado es el 0 no hacemos nada=0A=
=0A=
		if (x.selectedIndex=3D=3D0){=0A=
=0A=
			return;=0A=
=0A=
		}=0A=
=0A=
		var idSeleccionado =3D x.options[x.selectedIndex].value;=0A=
=0A=
		this.enlaceSeccionCategoria(idSeleccionado);=0A=
}=0A=
=0A=
function enlaceSeccionCategoria(id){=0A=
		=0A=
		var enlace =3D this.getEnlace(id);=0A=
		=0A=
		if (enlace!=3Dnull){=0A=
			document.location.href=3Denlace;=0A=
		}=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/8CC01D870A80B1A20163C85B07025780/Traduccion_Idioma.js

function es2gal(url){=0A=
		var loc =3D window.location.toString();=0A=
		if (loc.indexOf("idioma=3Dgalego") !=3D -1){=0A=
			if (url.indexOf("?")!=3D-1) url +=3D "&idioma=3Dgalego";=0A=
			else url +=3D "?idioma=3Dgalego";=0A=
		}=0A=
		return url;=0A=
	}=0A=
	=0A=
	function gal2es(url){=0A=
	 	var loc =3D window.location.toString();=0A=
		if (loc.indexOf("&idioma=3Dgalego") !=3D -1){=0A=
			url =3D replaceAll(loc,"&idioma=3Dgalego","");=0A=
		}=0A=
		if (loc.indexOf("?idioma=3Dgalego&") !=3D -1){=0A=
			url =3D replaceAll(loc,"?idioma=3Dgalego&","?");=0A=
		}=0A=
		if (loc.indexOf("?idioma=3Dgalego") !=3D -1){=0A=
			url =3D replaceAll(loc,"?idioma=3Dgalego","");=0A=
		}=0A=
		return url;=0A=
	}=0A=
	=0A=
	var gl;=0A=
	var idiom;=0A=
	idiom=3D"";=0A=
	function idioma(){=0A=
		var rdo;=0A=
		rdo=3Dfalse;=0A=
		var loc=3Ddocument.location.toString();=0A=
			if(loc.indexOf("idioma=3Dgalego")!=3D-1){=0A=
				rdo=3Dtrue;=0A=
				idiom=3D"_ga";=0A=
			}=0A=
		return rdo;=0A=
	}=0A=
	=0A=
	function traducir(){=0A=
		var loc=3D window.location.toString();=0A=
		if (loc.indexOf("?")!=3D-1) loc +=3D "&idioma=3Dgalego";=0A=
		else loc +=3D "?idioma=3Dgalego";=0A=
=0A=
		window.location=3Dloc;=0A=
	}=0A=
=0A=
	function replaceAll( str, from, to ) {=0A=
	    var idx =3D str.indexOf( from );=0A=
=0A=
	    while ( idx > -1 ) {=0A=
		str =3D str.replace( from, to );=0A=
		idx =3D str.indexOf( from );=0A=
=0A=
	    }=0A=
	    return str;=0A=
	}=0A=
	=0A=
function CrearCookie(Nombre, Valor) {=0A=
	var Dia =3D new Date();=0A=
	Dia.setDate(Dia.getDate() + 365); //caduca en un a=F1o=0A=
	document.cookie =3D Nombre + "=3D" + Valor + "; expires=3D" + =
Dia.toGMTString() + "; path=3D/";=0A=
}=0A=
=0A=
function LeerCookie(NombreDeCookie) {=0A=
	var NumDeCookies =3D document.cookie.length;=0A=
	var NombreParaCookie =3D NombreDeCookie + "=3D";=0A=
	var LongDeCookie =3D NombreParaCookie.length;=0A=
	var x =3D 0;=0A=
	while (x <=3D NumDeCookies) {=0A=
		var y =3D (x + LongDeCookie);=0A=
		if (document.cookie.substring(x, y) =3D=3D NombreParaCookie)=0A=
		return (ExtraeValorDeCookie(y));=0A=
		x =3D document.cookie.indexOf(" ", x) + 1;=0A=
		if (x =3D=3D 0)=0A=
		break;=0A=
	}=0A=
	var vacio=3D"?";=0A=
	return (vacio);=0A=
}=0A=
=0A=
function lee_idioma(){=0A=
	var idiomasession=3DLeerCookie("idioma_session");=0A=
//alert(idiomasession);=0A=
	if(idiomasession=3D=3D"ga"){=0A=
		if(!idioma()){=0A=
			traducir();=0A=
		}=0A=
	}else if(idiomasession=3D=3D"es"){=0A=
		if(idioma()){=0A=
			window.location=3Dgal2es(window.location);=0A=
		}=0A=
	}=0A=
=0A=
}=0A=
=0A=
function ExtraeValorDeCookie(val) {=0A=
	var FinalDeCookie;=0A=
	if ((FinalDeCookie =3D document.cookie.indexOf(";", val)) =3D=3D -1) {=0A=
		FinalDeCookie =3D document.cookie.length;=0A=
	}=0A=
	return unescape(document.cookie.substring(val,FinalDeCookie));=0A=
}=0A=
=0A=
lee_idioma();
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/D9494AAE0A80B1A1006261C96634ABEC/script_ventana.js

function windowOpener16(theURL,winName,features) {=0A=
		window.open(theURL,winName,features);=0A=
	}=0A=
=0A=
// Abrir Clasificados=0A=
=0A=
	function abrir_clasificados() {=0A=
		if(navigator.appname=3D=3D"Netscape Navigator") {				=0A=
			=
windowOpener16("https://caixa.lavoz.es/iAnuncios/jsp/valida.jsp?origen=3D=
a&publicacion=3D001&ancho=3D"+screen.width,"Clasificados","screenX=3D0, =
screenY=3D0, titlebar=3Dno");=0A=
		} else {=0A=
			=
windowOpener16("https://caixa.lavoz.es/iAnuncios/jsp/valida.jsp?origen=3D=
a&publicacion=3D001&ancho=3D"+screen.width,"Clasificados","left=3D0, =
top=3D0, titlebar=3Dfalse, scrollbars");=0A=
		}=0A=
	}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/93D696360A80E09D0176E9C0E8D2FCCA/LVDG_fechasUtil.js

/**=0A=
=0A=
<doc:module date=3D"2001-06-12">=0A=
=0A=
   <doc:module>exslt:date-time</doc:module>=0A=
=0A=
   <doc:name>dates</doc:name>=0A=
=0A=
   <doc:version>2.0</doc:version>=0A=
=0A=
   <doc:language>exslt:javascript</doc:language>=0A=
=0A=
   <doc:meta>=0A=
=0A=
      <doc:author email=3D"chris@bayes.co.uk" =
url=3D"http://www.bayes.co.uk">Chris Bayes</doc:author>=0A=
=0A=
      <doc:summary>Implementation of EXSLT - Dates =
(http://www.exslt.org/date)</doc:summary>=0A=
=0A=
      <doc:todo>_validDuration is not 100%</doc:todo>=0A=
=0A=
      <doc:todo>All timezone code.</doc:todo>=0A=
=0A=
   </doc:meta>=0A=
=0A=
</doc:module>=0A=
=0A=
**/=0A=
=0A=
var gsSuppliedFormat =3D "";=0A=
=0A=
var gsLang =3D "en";=0A=
=0A=
var gaLang =3D new Array();=0A=
=0A=
// en =0A=
=0A=
gaLang["en"] =3D new Array();=0A=
=0A=
gaLang["en"]["months"] =3D new Array("January", "February", "March", =
"April", "May", "June", "July", "August", "September", "October", =
"November", "December");=0A=
=0A=
gaLang["en"]["shortMonths"] =3D new Array("Jan", "Feb", "Mar", "Apr", =
"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");=0A=
=0A=
gaLang["en"]["days"] =3D new Array("Sunday", "Monday", "Tuesday", =
"Wednesday", "Thursday", "Friday", "Saturday");=0A=
=0A=
gaLang["en"]["shortDays"] =3D new Array("Sun", "Mon", "Tue", "Wed", =
"Thu", "Fri", "Sat");=0A=
=0A=
// es =0A=
=0A=
gaLang["es"] =3D new Array();=0A=
=0A=
gaLang["es"]["months"] =3D new Array("enero", "febrero", "marzo", =
"abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", =
"noviembre", "diciembre");=0A=
=0A=
gaLang["es"]["shortMonths"] =3D new Array("Ene", "Feb", "Mar", "Abr", =
"May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic");=0A=
=0A=
gaLang["es"]["days"] =3D new Array("Domingo", "Lunes", "Martes", =
"Mi=E9rcoles", "Jueves", "Viernes", "S=E1bado");=0A=
=0A=
gaLang["es"]["shortDays"] =3D new Array("Dom", "Lun", "Mar", "Mie", =
"Jue", "Vie", "Sab");=0A=
=0A=
// ga =0A=
=0A=
gaLang["ga"] =3D new Array();=0A=
=0A=
gaLang["ga"]["months"] =3D new Array("xaneiro", "febreiro", "marzo", =
"abril", "maio", "xu=F1o", "xullo", "agosto", "setembro", "outubro", =
"novembro", "diciembre");=0A=
=0A=
gaLang["ga"]["shortMonths"] =3D new Array("Xan", "Feb", "Mar", "Abr", =
"Mai", "Ju=F1", "xul", "Ago", "Set", "Out", "Nov", "Dec");=0A=
=0A=
gaLang["ga"]["days"] =3D new Array("Domingo", "Luns", "Martes", =
"M=E9rcores", "Xoves", "Venres", "S=E1bado");=0A=
=0A=
gaLang["ga"]["shortDays"] =3D new Array("Dom", "Lun", "Mar", "Mer", =
"Xov", "Ven", "Sab");=0A=
=0A=
=0A=
=0A=
var gaDayNames =3D new Array();=0A=
=0A=
gaDayNames["sunday"] =3D 0;gaDayNames["monday"] =3D =
1;gaDayNames["tuesday"] =3D 2;gaDayNames["wednesday"] =3D =
3;gaDayNames["thursday"] =3D 4;gaDayNames["friday"] =3D =
5;gaDayNames["saturday"] =3D 6;=0A=
=0A=
var gaMonthCnt =3D new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, =
31);=0A=
=0A=
var gaMonthCntL =3D new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, =
30, 31);=0A=
=0A=
function _isLeap(y){return ( ((y%4=3D=3D0)&(y%100!=3D0))|(y%400=3D=3D0) =
);}=0A=
=0A=
function _dayOfWeek(y,d){return ( =
((y-1)+Math.floor((y-1)/4)-Math.floor((y-1)/100)+Math.floor((y-1)/400)+d)=
%7);}=0A=
=0A=
function _dayInYear(y,m,d){return (m=3D=3D0?d:eval( =
(_isLeap(y)?gaMonthCntL.slice(0,m).join("+"):gaMonthCnt.slice(0,m).join("=
+")) )+(d*1) );}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>add</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"duration" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function add(){//=0A=
=0A=
	var d1,d2;=0A=
=0A=
	if (((d1 =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		 (d1 =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
		 (d1 =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
		 (d1 =3D _validDate(arguments[0], "xs:gYear"))=0A=
=0A=
		) && =0A=
=0A=
		(d2 =3D _validDuration(arguments[1])))=0A=
=0A=
		return _formatDate(d2.addDate(d1), gsSuppliedFormat);=0A=
=0A=
	return '';=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>addDuration</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"duration" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"duration" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function addDuration(duration1, duration2){=0A=
=0A=
	if ((d1 =3D _validDuration(duration1)) && (d2 =3D =
_validDuration(duration2))){=0A=
=0A=
		var d1mnth =3D d1.years *12 + d1.months;=0A=
=0A=
		var d1secs =3D d1.days*86400 + d1.hours*3600 + d1.minutes*60 + =
(d1.seconds+'.'+d1.fraction)*1;=0A=
=0A=
		var d2mnth =3D d2.years *12 + d2.months;=0A=
=0A=
		var d2secs =3D d2.days*86400 + d2.hours*3600 + d2.minutes*60 + =
(d2.seconds+'.'+d2.fraction)*1;=0A=
=0A=
		var mnthdiff =3D (d1.pm+d1mnth)*1 + (d2.pm+d2mnth)*1;=0A=
=0A=
		var secsdiff =3D (d1.pm+d1secs)*1 + (d2.pm+d2secs)*1;=0A=
=0A=
		if ((mnthdiff < 0 && secsdiff > 0) || (mnthdiff > 0 && secsdiff < 0))=0A=
=0A=
			return '';=0A=
=0A=
		var secs =3D secsdiff % 60;=0A=
=0A=
		var pm =3D (mnthdiff<0||secsdiff<0?'-':'');=0A=
=0A=
		mnthdiff =3D Math.abs(mnthdiff);=0A=
=0A=
		secsdiff =3D Math.abs(secsdiff);=0A=
=0A=
		return _formatDuration(new Duration(pm, 0, mnthdiff, =
Math.floor(secsdiff/86400), Math.floor((secsdiff%86400)/3600), =
Math.floor((secsdiff%3600)/60), Math.floor(secs), Math.floor(secs%1)));=0A=
=0A=
	}=0A=
=0A=
	return '';=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>date</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function date(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
			)=0A=
=0A=
			return _formatDate(oDate, "xs:date");=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return _formatDate(new Date(), "xs:date");=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dateTime</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args />=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dateTime(){//must be UTC/Z=0A=
=0A=
	if (arguments.length > 0)=0A=
=0A=
		dateTime_invalidArgument.error;=0A=
=0A=
	var oDate =3D new Date();=0A=
=0A=
	return _formatDate(oDate, "xs:dateTime");=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dayAbbreviation</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dayAbbreviation(){=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		    (oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
		   )=0A=
=0A=
			return _dayAbbreviation(oDate.getDay(), arguments[1], arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return _dayAbbreviation(new Date().getDay(), arguments[1], =
arguments[2]);=0A=
=0A=
}=0A=
=0A=
function _dayAbbreviation(num, dfName, ctx){=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectNodes(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/*[local-name()=3D'days' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']" +=0A=
=0A=
			"/*[local-name()=3D'day' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']/@abbr");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			return nodes[num].nodeValue;=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else{ //we could try local=0A=
=0A=
		return gaLang[gsLang]["shortDays"][num*1];=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dayInMonth</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dayInMonth(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gMonthDay")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gDay"))=0A=
=0A=
		    )=0A=
=0A=
			return oDate.getDate();=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN=0A=
=0A=
	}else=0A=
=0A=
		return new Date().getDate();=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dayInWeek</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dayInWeek(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		    (oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
		   )=0A=
=0A=
			return _dayInWeek(oDate, arguments[1], arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return _dayInWeek(new Date(), arguments[1], arguments[2]);=0A=
=0A=
}=0A=
=0A=
function _dayInWeek(oDate, dfName, ctx){=0A=
=0A=
	var fdow =3D 0;=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectSingleNode(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/@first-day-of-week");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			fdow =3D gaDayNames[nodes.nodeValue];=0A=
=0A=
	}=0A=
=0A=
	return =
(oDate.getDay()-fdow<0?oDate.getDay()-fdow+7:oDate.getDay()-fdow);=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dayInYear</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dayInYear(){=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
			)=0A=
=0A=
			return _dayInYear(oDate.getFullYear(), oDate.getMonth(), =
oDate.getDate());=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else{=0A=
=0A=
		var oDate =3D new Date()=0A=
=0A=
		return _dayInYear(oDate.getFullYear(), oDate.getMonth(), =
oDate.getDate());=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dayName</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dayName(){=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		    (oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
		   )=0A=
=0A=
			return _dayName(oDate.getDay(), arguments[1], arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return _dayName(new Date().getDay(), arguments[1], arguments[2]);=0A=
=0A=
}=0A=
=0A=
function _dayName(num, dfName, ctx){=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectNodes(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/*[local-name()=3D'days' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']" +=0A=
=0A=
			"/*[local-name()=3D'day' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']/text()");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			return nodes[num].nodeValue;=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return gaLang[gsLang]["days"][num*1];=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>dayOfWeekInMonth</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function dayOfWeekInMonth(){=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
			)=0A=
=0A=
			return _dayOfWeekInMonth(oDate, arguments[1], arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return _dayOfWeekInMonth(new Date(), arguments[1], arguments[2]);	=0A=
=0A=
}=0A=
=0A=
function _dayOfWeekInMonth(oDate, dfName, ctx){=0A=
=0A=
	var fdow =3D 0;=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectSingleNode(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/@first-day-of-week");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			fdow =3D gaDayNames[nodes.nodeValue];=0A=
=0A=
	}=0A=
=0A=
	if (fdow > (oDate.getDay()-1))=0A=
=0A=
		return Math.floor((oDate.getDate())/7)+1;=0A=
=0A=
	else=0A=
=0A=
		return Math.floor((oDate.getDate())/7) + 1;=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>difference</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function difference(){=0A=
=0A=
	if (((d1 =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		 (d1 =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
		 (d1 =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
		 (d1 =3D _validDate(arguments[0], "xs:gYear"))=0A=
=0A=
		) &&=0A=
=0A=
		((d2 =3D _validDate(arguments[1], "xs:dateTime")) ||=0A=
=0A=
		 (d2 =3D _validDate(arguments[1], "xs:date")) ||=0A=
=0A=
		 (d2 =3D _validDate(arguments[1], "xs:gYearMonth")) ||=0A=
=0A=
		 (d2 =3D _validDate(arguments[1], "xs:gYear"))=0A=
=0A=
		 )=0A=
=0A=
		){// truncation=0A=
=0A=
		var diffMil =3D d2.valueOf() - d1.valueOf();=0A=
=0A=
		return _formatDuration(diffMil);=0A=
=0A=
	}=0A=
=0A=
	return Number.NaN;=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>duration</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"seconds" type=3D"number" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function duration(){=0A=
=0A=
	var oDate;=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var nN =3D new Number(arguments[0]);=0A=
=0A=
		if (isNaN(nN))=0A=
=0A=
			return '';=0A=
=0A=
		else=0A=
=0A=
			return _formatDuration(arguments[0] * 1000);=0A=
=0A=
	}else=0A=
=0A=
		return _formatDuration(seconds() * 1000);=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>formatDate</doc:name>=0A=
=0A=
	<doc:version>1.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"format" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"document" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function formatDate(date, format, dateF, ctx){=0A=
=0A=
	//Si en la url tenemos el idioma, lo cambiamos=0A=
	if (idioma()){=0A=
		dateF =3D "ga";=0A=
	}=0A=
	var oDate;=0A=
=0A=
	var re;=0A=
=0A=
	var retString =3D "";=0A=
=0A=
	if ((oDate =3D _validDate(date, "xs:dateTime")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:date")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:time")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:gYearMonth")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:gYear")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:gMonthDay")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:gMonth")) ||=0A=
=0A=
		(oDate =3D _validDate(date, "xs:gDay"))=0A=
=0A=
		){=0A=
=0A=
		for (var i=3D0; i < format.length;){=0A=
=0A=
			var s =3D i;=0A=
=0A=
					=0A=
=0A=
			switch(format.substr(i, 1)){=0A=
=0A=
				case "G"://        era designator          (Text)              AD=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"G"){i++;}=0A=
=0A=
					if (oDate.getFullYear() < 0){=0A=
=0A=
						retString +=3D "BC";=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D "AD";=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "y"://        year                    (Number)            1996=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"y"){i++;}=0A=
=0A=
					if (i-s > 2){=0A=
=0A=
						retString +=3D oDate.getFullYear();=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D oDate.getFullYear().toString().substring(4-(i-s));=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "M"://        month in year           (Text &amp; Number)     =
July &amp; 07=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"M"){i++;}=0A=
=0A=
					if (i-s <=3D 2){=0A=
=0A=
						retString +=3D pad(oDate.getMonth()+1);=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D _monthName(oDate.getMonth(), dateF, ctx);=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "d"://        day in month            (Number)            10=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"d"){i++;}=0A=
=0A=
					retString +=3D pad(oDate.getDate());=0A=
=0A=
					break;=0A=
=0A=
				case "h"://        hour in am/pm (1~12)    (Number)            12=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"h"){i++;}=0A=
=0A=
					if (oDate.getHours() > 12){=0A=
=0A=
						retString +=3D pad(oDate.getHours()-12);=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D pad(oDate.getHours());=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "H"://        hour in day (0~23)      (Number)            0=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"H"){i++;}=0A=
=0A=
					retString +=3D oDate.getHours();=0A=
=0A=
					break;=0A=
=0A=
				case "m"://        minute in hour          (Number)            30=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"m"){i++;}=0A=
=0A=
					retString +=3D pad(oDate.getMinutes());=0A=
=0A=
					break;=0A=
=0A=
				case "s"://        second in minute        (Number)            55=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"s"){i++;}=0A=
=0A=
					retString +=3D pad(oDate.getSeconds());=0A=
=0A=
					break;=0A=
=0A=
				case "S"://        millisecond             (Number)            978=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"S"){i++;}=0A=
=0A=
					retString +=3D oDate.getMilliseconds();=0A=
=0A=
					break;=0A=
=0A=
				case "E"://        day in week             (Text)              =
Tuesday=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"E"){i++;}if (i-s <=3D 3){=0A=
=0A=
						retString +=3D gaLang[dateF]["shortDays"][dayInWeek(date, dateF, =
ctx)];=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D gaLang[dateF]["days"][dayInWeek(date, dateF, ctx)];=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "D"://        day in year             (Number)            189=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"D"){i++;}=0A=
=0A=
					retString +=3D _dayInYear(oDate.getFullYear(), oDate.getMonths(), =
oDate.getDate());=0A=
=0A=
					break;=0A=
=0A=
				case "F"://        day of week in month    (Number)            2 =
(2nd Wed in July)=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"F"){i++;}=0A=
=0A=
					retString +=3D dayOfWeekInMonth(oDate, dateF, ctx);=0A=
=0A=
					break;=0A=
=0A=
				case "w"://        week in year            (Number)            27=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"w"){i++;}=0A=
=0A=
					retString +=3D weekInYear(oDate, dateF, ctx);=0A=
=0A=
					break;=0A=
=0A=
				case "W"://        week in month           (Number)            2=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"W"){i++;}=0A=
=0A=
					retString +=3D weekInMonth(oDate, dateF, ctx);=0A=
=0A=
					break;=0A=
=0A=
				case "a"://        am/pm marker            (Text)              PM=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"a"){i++;}=0A=
=0A=
					if (oDate.getHours() > 12 ){=0A=
=0A=
						retString +=3D "PM"=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D "AM"=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "k"://        hour in day (1~24)      (Number)            24=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"k"){i++;}=0A=
=0A=
					retString +=3D oDate.getHours();=0A=
=0A=
					break;=0A=
=0A=
				case "K"://        hour in am/pm (0~11)    (Number)            0=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"K"){i++;}=0A=
=0A=
					if (oDate.getHours() > 12){=0A=
=0A=
						retString +=3D oDate.getHours()-12;=0A=
=0A=
					}else{=0A=
=0A=
						retString +=3D oDate.getHours();=0A=
=0A=
					}=0A=
=0A=
					break;=0A=
=0A=
				case "z"://        time zone               (Text)              =
Pacific Standard Time=0A=
=0A=
				=0A=
=0A=
				=0A=
=0A=
				=0A=
=0A=
					while (format.substr(i, 1)=3D=3D"z"){i++;}=0A=
=0A=
					var tzo =3D oDate.getTimezoneOffset();=0A=
=0A=
					retString +=3D (tzo < 0?"-":"+") + pad(Math.abs(tzo / 60)) + ":" + =
pad(tzo % 60);=0A=
=0A=
 					break;=0A=
=0A=
 				case "'"://        escape for text         (Delimiter)=0A=
=0A=
 					if (format.substr(i+1, 1) =3D=3D "'"){=0A=
=0A=
 						i++;=0A=
=0A=
 						while (format.substr(i, 1)=3D=3D"'"){i++;}=0A=
=0A=
 						retString +=3D "'";=0A=
=0A=
 					}else{=0A=
=0A=
 						i++;=0A=
=0A=
 						while (format.substr(i, 1)!=3D"'" && i <=3D =
format.length){retString +=3D format.substr(i++, 1);}=0A=
=0A=
 						if (i >=3D format.length)return '';=0A=
=0A=
 						i++;=0A=
=0A=
 					}=0A=
=0A=
 					break;=0A=
=0A=
				default:=0A=
=0A=
					retString +=3D format.substr(i, 1);=0A=
=0A=
					i++;=0A=
=0A=
					break;=0A=
=0A=
			}=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
	return retString;=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>hourInDay</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function hourInDay(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		    (oDate =3D _validDate(arguments[0], "xs:time"))=0A=
=0A=
		   )=0A=
=0A=
			return oDate.getHours();=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return new Date().getHours();=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>leapYear</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"boolean" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function leapYear(){=0A=
=0A=
	if (arguments.length > 0 && arguments[0] !=3D ''){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYear"))=0A=
=0A=
		    )=0A=
=0A=
			return (_isLeap(oDate.getFullYear())?true:false);=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return (_isLeap(new Date().getFullYear())?true:false);=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>minuteInHour</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function minuteInHour(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		    (oDate =3D _validDate(arguments[0], "xs:time"))=0A=
=0A=
		   )=0A=
=0A=
			return oDate.getMinutes();=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return new Date().getMinutes();=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>monthAbbreviation</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function monthAbbreviation(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gMonthDay"))=0A=
=0A=
		    )=0A=
=0A=
			return _monthAbbreviation(oDate.getMonth(), arguments[1], =
arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return _monthAbbreviation(new Date().getMonth(), arguments[1], =
arguments[2]);=0A=
=0A=
}=0A=
=0A=
function _monthAbbreviation(num, dfName, ctx){//=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectNodes(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/*[local-name()=3D'months' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']" +=0A=
=0A=
			"/*[local-name()=3D'month' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']/@abbr");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			return nodes[num].nodeValue;=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else{ //we could try local=0A=
=0A=
		return gaLang[gsLang]["shortMonths"][num*1];=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>monthInYear</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function monthInYear(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gMonthDay")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYear"))=0A=
=0A=
		    )=0A=
=0A=
			return oDate.getMonth()+1;=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return new Date().getMonth()+1;=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>monthName</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function monthName(){//=0A=
=0A=
	if (arguments.length > 0){// && arguments[0] !=3D ''=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gMonthDay"))=0A=
=0A=
		    )=0A=
=0A=
			return _monthName(oDate.getMonth(), arguments[1], arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return _monthName(new Date().getMonth(), arguments[1],  arguments[2]);=0A=
=0A=
}=0A=
=0A=
function _monthName(num, dfName, ctx){//=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectNodes(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/*[local-name()=3D'months' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']" +=0A=
=0A=
			"/*[local-name()=3D'month' and =
namespace-uri()=3D'http://exslt.org/dates-and-times']/text()");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			return nodes[num].nodeValue;=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return gaLang[dfName]["months"][num*1];=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>parseDate</doc:name>=0A=
=0A=
	<doc:version>1.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"input-format" type=3D"string" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"document" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function parseDate(date, inFormat, dfName, ctx){//0001=0A=
=0A=
	var oDate;=0A=
=0A=
	if (inFormat =3D=3D ""){=0A=
=0A=
		if ((oDate =3D _validDate(date, "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:time")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:gYear")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:gMonthDay")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:gMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(date, "xs:gDay"))=0A=
=0A=
			){=0A=
=0A=
			return _formatDate(oDate, "xs:dateTime");=0A=
=0A=
		}=0A=
=0A=
	}else{=0A=
=0A=
		if (oDate =3D _validDate(date, inFormat))=0A=
=0A=
         return _formatDate(oDate, dfName);=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>secondInMinute</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function secondInMinute(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
		    (oDate =3D _validDate(arguments[0], "xs:time"))=0A=
=0A=
		   )=0A=
=0A=
			return oDate.getSeconds();=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return new Date().getSeconds();=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>seconds</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function seconds(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYear"))=0A=
=0A=
			)=0A=
=0A=
			return oDate.valueOf()/1000;=0A=
=0A=
		else =0A=
=0A=
			if (oDate =3D _validDuration(arguments[0]))=0A=
=0A=
				return oDate.Seconds();=0A=
=0A=
			else=0A=
=0A=
				return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return Math.floor(new Date().valueOf()/1000);//current local date/time=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>sum</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"durations" type=3D"node-set" default=3D"''" =
optional=3D"no"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function sum(ctx){=0A=
=0A=
	var sDate =3D "P0S";=0A=
=0A=
	if (typeof(ctx) =3D=3D "object"){=0A=
=0A=
		if (ctx.length){=0A=
=0A=
			for (var i=3D0; i < ctx.length; i++){=0A=
=0A=
				ctxN  =3D ctx.item(i);=0A=
=0A=
				if (ctxN.nodeType =3D=3D 1){=0A=
=0A=
					if (!(sDate =3D addDuration(sDate, _wander(ctxN))))=0A=
=0A=
						return '';=0A=
=0A=
				}=0A=
=0A=
				if (ctxN.nodeType =3D=3D 2){=0A=
=0A=
					if (!(sDate =3D addDuration(sDate, ctxN.nodeValue)))=0A=
=0A=
						return '';=0A=
=0A=
				}=0A=
=0A=
			}=0A=
=0A=
		}else{=0A=
=0A=
			if (!(sDate =3D addDuration(sDate, ctx.nodeValue)))=0A=
=0A=
					return '';=0A=
=0A=
		}=0A=
=0A=
	}else{=0A=
=0A=
		return '';=0A=
=0A=
	}=0A=
=0A=
	return sDate;=0A=
=0A=
}=0A=
=0A=
function   _wander(ctx){=0A=
=0A=
	var sDate =3D "P0S";=0A=
=0A=
	for (var i=3D0; i < ctx.childNodes.length; i++){=0A=
=0A=
		ctxN =3D ctx.childNodes[i];=0A=
=0A=
		switch(ctxN.nodeType){=0A=
=0A=
			case 1:=0A=
=0A=
				if (!(sDate =3D addDuration(sDate, _wander(ctxN))))=0A=
=0A=
						return '';=0A=
=0A=
				break;=0A=
=0A=
			case 3:=0A=
=0A=
				if (!(sDate =3D addDuration(sDate, ctxN.nodeValue)))=0A=
=0A=
						return '';=0A=
=0A=
				break;=0A=
=0A=
			default:=0A=
=0A=
				break;=0A=
=0A=
		}=0A=
=0A=
	}=0A=
=0A=
	return sDate;=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>time</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"string" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function time(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime"))||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:time"))=0A=
=0A=
		)=0A=
=0A=
			return _formatDate(oDate, "xs:time");=0A=
=0A=
		else=0A=
=0A=
			return '';=0A=
=0A=
	}else=0A=
=0A=
		return _formatDate(new Date(), "xs:time");=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>weekInMonth</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function weekInMonth(){=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
			)=0A=
=0A=
			return _weekInMonth(oDate, arguments[1], arguments[2]);=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return _weekInMonth(new Date(), arguments[1], arguments[2]);	=0A=
=0A=
}=0A=
=0A=
function _weekInMonth(oDate, dfName, ctx){=0A=
=0A=
	var fdow =3D 0;=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectSingleNode(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/@first-day-of-week");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			fdow =3D gaDayNames[nodes.nodeValue];=0A=
=0A=
	}=0A=
=0A=
	var f =3D new Date(oDate);=0A=
=0A=
	f.setDate(1)=0A=
=0A=
	var fd =3D f.getDay()-1;=0A=
=0A=
	var dt =3D oDate.getDate() + fd - fdow;=0A=
=0A=
	return Math.floor((dt)/7)+1;=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>weekInYear</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"date-format" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
		<doc:arg name=3D"context" type=3D"context" default=3D"null" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function weekInYear(){=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date"))=0A=
=0A=
			)=0A=
=0A=
			return _weekInYear(oDate, arguments[1], arguments[2]);=0A=
=0A=
	}else =0A=
=0A=
		return _weekInYear(new Date());=0A=
=0A=
	return '';=0A=
=0A=
}=0A=
=0A=
function _weekInYear(oDate, dfName, ctx){=0A=
=0A=
	var fdow =3D 0;=0A=
=0A=
	if (ctx !=3D null){=0A=
=0A=
		var nodes =3D ctx.nextNode.selectSingleNode(=0A=
=0A=
			"//*[local-name()=3D'date-format' and =
namespace-uri()=3D'http://exslt.org/dates-and-times' and @name=3D'" + =
dfName +"' ]" +=0A=
=0A=
			"/@first-day-of-week");=0A=
=0A=
		if (nodes !=3D null)=0A=
=0A=
			fdow =3D gaDayNames[nodes.nodeValue];=0A=
=0A=
		return Math.ceil(_dayInYear(oDate.getFullYear(), oDate.getMonth(), =
oDate.getDate()+(7-fdow)) / 7);=0A=
=0A=
	}else=0A=
=0A=
		return Math.ceil(_dayInYear(oDate.getFullYear(), oDate.getMonth(), =
oDate.getDate()) / 7);=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
<doc:function date=3D"2001-06-12">=0A=
=0A=
	<doc:name>year</doc:name>=0A=
=0A=
	<doc:version>2.0</doc:version>=0A=
=0A=
	<doc:return type=3D"number" />=0A=
=0A=
	<doc:args>=0A=
=0A=
		<doc:arg name=3D"date" type=3D"string" default=3D"''" =
optional=3D"yes"></doc:arg>=0A=
=0A=
	</doc:args>=0A=
=0A=
</doc:function>=0A=
=0A=
**/=0A=
=0A=
function year(){//=0A=
=0A=
	if (arguments.length > 0){=0A=
=0A=
		var oDate;=0A=
=0A=
		if ((oDate =3D _validDate(arguments[0], "xs:dateTime")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:date")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYearMonth")) ||=0A=
=0A=
			(oDate =3D _validDate(arguments[0], "xs:gYear"))=0A=
=0A=
		    )=0A=
=0A=
			return oDate.getFullYear();=0A=
=0A=
		else=0A=
=0A=
			return Number.NaN;=0A=
=0A=
	}else=0A=
=0A=
		return new Date().getFullYear();=0A=
=0A=
}=0A=
=0A=
/**=0A=
=0A=
Private functions.=0A=
=0A=
**/=0A=
=0A=
function _validDate(date, format){=0A=
=0A=
	var parts;=0A=
=0A=
	var oDate =3D new Date(-62135596800000); // Mon Jan 1 00:00:00 UTC 1=0A=
=0A=
	switch(format){=0A=
=0A=
		case "xs:dateTime": //(CCYY-MM-DDThh:mm:ss)=0A=
=0A=
			var re =3D new =
RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})(T([0-9]{2})(:([0-9]{2})(:([0-9]=
{2}))?)?)?(Z)?([\+\-][0-9]{2}:[0-9]{2})?$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				if (parts[10] =3D=3D "Z"){=0A=
=0A=
					oDate.setFullYear(parts[1], parts[2]-1, parts[3]);=0A=
=0A=
					oDate.setHours(parts[5], parts[7], parts[9]);=0A=
=0A=
					oDate.setMinutes(oDate.getMinutes()-oDate.getTimezoneOffset());=0A=
=0A=
					gsSuppliedFormat =3D "xs:dateTime";=0A=
=0A=
					return oDate;=0A=
=0A=
				}else{=0A=
=0A=
					oDate.setFullYear(parts[1], parts[2]-1, parts[3]);=0A=
=0A=
					oDate.setHours(parts[5], parts[7], parts[9]);=0A=
=0A=
					gsSuppliedFormat =3D "xs:dateTime";=0A=
=0A=
					return oDate;=0A=
=0A=
				}=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:date": //(CCYY-MM-DD) =0A=
=0A=
			var re =3D new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				oDate.setFullYear(parts[1], parts[2]-1, parts[3]);=0A=
=0A=
				gsSuppliedFormat =3D "xs:date";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:time": //(hh:mm:ss)=0A=
=0A=
			var re =3D new RegExp("^([0-9]{2})(:([0-9]{2})(:([0-9]{2}))?)?(Z)?$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				if (parts[9] =3D=3D "Z"){=0A=
=0A=
					oDate.setHours(parts[1], parts[3], parts[5]);=0A=
=0A=
					oDate.setMinutes(oDate.getMinutes()-oDate.getTimezoneOffset());=0A=
=0A=
					gsSuppliedFormat =3D "xs:time";=0A=
=0A=
					return oDate;=0A=
=0A=
				}else{=0A=
=0A=
					oDate.setHours(parts[1], parts[3], parts[5]);=0A=
=0A=
					gsSuppliedFormat =3D "xs:time";=0A=
=0A=
					return oDate;=0A=
=0A=
				}=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gYearMonth": //(CCYY-MM)=0A=
=0A=
			var re =3D new RegExp("^([0-9]{4})-([0-9]{2})$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				oDate.setFullYear(parts[1], parts[2]-1);=0A=
=0A=
				gsSuppliedFormat =3D "xs:gYearMonth";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gYear": //(CCYY)=0A=
=0A=
			var re =3D new RegExp("^([0-9]{4})$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				oDate.setFullYear(parts[1]);=0A=
=0A=
				gsSuppliedFormat =3D "xs:gYear";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gMonthDay": //(^--MM-DD)=0A=
=0A=
			var re =3D new RegExp("--([0-9]{2})-([0-9]{2})");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				oDate.setMonth(parts[1]-1, parts[2]);=0A=
=0A=
				gsSuppliedFormat =3D "xs:gMonthDay";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gMonth": //(--MM--)=0A=
=0A=
			var re =3D new RegExp("^--([0-9]{2})--$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				oDate.setMonth(parts[1]-1);=0A=
=0A=
				gsSuppliedFormat =3D "xs:gMonth";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gDay": //(---DD)=0A=
=0A=
			var re =3D new RegExp("^---([0-9]{2})$");=0A=
=0A=
			if (parts=3Dre.exec(date)){=0A=
=0A=
				oDate.setDate(parts[1]);=0A=
=0A=
				gsSuppliedFormat =3D "xs:gDay";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
		default:=0A=
=0A=
			// format string =0A=
=0A=
			var Z =3D "";=0A=
=0A=
			for (var i=3D0,j=3D0; i < format.length & oDate.toString() !=3D =
"NaN";){=0A=
=0A=
				var s =3D j;=0A=
=0A=
				switch(format.substr(i, 1)){=0A=
=0A=
					case "G"://        era designator          (Text)              AD=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"G"){i++;j++;}=0A=
=0A=
						j++;=0A=
=0A=
						if (date.substr(s,j-s) =3D=3D "BC" || date.substr(s,j-s) =3D=3D =
"bc"){=0A=
=0A=
							oDate.setFullYear(-oDate.getFullYear);=0A=
=0A=
						}=0A=
=0A=
						break;=0A=
=0A=
					case "y"://        year                    (Number)            1996=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"y"){i++;j++;}=0A=
=0A=
						oDate.setYear(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "M"://        month in year           (Text &amp; Number)     =
July &amp; 07=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"M"){i++;j++;}=0A=
=0A=
						if (i-s <=3D 2){=0A=
=0A=
							oDate.setMonth(date.substr(s,j-s)-1);=0A=
=0A=
						}else{=0A=
=0A=
							oDate.setMonth(_monthNumber(date.substr(s,j-s)));=0A=
=0A=
						}=0A=
=0A=
						break;=0A=
=0A=
					case "d"://        day in month            (Number)            10=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"d"){i++;j++;}=0A=
=0A=
						oDate.setDate(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "h"://        hour in am/pm (1~12)    (Number)            12=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"h"){i++;j++;}=0A=
=0A=
						oDate.setHours(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "H"://        hour in day (0~23)      (Number)            0=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"H"){i++;j++;}=0A=
=0A=
						oDate.setHours(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "m"://        minute in hour          (Number)            30=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"m"){i++;j++;}=0A=
=0A=
						oDate.setMinutes(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "s"://        second in minute        (Number)            55=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"s"){i++;j++;}=0A=
=0A=
						oDate.setSeconds(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "S"://        millisecond             (Number)            978=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"S"){i++;j++;}=0A=
=0A=
						oDate.setMilliseconds(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "E"://        day in week             (Text)              =
Tuesday=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"E"){i++;j++;}=0A=
=0A=
						while (format.substr(i+1, 1)!=3Ddate.substr(j, 1)){j++;}=0A=
=0A=
						break;=0A=
=0A=
					case "D"://        day in year             (Number)            189=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"D"){i++;j++;}=0A=
=0A=
						while (format.substr(i+1, 1)!=3Ddate.substr(j, 1)){j++;}=0A=
=0A=
						break;=0A=
=0A=
					case "F"://        day of week in month    (Number)            2 =
(2nd Wed in July)=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"F"){i++;j++;}=0A=
=0A=
						break;=0A=
=0A=
					case "w"://        week in year            (Number)            27=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"w"){i++;j++;}=0A=
=0A=
						while (format.substr(i+1, 1)!=3Ddate.substr(j, 1)){j++;}=0A=
=0A=
						break;=0A=
=0A=
					case "W"://        week in month           (Number)            2=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"W"){i++;j++;}=0A=
=0A=
						while (format.substr(i+1, 1)!=3Ddate.substr(j, 1)){j++;}=0A=
=0A=
						break;=0A=
=0A=
					case "a"://        am/pm marker            (Text)              PM=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"a"){i++;j++;}=0A=
=0A=
						j++;=0A=
=0A=
						if (date.substr(s,j-s) =3D=3D "PM" || date.substr(s,j-s) =3D=3D =
"pm")=0A=
=0A=
							oDate.setHours(oDate.getHours()+12);=0A=
=0A=
						break;=0A=
=0A=
					case "k"://        hour in day (1~24)      (Number)            24=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"k"){i++;j++;}=0A=
=0A=
						oDate.setHours(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "K"://        hour in am/pm (0~11)    (Number)            0=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"K"){i++;j++;}=0A=
=0A=
						oDate.setHours(date.substr(s,j-s));=0A=
=0A=
						break;=0A=
=0A=
					case "z"://        time zone               (Text)              =
Pacific Standard Time=0A=
=0A=
						while (format.substr(i, 1)=3D=3D"z"){i++;j++;}=0A=
=0A=
						while (format.substr(i+1, 1)!=3Ddate.substr(j, 1)){j++;}=0A=
=0A=
						//oDate.setMinutes(oDate.getMinutes() - oDate.getTimezoneOffset());=0A=
=0A=
						Z =3D date.substr(s,j-s);=0A=
=0A=
 						break;=0A=
=0A=
 					case "'"://        escape for text         (Delimiter)=0A=
=0A=
 						if (format.substr(i+1, 1) =3D=3D "'"){=0A=
=0A=
 							i+=3D2;=0A=
=0A=
 						}else{=0A=
=0A=
 							i++;=0A=
=0A=
 							while (format.substr(i, 1)!=3D"'"){i++;j++;}=0A=
=0A=
 							i++;=0A=
=0A=
 						}=0A=
=0A=
 						break;=0A=
=0A=
					default:=0A=
=0A=
						if (format.substr(i, 1) !=3D date.substr(j, 1)){=0A=
=0A=
							return false;=0A=
=0A=
						}=0A=
=0A=
						i++;j++;=0A=
=0A=
						break;=0A=
=0A=
				}=0A=
=0A=
			}=0A=
=0A=
			if (j < date.length)=0A=
=0A=
				return false;=0A=
=0A=
			if (oDate.toString() !=3D "NaN"){=0A=
=0A=
				if (Z !=3D ""){=0A=
=0A=
					var re =3D new RegExp("([\+\-][0-9]{2})?:([0-9]{2})?");=0A=
=0A=
					if (parts=3Dre.exec(Z)){=0A=
=0A=
						// check GMT/BST=0A=
=0A=
						var tzo =3D parts[1]*60 + parts[2];=0A=
=0A=
						//if (tzo !=3D new Date().getTimezoneOffset()){=0A=
=0A=
						//	oDate.setMinutes(oDate.getMinutes() - =
(oDate.getTimezoneOffset() - tzo))=0A=
=0A=
						//}=0A=
=0A=
					}=0A=
=0A=
				}=0A=
=0A=
				gsSuppliedFormat =3D "custom";=0A=
=0A=
				return oDate;=0A=
=0A=
			}=0A=
=0A=
			break;=0A=
=0A=
	}=0A=
=0A=
	return false;=0A=
=0A=
}=0A=
=0A=
function _formatDate(oDate, format){=0A=
=0A=
	if (oDate =3D=3D Number.NaN)return Number.NaN;=0A=
=0A=
	switch(format){=0A=
=0A=
		case "xs:dateTime": //(CCYY-MM-DDThh:mm:ss)=0A=
=0A=
			var tzo =3D oDate.getTimezoneOffset(); =0A=
=0A=
			return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1) + "-" + =
pad(oDate.getDate()) + "T" +=0A=
=0A=
				   pad(oDate.getHours()) + ":" + pad(oDate.getMinutes()) + ":" + =
pad(oDate.getSeconds()) + (tzo < 0?"-":"+") + pad(Math.abs(tzo/60)) + =
":" + pad(tzo % 60);=0A=
=0A=
			break;=0A=
=0A=
		case "xs:date": //(CCYY-MM-DD) =0A=
=0A=
			return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1) + "-" + =
pad(oDate.getDate());=0A=
=0A=
			break;=0A=
=0A=
		case "xs:time": //(hh:mm:ss)=0A=
=0A=
			var tzo =3D oDate.getTimezoneOffset(); =0A=
=0A=
			return pad(oDate.getHours()) + ":" + pad(oDate.getMinutes()) + ":" + =
pad(oDate.getSeconds()) + (tzo < 0?"-":"+") + pad(Math.abs(tzo/60)) + =
":" + pad(tzo % 60);=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gYearMonth": //(CCYY-MM)=0A=
=0A=
			return oDate.getFullYear() + "-" + pad(oDate.getMonth()+1);=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gYear": //(CCYY)=0A=
=0A=
			return oDate.getFullYear();=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gMonthDay": //(--MM-DD)=0A=
=0A=
			return pad(oDate.getMonth() + 1) + "-" + pad(oDate.getDate());=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gMonth": //(--MM--)=0A=
=0A=
			return pad(oDate.getMonth()+1);=0A=
=0A=
			break;=0A=
=0A=
		case "xs:gDay": //(---DD)=0A=
=0A=
			return pad(oDate.getDate());=0A=
=0A=
			break;=0A=
=0A=
	}=0A=
=0A=
	return false;=0A=
=0A=
}=0A=
=0A=
function pad(v){=0A=
=0A=
	return (v<10?"0"+v:v);=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function _validDuration(d){=0A=
=0A=
        var parts;=0A=
=0A=
        var re =3D new =
RegExp("^([\-])?P(([0-9]+)Y)?(([0-9]+)M)?(([0-9]+)D)?((T)?(([0-9]+)H)?(([=
0-9]+)M)?((([0-9]+)(\.([0-9]+))?)S)?)?$");=0A=
=0A=
        if (parts =3D re.exec(d)){=0A=
=0A=
                if ((/T$/.exec(d)) || (parts[9] =3D=3D "T" && =
parts[11]+parts[13]+parts[16]+parts[18]=3D=3D ""))// ~(:+(|) duh!!!=0A=
=0A=
                        return Number.NaN;=0A=
=0A=
                return new Duration(parts[1], parts[3], parts[5], =
parts[7], parts[11], parts[13], parts[16], parts[18]);=0A=
=0A=
        }=0A=
=0A=
        return Number.NaN;=0A=
=0A=
}=0A=
=0A=
=0A=
=0A=
function Duration(pm, years, months, days, hours, minutes, seconds, =
fraction){=0A=
=0A=
	this.pm =3D pm;=0A=
=0A=
	this.years =3D years*1;=0A=
=0A=
	this.months =3D months*1;=0A=
=0A=
	this.days =3D days*1;=0A=
=0A=
	this.hours =3D hours*1;=0A=
=0A=
	this.minutes =3D minutes*1;=0A=
=0A=
	this.seconds =3D seconds*1;=0A=
=0A=
	this.fraction =3D fraction*1;=0A=
=0A=
	this.milliseconds =3D eval('0.'+fraction) * 100;=0A=
=0A=
	this.mask =3D ((this.years?1:0)<<6) + ((this.months?1:0)<<5) + =
((this.days?1:0)<<4) + ((this.hours?1:0)<<3) + ((this.minutes?1:0)<<2) + =
((this.seconds?1:0)<<1) + (this.milliseconds?1:0);=0A=
=0A=
	this.addDate =3D =
function(d){d.setFullYear(eval(this.pm+this.years)+d.getFullYear(),eval(t=
his.pm+this.months)+d.getMonth(),eval(this.pm+this.days)+d.getDate());d.s=
etHours(eval(this.pm+this.hours)+d.getHours(),eval(this.pm+this.minutes)+=
d.getMinutes(),eval(this.pm+this.seconds)+d.getSeconds());d.setMillisecon=
ds(eval(this.pm+this.milliseconds));return d;}=0A=
=0A=
	this.Seconds =3D function(){if (this.years || this.months)return =
Number.NaN;return this.days*giDayMill + this.hours*giHourMill + =
this.minutes*giMinMill + this.seconds*giSecMill;}=0A=
=0A=
}=0A=
=0A=
var giYearMill =3D 31536000000;=0A=
=0A=
var giMonthMill =3D 2592000000;=0A=
=0A=
var giDayMill =3D 86400000;=0A=
=0A=
var giHourMill =3D 3600000;=0A=
=0A=
var giMinMill =3D 60000;=0A=
=0A=
var giSecMill =3D 1000;=0A=
=0A=
function _formatDuration(du){=0A=
=0A=
	if (typeof(du) =3D=3D "object"){=0A=
=0A=
		var pm =3D du.pm;=0A=
=0A=
		var y =3D du.years;=0A=
=0A=
		var m =3D du.months;=0A=
=0A=
		var d =3D du.days;=0A=
=0A=
		var h =3D du.hours;=0A=
=0A=
		var n =3D du.minutes;=0A=
=0A=
		var s =3D du.seconds + du.milliseconds/1000;=0A=
=0A=
		=0A=
=0A=
		if (y+m+d+h+n+s =3D=3D 0)=0A=
=0A=
			return 'P0S';=0A=
=0A=
		return pm + "P" + =0A=
=0A=
				(y!=3D0?y + "Y":'') + =0A=
=0A=
				(m!=3D0?m + "M":'') + =0A=
=0A=
				(d!=3D0?d + "D":'') + =0A=
=0A=
				(h+n+s!=3D0?"T":'') +=0A=
=0A=
				(h!=3D0?h + "H":'') + =0A=
=0A=
				(n!=3D0?n + "M":'') + =0A=
=0A=
				(s!=3D0?s + "S":'');=0A=
=0A=
	}else{=0A=
=0A=
		var pm =3D (du<0?'-':'');=0A=
=0A=
		du =3D Math.abs(du);=0A=
=0A=
		var d =3D Math.floor((du) / giDayMill);=0A=
=0A=
		var h =3D Math.floor((du % giDayMill) / giHourMill);=0A=
=0A=
		var n =3D Math.floor((du % giHourMill) / giMinMill);=0A=
=0A=
		var s =3D Math.floor((du % giMinMill) / giSecMill) + (du % =
giSecMill)/1000;=0A=
=0A=
		return pm + "P" + =0A=
=0A=
				(d!=3D0?d + "D":'') + =0A=
=0A=
				(h+n+s!=3D0?"T":'') +=0A=
=0A=
				(h!=3D0?h + "H":'') + =0A=
=0A=
				(n!=3D0?n + "M":'') + =0A=
=0A=
				(s!=3D0?s + "S":'');=0A=
=0A=
	}=0A=
=0A=
}=0A=
=0A=
=0A=
function formatLong(_long, format, dateF, ctx){=0A=
	var d =3D new Date(_long);=0A=
	var smo =3D d.getMonth()+1;=0A=
	if (smo<10)=0A=
		smo =3D "0"+smo;=0A=
	var sd =3D d.getDate();=0A=
	if (d.getDate()<10)=0A=
		sd =3D "0"+sd;=0A=
	var sh =3D d.getHours();=0A=
	if (d.getHours()<10)=0A=
		sh =3D "0"+sh;=0A=
	var sm =3D d.getMinutes();=0A=
	if (d.getMinutes()<10)=0A=
		sm =3D "0"+sm;=0A=
	var ss =3D d.getSeconds();=0A=
	if (d.getSeconds()<10)=0A=
		ss =3D "0"+ss;=0A=
	var sf =3D d.getFullYear()+"-"+smo+"-"+sd+"T"+sh+":"+sm+":"+ss+"+00:00";=0A=
	=0A=
	return formatDate(sf, format, dateF, ctx);=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/CEC5A24A0A80B1A101301D48004216CC/LVDG_seovoz.js

var =
base64s=3D"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789=
+/";=0A=
=0A=
function encode(decStr){=0A=
=0A=
  var bits, dual, i =3D 0, encOut =3D '';=0A=
  while(decStr.length >=3D i + 3){=0A=
    bits =3D=0A=
    (decStr.charCodeAt(i++) & 0xff) <<16 |=0A=
    (decStr.charCodeAt(i++) & 0xff) <<8  |=0A=
     decStr.charCodeAt(i++) & 0xff;=0A=
    encOut +=3D=0A=
     base64s.charAt((bits & 0x00fc0000) >>18) +=0A=
     base64s.charAt((bits & 0x0003f000) >>12) +=0A=
     base64s.charAt((bits & 0x00000fc0) >> 6) +=0A=
     base64s.charAt((bits & 0x0000003f));=0A=
    }=0A=
  if(decStr.length -i > 0 && decStr.length -i < 3){=0A=
    dual =3D Boolean(decStr.length -i -1);=0A=
    bits =3D=0A=
     ((decStr.charCodeAt(i++) & 0xff) <<16) |=0A=
     (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);=0A=
    encOut +=3D=0A=
      base64s.charAt((bits & 0x00fc0000) >>18) +=0A=
      base64s.charAt((bits & 0x0003f000) >>12) +=0A=
      (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=3D') +=0A=
      '=3D';=0A=
    }=0A=
  return encOut=0A=
  }=0A=
=0A=
=0A=
function seovoz(dominio,grupo,titulo,identificador,seccion){=0A=
	document.write("      <img alt=3D\"\" =
src=3D\"http://seovoz.lavozdegalicia.es/pixel.php?");=0A=
	document.write("h=3D");=0A=
	document.write(encode(document.domain));=0A=
	document.write("&u=3D");=0A=
	document.write(encode(document.URL));=0A=
	document.write("&r=3D");=0A=
	document.write(encode(document.referrer));=0A=
	if(dominio){=0A=
		document.write("&d=3D");=0A=
		document.write(encode(dominio));=0A=
	}=0A=
        if(grupo){=0A=
                document.write("&g=3D");=0A=
                document.write(encode(grupo));=0A=
        }=0A=
        if(titulo){=0A=
                document.write("&t=3D");=0A=
                document.write(encode(titulo));=0A=
        }=0A=
	if(identificador){=0A=
		document.write("&i=3D");=0A=
		document.write(encode(identificador));=0A=
	}=0A=
        if(seccion){=0A=
                document.write("&s=3D");=0A=
                document.write(encode(seccion));=0A=
        }=0A=
	document.write("&random=3D");=0A=
	document.write(Math.floor(Math.random()*100000));=0A=
	document.write('\" ');=0A=
	document.write(" width=3D\"1\" height=3D\"1\" ");=0A=
	document.write("/>\r\n");=0A=
=0A=
	return true;=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597585708264/LVDG_AjaxJDom.js

//Estas variables estaban antes en AJAXMisc, se cambiaron por el orden =
de inclusion de los JS.=0A=
//=0A=
// Based on=0A=
// =
<http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-195=
0641247>=0A=
var DOM_ELEMENT_NODE =3D 1;=0A=
var DOM_ATTRIBUTE_NODE =3D 2;=0A=
var DOM_TEXT_NODE =3D 3;=0A=
var DOM_CDATA_SECTION_NODE =3D 4;=0A=
var DOM_ENTITY_REFERENCE_NODE =3D 5;=0A=
var DOM_ENTITY_NODE =3D 6;=0A=
var DOM_PROCESSING_INSTRUCTION_NODE =3D 7;=0A=
var DOM_COMMENT_NODE =3D 8;=0A=
var DOM_DOCUMENT_NODE =3D 9;=0A=
var DOM_DOCUMENT_TYPE_NODE =3D 10;=0A=
var DOM_DOCUMENT_FRAGMENT_NODE =3D 11;=0A=
var DOM_NOTATION_NODE =3D 12;=0A=
=0A=
=0A=
var xpathdebug =3D false; // trace xpath parsing=0A=
var xsltdebug =3D false; // trace xslt processing=0A=
// hasta aqui AJAXMisc=0A=
=0A=
// Copyright 2005 Google Inc.=0A=
// All Rights Reserved=0A=
//=0A=
// An XML parse and a minimal DOM implementation that just supportes=0A=
// the subset of the W3C DOM that is used in the XSLT implementation.=0A=
//=0A=
// References: =0A=
//=0A=
// [DOM] W3C DOM Level 3 Core Specification=0A=
//       <http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/>.=0A=
//=0A=
// =0A=
// Author: Steffen Meschkat <mesch@google.com>=0A=
=0A=
// NOTE: The split() method in IE omits empty result strings. This is=0A=
// utterly annoying. So we don't use it here.=0A=
=0A=
// Resolve entities in XML text fragments. According to the DOM=0A=
// specification, the DOM is supposed to resolve entity references at=0A=
// the API level. I.e. no entity references are passed through the=0A=
// API. See "Entities and the DOM core", p.12, DOM 2 Core=0A=
// Spec. However, different browsers actually pass very different=0A=
// values at the API.=0A=
//=0A=
function xmlResolveEntities(s) {=0A=
=0A=
  var parts =3D stringSplit(s, '&');=0A=
=0A=
  var ret =3D parts[0];=0A=
  for (var i =3D 1; i < parts.length; ++i) {=0A=
    var rp =3D stringSplit(parts[i], ';');=0A=
    if (rp.length =3D=3D 1) {=0A=
      // no entity reference: just a & but no ;=0A=
      ret +=3D parts[i];=0A=
      continue;=0A=
    }=0A=
    =0A=
    var ch;=0A=
    switch (rp[0]) {=0A=
      case 'lt': =0A=
        ch =3D '<';=0A=
        break;=0A=
      case 'gt': =0A=
        ch =3D '>';=0A=
        break;=0A=
      case 'amp': =0A=
        ch =3D '&';=0A=
        break;=0A=
      case 'quot': =0A=
        ch =3D '"';=0A=
        break;=0A=
      case 'apos': =0A=
        ch =3D '\'';=0A=
        break;=0A=
      case 'nbsp': =0A=
        ch =3D String.fromCharCode(160);=0A=
        break;=0A=
      default:=0A=
        // Cool trick: let the DOM do the entity decoding. We assign=0A=
        // the entity text through non-W3C DOM properties and read it=0A=
        // through the W3C DOM. W3C DOM access is specified to resolve=0A=
        // entities. =0A=
        var span =3D window.document.createElement('span');=0A=
        span.innerHTML =3D '&' + rp[0] + '; ';=0A=
        ch =3D span.childNodes[0].nodeValue.charAt(0);=0A=
    }=0A=
    ret +=3D ch + rp[1];=0A=
  }=0A=
=0A=
  return ret;=0A=
}=0A=
=0A=
=0A=
// Parses the given XML string with our custom, JavaScript XML parser. =
Written=0A=
// by Steffen Meschkat (mesch@google.com).=0A=
function xmlParse(xml) {=0A=
  Timer.start('xmlparse');=0A=
  var regex_empty =3D /\/$/;=0A=
=0A=
  // See also <http://www.w3.org/TR/REC-xml/#sec-common-syn> for=0A=
  // allowed chars in a tag and attribute name. TODO(mesch): the=0A=
  // following is still not completely correct.=0A=
=0A=
  var regex_tagname =3D /^([\w:-]*)/;=0A=
  var regex_attribute =3D /([\w:-]+)\s?=3D\s?('([^\']*)'|"([^\"]*)")/g;=0A=
=0A=
  var xmldoc =3D new XDocument();=0A=
  var root =3D xmldoc;=0A=
=0A=
  // For the record: in Safari, we would create native DOM nodes, but=0A=
  // in Opera that is not possible, because the DOM only allows HTML=0A=
  // element nodes to be created, so we have to do our own DOM nodes.=0A=
=0A=
  // xmldoc =3D document.implementation.createDocument('','',null);=0A=
  // root =3D xmldoc; // .createDocumentFragment();=0A=
  // NOTE(mesch): using the DocumentFragment instead of the Document=0A=
  // crashes my Safari 1.2.4 (v125.12).=0A=
  var stack =3D [];=0A=
=0A=
  var parent =3D root;=0A=
  stack.push(parent);=0A=
=0A=
  var x =3D stringSplit(xml, '<');=0A=
  for (var i =3D 1; i < x.length; ++i) {=0A=
    var xx =3D stringSplit(x[i], '>');=0A=
    var tag =3D xx[0];=0A=
    var text =3D xmlResolveEntities(xx[1] || '');=0A=
=0A=
    if (tag.charAt(0) =3D=3D '/') {=0A=
      stack.pop();=0A=
      parent =3D stack[stack.length-1];=0A=
=0A=
    } else if (tag.charAt(0) =3D=3D '?') {=0A=
      // Ignore XML declaration and processing instructions=0A=
    } else if (tag.charAt(0) =3D=3D '!') {=0A=
      // Ignore notation and comments=0A=
    } else {=0A=
      var empty =3D tag.match(regex_empty);=0A=
      var tagname =3D regex_tagname.exec(tag)[1];=0A=
      var node =3D xmldoc.createElement(tagname);=0A=
=0A=
      var att;=0A=
      while (att =3D regex_attribute.exec(tag)) {=0A=
        var val =3D xmlResolveEntities(att[3] || att[4] || '');=0A=
        node.setAttribute(att[1], val);=0A=
      }=0A=
      =0A=
      if (empty) {=0A=
        parent.appendChild(node);=0A=
      } else {=0A=
        parent.appendChild(node);=0A=
        parent =3D node;=0A=
        stack.push(node);=0A=
      }=0A=
    }=0A=
=0A=
    if (text && parent !=3D root) {=0A=
      parent.appendChild(xmldoc.createTextNode(text));=0A=
    }=0A=
  }=0A=
=0A=
  Timer.end('xmlparse');=0A=
  return root;=0A=
}=0A=
=0A=
=0A=
// Our W3C DOM Node implementation. Note we call it XNode because we=0A=
// can't define the identifier Node. We do this mostly for Opera,=0A=
// where we can't reuse the HTML DOM for parsing our own XML, and for=0A=
// Safari, where it is too expensive to have the template processor=0A=
// operate on native DOM nodes.=0A=
function XNode(type, name, value, owner) {=0A=
  this.attributes =3D [];=0A=
  this.childNodes =3D [];=0A=
=0A=
  XNode.init.call(this, type, name, value, owner);=0A=
}=0A=
=0A=
// Don't call as method, use apply() or call().=0A=
XNode.init =3D function(type, name, value, owner) {=0A=
  this.nodeType =3D type - 0;=0A=
  this.nodeName =3D '' + name;=0A=
  this.nodeValue =3D '' + value;=0A=
  this.ownerDocument =3D owner;=0A=
=0A=
  this.firstChild =3D null;=0A=
  this.lastChild =3D null;=0A=
  this.nextSibling =3D null;=0A=
  this.previousSibling =3D null;=0A=
  this.parentNode =3D null;=0A=
}=0A=
=0A=
XNode.unused_ =3D [];=0A=
=0A=
XNode.recycle =3D function(node) {=0A=
  if (!node) {=0A=
    return;=0A=
  }=0A=
=0A=
  if (node.constructor =3D=3D XDocument) {=0A=
    XNode.recycle(node.documentElement);=0A=
    return;=0A=
  }=0A=
=0A=
  if (node.constructor !=3D this) {=0A=
    return;=0A=
  }=0A=
=0A=
  XNode.unused_.push(node);=0A=
  for (var a =3D 0; a < node.attributes.length; ++a) {=0A=
    XNode.recycle(node.attributes[a]);=0A=
  }=0A=
  for (var c =3D 0; c < node.childNodes.length; ++c) {=0A=
    XNode.recycle(node.childNodes[c]);=0A=
  }=0A=
  node.attributes.length =3D 0;=0A=
  node.childNodes.length =3D 0;=0A=
  XNode.init.call(node, 0, '', '', null);=0A=
}=0A=
=0A=
XNode.create =3D function(type, name, value, owner) {=0A=
  if (XNode.unused_.length > 0) {=0A=
    var node =3D XNode.unused_.pop();=0A=
    XNode.init.call(node, type, name, value, owner);=0A=
    return node;=0A=
  } else {=0A=
    return new XNode(type, name, value, owner);=0A=
  }=0A=
}=0A=
=0A=
XNode.prototype.appendChild =3D function(node) {=0A=
  // firstChild=0A=
  if (this.childNodes.length =3D=3D 0) {=0A=
    this.firstChild =3D node;=0A=
  }=0A=
=0A=
  // previousSibling=0A=
  node.previousSibling =3D this.lastChild;=0A=
=0A=
  // nextSibling=0A=
  node.nextSibling =3D null;=0A=
  if (this.lastChild) {=0A=
    this.lastChild.nextSibling =3D node;=0A=
  }=0A=
=0A=
  // parentNode=0A=
  node.parentNode =3D this;=0A=
=0A=
  // lastChild=0A=
  this.lastChild =3D node;=0A=
=0A=
  // childNodes=0A=
  this.childNodes.push(node);=0A=
}=0A=
=0A=
=0A=
XNode.prototype.replaceChild =3D function(newNode, oldNode) {=0A=
  if (oldNode =3D=3D newNode) {=0A=
    return;=0A=
  }=0A=
=0A=
  for (var i =3D 0; i < this.childNodes.length; ++i) {=0A=
    if (this.childNodes[i] =3D=3D oldNode) {=0A=
      this.childNodes[i] =3D newNode;=0A=
      =0A=
      var p =3D oldNode.parentNode;=0A=
      oldNode.parentNode =3D null;=0A=
      newNode.parentNode =3D p;=0A=
      =0A=
      p =3D oldNode.previousSibling;=0A=
      oldNode.previousSibling =3D null;=0A=
      newNode.previousSibling =3D p;=0A=
      if (newNode.previousSibling) {=0A=
        newNode.previousSibling.nextSibling =3D newNode;=0A=
      }=0A=
      =0A=
      p =3D oldNode.nextSibling;=0A=
      oldNode.nextSibling =3D null;=0A=
      newNode.nextSibling =3D p;=0A=
      if (newNode.nextSibling) {=0A=
        newNode.nextSibling.previousSibling =3D newNode;=0A=
      }=0A=
=0A=
      if (this.firstChild =3D=3D oldNode) {=0A=
        this.firstChild =3D newNode;=0A=
      }=0A=
=0A=
      if (this.lastChild =3D=3D oldNode) {=0A=
        this.lastChild =3D newNode;=0A=
      }=0A=
=0A=
      break;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
XNode.prototype.insertBefore =3D function(newNode, oldNode) {=0A=
  if (oldNode =3D=3D newNode) {=0A=
    return;=0A=
  }=0A=
=0A=
  if (oldNode.parentNode !=3D this) {=0A=
    return;=0A=
  }=0A=
=0A=
  if (newNode.parentNode) {=0A=
    newNode.parentNode.removeChild(newNode);=0A=
  }=0A=
=0A=
  var newChildren =3D [];=0A=
  for (var i =3D 0; i < this.childNodes.length; ++i) {=0A=
    var c =3D this.childNodes[i];=0A=
    if (c =3D=3D oldNode) {=0A=
      newChildren.push(newNode);=0A=
=0A=
      newNode.parentNode =3D this;=0A=
=0A=
      newNode.previousSibling =3D oldNode.previousSibling;=0A=
      oldNode.previousSibling =3D newNode;=0A=
      if (newNode.previousSibling) {=0A=
        newNode.previousSibling.nextSibling =3D newNode;=0A=
      }=0A=
      =0A=
      newNode.nextSibling =3D oldNode;=0A=
=0A=
      if (this.firstChild =3D=3D oldNode) {=0A=
        this.firstChild =3D newNode;=0A=
      }=0A=
    }=0A=
    newChildren.push(c);=0A=
  }=0A=
  this.childNodes =3D newChildren;=0A=
}=0A=
=0A=
XNode.prototype.removeChild =3D function(node) {=0A=
  var newChildren =3D [];=0A=
  for (var i =3D 0; i < this.childNodes.length; ++i) {=0A=
    var c =3D this.childNodes[i];=0A=
    if (c !=3D node) {=0A=
      newChildren.push(c);=0A=
    } else {=0A=
      if (c.previousSibling) {=0A=
        c.previousSibling.nextSibling =3D c.nextSibling;=0A=
      }=0A=
      if (c.nextSibling) {=0A=
        c.nextSibling.previousSibling =3D c.previousSibling;=0A=
      }=0A=
      if (this.firstChild =3D=3D c) {=0A=
        this.firstChild =3D c.nextSibling;=0A=
      }=0A=
      if (this.lastChild =3D=3D c) {=0A=
        this.lastChild =3D c.previousSibling;=0A=
      }=0A=
    }=0A=
  }=0A=
  this.childNodes =3D newChildren;=0A=
}=0A=
=0A=
=0A=
XNode.prototype.hasAttributes =3D function() {=0A=
  return this.attributes.length > 0;=0A=
}=0A=
=0A=
=0A=
XNode.prototype.setAttribute =3D function(name, value) {=0A=
  for (var i =3D 0; i < this.attributes.length; ++i) {=0A=
    if (this.attributes[i].nodeName =3D=3D name) {=0A=
      this.attributes[i].nodeValue =3D '' + value;=0A=
      return;=0A=
    }=0A=
  }=0A=
  this.attributes.push(new XNode(DOM_ATTRIBUTE_NODE, name, value));=0A=
}=0A=
=0A=
=0A=
XNode.prototype.getAttribute =3D function(name) {=0A=
  for (var i =3D 0; i < this.attributes.length; ++i) {=0A=
    if (this.attributes[i].nodeName =3D=3D name) {=0A=
      return this.attributes[i].nodeValue;=0A=
    }=0A=
  }=0A=
  return null;=0A=
}=0A=
=0A=
XNode.prototype.removeAttribute =3D function(name) {=0A=
  var a =3D [];=0A=
  for (var i =3D 0; i < this.attributes.length; ++i) {=0A=
    if (this.attributes[i].nodeName !=3D name) {=0A=
      a.push(this.attributes[i]);=0A=
    }=0A=
  }=0A=
  this.attributes =3D a;=0A=
}=0A=
=0A=
=0A=
function XDocument() {=0A=
  XNode.call(this, DOM_DOCUMENT_NODE, '#document', null, this);=0A=
  this.documentElement =3D null;=0A=
}=0A=
=0A=
XDocument.prototype =3D new XNode(DOM_DOCUMENT_NODE, '#document');=0A=
=0A=
XDocument.prototype.clear =3D function() {=0A=
  XNode.recycle(this.documentElement);=0A=
  this.documentElement =3D null;=0A=
}=0A=
=0A=
XDocument.prototype.appendChild =3D function(node) {=0A=
  XNode.prototype.appendChild.call(this, node);=0A=
  this.documentElement =3D this.childNodes[0];=0A=
}=0A=
=0A=
XDocument.prototype.createElement =3D function(name) {=0A=
  return XNode.create(DOM_ELEMENT_NODE, name, null, this);=0A=
}=0A=
=0A=
XDocument.prototype.createDocumentFragment =3D function() {=0A=
  return XNode.create(DOM_DOCUMENT_FRAGMENT_NODE, '#document-fragment',=0A=
                    null, this);=0A=
}=0A=
=0A=
XDocument.prototype.createTextNode =3D function(value) {=0A=
  return XNode.create(DOM_TEXT_NODE, '#text', value, this);=0A=
}=0A=
=0A=
XDocument.prototype.createAttribute =3D function(name) {=0A=
  return XNode.create(DOM_ATTRIBUTE_NODE, name, null, this);=0A=
}=0A=
=0A=
XDocument.prototype.createComment =3D function(data) {=0A=
  return XNode.create(DOM_COMMENT_NODE, '#comment', data, this);=0A=
}=0A=
=0A=
XNode.prototype.getElementsByTagName =3D function(name, list) {=0A=
  if (!list) {=0A=
    list =3D [];=0A=
  }=0A=
=0A=
  if (this.nodeName =3D=3D name) {=0A=
    list.push(this);=0A=
  }=0A=
=0A=
  for (var i =3D 0; i < this.childNodes.length; ++i) {=0A=
    this.childNodes[i].getElementsByTagName(name, list);=0A=
  }=0A=
=0A=
  return list;=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597630143481/LVDG_AjaxXpath.js

// Copyright 2005 Google Inc.=0A=
// All Rights Reserved=0A=
//=0A=
// An XPath parser and evaluator written in JavaScript. The=0A=
// implementation is complete except for functions handling=0A=
// namespaces.=0A=
//=0A=
// Reference: [XPATH] XPath Specification=0A=
// <http://www.w3.org/TR/1999/REC-xpath-19991116>.=0A=
//=0A=
//=0A=
// The API of the parser has several parts:=0A=
//=0A=
// 1. The parser function xpathParse() that takes a string and returns=0A=
// an expession object.=0A=
//=0A=
// 2. The expression object that has an evaluate() method to evaluate the=0A=
// XPath expression it represents. (It is actually a hierarchy of=0A=
// objects that resembles the parse tree, but an application will call=0A=
// evaluate() only on the top node of this hierarchy.)=0A=
//=0A=
// 3. The context object that is passed as an argument to the evaluate()=0A=
// method, which represents the DOM context in which the expression is=0A=
// evaluated.=0A=
//=0A=
// 4. The value object that is returned from evaluate() and represents=0A=
// values of the different types that are defined by XPath (number,=0A=
// string, boolean, and node-set), and allows to convert between them.=0A=
//=0A=
// These parts are near the top of the file, the functions and data=0A=
// that are used internally follow after them.=0A=
//=0A=
//=0A=
// TODO(mesch): add jsdoc comments. Use more coherent naming.=0A=
//=0A=
//=0A=
// Author: Steffen Meschkat <mesch@google.com>=0A=
=0A=
=0A=
// The entry point for the parser.=0A=
//=0A=
// @param expr a string that contains an XPath expression.=0A=
// @return an expression object that can be evaluated with an=0A=
// expression context.=0A=
=0A=
function xpathParse(expr) {=0A=
  if (xpathdebug) {=0A=
    Log.write('XPath parse ' + expr);=0A=
  }=0A=
  xpathParseInit();=0A=
=0A=
  var cached =3D xpathCacheLookup(expr);=0A=
  if (cached) {=0A=
    if (xpathdebug) {=0A=
      Log.write(' ... cached');=0A=
    }=0A=
    return cached;=0A=
  }=0A=
=0A=
  // Optimize for a few common cases: simple attribute node tests=0A=
  // (@id), simple element node tests (page), variable references=0A=
  // ($address), numbers (4), multi-step path expressions where each=0A=
  // step is a plain element node test=0A=
  // (page/overlay/locations/location).=0A=
  =0A=
  if (expr.match(/^(\$|@)?\w+$/i)) {=0A=
    var ret =3D makeSimpleExpr(expr);=0A=
    xpathParseCache[expr] =3D ret;=0A=
    if (xpathdebug) {=0A=
      Log.write(' ... simple');=0A=
    }=0A=
    return ret;=0A=
  }=0A=
=0A=
  if (expr.match(/^\w+(\/\w+)*$/i)) {=0A=
    var ret =3D makeSimpleExpr2(expr);=0A=
    xpathParseCache[expr] =3D ret;=0A=
    if (xpathdebug) {=0A=
      Log.write(' ... simple 2');=0A=
    }=0A=
    return ret;=0A=
  }=0A=
=0A=
  var cachekey =3D expr; // expr is modified during parse=0A=
  if (xpathdebug) {=0A=
    Timer.start('XPath parse', cachekey);=0A=
  }=0A=
=0A=
  var stack =3D [];=0A=
  var ahead =3D null;=0A=
  var previous =3D null;=0A=
  var done =3D false;=0A=
=0A=
  var parse_count =3D 0;=0A=
  var lexer_count =3D 0;=0A=
  var reduce_count =3D 0;=0A=
  =0A=
  while (!done) {=0A=
    parse_count++;=0A=
    expr =3D expr.replace(/^\s*/, '');=0A=
    previous =3D ahead;=0A=
    ahead =3D null;=0A=
=0A=
    var rule =3D null;=0A=
    var match =3D '';=0A=
    for (var i =3D 0; i < xpathTokenRules.length; ++i) {=0A=
      var result =3D xpathTokenRules[i].re.exec(expr);=0A=
      lexer_count++;=0A=
      if (result && result.length > 0 && result[0].length > =
match.length) {=0A=
        rule =3D xpathTokenRules[i];=0A=
        match =3D result[0];=0A=
        break;=0A=
      }=0A=
    }=0A=
=0A=
    // Special case: allow operator keywords to be element and=0A=
    // variable names.=0A=
=0A=
    // NOTE(mesch): The parser resolves conflicts by looking ahead,=0A=
    // and this is the only case where we look back to=0A=
    // disambiguate. So this is indeed something different, and=0A=
    // looking back is usually done in the lexer (via states in the=0A=
    // general case, called "start conditions" in flex(1)). Also,the=0A=
    // conflict resolution in the parser is not as robust as it could=0A=
    // be, so I'd like to keep as much off the parser as possible (all=0A=
    // these precedence values should be computed from the grammar=0A=
    // rules and possibly associativity declarations, as in bison(1),=0A=
    // and not explicitly set.=0A=
=0A=
    if (rule &&=0A=
        (rule =3D=3D TOK_DIV || =0A=
         rule =3D=3D TOK_MOD ||=0A=
         rule =3D=3D TOK_AND || =0A=
         rule =3D=3D TOK_OR) &&=0A=
        (!previous || =0A=
         previous.tag =3D=3D TOK_AT || =0A=
         previous.tag =3D=3D TOK_DSLASH || =0A=
         previous.tag =3D=3D TOK_SLASH ||=0A=
         previous.tag =3D=3D TOK_AXIS || =0A=
         previous.tag =3D=3D TOK_DOLLAR)) {=0A=
      rule =3D TOK_QNAME;=0A=
    }=0A=
=0A=
    if (rule) {=0A=
      expr =3D expr.substr(match.length);=0A=
      if (xpathdebug) {=0A=
        Log.write('token: ' + match + ' -- ' + rule.label);=0A=
      }=0A=
      ahead =3D {=0A=
        tag: rule,=0A=
        match: match,=0A=
        prec: rule.prec ?  rule.prec : 0, // || 0 is removed by the =
compiler=0A=
        expr: makeTokenExpr(match)=0A=
      };=0A=
=0A=
    } else {=0A=
      if (xpathdebug) {=0A=
        Log.write('DONE');=0A=
      }=0A=
      done =3D true;=0A=
    }=0A=
=0A=
    while (xpathReduce(stack, ahead)) {=0A=
      reduce_count++;=0A=
      if (xpathdebug) {=0A=
        Log.write('stack: ' + stackToString(stack));=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  if (xpathdebug) {=0A=
    Log.write(stackToString(stack));=0A=
  }=0A=
=0A=
  if (stack.length !=3D 1) {=0A=
    throw 'XPath parse error ' + cachekey + ':\n' + stackToString(stack);=0A=
  }=0A=
=0A=
  var result =3D stack[0].expr;=0A=
  xpathParseCache[cachekey] =3D result;=0A=
=0A=
  if (xpathdebug) {=0A=
    Timer.end('XPath parse', cachekey);=0A=
  }=0A=
=0A=
  if (xpathdebug) {=0A=
    Log.write('XPath parse: ' + parse_count + ' / ' + =0A=
              lexer_count + ' / ' + reduce_count);=0A=
  }=0A=
=0A=
  return result;=0A=
}=0A=
=0A=
var xpathParseCache =3D {};=0A=
=0A=
function xpathCacheLookup(expr) {=0A=
  return xpathParseCache[expr];=0A=
}=0A=
=0A=
function xpathReduce(stack, ahead) {=0A=
  var cand =3D null;=0A=
=0A=
  if (stack.length > 0) {=0A=
    var top =3D stack[stack.length-1];=0A=
    var ruleset =3D xpathRules[top.tag.key];=0A=
=0A=
    if (ruleset) {=0A=
      for (var i =3D 0; i < ruleset.length; ++i) {=0A=
        var rule =3D ruleset[i];=0A=
        var match =3D xpathMatchStack(stack, rule[1]);=0A=
        if (match.length) {=0A=
          cand =3D {=0A=
            tag: rule[0],=0A=
            rule: rule,=0A=
            match: match=0A=
          };=0A=
          cand.prec =3D xpathGrammarPrecedence(cand);=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  var ret;=0A=
  if (cand && (!ahead || cand.prec > ahead.prec || =0A=
               (ahead.tag.left && cand.prec >=3D ahead.prec))) {=0A=
    for (var i =3D 0; i < cand.match.matchlength; ++i) {=0A=
      stack.pop();=0A=
    }=0A=
=0A=
    if (xpathdebug) {=0A=
      Log.write('reduce ' + cand.tag.label + ' ' + cand.prec +=0A=
                ' ahead ' + (ahead ? ahead.tag.label + ' ' + ahead.prec =
+ =0A=
                             (ahead.tag.left ? ' left' : '')=0A=
                             : ' none '));=0A=
    }=0A=
=0A=
    var matchexpr =3D mapExpr(cand.match, function(m) { return m.expr; =
});=0A=
    cand.expr =3D cand.rule[3].apply(null, matchexpr);=0A=
=0A=
    stack.push(cand);=0A=
    ret =3D true;=0A=
=0A=
  } else {=0A=
    if (ahead) {=0A=
      if (xpathdebug) {=0A=
        Log.write('shift ' + ahead.tag.label + ' ' + ahead.prec + =0A=
                  (ahead.tag.left ? ' left' : '') +=0A=
                  ' over ' + (cand ? cand.tag.label + ' ' + =0A=
                              cand.prec : ' none'));=0A=
      }=0A=
      stack.push(ahead);=0A=
    }=0A=
    ret =3D false;=0A=
  }=0A=
  return ret;=0A=
}=0A=
=0A=
function xpathMatchStack(stack, pattern) {=0A=
=0A=
  // NOTE(mesch): The stack matches for variable cardinality are=0A=
  // greedy but don't do backtracking. This would be an issue only=0A=
  // with rules of the form A* A, i.e. with an element with variable=0A=
  // cardinality followed by the same element. Since that doesn't=0A=
  // occur in the grammar at hand, all matches on the stack are=0A=
  // unambiguous.=0A=
=0A=
  var S =3D stack.length;=0A=
  var P =3D pattern.length;=0A=
  var p, s;=0A=
  var match =3D [];=0A=
  match.matchlength =3D 0;=0A=
  var ds =3D 0;=0A=
  for (p =3D P - 1, s =3D S - 1; p >=3D 0 && s >=3D 0; --p, s -=3D ds) {=0A=
    ds =3D 0;=0A=
    var qmatch =3D [];=0A=
    if (pattern[p] =3D=3D Q_MM) {=0A=
      p -=3D 1;=0A=
      match.push(qmatch);=0A=
      while (s - ds >=3D 0 && stack[s - ds].tag =3D=3D pattern[p]) {=0A=
        qmatch.push(stack[s - ds]);=0A=
        ds +=3D 1;=0A=
        match.matchlength +=3D 1;=0A=
      }=0A=
=0A=
    } else if (pattern[p] =3D=3D Q_01) {=0A=
      p -=3D 1;=0A=
      match.push(qmatch);=0A=
      while (s - ds >=3D 0 && ds < 2 && stack[s - ds].tag =3D=3D =
pattern[p]) {=0A=
        qmatch.push(stack[s - ds]);=0A=
        ds +=3D 1;=0A=
        match.matchlength +=3D 1;=0A=
      }=0A=
=0A=
    } else if (pattern[p] =3D=3D Q_1M) {=0A=
      p -=3D 1;=0A=
      match.push(qmatch);=0A=
      if (stack[s].tag =3D=3D pattern[p]) {=0A=
        while (s - ds >=3D 0 && stack[s - ds].tag =3D=3D pattern[p]) {=0A=
          qmatch.push(stack[s - ds]);=0A=
          ds +=3D 1;=0A=
          match.matchlength +=3D 1;=0A=
        }=0A=
      } else {=0A=
        return [];=0A=
      }=0A=
=0A=
    } else if (stack[s].tag =3D=3D pattern[p]) {=0A=
      match.push(stack[s]);=0A=
      ds +=3D 1;=0A=
      match.matchlength +=3D 1;=0A=
=0A=
    } else {=0A=
      return [];=0A=
    }=0A=
=0A=
    reverseInplace(qmatch);=0A=
    qmatch.expr =3D mapExpr(qmatch, function(m) { return m.expr; });=0A=
  }=0A=
=0A=
  reverseInplace(match);=0A=
=0A=
  if (p =3D=3D -1) {=0A=
    return match;=0A=
=0A=
  } else {=0A=
    return [];=0A=
  }=0A=
}=0A=
=0A=
function xpathTokenPrecedence(tag) {=0A=
  return tag.prec || 2;=0A=
}=0A=
=0A=
function xpathGrammarPrecedence(frame) {=0A=
  var ret =3D 0;=0A=
=0A=
  if (frame.rule) { /* normal reduce */=0A=
    if (frame.rule.length >=3D 3 && frame.rule[2] >=3D 0) {=0A=
      ret =3D frame.rule[2];=0A=
=0A=
    } else {=0A=
      for (var i =3D 0; i < frame.rule[1].length; ++i) {=0A=
        var p =3D xpathTokenPrecedence(frame.rule[1][i]);=0A=
        ret =3D Math.max(ret, p);=0A=
      }=0A=
    }=0A=
  } else if (frame.tag) { /* TOKEN match */=0A=
    ret =3D xpathTokenPrecedence(frame.tag);=0A=
=0A=
  } else if (frame.length) { /* Q_ match */=0A=
    for (var j =3D 0; j < frame.length; ++j) {=0A=
      var p =3D xpathGrammarPrecedence(frame[j]);=0A=
      ret =3D Math.max(ret, p);=0A=
    }=0A=
  }=0A=
=0A=
  return ret;=0A=
}=0A=
=0A=
function stackToString(stack) {=0A=
  var ret =3D '';=0A=
  for (var i =3D 0; i < stack.length; ++i) {=0A=
    if (ret) {=0A=
      ret +=3D '\n';=0A=
    }=0A=
    ret +=3D stack[i].tag.label;=0A=
  }=0A=
  return ret;=0A=
}=0A=
=0A=
=0A=
// XPath expression evaluation context. An XPath context consists of a=0A=
// DOM node, a list of DOM nodes that contains this node, a number=0A=
// that represents the position of the single node in the list, and a=0A=
// current set of variable bindings. (See XPath spec.)=0A=
//=0A=
// The interface of the expression context:=0A=
//=0A=
//   Constructor -- gets the node, its position, the node set it=0A=
//   belongs to, and a parent context as arguments. The parent context=0A=
//   is used to implement scoping rules for variables: if a variable=0A=
//   is not found in the current context, it is looked for in the=0A=
//   parent context, recursively. Except for node, all arguments have=0A=
//   default values: default position is 0, default node set is the=0A=
//   set that contains only the node, and the default parent is null.=0A=
//=0A=
//     Notice that position starts at 0 at the outside interface;=0A=
//     inside XPath expressions this shows up as position()=3D1.=0A=
//=0A=
//   clone() -- creates a new context with the current context as=0A=
//   parent. If passed as argument to clone(), the new context has a=0A=
//   different node, position, or node set. What is not passed is=0A=
//   inherited from the cloned context.=0A=
//=0A=
//   setVariable(name, expr) -- binds given XPath expression to the=0A=
//   name.=0A=
//=0A=
//   getVariable(name) -- what the name says.=0A=
//=0A=
//   setNode(node, position) -- sets the context to the new node and=0A=
//   its corresponding position. Needed to implement scoping rules for=0A=
//   variables in XPath. (A variable is visible to all subsequent=0A=
//   siblings, not only to its children.)=0A=
=0A=
function ExprContext(node, position, nodelist, parent) {=0A=
  this.node =3D node;=0A=
  this.position =3D position || 0;=0A=
  this.nodelist =3D nodelist || [ node ];=0A=
  this.variables =3D {};=0A=
  this.parent =3D parent || null;=0A=
  this.root =3D parent ? parent.root : node.ownerDocument;=0A=
}=0A=
=0A=
ExprContext.prototype.clone =3D function(node, position, nodelist) {=0A=
  return new=0A=
  ExprContext(node || this.node,=0A=
              typeof position !=3D 'undefined' ? position : =
this.position,=0A=
              nodelist || this.nodelist, this);=0A=
};=0A=
=0A=
ExprContext.prototype.setVariable =3D function(name, value) {=0A=
  this.variables[name] =3D value;=0A=
};=0A=
=0A=
ExprContext.prototype.getVariable =3D function(name) {=0A=
  if (typeof this.variables[name] !=3D 'undefined') {=0A=
    return this.variables[name];=0A=
=0A=
  } else if (this.parent) {=0A=
    return this.parent.getVariable(name);=0A=
=0A=
  } else {=0A=
    return null;=0A=
  }=0A=
}=0A=
=0A=
ExprContext.prototype.setNode =3D function(node, position) {=0A=
  this.node =3D node;=0A=
  this.position =3D position;=0A=
}=0A=
=0A=
=0A=
// XPath expression values. They are what XPath expressions evaluate=0A=
// to. Strangely, the different value types are not specified in the=0A=
// XPath syntax, but only in the semantics, so they don't show up as=0A=
// nonterminals in the grammar. Yet, some expressions are required to=0A=
// evaluate to particular types, and not every type can be coerced=0A=
// into every other type. Although the types of XPath values are=0A=
// similar to the types present in JavaScript, the type coercion rules=0A=
// are a bit peculiar, so we explicitly model XPath types instead of=0A=
// mapping them onto JavaScript types. (See XPath spec.)=0A=
//=0A=
// The four types are:=0A=
//=0A=
//   StringValue=0A=
//=0A=
//   NumberValue=0A=
//=0A=
//   BooleanValue=0A=
//=0A=
//   NodeSetValue=0A=
//=0A=
// The common interface of the value classes consists of methods that=0A=
// implement the XPath type coercion rules:=0A=
//=0A=
//   stringValue() -- returns the value as a JavaScript String,=0A=
//=0A=
//   numberValue() -- returns the value as a JavaScript Number,=0A=
//=0A=
//   booleanValue() -- returns the value as a JavaScript Boolean,=0A=
//=0A=
//   nodeSetValue() -- returns the value as a JavaScript Array of DOM=0A=
//   Node objects.=0A=
//=0A=
=0A=
function StringValue(value) {=0A=
  this.value =3D value;=0A=
  this.type =3D 'string';=0A=
}=0A=
=0A=
StringValue.prototype.stringValue =3D function() {=0A=
  return this.value;=0A=
}=0A=
=0A=
StringValue.prototype.booleanValue =3D function() {=0A=
  return this.value.length > 0;=0A=
}=0A=
=0A=
StringValue.prototype.numberValue =3D function() {=0A=
  return this.value - 0;=0A=
}=0A=
=0A=
StringValue.prototype.nodeSetValue =3D function() {=0A=
  throw this + ' ' + Error().stack;=0A=
}=0A=
=0A=
function BooleanValue(value) {=0A=
  this.value =3D value;=0A=
  this.type =3D 'boolean';=0A=
}=0A=
=0A=
BooleanValue.prototype.stringValue =3D function() {=0A=
  return '' + this.value;=0A=
}=0A=
=0A=
BooleanValue.prototype.booleanValue =3D function() {=0A=
  return this.value;=0A=
}=0A=
=0A=
BooleanValue.prototype.numberValue =3D function() {=0A=
  return this.value ? 1 : 0;=0A=
}=0A=
=0A=
BooleanValue.prototype.nodeSetValue =3D function() {=0A=
  throw this + ' ' + Error().stack;=0A=
}=0A=
=0A=
function NumberValue(value) {=0A=
  this.value =3D value;=0A=
  this.type =3D 'number';=0A=
}=0A=
=0A=
NumberValue.prototype.stringValue =3D function() {=0A=
  return '' + this.value;=0A=
}=0A=
=0A=
NumberValue.prototype.booleanValue =3D function() {=0A=
  return !!this.value;=0A=
}=0A=
=0A=
NumberValue.prototype.numberValue =3D function() {=0A=
  return this.value - 0;=0A=
}=0A=
=0A=
NumberValue.prototype.nodeSetValue =3D function() {=0A=
  throw this + ' ' + Error().stack;=0A=
}=0A=
=0A=
function NodeSetValue(value) {=0A=
  this.value =3D value;=0A=
  this.type =3D 'node-set';=0A=
}=0A=
=0A=
NodeSetValue.prototype.stringValue =3D function() {=0A=
  if (this.value.length =3D=3D 0) {=0A=
    return '';=0A=
  } else {=0A=
    return xmlValue(this.value[0]);=0A=
  }=0A=
}=0A=
=0A=
NodeSetValue.prototype.booleanValue =3D function() {=0A=
  return this.value.length > 0;=0A=
}=0A=
=0A=
NodeSetValue.prototype.numberValue =3D function() {=0A=
  return this.stringValue() - 0;=0A=
}=0A=
=0A=
NodeSetValue.prototype.nodeSetValue =3D function() {=0A=
  return this.value;=0A=
};=0A=
=0A=
// XPath expressions. They are used as nodes in the parse tree and=0A=
// possess an evaluate() method to compute an XPath value given an XPath=0A=
// context. Expressions are returned from the parser. Teh set of=0A=
// expression classes closely mirrors the set of non terminal symbols=0A=
// in the grammar. Every non trivial nonterminal symbol has a=0A=
// corresponding expression class.=0A=
//=0A=
// The common expression interface consists of the following methods:=0A=
//=0A=
// evaluate(context) -- evaluates the expression, returns a value.=0A=
//=0A=
// toString() -- returns the XPath text representation of the=0A=
// expression (defined in xsltdebug.js).=0A=
//=0A=
// parseTree(indent) -- returns a parse tree representation of the=0A=
// expression (defined in xsltdebug.js).=0A=
=0A=
function TokenExpr(m) {=0A=
  this.value =3D m;=0A=
}=0A=
=0A=
TokenExpr.prototype.evaluate =3D function() {=0A=
  return new StringValue(this.value);=0A=
};=0A=
=0A=
function LocationExpr() {=0A=
  this.absolute =3D false;=0A=
  this.steps =3D [];=0A=
}=0A=
=0A=
LocationExpr.prototype.appendStep =3D function(s) {=0A=
  this.steps.push(s);=0A=
}=0A=
=0A=
LocationExpr.prototype.prependStep =3D function(s) {=0A=
  var steps0 =3D this.steps;=0A=
  this.steps =3D [ s ];=0A=
  for (var i =3D 0; i < steps0.length; ++i) {=0A=
    this.steps.push(steps0[i]);=0A=
  }=0A=
};=0A=
=0A=
LocationExpr.prototype.evaluate =3D function(ctx) {=0A=
  var start;=0A=
  if (this.absolute) {=0A=
    start =3D ctx.root;=0A=
=0A=
  } else {=0A=
    start =3D ctx.node;=0A=
  }=0A=
=0A=
  var nodes =3D [];=0A=
  xPathStep(nodes, this.steps, 0, start, ctx);=0A=
  return new NodeSetValue(nodes);=0A=
};=0A=
=0A=
function xPathStep(nodes, steps, step, input, ctx) {=0A=
  var s =3D steps[step];=0A=
  var ctx2 =3D ctx.clone(input);=0A=
  var nodelist =3D s.evaluate(ctx2).nodeSetValue();=0A=
=0A=
  for (var i =3D 0; i < nodelist.length; ++i) {=0A=
    if (step =3D=3D steps.length - 1) {=0A=
      nodes.push(nodelist[i]);=0A=
    } else {=0A=
      xPathStep(nodes, steps, step + 1, nodelist[i], ctx);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
function StepExpr(axis, nodetest, predicate) {=0A=
  this.axis =3D axis;=0A=
  this.nodetest =3D nodetest;=0A=
  this.predicate =3D predicate || [];=0A=
}=0A=
=0A=
StepExpr.prototype.appendPredicate =3D function(p) {=0A=
  this.predicate.push(p);=0A=
}=0A=
=0A=
StepExpr.prototype.evaluate =3D function(ctx) {=0A=
  var input =3D ctx.node;=0A=
  var nodelist =3D [];=0A=
=0A=
  // NOTE(mesch): When this was a switch() statement, it didn't work=0A=
  // in Safari/2.0. Not sure why though; it resulted in the JavaScript=0A=
  // console output "undefined" (without any line number or so).=0A=
=0A=
  if (this.axis =3D=3D  xpathAxis.ANCESTOR_OR_SELF) {=0A=
    nodelist.push(input);=0A=
    for (var n =3D input.parentNode; n; n =3D input.parentNode) {=0A=
      nodelist.push(n);=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.ANCESTOR) {=0A=
    for (var n =3D input.parentNode; n; n =3D input.parentNode) {=0A=
      nodelist.push(n);=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.ATTRIBUTE) {=0A=
    copyArray(nodelist, input.attributes);=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.CHILD) {=0A=
    copyArray(nodelist, input.childNodes);=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.DESCENDANT_OR_SELF) {=0A=
    nodelist.push(input);=0A=
    xpathCollectDescendants(nodelist, input);=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.DESCENDANT) {=0A=
    xpathCollectDescendants(nodelist, input);=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.FOLLOWING) {=0A=
    for (var n =3D input.parentNode; n; n =3D n.parentNode) {=0A=
      for (var nn =3D n.nextSibling; nn; nn =3D nn.nextSibling) {=0A=
        nodelist.push(nn);=0A=
        xpathCollectDescendants(nodelist, nn);=0A=
      }=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.FOLLOWING_SIBLING) {=0A=
    for (var n =3D input.nextSibling; n; n =3D input.nextSibling) {=0A=
      nodelist.push(n);=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.NAMESPACE) {=0A=
    alert('not implemented: axis namespace');=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.PARENT) {=0A=
    if (input.parentNode) {=0A=
      nodelist.push(input.parentNode);=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.PRECEDING) {=0A=
    for (var n =3D input.parentNode; n; n =3D n.parentNode) {=0A=
      for (var nn =3D n.previousSibling; nn; nn =3D nn.previousSibling) {=0A=
        nodelist.push(nn);=0A=
        xpathCollectDescendantsReverse(nodelist, nn);=0A=
      }=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.PRECEDING_SIBLING) {=0A=
    for (var n =3D input.previousSibling; n; n =3D =
input.previousSibling) {=0A=
      nodelist.push(n);=0A=
    }=0A=
=0A=
  } else if (this.axis =3D=3D xpathAxis.SELF) {=0A=
    nodelist.push(input);=0A=
=0A=
  } else {=0A=
    throw 'ERROR -- NO SUCH AXIS: ' + this.axis;=0A=
  }=0A=
=0A=
  // process node test=0A=
  var nodelist0 =3D nodelist;=0A=
  nodelist =3D [];=0A=
  for (var i =3D 0; i < nodelist0.length; ++i) {=0A=
    var n =3D nodelist0[i];=0A=
    if (this.nodetest.evaluate(ctx.clone(n, i, =
nodelist0)).booleanValue()) {=0A=
      nodelist.push(n);=0A=
    }=0A=
  }=0A=
=0A=
  // process predicates=0A=
  for (var i =3D 0; i < this.predicate.length; ++i) {=0A=
    var nodelist0 =3D nodelist;=0A=
    nodelist =3D [];=0A=
    for (var ii =3D 0; ii < nodelist0.length; ++ii) {=0A=
      var n =3D nodelist0[ii];=0A=
      if (this.predicate[i].evaluate(ctx.clone(n, ii, =
nodelist0)).booleanValue()) {=0A=
        nodelist.push(n);=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  return new NodeSetValue(nodelist);=0A=
};=0A=
=0A=
function NodeTestAny() {=0A=
  this.value =3D new BooleanValue(true);=0A=
}=0A=
=0A=
NodeTestAny.prototype.evaluate =3D function(ctx) {=0A=
  return this.value;=0A=
};=0A=
=0A=
function NodeTestElement() {}=0A=
=0A=
NodeTestElement.prototype.evaluate =3D function(ctx) {=0A=
  return new BooleanValue(ctx.node.nodeType =3D=3D DOM_ELEMENT_NODE);=0A=
}=0A=
=0A=
function NodeTestText() {}=0A=
=0A=
NodeTestText.prototype.evaluate =3D function(ctx) {=0A=
  return new BooleanValue(ctx.node.nodeType =3D=3D DOM_TEXT_NODE);=0A=
}=0A=
=0A=
function NodeTestComment() {}=0A=
=0A=
NodeTestComment.prototype.evaluate =3D function(ctx) {=0A=
  return new BooleanValue(ctx.node.nodeType =3D=3D DOM_COMMENT_NODE);=0A=
}=0A=
=0A=
function NodeTestPI(target) {=0A=
  this.target =3D target;=0A=
}=0A=
=0A=
NodeTestPI.prototype.evaluate =3D function(ctx) {=0A=
  return new=0A=
  BooleanValue(ctx.node.nodeType =3D=3D DOM_PROCESSING_INSTRUCTION_NODE =
&&=0A=
               (!this.target || ctx.node.nodeName =3D=3D this.target));=0A=
}=0A=
=0A=
function NodeTestNC(nsprefix) {=0A=
  this.regex =3D new RegExp("^" + nsprefix + ":");=0A=
  this.nsprefix =3D nsprefix;=0A=
}=0A=
=0A=
NodeTestNC.prototype.evaluate =3D function(ctx) {=0A=
  var n =3D ctx.node;=0A=
  return new BooleanValue(this.regex.match(n.nodeName));=0A=
}=0A=
=0A=
function NodeTestName(name) {=0A=
  this.name =3D name;=0A=
}=0A=
=0A=
NodeTestName.prototype.evaluate =3D function(ctx) {=0A=
  var n =3D ctx.node;=0A=
  return new BooleanValue(n.nodeName =3D=3D this.name);=0A=
}=0A=
=0A=
function PredicateExpr(expr) {=0A=
  this.expr =3D expr;=0A=
}=0A=
=0A=
PredicateExpr.prototype.evaluate =3D function(ctx) {=0A=
  var v =3D this.expr.evaluate(ctx);=0A=
  if (v.type =3D=3D 'number') {=0A=
    // NOTE(mesch): Internally, position is represented starting with=0A=
    // 0, however in XPath position starts with 1. See functions=0A=
    // position() and last().=0A=
    return new BooleanValue(ctx.position =3D=3D v.numberValue() - 1);=0A=
  } else {=0A=
    return new BooleanValue(v.booleanValue());=0A=
  }=0A=
};=0A=
=0A=
function FunctionCallExpr(name) {=0A=
  this.name =3D name;=0A=
  this.args =3D [];=0A=
}=0A=
=0A=
FunctionCallExpr.prototype.appendArg =3D function(arg) {=0A=
  this.args.push(arg);=0A=
};=0A=
=0A=
FunctionCallExpr.prototype.evaluate =3D function(ctx) {=0A=
  var fn =3D '' + this.name.value;=0A=
  var f =3D this.xpathfunctions[fn];=0A=
  if (f) {=0A=
    return f.call(this, ctx);=0A=
  } else {=0A=
    Log.write('XPath NO SUCH FUNCTION ' + fn);=0A=
    return new BooleanValue(false);=0A=
  }=0A=
};=0A=
=0A=
FunctionCallExpr.prototype.xpathfunctions =3D {=0A=
  'last': function(ctx) {=0A=
    assert(this.args.length =3D=3D 0);=0A=
    // NOTE(mesch): XPath position starts at 1.=0A=
    return new NumberValue(ctx.nodelist.length);=0A=
  },=0A=
=0A=
  'position': function(ctx) {=0A=
    assert(this.args.length =3D=3D 0);=0A=
    // NOTE(mesch): XPath position starts at 1.=0A=
    return new NumberValue(ctx.position + 1);=0A=
  },=0A=
=0A=
  'count': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var v =3D this.args[0].evaluate(ctx);=0A=
    return new NumberValue(v.nodeSetValue().length);=0A=
  },=0A=
=0A=
  'id': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var e =3D this.args.evaluate(ctx);=0A=
    var ret =3D [];=0A=
    var ids;=0A=
    if (e.type =3D=3D 'node-set') {=0A=
      ids =3D [];=0A=
      for (var i =3D 0; i < e.length; ++i) {=0A=
        var v =3D xmlValue(e[i]).split(/\s+/);=0A=
        for (var ii =3D 0; ii < v.length; ++ii) {=0A=
          ids.push(v[ii]);=0A=
        }=0A=
      }=0A=
    } else {=0A=
      ids =3D e.split(/\s+/);=0A=
    }=0A=
    var d =3D ctx.node.ownerDocument;=0A=
    for (var i =3D 0; i < ids.length; ++i) {=0A=
      var n =3D d.getElementById(ids[i]);=0A=
      if (n) {=0A=
        ret.push(n);=0A=
      }=0A=
    }=0A=
    return new NodeSetValue(ret);=0A=
  },=0A=
=0A=
  'local-name': function(ctx) {=0A=
    alert('not implmented yet: XPath function local-name()');=0A=
  },=0A=
=0A=
  'namespace-uri': function(ctx) {=0A=
    alert('not implmented yet: XPath function namespace-uri()');=0A=
  },=0A=
=0A=
  'name': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1 || this.args.length =3D=3D 0);=0A=
    var n;=0A=
    if (this.args.length =3D=3D 0) {=0A=
      n =3D [ ctx.node ];=0A=
    } else {=0A=
      n =3D this.args[0].evaluate(ctx).nodeSetValue();=0A=
    }=0A=
=0A=
    if (n.length =3D=3D 0) {=0A=
      return new StringValue('');=0A=
    } else {=0A=
      return new StringValue(n[0].nodeName);=0A=
    }=0A=
  },=0A=
=0A=
  'string':  function(ctx) {=0A=
    assert(this.args.length =3D=3D 1 || this.args.length =3D=3D 0);=0A=
    if (this.args.length =3D=3D 0) {=0A=
      return new StringValue(new NodeSetValue([ ctx.node =
]).stringValue());=0A=
    } else {=0A=
      return new StringValue(this.args[0].evaluate(ctx).stringValue());=0A=
    }=0A=
  },=0A=
=0A=
  'concat': function(ctx) {=0A=
    var ret =3D '';=0A=
    for (var i =3D 0; i < this.args.length; ++i) {=0A=
      ret +=3D this.args[i].evaluate(ctx).stringValue();=0A=
    }=0A=
    return new StringValue(ret);=0A=
  },=0A=
=0A=
  'starts-with': function(ctx) {=0A=
    assert(this.args.length =3D=3D 2);=0A=
    var s0 =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var s1 =3D this.args[1].evaluate(ctx).stringValue();=0A=
    return new BooleanValue(s0.indexOf(s1) =3D=3D 0);=0A=
  },=0A=
=0A=
  'contains': function(ctx) {=0A=
    assert(this.args.length =3D=3D 2);=0A=
    var s0 =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var s1 =3D this.args[1].evaluate(ctx).stringValue();=0A=
    return new BooleanValue(s0.indexOf(s1) !=3D -1);=0A=
  },=0A=
=0A=
  'substring-before': function(ctx) {=0A=
    assert(this.args.length =3D=3D 2);=0A=
    var s0 =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var s1 =3D this.args[1].evaluate(ctx).stringValue();=0A=
    var i =3D s0.indexOf(s1);=0A=
    var ret;=0A=
    if (i =3D=3D -1) {=0A=
      ret =3D '';=0A=
    } else {=0A=
      ret =3D s0.substr(0,i);=0A=
    }=0A=
    return new StringValue(ret);=0A=
  },=0A=
=0A=
  'substring-after': function(ctx) {=0A=
    assert(this.args.length =3D=3D 2);=0A=
    var s0 =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var s1 =3D this.args[1].evaluate(ctx).stringValue();=0A=
    var i =3D s0.indexOf(s1);=0A=
    var ret;=0A=
    if (i =3D=3D -1) {=0A=
      ret =3D '';=0A=
    } else {=0A=
      ret =3D s0.substr(i + s1.length);=0A=
    }=0A=
    return new StringValue(ret);=0A=
  },=0A=
=0A=
  'substring': function(ctx) {=0A=
    // NOTE: XPath defines the position of the first character in a=0A=
    // string to be 1, in JavaScript this is 0 ([XPATH] Section 4.2).=0A=
    assert(this.args.length =3D=3D 2 || this.args.length =3D=3D 3);=0A=
    var s0 =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var s1 =3D this.args[1].evaluate(ctx).numberValue();=0A=
    var ret;=0A=
    if (this.args.length =3D=3D 2) {=0A=
      var i1 =3D Math.max(0, Math.round(s1) - 1);=0A=
      ret =3D s0.substr(i1);=0A=
=0A=
    } else {=0A=
      var s2 =3D this.args[2].evaluate(ctx).numberValue();=0A=
      var i0 =3D Math.round(s1) - 1;=0A=
      var i1 =3D Math.max(0, i0);=0A=
      var i2 =3D Math.round(s2) - Math.max(0, -i0);=0A=
      ret =3D s0.substr(i1, i2);=0A=
    }=0A=
    return new StringValue(ret);=0A=
  },=0A=
=0A=
  'string-length': function(ctx) {=0A=
    var s;=0A=
    if (this.args.length > 0) {=0A=
      s =3D this.args[0].evaluate(ctx).stringValue();=0A=
    } else {=0A=
      s =3D new NodeSetValue([ ctx.node ]).stringValue();=0A=
    }=0A=
    return new NumberValue(s.length);=0A=
  },=0A=
=0A=
  'normalize-space': function(ctx) {=0A=
    var s;=0A=
    if (this.args.length > 0) {=0A=
      s =3D this.args[0].evaluate(ctx).stringValue();=0A=
    } else {=0A=
      s =3D new NodeSetValue([ ctx.node ]).stringValue();=0A=
    }=0A=
    s =3D s.replace(/^\s*/,'').replace(/\s*$/,'').replace(/\s+/g, ' ');=0A=
    return new StringValue(s);=0A=
  },=0A=
=0A=
  'translate': function(ctx) {=0A=
    assert(this.args.length =3D=3D 3);=0A=
    var s0 =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var s1 =3D this.args[1].evaluate(ctx).stringValue();=0A=
    var s2 =3D this.args[2].evaluate(ctx).stringValue();=0A=
=0A=
    for (var i =3D 0; i < s1.length; ++i) {=0A=
      s0 =3D s0.replace(new RegExp(s1.charAt(i), 'g'), s2.charAt(i));=0A=
    }=0A=
    return new StringValue(s0);=0A=
  },=0A=
=0A=
  'boolean': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    return new BooleanValue(this.args[0].evaluate(ctx).booleanValue());=0A=
  },=0A=
=0A=
  'not': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var ret =3D !this.args[0].evaluate(ctx).booleanValue();=0A=
    return new BooleanValue(ret);=0A=
  },=0A=
=0A=
  'true': function(ctx) {=0A=
    assert(this.args.length =3D=3D 0);=0A=
    return new BooleanValue(true);=0A=
  },=0A=
=0A=
  'false': function(ctx) {=0A=
    assert(this.args.length =3D=3D 0);=0A=
    return new BooleanValue(false);=0A=
  },=0A=
=0A=
  'lang': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var lang =3D this.args[0].evaluate(ctx).stringValue();=0A=
    var xmllang;=0A=
    var n =3D ctx.node;=0A=
    while (n && n !=3D n.parentNode /* just in case ... */) {=0A=
      xmllang =3D n.getAttribute('xml:lang');=0A=
      if (xmllang) {=0A=
        break;=0A=
      }=0A=
      n =3D n.parentNode;=0A=
    }=0A=
    if (!xmllang) {=0A=
      return new BooleanValue(false);=0A=
    } else {=0A=
      var re =3D new RegExp('^' + lang + '$', 'i');=0A=
      return new BooleanValue(xmllang.match(re) ||=0A=
                              xmllang.replace(/_.*$/,'').match(re));=0A=
    }=0A=
  },=0A=
=0A=
  'number': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1 || this.args.length =3D=3D 0);=0A=
=0A=
    if (this.args.length =3D=3D 1) {=0A=
      return new NumberValue(this.args[0].evaluate(ctx).numberValue());=0A=
    } else {=0A=
      return new NumberValue(new NodeSetValue([ ctx.node =
]).numberValue());=0A=
    }=0A=
  },=0A=
=0A=
  'sum': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var n =3D this.args[0].evaluate(ctx).nodeSetValue();=0A=
    var sum =3D 0;=0A=
    for (var i =3D 0; i < n.length; ++i) {=0A=
      sum +=3D xmlValue(n[i]) - 0;=0A=
    }=0A=
    return new NumberValue(sum);=0A=
  },=0A=
=0A=
  'floor': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var num =3D this.args[0].evaluate(ctx).numberValue();=0A=
    return new NumberValue(Math.floor(num));=0A=
  },=0A=
=0A=
  'ceiling': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var num =3D this.args[0].evaluate(ctx).numberValue();=0A=
    return new NumberValue(Math.ceil(num));=0A=
  },=0A=
=0A=
  'round': function(ctx) {=0A=
    assert(this.args.length =3D=3D 1);=0A=
    var num =3D this.args[0].evaluate(ctx).numberValue();=0A=
    return new NumberValue(Math.round(num));=0A=
  },=0A=
=0A=
  // TODO(mesch): The following functions are custom. There is a=0A=
  // standard that defines how to add functions, which should be=0A=
  // applied here.=0A=
=0A=
  'ext-join': function(ctx) {=0A=
    assert(this.args.length =3D=3D 2);=0A=
    var nodes =3D this.args[0].evaluate(ctx).nodeSetValue();=0A=
    var delim =3D this.args[1].evaluate(ctx).stringValue();=0A=
    var ret =3D '';=0A=
    for (var i =3D 0; i < nodes.length; ++i) {=0A=
      if (ret) {=0A=
        ret +=3D delim;=0A=
      }=0A=
      ret +=3D xmlValue(nodes[i]);=0A=
    }=0A=
    return new StringValue(ret);=0A=
  },=0A=
=0A=
  // ext-if() evaluates and returns its second argument, if the=0A=
  // boolean value of its first argument is true, otherwise it=0A=
  // evaluates and returns its third argument.=0A=
=0A=
  'ext-if': function(ctx) {=0A=
    assert(this.args.length =3D=3D 3);=0A=
    if (this.args[0].evaluate(ctx).booleanValue()) {=0A=
      return this.args[1].evaluate(ctx);=0A=
    } else {=0A=
      return this.args[2].evaluate(ctx);=0A=
    }=0A=
  },=0A=
=0A=
  'ext-sprintf': function(ctx) {=0A=
    assert(this.args.length >=3D 1);=0A=
    var args =3D [];=0A=
    for (var i =3D 0; i < this.args.length; ++i) {=0A=
      args.push(this.args[i].evaluate(ctx).stringValue());=0A=
    }=0A=
    return new StringValue(sprintf.apply(null, args));=0A=
  },=0A=
=0A=
  // ext-cardinal() evaluates its single argument as a number, and=0A=
  // returns the current node that many times. It can be used in the=0A=
  // select attribute to iterate over an integer range.=0A=
  =0A=
  'ext-cardinal': function(ctx) {=0A=
    assert(this.args.length >=3D 1);=0A=
    var c =3D this.args[0].evaluate(ctx).numberValue();=0A=
    var ret =3D [];=0A=
    for (var i =3D 0; i < c; ++i) {=0A=
      ret.push(ctx.node);=0A=
    }=0A=
    return new NodeSetValue(ret);=0A=
  }=0A=
};=0A=
=0A=
function UnionExpr(expr1, expr2) {=0A=
  this.expr1 =3D expr1;=0A=
  this.expr2 =3D expr2;=0A=
}=0A=
=0A=
UnionExpr.prototype.evaluate =3D function(ctx) {=0A=
  var nodes1 =3D this.expr1.evaluate(ctx).nodeSetValue();=0A=
  var nodes2 =3D this.expr2.evaluate(ctx).nodeSetValue();=0A=
  var I1 =3D nodes1.length;=0A=
  for (var i2 =3D 0; i2 < nodes2.length; ++i2) {=0A=
    for (var i1 =3D 0; i1 < I1; ++i1) {=0A=
      if (nodes1[i1] =3D=3D nodes2[i2]) {=0A=
        // break inner loop and continue outer loop, labels confuse=0A=
        // the js compiler, so we don't use them here.=0A=
        i1 =3D I1;=0A=
      }=0A=
    }=0A=
    nodes1.push(nodes2[i2]);=0A=
  }=0A=
  return new NodeSetValue(nodes2);=0A=
};=0A=
=0A=
function PathExpr(filter, rel) {=0A=
  this.filter =3D filter;=0A=
  this.rel =3D rel;=0A=
}=0A=
=0A=
PathExpr.prototype.evaluate =3D function(ctx) {=0A=
  var nodes =3D this.filter.evaluate(ctx).nodeSetValue();=0A=
  var nodes1 =3D [];=0A=
  for (var i =3D 0; i < nodes.length; ++i) {=0A=
    var nodes0 =3D this.rel.evaluate(ctx.clone(nodes[i], i, =
nodes)).nodeSetValue();=0A=
    for (var ii =3D 0; ii < nodes0.length; ++ii) {=0A=
      nodes1.push(nodes0[ii]);=0A=
    }=0A=
  }=0A=
  return new NodeSetValue(nodes1);=0A=
};=0A=
=0A=
function FilterExpr(expr, predicate) {=0A=
  this.expr =3D expr;=0A=
  this.predicate =3D predicate;=0A=
}=0A=
=0A=
FilterExpr.prototype.evaluate =3D function(ctx) {=0A=
  var nodes =3D this.expr.evaluate(ctx).nodeSetValue();=0A=
  for (var i =3D 0; i < this.predicate.length; ++i) {=0A=
    var nodes0 =3D nodes;=0A=
    nodes =3D [];=0A=
    for (var j =3D 0; j < nodes0.length; ++j) {=0A=
      var n =3D nodes0[j];=0A=
      if (this.predicate[i].evaluate(ctx.clone(n, j, =
nodes0)).booleanValue()) {=0A=
        nodes.push(n);=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  return new NodeSetValue(nodes);=0A=
}=0A=
=0A=
function UnaryMinusExpr(expr) {=0A=
  this.expr =3D expr;=0A=
}=0A=
=0A=
UnaryMinusExpr.prototype.evaluate =3D function(ctx) {=0A=
  return new NumberValue(-this.expr.evaluate(ctx).numberValue());=0A=
};=0A=
=0A=
function BinaryExpr(expr1, op, expr2) {=0A=
  this.expr1 =3D expr1;=0A=
  this.expr2 =3D expr2;=0A=
  this.op =3D op;=0A=
}=0A=
=0A=
BinaryExpr.prototype.evaluate =3D function(ctx) {=0A=
  var ret;=0A=
  switch (this.op.value) {=0A=
    case 'or':=0A=
      ret =3D new BooleanValue(this.expr1.evaluate(ctx).booleanValue() ||=0A=
                             this.expr2.evaluate(ctx).booleanValue());=0A=
      break;=0A=
=0A=
    case 'and':=0A=
      ret =3D new BooleanValue(this.expr1.evaluate(ctx).booleanValue() &&=0A=
                             this.expr2.evaluate(ctx).booleanValue());=0A=
      break;=0A=
=0A=
    case '+':=0A=
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() +=0A=
                            this.expr2.evaluate(ctx).numberValue());=0A=
      break;=0A=
=0A=
    case '-':=0A=
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() -=0A=
                            this.expr2.evaluate(ctx).numberValue());=0A=
      break;=0A=
=0A=
    case '*':=0A=
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() *=0A=
                            this.expr2.evaluate(ctx).numberValue());=0A=
      break;=0A=
=0A=
    case 'mod':=0A=
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() %=0A=
                            this.expr2.evaluate(ctx).numberValue());=0A=
      break;=0A=
=0A=
    case 'div':=0A=
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() /=0A=
                            this.expr2.evaluate(ctx).numberValue());=0A=
      break;=0A=
=0A=
    case '=3D':=0A=
      ret =3D this.compare(ctx, function(x1, x2) { return x1 =3D=3D x2; =
});=0A=
      break;=0A=
=0A=
    case '!=3D':=0A=
      ret =3D this.compare(ctx, function(x1, x2) { return x1 !=3D x2; });=0A=
      break;=0A=
=0A=
    case '<':=0A=
      ret =3D this.compare(ctx, function(x1, x2) { return x1 < x2; });=0A=
      break;=0A=
=0A=
    case '<=3D':=0A=
      ret =3D this.compare(ctx, function(x1, x2) { return x1 <=3D x2; });=0A=
      break;=0A=
=0A=
    case '>':=0A=
      ret =3D this.compare(ctx, function(x1, x2) { return x1 > x2; });=0A=
      break;=0A=
=0A=
    case '>=3D':=0A=
      ret =3D this.compare(ctx, function(x1, x2) { return x1 >=3D x2; });=0A=
      break;=0A=
=0A=
    default:=0A=
      alert('BinaryExpr.evaluate: ' + this.op.value);=0A=
  }=0A=
  return ret;=0A=
};=0A=
=0A=
BinaryExpr.prototype.compare =3D function(ctx, cmp) {=0A=
  var v1 =3D this.expr1.evaluate(ctx);=0A=
  var v2 =3D this.expr2.evaluate(ctx);=0A=
=0A=
  var ret;=0A=
  if (v1.type =3D=3D 'node-set' && v2.type =3D=3D 'node-set') {=0A=
    var n1 =3D v1.nodeSetValue();=0A=
    var n2 =3D v2.nodeSetValue();=0A=
    ret =3D false;=0A=
    for (var i1 =3D 0; i1 < n1.length; ++i1) {=0A=
      for (var i2 =3D 0; i2 < n2.length; ++i2) {=0A=
        if (cmp(xmlValue(n1[i1]), xmlValue(n2[i2]))) {=0A=
          ret =3D true;=0A=
          // Break outer loop. Labels confuse the jscompiler and we=0A=
          // don't use them.=0A=
          i2 =3D n2.length;=0A=
          i1 =3D n1.length;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
  } else if (v1.type =3D=3D 'node-set' || v2.type =3D=3D 'node-set') {=0A=
=0A=
    if (v1.type =3D=3D 'number') {=0A=
      var s =3D v1.numberValue();=0A=
      var n =3D v2.nodeSetValue();=0A=
=0A=
      ret =3D false;=0A=
      for (var i =3D 0;  i < n.length; ++i) {=0A=
        var nn =3D xmlValue(n[i]) - 0;=0A=
        if (cmp(s, nn)) {=0A=
          ret =3D true;=0A=
          break;=0A=
        }=0A=
      }=0A=
=0A=
    } else if (v2.type =3D=3D 'number') {=0A=
      var n =3D v1.nodeSetValue();=0A=
      var s =3D v2.numberValue();=0A=
=0A=
      ret =3D false;=0A=
      for (var i =3D 0;  i < n.length; ++i) {=0A=
        var nn =3D xmlValue(n[i]) - 0;=0A=
        if (cmp(nn, s)) {=0A=
          ret =3D true;=0A=
          break;=0A=
        }=0A=
      }=0A=
=0A=
    } else if (v1.type =3D=3D 'string') {=0A=
      var s =3D v1.stringValue();=0A=
      var n =3D v2.nodeSetValue();=0A=
=0A=
      ret =3D false;=0A=
      for (var i =3D 0;  i < n.length; ++i) {=0A=
        var nn =3D xmlValue(n[i]);=0A=
        if (cmp(s, nn)) {=0A=
          ret =3D true;=0A=
          break;=0A=
        }=0A=
      }=0A=
=0A=
    } else if (v2.type =3D=3D 'string') {=0A=
      var n =3D v1.nodeSetValue();=0A=
      var s =3D v2.stringValue();=0A=
=0A=
      ret =3D false;=0A=
      for (var i =3D 0;  i < n.length; ++i) {=0A=
        var nn =3D xmlValue(n[i]);=0A=
        if (cmp(nn, s)) {=0A=
          ret =3D true;=0A=
          break;=0A=
        }=0A=
      }=0A=
=0A=
    } else {=0A=
      ret =3D cmp(v1.booleanValue(), v2.booleanValue());=0A=
    }=0A=
=0A=
  } else if (v1.type =3D=3D 'boolean' || v2.type =3D=3D 'boolean') {=0A=
    ret =3D cmp(v1.booleanValue(), v2.booleanValue());=0A=
=0A=
  } else if (v1.type =3D=3D 'number' || v2.type =3D=3D 'number') {=0A=
    ret =3D cmp(v1.numberValue(), v2.numberValue());=0A=
=0A=
  } else {=0A=
    ret =3D cmp(v1.stringValue(), v2.stringValue());=0A=
  }=0A=
=0A=
  return new BooleanValue(ret);=0A=
}=0A=
=0A=
function LiteralExpr(value) {=0A=
  this.value =3D value;=0A=
}=0A=
=0A=
LiteralExpr.prototype.evaluate =3D function(ctx) {=0A=
  return new StringValue(this.value);=0A=
};=0A=
=0A=
function NumberExpr(value) {=0A=
  this.value =3D value;=0A=
}=0A=
=0A=
NumberExpr.prototype.evaluate =3D function(ctx) {=0A=
  return new NumberValue(this.value);=0A=
};=0A=
=0A=
function VariableExpr(name) {=0A=
  this.name =3D name;=0A=
}=0A=
=0A=
VariableExpr.prototype.evaluate =3D function(ctx) {=0A=
  return ctx.getVariable(this.name);=0A=
}=0A=
=0A=
// Factory functions for semantic values (i.e. Expressions) of the=0A=
// productions in the grammar. When a production is matched to reduce=0A=
// the current parse state stack, the function is called with the=0A=
// semantic values of the matched elements as arguments, and returns=0A=
// another semantic value. The semantic value is a node of the parse=0A=
// tree, an expression object with an evaluate() method that evaluates =
the=0A=
// expression in an actual context. These factory functions are used=0A=
// in the specification of the grammar rules, below.=0A=
=0A=
function makeTokenExpr(m) {=0A=
  return new TokenExpr(m);=0A=
}=0A=
=0A=
function passExpr(e) {=0A=
  return e;=0A=
}=0A=
=0A=
function makeLocationExpr1(slash, rel) {=0A=
  rel.absolute =3D true;=0A=
  return rel;=0A=
}=0A=
=0A=
function makeLocationExpr2(dslash, rel) {=0A=
  rel.absolute =3D true;=0A=
  rel.prependStep(makeAbbrevStep(dslash.value));=0A=
  return rel;=0A=
}=0A=
=0A=
function makeLocationExpr3(slash) {=0A=
  var ret =3D new LocationExpr();=0A=
  ret.appendStep(makeAbbrevStep('.'));=0A=
  ret.absolute =3D true;=0A=
  return ret;=0A=
}=0A=
=0A=
function makeLocationExpr4(dslash) {=0A=
  var ret =3D new LocationExpr();=0A=
  ret.absolute =3D true;=0A=
  ret.appendStep(makeAbbrevStep(dslash.value));=0A=
  return ret;=0A=
}=0A=
=0A=
function makeLocationExpr5(step) {=0A=
  var ret =3D new LocationExpr();=0A=
  ret.appendStep(step);=0A=
  return ret;=0A=
}=0A=
=0A=
function makeLocationExpr6(rel, slash, step) {=0A=
  rel.appendStep(step);=0A=
  return rel;=0A=
}=0A=
=0A=
function makeLocationExpr7(rel, dslash, step) {=0A=
  rel.appendStep(makeAbbrevStep(dslash.value));=0A=
  return rel;=0A=
}=0A=
=0A=
function makeStepExpr1(dot) {=0A=
  return makeAbbrevStep(dot.value);=0A=
}=0A=
=0A=
function makeStepExpr2(ddot) {=0A=
  return makeAbbrevStep(ddot.value);=0A=
}=0A=
=0A=
function makeStepExpr3(axisname, axis, nodetest) {=0A=
  return new StepExpr(axisname.value, nodetest);=0A=
}=0A=
=0A=
function makeStepExpr4(at, nodetest) {=0A=
  return new StepExpr('attribute', nodetest);=0A=
}=0A=
=0A=
function makeStepExpr5(nodetest) {=0A=
  return new StepExpr('child', nodetest);=0A=
}=0A=
=0A=
function makeStepExpr6(step, predicate) {=0A=
  step.appendPredicate(predicate);=0A=
  return step;=0A=
}=0A=
=0A=
function makeAbbrevStep(abbrev) {=0A=
  switch (abbrev) {=0A=
  case '//':=0A=
    return new StepExpr('descendant-or-self', new NodeTestAny);=0A=
=0A=
  case '.':=0A=
    return new StepExpr('self', new NodeTestAny);=0A=
=0A=
  case '..':=0A=
    return new StepExpr('parent', new NodeTestAny);=0A=
  }=0A=
}=0A=
=0A=
function makeNodeTestExpr1(asterisk) {=0A=
  return new NodeTestElement;=0A=
}=0A=
=0A=
function makeNodeTestExpr2(ncname, colon, asterisk) {=0A=
  return new NodeTestNC(ncname.value);=0A=
}=0A=
=0A=
function makeNodeTestExpr3(qname) {=0A=
  return new NodeTestName(qname.value);=0A=
}=0A=
=0A=
function makeNodeTestExpr4(typeo, parenc) {=0A=
  var type =3D typeo.value.replace(/\s*\($/, '');=0A=
  switch(type) {=0A=
  case 'node':=0A=
    return new NodeTestAny;=0A=
=0A=
  case 'text':=0A=
    return new NodeTestText;=0A=
=0A=
  case 'comment':=0A=
    return new NodeTestComment;=0A=
=0A=
  case 'processing-instruction':=0A=
    return new NodeTestPI;=0A=
  }=0A=
}=0A=
=0A=
function makeNodeTestExpr5(typeo, target, parenc) {=0A=
  var type =3D typeo.replace(/\s*\($/, '');=0A=
  if (type !=3D 'processing-instruction') {=0A=
    throw type + ' ' + Error().stack;=0A=
  }=0A=
  return new NodeTestPI(target.value);=0A=
}=0A=
=0A=
function makePredicateExpr(pareno, expr, parenc) {=0A=
  return new PredicateExpr(expr);=0A=
}=0A=
=0A=
function makePrimaryExpr(pareno, expr, parenc) {=0A=
  return expr;=0A=
}=0A=
=0A=
function makeFunctionCallExpr1(name, pareno, parenc) {=0A=
  return new FunctionCallExpr(name);=0A=
}=0A=
=0A=
function makeFunctionCallExpr2(name, pareno, arg1, args, parenc) {=0A=
  var ret =3D new FunctionCallExpr(name);=0A=
  ret.appendArg(arg1);=0A=
  for (var i =3D 0; i < args.length; ++i) {=0A=
    ret.appendArg(args[i]);=0A=
  }=0A=
  return ret;=0A=
}=0A=
=0A=
function makeArgumentExpr(comma, expr) {=0A=
  return expr;=0A=
}=0A=
=0A=
function makeUnionExpr(expr1, pipe, expr2) {=0A=
  return new UnionExpr(expr1, expr2);=0A=
}=0A=
=0A=
function makePathExpr1(filter, slash, rel) {=0A=
  return new PathExpr(filter, rel);=0A=
}=0A=
=0A=
function makePathExpr2(filter, dslash, rel) {=0A=
  rel.prependStep(makeAbbrevStep(dslash.value));=0A=
  return new PathExpr(filter, rel);=0A=
}=0A=
=0A=
function makeFilterExpr(expr, predicates) {=0A=
  if (predicates.length > 0) {=0A=
    return new FilterExpr(expr, predicates);=0A=
  } else {=0A=
    return expr;=0A=
  }=0A=
}=0A=
=0A=
function makeUnaryMinusExpr(minus, expr) {=0A=
  return new UnaryMinusExpr(expr);=0A=
}=0A=
=0A=
function makeBinaryExpr(expr1, op, expr2) {=0A=
  return new BinaryExpr(expr1, op, expr2);=0A=
}=0A=
=0A=
function makeLiteralExpr(token) {=0A=
  // remove quotes from the parsed value:=0A=
  var value =3D token.value.substring(1, token.value.length - 1);=0A=
  return new LiteralExpr(value);=0A=
}=0A=
=0A=
function makeNumberExpr(token) {=0A=
  return new NumberExpr(token.value);=0A=
}=0A=
=0A=
function makeVariableReference(dollar, name) {=0A=
  return new VariableExpr(name.value);=0A=
}=0A=
=0A=
// Used before parsing for optimization of common simple cases. See=0A=
// the begin of xpathParse() for which they are.=0A=
function makeSimpleExpr(expr) {=0A=
  if (expr.charAt(0) =3D=3D '$') {=0A=
    return new VariableExpr(expr.substr(1));=0A=
  } else if (expr.charAt(0) =3D=3D '@') {=0A=
    var a =3D new NodeTestName(expr.substr(1));=0A=
    var b =3D new StepExpr('attribute', a);=0A=
    var c =3D new LocationExpr();=0A=
    c.appendStep(b);=0A=
    return c;=0A=
  } else if (expr.match(/^[0-9]+$/)) {=0A=
    return new NumberExpr(expr);=0A=
  } else {=0A=
    var a =3D new NodeTestName(expr);=0A=
    var b =3D new StepExpr('child', a);=0A=
    var c =3D new LocationExpr();=0A=
    c.appendStep(b);=0A=
    return c;=0A=
  }=0A=
}=0A=
=0A=
function makeSimpleExpr2(expr) {=0A=
  var steps =3D expr.split('/');=0A=
  var c =3D new LocationExpr();=0A=
  for (var i in steps) {=0A=
    var a =3D new NodeTestName(steps[i]);=0A=
    var b =3D new StepExpr('child', a);=0A=
    c.appendStep(b);=0A=
  }=0A=
  return c;=0A=
}=0A=
=0A=
// The axes of XPath expressions.=0A=
=0A=
var xpathAxis =3D {=0A=
  ANCESTOR_OR_SELF: 'ancestor-or-self',=0A=
  ANCESTOR: 'ancestor',=0A=
  ATTRIBUTE: 'attribute',=0A=
  CHILD: 'child',=0A=
  DESCENDANT_OR_SELF: 'descendant-or-self',=0A=
  DESCENDANT: 'descendant',=0A=
  FOLLOWING_SIBLING: 'following-sibling',=0A=
  FOLLOWING: 'following',=0A=
  NAMESPACE: 'namespace',=0A=
  PARENT: 'parent',=0A=
  PRECEDING_SIBLING: 'preceding-sibling',=0A=
  PRECEDING: 'preceding',=0A=
  SELF: 'self'=0A=
};=0A=
=0A=
var xpathAxesRe =3D [=0A=
    xpathAxis.ANCESTOR_OR_SELF,=0A=
    xpathAxis.ANCESTOR,=0A=
    xpathAxis.ATTRIBUTE,=0A=
    xpathAxis.CHILD,=0A=
    xpathAxis.DESCENDANT_OR_SELF,=0A=
    xpathAxis.DESCENDANT,=0A=
    xpathAxis.FOLLOWING_SIBLING,=0A=
    xpathAxis.FOLLOWING,=0A=
    xpathAxis.NAMESPACE,=0A=
    xpathAxis.PARENT,=0A=
    xpathAxis.PRECEDING_SIBLING,=0A=
    xpathAxis.PRECEDING,=0A=
    xpathAxis.SELF=0A=
].join('|');=0A=
=0A=
=0A=
// The tokens of the language. The label property is just used for=0A=
// generating debug output. The prec property is the precedence used=0A=
// for shift/reduce resolution. Default precedence is 0 as a lookahead=0A=
// token and 2 on the stack. TODO(mesch): this is certainly not=0A=
// necessary and too complicated. Simplify this!=0A=
=0A=
// NOTE: tabular formatting is the big exception, but here it should=0A=
// be OK.=0A=
=0A=
var TOK_PIPE =3D   { label: "|",   prec:   17, re: new RegExp("^\\|") };=0A=
var TOK_DSLASH =3D { label: "//",  prec:   19, re: new RegExp("^//")  };=0A=
var TOK_SLASH =3D  { label: "/",   prec:   30, re: new RegExp("^/")   };=0A=
var TOK_AXIS =3D   { label: "::",  prec:   20, re: new RegExp("^::")  };=0A=
var TOK_COLON =3D  { label: ":",   prec: 1000, re: new RegExp("^:")  };=0A=
var TOK_AXISNAME =3D { label: "[axis]", re: new RegExp('^(' + =
xpathAxesRe + ')') };=0A=
var TOK_PARENO =3D { label: "(",   prec:   34, re: new RegExp("^\\(") };=0A=
var TOK_PARENC =3D { label: ")",               re: new RegExp("^\\)") };=0A=
var TOK_DDOT =3D   { label: "..",  prec:   34, re: new RegExp("^\\.\\.") =
};=0A=
var TOK_DOT =3D    { label: ".",   prec:   34, re: new RegExp("^\\.") };=0A=
var TOK_AT =3D     { label: "@",   prec:   34, re: new RegExp("^@")   };=0A=
=0A=
var TOK_COMMA =3D  { label: ",",               re: new RegExp("^,") };=0A=
=0A=
var TOK_OR =3D     { label: "or",  prec:   10, re: new RegExp("^or\\b") =
};=0A=
var TOK_AND =3D    { label: "and", prec:   11, re: new RegExp("^and\\b") =
};=0A=
var TOK_EQ =3D     { label: "=3D",   prec:   12, re: new RegExp("^=3D")  =
 };=0A=
var TOK_NEQ =3D    { label: "!=3D",  prec:   12, re: new RegExp("^!=3D") =
 };=0A=
var TOK_GE =3D     { label: ">=3D",  prec:   13, re: new RegExp("^>=3D") =
 };=0A=
var TOK_GT =3D     { label: ">",   prec:   13, re: new RegExp("^>")   };=0A=
var TOK_LE =3D     { label: "<=3D",  prec:   13, re: new RegExp("^<=3D") =
 };=0A=
var TOK_LT =3D     { label: "<",   prec:   13, re: new RegExp("^<")   };=0A=
var TOK_PLUS =3D   { label: "+",   prec:   14, re: new RegExp("^\\+"), =
left: true };=0A=
var TOK_MINUS =3D  { label: "-",   prec:   14, re: new RegExp("^\\-"), =
left: true };=0A=
var TOK_DIV =3D    { label: "div", prec:   15, re: new =
RegExp("^div\\b"), left: true };=0A=
var TOK_MOD =3D    { label: "mod", prec:   15, re: new =
RegExp("^mod\\b"), left: true };=0A=
=0A=
var TOK_BRACKO =3D { label: "[",   prec:   32, re: new RegExp("^\\[") };=0A=
var TOK_BRACKC =3D { label: "]",               re: new RegExp("^\\]") };=0A=
var TOK_DOLLAR =3D { label: "$",               re: new RegExp("^\\$") };=0A=
=0A=
var TOK_NCNAME =3D { label: "[ncname]", re: new =
RegExp('^[a-z][-\\w]*','i') };=0A=
=0A=
var TOK_ASTERISK =3D { label: "*", prec: 15, re: new RegExp("^\\*"), =
left: true };=0A=
var TOK_LITERALQ =3D { label: "[litq]", prec: 20, re: new =
RegExp("^'[^\\']*'") };=0A=
var TOK_LITERALQQ =3D {=0A=
  label: "[litqq]",=0A=
  prec: 20,=0A=
  re: new RegExp('^"[^\\"]*"')=0A=
};=0A=
=0A=
var TOK_NUMBER  =3D {=0A=
  label: "[number]",=0A=
  prec: 35,=0A=
  re: new RegExp('^\\d+(\\.\\d*)?') };=0A=
=0A=
var TOK_QNAME =3D {=0A=
  label: "[qname]",=0A=
  re: new RegExp('^([a-z][-\\w]*:)?[a-z][-\\w]*','i')=0A=
};=0A=
=0A=
var TOK_NODEO =3D {=0A=
  label: "[nodetest-start]",=0A=
  re: new RegExp('^(processing-instruction|comment|text|node)\\(')=0A=
};=0A=
=0A=
// The table of the tokens of our grammar, used by the lexer: first=0A=
// column the tag, second column a regexp to recognize it in the=0A=
// input, third column the precedence of the token, fourth column a=0A=
// factory function for the semantic value of the token.=0A=
//=0A=
// NOTE: order of this list is important, because the first match=0A=
// counts. Cf. DDOT and DOT, and AXIS and COLON.=0A=
=0A=
var xpathTokenRules =3D [=0A=
    TOK_DSLASH,=0A=
    TOK_SLASH,=0A=
    TOK_DDOT,=0A=
    TOK_DOT,=0A=
    TOK_AXIS,=0A=
    TOK_COLON,=0A=
    TOK_AXISNAME,=0A=
    TOK_NODEO,=0A=
    TOK_PARENO,=0A=
    TOK_PARENC,=0A=
    TOK_BRACKO,=0A=
    TOK_BRACKC,=0A=
    TOK_AT,=0A=
    TOK_COMMA,=0A=
    TOK_OR,=0A=
    TOK_AND,=0A=
    TOK_NEQ,=0A=
    TOK_EQ,=0A=
    TOK_GE,=0A=
    TOK_GT,=0A=
    TOK_LE,=0A=
    TOK_LT,=0A=
    TOK_PLUS,=0A=
    TOK_MINUS,=0A=
    TOK_ASTERISK,=0A=
    TOK_PIPE,=0A=
    TOK_MOD,=0A=
    TOK_DIV,=0A=
    TOK_LITERALQ,=0A=
    TOK_LITERALQQ,=0A=
    TOK_NUMBER,=0A=
    TOK_QNAME,=0A=
    TOK_NCNAME,=0A=
    TOK_DOLLAR=0A=
];=0A=
=0A=
// All the nonterminals of the grammar. The nonterminal objects are=0A=
// identified by object identity; the labels are used in the debug=0A=
// output only.=0A=
var XPathLocationPath =3D { label: "LocationPath" };=0A=
var XPathRelativeLocationPath =3D { label: "RelativeLocationPath" };=0A=
var XPathAbsoluteLocationPath =3D { label: "AbsoluteLocationPath" };=0A=
var XPathStep =3D { label: "Step" };=0A=
var XPathNodeTest =3D { label: "NodeTest" };=0A=
var XPathPredicate =3D { label: "Predicate" };=0A=
var XPathLiteral =3D { label: "Literal" };=0A=
var XPathExpr =3D { label: "Expr" };=0A=
var XPathPrimaryExpr =3D { label: "PrimaryExpr" };=0A=
var XPathVariableReference =3D { label: "Variablereference" };=0A=
var XPathNumber =3D { label: "Number" };=0A=
var XPathFunctionCall =3D { label: "FunctionCall" };=0A=
var XPathArgumentRemainder =3D { label: "ArgumentRemainder" };=0A=
var XPathPathExpr =3D { label: "PathExpr" };=0A=
var XPathUnionExpr =3D { label: "UnionExpr" };=0A=
var XPathFilterExpr =3D { label: "FilterExpr" };=0A=
var XPathDigits =3D { label: "Digits" };=0A=
=0A=
var xpathNonTerminals =3D [=0A=
    XPathLocationPath,=0A=
    XPathRelativeLocationPath,=0A=
    XPathAbsoluteLocationPath,=0A=
    XPathStep,=0A=
    XPathNodeTest,=0A=
    XPathPredicate,=0A=
    XPathLiteral,=0A=
    XPathExpr,=0A=
    XPathPrimaryExpr,=0A=
    XPathVariableReference,=0A=
    XPathNumber,=0A=
    XPathFunctionCall,=0A=
    XPathArgumentRemainder,=0A=
    XPathPathExpr,=0A=
    XPathUnionExpr,=0A=
    XPathFilterExpr,=0A=
    XPathDigits=0A=
];=0A=
=0A=
// Quantifiers that are used in the productions of the grammar.=0A=
var Q_01 =3D { label: "?" };=0A=
var Q_MM =3D { label: "*" };=0A=
var Q_1M =3D { label: "+" };=0A=
=0A=
// Tag for left associativity (right assoc is implied by undefined).=0A=
var ASSOC_LEFT =3D true;=0A=
=0A=
// The productions of the grammar. Columns of the table:=0A=
//=0A=
// - target nonterminal,=0A=
// - pattern,=0A=
// - precedence,=0A=
// - semantic value factory=0A=
//=0A=
// The semantic value factory is a function that receives parse tree=0A=
// nodes from the stack frames of the matched symbols as arguments and=0A=
// returns an a node of the parse tree. The node is stored in the top=0A=
// stack frame along with the target object of the rule. The node in=0A=
// the parse tree is an expression object that has an evaluate() method=0A=
// and thus evaluates XPath expressions.=0A=
//=0A=
// The precedence is used to decide between reducing and shifting by=0A=
// comparing the precendence of the rule that is candidate for=0A=
// reducing with the precedence of the look ahead token. Precedence of=0A=
// -1 means that the precedence of the tokens in the pattern is used=0A=
// instead. TODO: It shouldn't be necessary to explicitly assign=0A=
// precedences to rules.=0A=
=0A=
var xpathGrammarRules =3D=0A=
  [=0A=
   [ XPathLocationPath, [ XPathRelativeLocationPath ], 18,=0A=
     passExpr ],=0A=
   [ XPathLocationPath, [ XPathAbsoluteLocationPath ], 18,=0A=
     passExpr ],=0A=
=0A=
   [ XPathAbsoluteLocationPath, [ TOK_SLASH, XPathRelativeLocationPath =
], 18, =0A=
     makeLocationExpr1 ],=0A=
   [ XPathAbsoluteLocationPath, [ TOK_DSLASH, XPathRelativeLocationPath =
], 18,=0A=
     makeLocationExpr2 ],=0A=
=0A=
   [ XPathAbsoluteLocationPath, [ TOK_SLASH ], 0,=0A=
     makeLocationExpr3 ],=0A=
   [ XPathAbsoluteLocationPath, [ TOK_DSLASH ], 0,=0A=
     makeLocationExpr4 ],=0A=
=0A=
   [ XPathRelativeLocationPath, [ XPathStep ], 31,=0A=
     makeLocationExpr5 ],=0A=
   [ XPathRelativeLocationPath,=0A=
     [ XPathRelativeLocationPath, TOK_SLASH, XPathStep ], 31,=0A=
     makeLocationExpr6 ],=0A=
   [ XPathRelativeLocationPath,=0A=
     [ XPathRelativeLocationPath, TOK_DSLASH, XPathStep ], 31,=0A=
     makeLocationExpr7 ],=0A=
=0A=
   [ XPathStep, [ TOK_DOT ], 33,=0A=
     makeStepExpr1 ],=0A=
   [ XPathStep, [ TOK_DDOT ], 33,=0A=
     makeStepExpr2 ],=0A=
   [ XPathStep,=0A=
     [ TOK_AXISNAME, TOK_AXIS, XPathNodeTest ], 33,=0A=
     makeStepExpr3 ],=0A=
   [ XPathStep, [ TOK_AT, XPathNodeTest ], 33,=0A=
     makeStepExpr4 ],=0A=
   [ XPathStep, [ XPathNodeTest ], 33,=0A=
     makeStepExpr5 ],=0A=
   [ XPathStep, [ XPathStep, XPathPredicate ], 33,=0A=
     makeStepExpr6 ],=0A=
=0A=
   [ XPathNodeTest, [ TOK_ASTERISK ], 33,=0A=
     makeNodeTestExpr1 ],=0A=
   [ XPathNodeTest, [ TOK_NCNAME, TOK_COLON, TOK_ASTERISK ], 33,=0A=
     makeNodeTestExpr2 ],=0A=
   [ XPathNodeTest, [ TOK_QNAME ], 33,=0A=
     makeNodeTestExpr3 ],=0A=
   [ XPathNodeTest, [ TOK_NODEO, TOK_PARENC ], 33,=0A=
     makeNodeTestExpr4 ],=0A=
   [ XPathNodeTest, [ TOK_NODEO, XPathLiteral, TOK_PARENC ], 33,=0A=
     makeNodeTestExpr5 ],=0A=
=0A=
   [ XPathPredicate, [ TOK_BRACKO, XPathExpr, TOK_BRACKC ], 33,=0A=
     makePredicateExpr ],=0A=
=0A=
   [ XPathPrimaryExpr, [ XPathVariableReference ], 33,=0A=
     passExpr ],=0A=
   [ XPathPrimaryExpr, [ TOK_PARENO, XPathExpr, TOK_PARENC ], 33,=0A=
     makePrimaryExpr ],=0A=
   [ XPathPrimaryExpr, [ XPathLiteral ], 30,=0A=
     passExpr ],=0A=
   [ XPathPrimaryExpr, [ XPathNumber ], 30,=0A=
     passExpr ],=0A=
   [ XPathPrimaryExpr, [ XPathFunctionCall ], 30,=0A=
     passExpr ],=0A=
=0A=
   [ XPathFunctionCall, [ TOK_QNAME, TOK_PARENO, TOK_PARENC ], -1,=0A=
     makeFunctionCallExpr1 ],=0A=
   [ XPathFunctionCall,=0A=
     [ TOK_QNAME, TOK_PARENO, XPathExpr, XPathArgumentRemainder, Q_MM,=0A=
       TOK_PARENC ], -1,=0A=
     makeFunctionCallExpr2 ],=0A=
   [ XPathArgumentRemainder, [ TOK_COMMA, XPathExpr ], -1,=0A=
     makeArgumentExpr ],=0A=
=0A=
   [ XPathUnionExpr, [ XPathPathExpr ], 20,=0A=
     passExpr ],=0A=
   [ XPathUnionExpr, [ XPathUnionExpr, TOK_PIPE, XPathPathExpr ], 20,=0A=
     makeUnionExpr ],=0A=
=0A=
   [ XPathPathExpr, [ XPathLocationPath ], 20, =0A=
     passExpr ], =0A=
   [ XPathPathExpr, [ XPathFilterExpr ], 19, =0A=
     passExpr ], =0A=
   [ XPathPathExpr, =0A=
     [ XPathFilterExpr, TOK_SLASH, XPathRelativeLocationPath ], 20,=0A=
     makePathExpr1 ],=0A=
   [ XPathPathExpr,=0A=
     [ XPathFilterExpr, TOK_DSLASH, XPathRelativeLocationPath ], 20,=0A=
     makePathExpr2 ],=0A=
=0A=
   [ XPathFilterExpr, [ XPathPrimaryExpr, XPathPredicate, Q_MM ], 20,=0A=
     makeFilterExpr ], =0A=
=0A=
   [ XPathExpr, [ XPathPrimaryExpr ], 16,=0A=
     passExpr ],=0A=
   [ XPathExpr, [ XPathUnionExpr ], 16,=0A=
     passExpr ],=0A=
=0A=
   [ XPathExpr, [ TOK_MINUS, XPathExpr ], -1,=0A=
     makeUnaryMinusExpr ],=0A=
=0A=
   [ XPathExpr, [ XPathExpr, TOK_OR, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_AND, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
=0A=
   [ XPathExpr, [ XPathExpr, TOK_EQ, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_NEQ, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
=0A=
   [ XPathExpr, [ XPathExpr, TOK_LT, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_LE, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_GT, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_GE, XPathExpr ], -1,=0A=
     makeBinaryExpr ],=0A=
=0A=
   [ XPathExpr, [ XPathExpr, TOK_PLUS, XPathExpr ], -1,=0A=
     makeBinaryExpr, ASSOC_LEFT ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_MINUS, XPathExpr ], -1,=0A=
     makeBinaryExpr, ASSOC_LEFT ],=0A=
=0A=
   [ XPathExpr, [ XPathExpr, TOK_ASTERISK, XPathExpr ], -1,=0A=
     makeBinaryExpr, ASSOC_LEFT ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_DIV, XPathExpr ], -1,=0A=
     makeBinaryExpr, ASSOC_LEFT ],=0A=
   [ XPathExpr, [ XPathExpr, TOK_MOD, XPathExpr ], -1,=0A=
     makeBinaryExpr, ASSOC_LEFT ],=0A=
=0A=
   [ XPathLiteral, [ TOK_LITERALQ ], -1,=0A=
     makeLiteralExpr ],=0A=
   [ XPathLiteral, [ TOK_LITERALQQ ], -1,=0A=
     makeLiteralExpr ],=0A=
=0A=
   [ XPathNumber, [ TOK_NUMBER ], -1,=0A=
     makeNumberExpr ],=0A=
=0A=
   [ XPathVariableReference, [ TOK_DOLLAR, TOK_QNAME ], 200,=0A=
     makeVariableReference ]=0A=
   ];=0A=
=0A=
// That function computes some optimizations of the above data=0A=
// structures and will be called right here. It merely takes the=0A=
// counter variables out of the global scope.=0A=
=0A=
var xpathRules =3D [];=0A=
=0A=
function xpathParseInit() {=0A=
  if (xpathRules.length) {=0A=
    return;=0A=
  }=0A=
=0A=
  // Some simple optimizations for the xpath expression parser: sort=0A=
  // grammar rules descending by length, so that the longest match is=0A=
  // first found.=0A=
=0A=
  xpathGrammarRules.sort(function(a,b) {=0A=
    var la =3D a[1].length;=0A=
    var lb =3D b[1].length;=0A=
    if (la < lb) {=0A=
      return 1;=0A=
    } else if (la > lb) {=0A=
      return -1;=0A=
    } else {=0A=
      return 0;=0A=
    }=0A=
  });=0A=
=0A=
  var k =3D 1;=0A=
  for (var i =3D 0; i < xpathNonTerminals.length; ++i) {=0A=
    xpathNonTerminals[i].key =3D k++;=0A=
  }=0A=
=0A=
  for (i =3D 0; i < xpathTokenRules.length; ++i) {=0A=
    xpathTokenRules[i].key =3D k++;=0A=
  }=0A=
=0A=
  if (xpathdebug) {=0A=
    Log.write('XPath parse INIT: ' + k + ' rules');=0A=
  }=0A=
=0A=
  // Another slight optimization: sort the rules into bins according=0A=
  // to the last element (observing quantifiers), so we can restrict=0A=
  // the match against the stack to the subest of rules that match the=0A=
  // top of the stack.=0A=
  //=0A=
  // TODO(mesch): What we actually want is to compute states as in=0A=
  // bison, so that we don't have to do any explicit and iterated=0A=
  // match against the stack.=0A=
=0A=
  function push_(array, position, element) {=0A=
    if (!array[position]) {=0A=
      array[position] =3D [];=0A=
    }=0A=
    array[position].push(element);=0A=
  }=0A=
=0A=
  for (i =3D 0; i < xpathGrammarRules.length; ++i) {=0A=
    var rule =3D xpathGrammarRules[i];=0A=
    var pattern =3D rule[1];=0A=
=0A=
    for (var j =3D pattern.length - 1; j >=3D 0; --j) {=0A=
      if (pattern[j] =3D=3D Q_1M) {=0A=
        push_(xpathRules, pattern[j-1].key, rule);=0A=
        break;=0A=
        =0A=
      } else if (pattern[j] =3D=3D Q_MM || pattern[j] =3D=3D Q_01) {=0A=
        push_(xpathRules, pattern[j-1].key, rule);=0A=
        --j;=0A=
=0A=
      } else {=0A=
        push_(xpathRules, pattern[j].key, rule);=0A=
        break;=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  if (xpathdebug) {=0A=
    Log.write('XPath parse INIT: ' + xpathRules.length + ' rule bins');=0A=
  }=0A=
  var sum =3D 0;=0A=
  mapExec(xpathRules, function(i) {=0A=
    if (i) {=0A=
      sum +=3D i.length;=0A=
    }=0A=
  });=0A=
  =0A=
  if (xpathdebug) {=0A=
    Log.write('XPath parse INIT: ' + (sum / xpathRules.length) + ' =
average bin size');=0A=
  }=0A=
}=0A=
=0A=
// Local utility functions that are used by the lexer or parser.=0A=
=0A=
function xpathCollectDescendants(nodelist, node) {=0A=
  for (var n =3D node.firstChild; n; n =3D n.nextSibling) {=0A=
    nodelist.push(n);=0A=
    arguments.callee(nodelist, n);=0A=
  }=0A=
}=0A=
=0A=
function xpathCollectDescendantsReverse(nodelist, node) {=0A=
  for (var n =3D node.lastChild; n; n =3D n.previousSibling) {=0A=
    nodelist.push(n);=0A=
    arguments.callee(nodelist, n);=0A=
  }=0A=
}=0A=
=0A=
=0A=
// The entry point for the library: match an expression against a DOM=0A=
// node. Returns an XPath value.=0A=
function xpathDomEval(expr, node) {=0A=
  var expr1 =3D xpathParse(expr);=0A=
  var ret =3D expr1.evaluate(new ExprContext(node));=0A=
  return ret;=0A=
}=0A=
=0A=
// Utility function to sort a list of nodes. Used by xsltSort() and=0A=
// nxslSelect().=0A=
function xpathSort(input, sort) {=0A=
  if (sort.length =3D=3D 0) {=0A=
    return;=0A=
  }=0A=
=0A=
  var sortlist =3D [];=0A=
=0A=
  for (var i =3D 0; i < input.nodelist.length; ++i) {=0A=
    var node =3D input.nodelist[i];=0A=
    var sortitem =3D { node: node, key: [] };=0A=
    var context =3D input.clone(node, 0, [ node ]);=0A=
    =0A=
    for (var j =3D 0; j < sort.length; ++j) {=0A=
      var s =3D sort[j];=0A=
      var value =3D s.expr.evaluate(context);=0A=
=0A=
      var evalue;=0A=
      if (s.type =3D=3D 'text') {=0A=
        evalue =3D value.stringValue();=0A=
      } else if (s.type =3D=3D 'number') {=0A=
        evalue =3D value.numberValue();=0A=
      }=0A=
      sortitem.key.push({ value: evalue, order: s.order });=0A=
    }=0A=
=0A=
    // Make the sort stable by adding a lowest priority sort by=0A=
    // id. This is very convenient and furthermore required by the=0A=
    // spec ([XSLT] - Section 10 Sorting).=0A=
    sortitem.key.push({ value: i, order: 'ascending' });=0A=
=0A=
    sortlist.push(sortitem);=0A=
  }=0A=
=0A=
  sortlist.sort(xpathSortByKey);=0A=
=0A=
  var nodes =3D [];=0A=
  for (var i =3D 0; i < sortlist.length; ++i) {=0A=
    nodes.push(sortlist[i].node);=0A=
  }=0A=
  input.nodelist =3D nodes;=0A=
  input.setNode(nodes[0], 0);=0A=
}=0A=
=0A=
=0A=
// Sorts by all order criteria defined. According to the JavaScript=0A=
// spec ([ECMA] Section 11.8.5), the compare operators compare strings=0A=
// as strings and numbers as numbers.=0A=
//=0A=
// NOTE: In browsers which do not follow the spec, this breaks only in=0A=
// the case that numbers should be sorted as strings, which is very=0A=
// uncommon.=0A=
=0A=
function xpathSortByKey(v1, v2) {=0A=
  // NOTE: Sort key vectors of different length never occur in=0A=
  // xsltSort.=0A=
=0A=
  for (var i =3D 0; i < v1.key.length; ++i) {=0A=
    var o =3D v1.key[i].order =3D=3D 'descending' ? -1 : 1;=0A=
    if (v1.key[i].value > v2.key[i].value) {=0A=
      return +1 * o;=0A=
    } else if (v1.key[i].value < v2.key[i].value) {=0A=
      return -1 * o;=0A=
    }=0A=
  }=0A=
=0A=
  return 0;=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597715663939/LVDG_LectorXML.js

LectorXML.xml=3D'';=0A=
=0A=
	function LectorXML(url){=0A=
	    if ((url!=3Dundefined)&&(url!=3D'')) {=0A=
		    this.xml =3D loadCall(url);=0A=
	     }=0A=
	};=0A=
	=0A=
	LectorXML.setXML=3Dfunction(xml){=0A=
		this.xml=3Dxml;=0A=
	};=0A=
=0A=
=0A=
	  function loadCall(url) {=0A=
	    // branch for native XMLHttpRequest object=0A=
	    if (window.XMLHttpRequest) {=0A=
	        req =3D new XMLHttpRequest();=0A=
	        req.onreadystatechange =3D processReqChange;=0A=
	        req.open("GET", url, false); // the third parameter - true - =
specified ASYNCHRONOUS processing i.e. not waiting for the response!=0A=
	        req.send(null);=0A=
	        return req.responseText;=0A=
	    // branch for IE/Windows ActiveX version=0A=
	    } else if (window.ActiveXObject) {=0A=
	        req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
	        if (req) {=0A=
	            req.onreadystatechange =3D processReqChange;=0A=
	            req.open("GET", url, false); // the third parameter - true =
- specified ASYNCHRONOUS processing i.e. not waiting for the response!=0A=
	            req.send();=0A=
	        	return req.responseText;=0A=
	        }=0A=
	    }=0A=
	  }   =0A=
		       =0A=
	  function processReqChange()  {=0A=
	    // only if req shows "complete"=0A=
	    if (req.readyState =3D=3D 4) {=0A=
	      // only if "OK"=0A=
	      if (req.status =3D=3D 200) {=0A=
	          xmldoc=3Dreq.responseXML;=0A=
	          //_xml=3Dreq.responseText;=0A=
	      }=0A=
	      else {=0A=
	        alert("Error: can not get the content ("+ req.statusText +")");=0A=
	      }    =0A=
	    }=0A=
	  }
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/290D96910A80B1A1008F337B78D9049E/LVDG_validaciones_opinas.js

function FormValidator(formulario)=0A=
{=0A=
	var autor =3D formulario.Autor;=0A=
=0A=
	if (autor.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca su nombre")=0A=
		autor.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
	var ciudad =3D formulario.Poblacion;=0A=
	=0A=
	if (ciudad.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca su ciudad")=0A=
		ciudad.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
	var correo =3D formulario.correo;=0A=
	=0A=
	if (correo.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca su direcci=F3n de correo el=E9ctronico")=0A=
		correo.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
	 =0A=
	var at =3D correo.value.indexOf("@")=0A=
	var dot =3D correo.value.lastIndexOf(".")=0A=
	var correoLength =3D correo.value.length=0A=
	=0A=
	if (at<1 || dot-at<2 || correoLength-dot=3D=3D1)=0A=
	{=0A=
       alert("El formato de la direcci=F3n de correo electr=F3nio =
introducida no es correcto");=0A=
       correo.focus();=0A=
       correo.select();=0A=
       return (false);=0A=
=0A=
	}=0A=
		=0A=
	var titulo =3D formulario.Titulo;=0A=
	=0A=
	if (titulo.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca el t=EDtulo de su comentario")=0A=
		titulo.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
	var texto =3D formulario.Texto;=0A=
	var textoLength =3D texto.value.length=0A=
	=0A=
	=0A=
	if (textoLength<=3D1)=0A=
	{=0A=
		alert("Introduzca el texto de su comentario")=0A=
		texto.focus();=0A=
		return (false);=0A=
	}=0A=
	else if (textoLength>3500)=0A=
	{=0A=
		alert("Su comentario no debe exceder los 3000 caracteres")=0A=
		texto.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
return true;=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597743995408/LVDG_LectorXSLT.js

LectorXSLT.ruta=3D'';=0A=
LectorXSLT.xslt=3D'';=0A=
=0A=
function LectorXSLT(ruta){=0A=
	this.ruta=3Druta;=0A=
	if ((ruta!=3Dundefined) && (ruta!=3D''))=0A=
		this.xslt =3D loadXSLT(ruta);=0A=
	else=0A=
		this.xslt =3D '<xsl:stylesheet version=3D"1.0" =
xmlns:xsl=3D"http://www.w3.org/1999/XSL/Transform"><xsl:template =
match=3D"/"><xsl:copy-of select=3D"/"/></xsl:template></xsl:stylesheet>';=0A=
};=0A=
=0A=
LectorXSLT.getXSLT=3Dfunction(){=0A=
	return this.xslt;=0A=
};=0A=
=0A=
LectorXSLT.setXSLT=3Dfunction(xslt){=0A=
	this.xslt =3D xslt;=0A=
};=0A=
=0A=
LectorXSLT.getRuta=3Dfunction(){=0A=
	return this.ruta;=0A=
};=0A=
=0A=
LectorXSLT.setRuta=3Dfunction(ruta){=0A=
	this.ruta =3D ruta;=0A=
};=0A=
=0A=
=0A=
	  function loadXSLT(url) {=0A=
	    // branch for native XMLHttpRequest object=0A=
	    if (window.XMLHttpRequest) {=0A=
	        req =3D new XMLHttpRequest();=0A=
	        req.onreadystatechange =3D processReqChange;=0A=
	        req.open("GET", url, false); // the third parameter - true - =
specified ASYNCHRONOUS processing i.e. not waiting for the response!=0A=
	        req.send(null);=0A=
	        return req.responseText;=0A=
	    // branch for IE/Windows ActiveX version=0A=
	    } else if (window.ActiveXObject) {=0A=
	        req =3D new ActiveXObject("Microsoft.XMLHTTP");=0A=
	        if (req) {=0A=
	            req.onreadystatechange =3D processReqChange;=0A=
	            req.open("GET", url, false); // the third parameter - true =
- specified ASYNCHRONOUS processing i.e. not waiting for the response!=0A=
	            req.send();=0A=
	        	return req.responseText;=0A=
	        }=0A=
	    }=0A=
	  }
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1192035251129886921/LVDG_validaciones_envio_noticia.js

function validaEnviar(formulario)=0A=
{=0A=
	var para =3D formulario.para;=0A=
	if (para.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca destinatario del correo")=0A=
		para.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
	var paraSeparados =3D para.value.split(";");=0A=
	=0A=
	for(i=3D0;i<paraSeparados.length;i++){=0A=
		var at =3D paraSeparados[i].indexOf("@")=0A=
		var dot =3D paraSeparados[i].lastIndexOf(".")=0A=
		var correoLength =3D paraSeparados[i].length=0A=
		=0A=
		if (at<1 || dot-at<2 || correoLength-dot=3D=3D1)=0A=
		{=0A=
	       alert("El formato de la direcci=F3n de correo electr=F3nico =
introducida no es correcto");=0A=
	       para.focus();=0A=
	       para.select();=0A=
	       return (false);=0A=
=0A=
		}=0A=
	} =0A=
	=0A=
	var correo =3D formulario.correo;=0A=
	=0A=
	if (correo.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca su direcci=F3n de correo el=E9ctronico")=0A=
		correo.focus();=0A=
		return (false);=0A=
	}=0A=
	=0A=
	 =0A=
	var at =3D correo.value.indexOf("@")=0A=
	var dot =3D correo.value.lastIndexOf(".")=0A=
	var correoLength =3D correo.value.length=0A=
	=0A=
	if (at<1 || dot-at<2 || correoLength-dot=3D=3D1)=0A=
	{=0A=
       alert("El formato de la direcci=F3n de correo electr=F3nio =
introducida no es correcto");=0A=
       correo.focus();=0A=
       correo.select();=0A=
       return (false);=0A=
=0A=
	}=0A=
		=0A=
	var nombre =3D formulario.nombre;=0A=
	=0A=
	if (nombre.value=3D=3D"")=0A=
	{=0A=
		alert("Introduzca su nombre")=0A=
		nombre.focus();=0A=
		return (false);=0A=
	}=0A=
=0A=
	=0A=
return true;=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597562672697/LVDG_AjaxMisc.js

// Copyright 2005 Google Inc.=0A=
// All Rights Reserved=0A=
//=0A=
// Miscellania that support the ajaxslt implementation.=0A=
//=0A=
// Author: Steffen Meschkat <mesch@google.com>=0A=
//=0A=
=0A=
function el(i) {=0A=
  return document.getElementById(i);=0A=
}=0A=
=0A=
function px(x) {=0A=
  return x + 'px';=0A=
}=0A=
=0A=
// Split a string s at all occurrences of character c. This is like=0A=
// the split() method of the string object, but IE omits empty=0A=
// strings, which violates the invariant (s.split(x).join(x) =3D=3D s).=0A=
function stringSplit(s, c) {=0A=
  var a =3D s.indexOf(c);=0A=
  if (a =3D=3D -1) {=0A=
    return [ s ];=0A=
  }=0A=
  =0A=
  var parts =3D [];=0A=
  parts.push(s.substr(0,a));=0A=
  while (a !=3D -1) {=0A=
    var a1 =3D s.indexOf(c, a + 1);=0A=
    if (a1 !=3D -1) {=0A=
      parts.push(s.substr(a + 1, a1 - a - 1));=0A=
    } else {=0A=
      parts.push(s.substr(a + 1));=0A=
    } =0A=
    a =3D a1;=0A=
  }=0A=
=0A=
  return parts;=0A=
}=0A=
=0A=
// Returns the text value if a node; for nodes without children this=0A=
// is the nodeValue, for nodes with children this is the concatenation=0A=
// of the value of all children.=0A=
function xmlValue(node) {=0A=
  if (!node) {=0A=
    return '';=0A=
  }=0A=
=0A=
  var ret =3D '';=0A=
  if (node.nodeType =3D=3D DOM_TEXT_NODE ||=0A=
      node.nodeType =3D=3D DOM_CDATA_SECTION_NODE ||=0A=
      node.nodeType =3D=3D DOM_ATTRIBUTE_NODE) {=0A=
    ret +=3D node.nodeValue;=0A=
=0A=
  } else if (node.nodeType =3D=3D DOM_ELEMENT_NODE ||=0A=
             node.nodeType =3D=3D DOM_DOCUMENT_NODE ||=0A=
             node.nodeType =3D=3D DOM_DOCUMENT_FRAGMENT_NODE) {=0A=
    for (var i =3D 0; i < node.childNodes.length; ++i) {=0A=
      ret +=3D arguments.callee(node.childNodes[i]);=0A=
    }=0A=
  }=0A=
  return ret;=0A=
}=0A=
=0A=
// Returns the representation of a node as XML text.=0A=
function xmlText(node) {=0A=
  var ret =3D '';=0A=
  if (node.nodeType =3D=3D DOM_TEXT_NODE) {=0A=
    ret +=3D xmlEscapeText(node.nodeValue);=0A=
    =0A=
  } else if (node.nodeType =3D=3D DOM_ELEMENT_NODE) {=0A=
    ret +=3D '<' + node.nodeName;=0A=
    for (var i =3D 0; i < node.attributes.length; ++i) {=0A=
      var a =3D node.attributes[i];=0A=
      if (a && a.nodeName && a.nodeValue) {=0A=
        ret +=3D ' ' + a.nodeName;=0A=
        ret +=3D '=3D"' + xmlEscapeAttr(a.nodeValue) + '"';=0A=
      }=0A=
    }=0A=
=0A=
    if (node.childNodes.length =3D=3D 0) {=0A=
      ret +=3D '/>';=0A=
=0A=
    } else {=0A=
      ret +=3D '>';=0A=
      for (var i =3D 0; i < node.childNodes.length; ++i) {=0A=
        ret +=3D arguments.callee(node.childNodes[i]);=0A=
      }=0A=
      ret +=3D '</' + node.nodeName + '>';=0A=
    }=0A=
    =0A=
  } else if (node.nodeType =3D=3D DOM_DOCUMENT_NODE || =0A=
             node.nodeType =3D=3D DOM_DOCUMENT_FRAGMENT_NODE) {=0A=
    for (var i =3D 0; i < node.childNodes.length; ++i) {=0A=
      ret +=3D arguments.callee(node.childNodes[i]);=0A=
    }=0A=
  }=0A=
  =0A=
  return ret;=0A=
}=0A=
=0A=
// Applies the given function to each element of the array.=0A=
function mapExec(array, func) {=0A=
  for (var i =3D 0; i < array.length; ++i) {=0A=
    func(array[i]);=0A=
  }=0A=
}=0A=
=0A=
// Returns an array that contains the return value of the given=0A=
// function applied to every element of the input array.=0A=
function mapExpr(array, func) {=0A=
  var ret =3D [];=0A=
  for (var i =3D 0; i < array.length; ++i) {=0A=
    ret.push(func(array[i]));=0A=
  }=0A=
  return ret;=0A=
};=0A=
=0A=
// Reverses the given array in place.=0A=
function reverseInplace(array) {=0A=
  for (var i =3D 0; i < array.length / 2; ++i) {=0A=
    var h =3D array[i];=0A=
    var ii =3D array.length - i - 1;=0A=
    array[i] =3D array[ii];=0A=
    array[ii] =3D h;=0A=
  }=0A=
}=0A=
=0A=
// Shallow-copies an array.=0A=
function copyArray(dst, src) { =0A=
  for (var i =3D 0; i < src.length; ++i) {=0A=
    dst.push(src[i]);=0A=
  }=0A=
}=0A=
=0A=
function assert(b) {=0A=
  if (!b) {=0A=
    throw 'assertion failed';=0A=
  }=0A=
}=0A=
=0A=
// Escape XML special markup chracters: tag delimiter < > and entity=0A=
// reference start delimiter &. The escaped string can be used in XML=0A=
// text portions (i.e. between tags).=0A=
function xmlEscapeText(s) {=0A=
  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, =
'&gt;');=0A=
}=0A=
=0A=
// Escape XML special markup characters: tag delimiter < > entity=0A=
// reference start delimiter & and quotes ". The escaped string can be=0A=
// used in double quoted XML attribute value portions (i.e. in=0A=
// attributes within start tags).=0A=
function xmlEscapeAttr(s) {=0A=
  return xmlEscapeText(s).replace(/\"/g, '&quot;');=0A=
}=0A=
=0A=
// Escape markup in XML text, but don't touch entity references. The=0A=
// escaped string can be used as XML text (i.e. between tags).=0A=
function xmlEscapeTags(s) {=0A=
  return s.replace(/</g, '&lt;').replace(/>/g, '&gt;');=0A=
}=0A=
=0A=
// An implementation of the debug log. =0A=
=0A=
var logging__ =3D true;=0A=
=0A=
function Log() {};=0A=
=0A=
Log.lines =3D [];=0A=
=0A=
Log.write =3D function(s) {=0A=
  if (logging__) {=0A=
    this.lines.push(xmlEscapeText(s));=0A=
    this.show();=0A=
  }=0A=
};=0A=
=0A=
// Writes the given XML with every tag on a new line.=0A=
Log.writeXML =3D function(xml) {=0A=
  if (logging__) {=0A=
    var s0 =3D xml.replace(/</g, '\n<');=0A=
    var s1 =3D xmlEscapeText(s0);=0A=
    var s2 =3D s1.replace(/\s*\n(\s|\n)*/g, '<br/>');=0A=
    this.lines.push(s2);=0A=
    this.show();=0A=
  }=0A=
}=0A=
=0A=
// Writes without any escaping=0A=
Log.writeRaw =3D function(s) {=0A=
  if (logging__) {=0A=
    this.lines.push(s);=0A=
    this.show();=0A=
  }=0A=
}=0A=
=0A=
Log.clear =3D function() {=0A=
  if (logging__) {=0A=
    var l =3D this.div();=0A=
    l.innerHTML =3D '';=0A=
    this.lines =3D [];=0A=
  }=0A=
}=0A=
=0A=
Log.show =3D function() {=0A=
  var l =3D this.div();=0A=
  l.innerHTML +=3D this.lines.join('<br/>') + '<br/>';=0A=
  this.lines =3D [];=0A=
  l.scrollTop =3D l.scrollHeight;=0A=
}=0A=
=0A=
Log.div =3D function() {=0A=
  var l =3D document.getElementById('log');=0A=
  if (!l) {=0A=
    l =3D document.createElement('div');=0A=
    l.id =3D 'log';=0A=
    l.style.position =3D 'absolute';=0A=
    l.style.right =3D '5px';=0A=
    l.style.top =3D '5px';=0A=
    l.style.width =3D '250px';=0A=
    l.style.height =3D '150px';=0A=
    l.style.overflow =3D 'auto';=0A=
    l.style.backgroundColor =3D '#f0f0f0';=0A=
    l.style.border =3D '1px solid gray';=0A=
    l.style.fontSize =3D '10px';=0A=
    l.style.padding =3D '5px';=0A=
    document.body.appendChild(l);=0A=
  }=0A=
  return l;=0A=
}=0A=
=0A=
=0A=
function Timer() {}=0A=
Timer.start =3D function() {}=0A=
Timer.end =3D function() {}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597793386605/LVDG_ClienteRSS.js

function getObject(id) {=0A=
	if( window.mmIsOpera ) return(document.getElementById(id));=0A=
	if (document.all) return(document.all[id]);=0A=
	if (document.getElementById) return(document.getElementById(id));=0A=
	return(false);=0A=
}=0A=
=0A=
 =0A=
function rss(tipo, url, xslt, idElemToDisplay) {=0A=
	parse_xslt(tipo, url, xslt, idElemToDisplay);=0A=
}=0A=
=0A=
function parse_xslt(tipo, url, xslt, idElemToDisplay) {=0A=
	xsltdebug =3D false;=0A=
	xpathdebug =3D false;=0A=
	var lectorXML =3D new LectorXML(url);=0A=
	//alert('xml=3D'+lectorXML.xml);=0A=
	=0A=
	var html =3D '';=0A=
	if (xslt!=3D'') {=0A=
		var xml =3D xmlParse(lectorXML.xml);=0A=
		var lectorXSLT =3D new LectorXSLT(xslt);=0A=
		//alert('xslt=3D'+lectorXSLT.xslt);=0A=
		var xslt =3D xmlParse(lectorXSLT.xslt);=0A=
		html =3D xsltProcess(xml, xslt);=0A=
	} else {=0A=
		html =3D lectorXML.xml;=0A=
	}=0A=
SetContainerHTML2(idElemToDisplay,html);=0A=
	=0A=
}=0A=
=0A=
=0A=
function SetContainerHTML2(id_contenedor,html){=0A=
   var scs=3Dhtml.extractScript();    //capturamos los scripts=0A=
   var mydiv =3D document.getElementById(id_contenedor);=0A=
   mydiv.innerHTML=3Dhtml.stripScript();    //eliminamos los scripts... =
ya son innecesarios=0A=
   scs.evalScript();       =0A=
}=0A=
=0A=
	function SetContainerHTML(id_contenedor,responseText) {=0A=
		mydiv =3D document.getElementById(id_contenedor);=0A=
		mydiv.innerHTML =3D responseText;=0A=
		var elementos =3D mydiv.getElementsByTagName('script');=0A=
		for(i=3D0;i<elementos.length;i++) {=0A=
			var elemento =3D elementos[i];=0A=
			nuevoScript =3D document.createElement('script');=0A=
			nuevoScript.text =3D elemento.innerHTML;=0A=
			nuevoScript.type =3D 'text/javascript';=0A=
			if(elemento.src!=3Dnull && elemento.src.length>0) {=0A=
				nuevoScript.src =3D elemento.src;=0A=
			}=0A=
			elemento.parentNode.replaceChild(nuevoScript,elemento);=0A=
		}=0A=
	}=0A=
=0A=
// a=F1adido para ejecutar el script de ajax.=0A=
var tagScript =3D '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';=0A=
        /**=0A=
        * Eval script fragment=0A=
        * @return String=0A=
        */=0A=
        String.prototype.evalScript =3D function()=0A=
        {=0A=
                return (this.match(new RegExp(tagScript, 'img')) || =
[]).evalScript();=0A=
        };=0A=
        /**=0A=
        * strip script fragment=0A=
        * @return String=0A=
        */=0A=
        String.prototype.stripScript =3D function()=0A=
        {=0A=
                return this.replace(new RegExp(tagScript, 'img'), '');=0A=
        };=0A=
        /**=0A=
        * extract script fragment=0A=
        * @return String=0A=
        */=0A=
        String.prototype.extractScript =3D function()=0A=
        {=0A=
                var matchAll =3D new RegExp(tagScript, 'img');=0A=
                return (this.match(matchAll) || []);=0A=
        };=0A=
        /**=0A=
        * Eval scripts=0A=
        * @return String=0A=
        */=0A=
        Array.prototype.evalScript =3D function(extracted)=0A=
        {=0A=
                var s=3Dthis.map(function(sr){=0A=
                         var sc=3D(sr.match(new RegExp(tagScript, 'im')) =
|| ['', ''])[1];=0A=
                         if(window.execScript){=0A=
                              window.execScript(sc);=0A=
                         }=0A=
                        else=0A=
                       {=0A=
                           window.setTimeout(sc,0);=0A=
                        }=0A=
                });=0A=
                return true;=0A=
        };=0A=
        /**=0A=
        * Map array elements=0A=
        * @param {Function} fun=0A=
        * @return Function=0A=
        */=0A=
        Array.prototype.map =3D function(fun)=0A=
        {=0A=
                if(typeof fun!=3D=3D"function"){return false;}=0A=
                var i =3D 0, l =3D this.length;=0A=
                for(i=3D0;i<l;i++)=0A=
                {=0A=
                        fun(this[i]);=0A=
                }=0A=
                return true;=0A=
        };
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/518EE9620A80B197011F7B3D4E9A130D/LVDG_banners.js

//var server_name=3D"ads.lavozdegalicia.es";=0A=
var server_name=3D"publicidadinternet.lavozdegalicia.es";=0A=
=0A=
function bannerInterno(zoneId) {=0A=
=0A=
	if (!document.phpAds_used) document.phpAds_used =3D ',';=0A=
	document.write ("<" + "script type=3D'text/javascript' src=3D'");=0A=
	document.write ("http://"+server_name+"/adjs.php?n=3Dadda1f64");=0A=
	document.write ("&what=3Dzone:"+zoneId+"&amp;target=3D_blank");=0A=
	document.write ("&exclude=3D" + document.phpAds_used);=0A=
	document.write ("'><" + "/script>");=0A=
=0A=
}=0A=
=0A=
var llamada =3D true;=0A=
=0A=
function configuracionOAS(segmentacion) {=0A=
	  	=0A=
	if (llamada){=0A=
	  	//configuration=0A=
		OAS_url =3D'http://publi.grupocorreo.es/RealMedia/ads/';=0A=
		OAS_listpos =3D 'Position1,Position3,x17,x18,x19,x32,x51';=0A=
		OAS_query =3D '?';=0A=
		=0A=
		//OAS_sitepage =3D 'www.lavozdegalicia.es/portada';=0A=
      		OAS_sitepage =3Dsegmentacion;=0A=
		//end of configuration=0A=
		OAS_version =3D 10;=0A=
		OAS_rn =3D '001234567890'; OAS_rns =3D '1234567890';=0A=
		OAS_rn =3D new String (Math.random()); OAS_rns =3D OAS_rn.substring =
(2, 11);=0A=
=0A=
		OAS_version =3D 11;=0A=
		if (navigator.userAgent.indexOf('Mozilla/3') !=3D -1)=0A=
			OAS_version =3D 10;=0A=
		if (OAS_version >=3D 11) =0A=
			document.write('<SC'+'RIPT LANGUAGE=3DJavaScript1.1 SRC=3D"' + =
OAS_url + 'adstream_mjx.ads/' + OAS_sitepage + '/1' + OAS_rns + '@' + =
OAS_listpos + OAS_query + '"><\/SCRIPT>');=0A=
		=0A=
		document.write('');=0A=
	}=0A=
	=0A=
	llamada =3D false;=0A=
}=0A=
	=0A=
function OAS_AD(pos) {=0A=
=0A=
	if (OAS_version >=3D 11 && typeof(OAS_RICH)!=3D'undefined')=0A=
		OAS_RICH(pos);=0A=
	else=0A=
		OAS_NORMAL(pos);=0A=
}=0A=
=0A=
=0A=
function OAS_NORMAL(pos) { =0A=
	document.write('<A HREF=3D"' + OAS_url + 'click_nx.ads/' + OAS_sitepage =
+ '/1' + OAS_rns + '@' + OAS_listpos + '!' + pos + OAS_query + '" =
TARGET=3D_top>');=0A=
	document.write('<IMG SRC=3D"' + OAS_url + 'adstream_nx.ads/' + =
OAS_sitepage + '/1' + OAS_rns + '@' + OAS_listpos + '!' + pos + =
OAS_query + '" BORDER=3D0 ALT=3D"Click!"&gt;&lt;/A>');=0A=
}=0A=
=0A=
	function muestra(banner) {=0A=
		var caja=3D getObject(banner)=0A=
		if (caja) {=0A=
			var contenido=3Dcaja.innerHTML;=0A=
			if (contenido!=3Dnull && contenido!=3D"" && =
!(contenido.indexOf('/default/empty.gif') !=3D -1)) {=0A=
				caja.style.display =3D "block";=0A=
			} else {=0A=
				caja.innerHTML =3D "";=0A=
				caja.style.display =3D "none";=0A=
			}=0A=
		}=0A=
	}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.lavozdegalicia.es/ficheros/1189597663711607/LVDG_AjaXSLT.js

// Copyright 2005 Google Inc.=0A=
// All Rights Reserved=0A=
//=0A=
//=0A=
// An XSL-T processor written in JavaScript. The implementation is NOT=0A=
// complete; some xsl element are left out.=0A=
//=0A=
// References:=0A=
//=0A=
// [XSLT] XSL-T Specification=0A=
// <http://www.w3.org/TR/1999/REC-xslt-19991116>.=0A=
//=0A=
// [ECMA] ECMAScript Language Specification=0A=
// =
<http://www.ecma-international.org/publications/standards/Ecma-262.htm>.=0A=
//=0A=
// The XSL processor API has one entry point, the function=0A=
// xsltProcessContext(). It receives as arguments the starting point in =
the=0A=
// input document as an XPath expression context, the DOM root node of=0A=
// the XSL-T stylesheet, and a DOM node that receives the output.=0A=
//=0A=
// NOTE: Actually, XSL-T processing according to the specification is=0A=
// defined as operation on text documents, not as operation on DOM=0A=
// trees. So, strictly speaking, this implementation is not an XSL-T=0A=
// processor, but the processing engine that needs to be complemented=0A=
// by an XML parser and serializer in order to be complete. Those two=0A=
// are found in the file xml.js.=0A=
//=0A=
//=0A=
// TODO(mesch): add jsdoc comments. Use more coherent naming. Finish=0A=
// remaining XSLT features.=0A=
//=0A=
//=0A=
// Author: Steffen Meschkat <mesch@google.com>=0A=
=0A=
=0A=
// The exported entry point of the XSL-T processor, as explained=0A=
// above.=0A=
//=0A=
// @param xmlDoc The input document root, as DOM node.=0A=
// @param template The stylesheet document root, as DOM node.=0A=
// @return the processed document, as XML text in a string.=0A=
=0A=
function xsltProcess(xmlDoc, stylesheet) {=0A=
  if (xsltdebug) {=0A=
    Log.write('XML STYLESHEET:');=0A=
    Log.writeXML(xmlText(stylesheet));=0A=
    Log.write('XML INPUT:');=0A=
    Log.writeXML(xmlText(xmlDoc));=0A=
  }=0A=
=0A=
  var output =3D (new XDocument).createDocumentFragment();=0A=
  xsltProcessContext(new ExprContext(xmlDoc), stylesheet, output);=0A=
=0A=
  var ret =3D xmlText(output);=0A=
=0A=
  if (xsltdebug) {=0A=
    Log.write('HTML OUTPUT:');=0A=
    Log.writeXML(ret);=0A=
  }=0A=
=0A=
  return ret;=0A=
}=0A=
=0A=
// The main entry point of the XSL-T processor, as explained above.=0A=
//=0A=
// @param input The input document root, as XPath ExprContext.=0A=
// @param template The stylesheet document root, as DOM node.=0A=
// @param the root of the generated output, as DOM node.=0A=
=0A=
function xsltProcessContext(input, template, output) {=0A=
=0A=
  var nodename =3D template.nodeName.split(/:/);=0A=
  if (nodename.length =3D=3D 1 || nodename[0] !=3D 'xsl') {=0A=
    xsltPassThrough(input, template, output);=0A=
=0A=
  } else {=0A=
    switch(nodename[1]) {=0A=
    case 'apply-imports':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'apply-templates':=0A=
      var select =3D xmlGetAttribute(template, 'select');=0A=
      var nodes;=0A=
      if (select) {=0A=
        nodes =3D xpathEval(select,input).nodeSetValue();=0A=
      } else {=0A=
        nodes =3D input.node.childNodes;=0A=
      }=0A=
=0A=
      var sortContext =3D input.clone(nodes[0], 0, nodes);=0A=
      xsltWithParam(sortContext, template);=0A=
      xsltSort(sortContext, template);=0A=
=0A=
      var mode =3D xmlGetAttribute(template, 'mode');=0A=
      var top =3D template.ownerDocument.documentElement;=0A=
      for (var i =3D 0; i < top.childNodes.length; ++i) {=0A=
        var c =3D top.childNodes[i];=0A=
        if (c.nodeType =3D=3D DOM_ELEMENT_NODE &&=0A=
            c.nodeName =3D=3D 'xsl:template' &&=0A=
            c.getAttribute('mode') =3D=3D mode) {=0A=
          for (var j =3D 0; j < sortContext.nodelist.length; ++j) {=0A=
            var nj =3D sortContext.nodelist[j];=0A=
            xsltProcessContext(sortContext.clone(nj, j), c, output);=0A=
          }=0A=
        }=0A=
      }=0A=
      break;=0A=
=0A=
    case 'attribute':=0A=
      var nameexpr =3D xmlGetAttribute(template, 'name');=0A=
      var name =3D xsltAttributeValue(nameexpr, input);=0A=
      var node =3D output.ownerDocument.createDocumentFragment();=0A=
      xsltChildNodes(input, template, node);=0A=
      var value =3D xmlValue(node);=0A=
      output.setAttribute(name, value);=0A=
      break;=0A=
=0A=
    case 'attribute-set':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'call-template':=0A=
      var name =3D xmlGetAttribute(template, 'name');=0A=
      var top =3D template.ownerDocument.documentElement;=0A=
=0A=
      var paramContext =3D input.clone();=0A=
      xsltWithParam(paramContext, template);=0A=
=0A=
      for (var i =3D 0; i < top.childNodes.length; ++i) {=0A=
        var c =3D top.childNodes[i];=0A=
        if (c.nodeType =3D=3D DOM_ELEMENT_NODE &&=0A=
            c.nodeName =3D=3D 'xsl:template' &&=0A=
            c.getAttribute('name') =3D=3D name) {=0A=
          xsltChildNodes(paramContext, c, output);=0A=
          break;=0A=
        }=0A=
      }=0A=
      break;=0A=
=0A=
    case 'choose':=0A=
      xsltChoose(input, template, output);=0A=
      break;=0A=
=0A=
    case 'comment':=0A=
      var node =3D output.ownerDocument.createDocumentFragment();=0A=
      xsltChildNodes(input, template, node);=0A=
      var commentData =3D xmlValue(node);=0A=
      var commentNode =3D =
output.ownerDocument.createComment(commentData);=0A=
      output.appendChild(commentNode);=0A=
      break;=0A=
=0A=
    case 'copy':=0A=
      if (input.node.nodeType =3D=3D DOM_ELEMENT_NODE) {=0A=
        var node =3D =
output.ownerDocument.createElement(input.node.nodeName);=0A=
        output.appendChild(node);=0A=
        xsltChildNodes(input, template, node);=0A=
=0A=
      } else if (input.node.nodeType =3D=3D DOM_ATTRIBUTE_NODE) {=0A=
        var node =3D =
output.ownerDocument.createAttribute(input.node.nodeName);=0A=
        node.nodeValue =3D input.node.nodeValue;=0A=
        output.setAttribute(node);=0A=
      }=0A=
      break;=0A=
=0A=
    case 'copy-of':=0A=
      var select =3D xmlGetAttribute(template, 'select');=0A=
      var value =3D xpathEval(select, input);=0A=
      if (value.type =3D=3D 'node-set') {=0A=
        var nodes =3D value.nodeSetValue();=0A=
        for (var i =3D 0; i < nodes.length; ++i) {=0A=
          xsltCopyOf(output, nodes[i]);=0A=
        }=0A=
=0A=
      } else {=0A=
        var node =3D =
output.ownerDocument.createTextNode(value.stringValue());=0A=
        output.appendChild(node);=0A=
      }=0A=
      break;=0A=
=0A=
    case 'decimal-format':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'element':=0A=
      var nameexpr =3D xmlGetAttribute(template, 'name');=0A=
      var name =3D xsltAttributeValue(nameexpr, input);=0A=
      var node =3D output.ownerDocument.createElement(name);=0A=
      output.appendChild(node);=0A=
      xsltChildNodes(input, template, node);=0A=
      break;=0A=
=0A=
    case 'fallback':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'for-each':=0A=
      var sortContext =3D input.clone();=0A=
      xsltSort(sortContext, template);=0A=
      xsltForEach(sortContext, template, output);=0A=
      break;=0A=
=0A=
    case 'if':=0A=
      var test =3D xmlGetAttribute(template, 'test');=0A=
      if (xpathEval(test, input).booleanValue()) {=0A=
        xsltChildNodes(input, template, output);=0A=
      }=0A=
      break;=0A=
=0A=
    case 'import':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'include':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'key':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'message':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'namespace-alias':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'number':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'otherwise':=0A=
      alert('error if here: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'output':=0A=
      // Ignored. -- Since we operate on the DOM, and all further use=0A=
      // of the output of the XSL transformation is determined by the=0A=
      // browser that we run in, this parameter is not applicable to=0A=
      // this implementation.=0A=
      break;=0A=
=0A=
    case 'preserve-space':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'processing-instruction':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'sort':=0A=
      // just ignore -- was handled by xsltSort()=0A=
      break;=0A=
=0A=
    case 'strip-space':=0A=
      alert('not implemented: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'stylesheet':=0A=
    case 'transform':=0A=
      xsltChildNodes(input, template, output);=0A=
      break;=0A=
=0A=
    case 'template':=0A=
      var match =3D xmlGetAttribute(template, 'match');=0A=
      if (match && xpathMatch(match, input)) {=0A=
        xsltChildNodes(input, template, output);=0A=
      }=0A=
      break;=0A=
=0A=
    case 'text':=0A=
      var text =3D xmlValue(template);=0A=
      var node =3D output.ownerDocument.createTextNode(text);=0A=
      output.appendChild(node);=0A=
      break;=0A=
=0A=
    case 'value-of':=0A=
      var select =3D xmlGetAttribute(template, 'select');=0A=
      var value =3D xpathEval(select, input).stringValue();=0A=
      var node =3D output.ownerDocument.createTextNode(value);=0A=
      output.appendChild(node);=0A=
      break;=0A=
=0A=
    case 'param':=0A=
      xsltVariable(input, template, false);=0A=
      break;=0A=
=0A=
    case 'variable':=0A=
      xsltVariable(input, template, true);=0A=
      break;=0A=
=0A=
    case 'when':=0A=
      alert('error if here: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    case 'with-param':=0A=
      alert('error if here: ' + nodename[1]);=0A=
      break;=0A=
=0A=
    default:=0A=
      alert('error if here: ' + nodename[1]);=0A=
      break;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Sets parameters defined by xsl:with-param child nodes of the=0A=
// current template node, in the current input context. This happens=0A=
// before the operation specified by the current template node is=0A=
// executed.=0A=
=0A=
function xsltWithParam(input, template) {=0A=
  for (var i =3D 0; i < template.childNodes.length; ++i) {=0A=
    var c =3D template.childNodes[i];=0A=
    if (c.nodeType =3D=3D DOM_ELEMENT_NODE && c.nodeName =3D=3D =
'xsl:with-param') {=0A=
      xsltVariable(input, c, true);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Orders the current node list in the input context according to the=0A=
// sort order specified by xsl:sort child nodes of the current=0A=
// template node. This happens before the operation specified by the=0A=
// current template node is executed.=0A=
//=0A=
// TODO(mesch): case-order is not implemented.=0A=
//=0A=
// NOTE: this was tested using driving directions, as follows:=0A=
//=0A=
// <xsl:apply-templates select=3D"segments/segment">=0A=
//  <xsl:sort select=3D"substring-before(@distance,'&#160;')"=0A=
//            order=3D"descending" data-type=3D"number"/>=0A=
//  <xsl:sort select=3D"node()"/>=0A=
// </xsl:apply-templates>=0A=
// =0A=
// TODO(mesch): write a unit test.=0A=
=0A=
function xsltSort(input, template) {=0A=
  var sort =3D [];=0A=
  for (var i =3D 0; i < template.childNodes.length; ++i) {=0A=
    var c =3D template.childNodes[i];=0A=
    if (c.nodeType =3D=3D DOM_ELEMENT_NODE && c.nodeName =3D=3D =
'xsl:sort') {=0A=
      var select =3D xmlGetAttribute(c, 'select');=0A=
      var expr =3D xpathParse(select);=0A=
      var type =3D xmlGetAttribute(c, 'data-type') || 'text';=0A=
      var order =3D xmlGetAttribute(c, 'order') || 'ascending';=0A=
      sort.push({ expr: expr, type: type, order: order });=0A=
    }=0A=
  }=0A=
=0A=
  xpathSort(input, sort);=0A=
}=0A=
=0A=
=0A=
// Evaluates a variable or parameter and set it in the current input=0A=
// context. Implements xsl:variable, xsl:param, and xsl:with-param.=0A=
//=0A=
// @param override flag that defines if the value computed here=0A=
// overrides the one already in the input context if that is the=0A=
// case. I.e. decides if this is a default value or a local=0A=
// value. xsl:variable and xsl:with-param override; xsl:param doesn't.=0A=
=0A=
function xsltVariable(input, template, override) {=0A=
  var name =3D xmlGetAttribute(template, 'name');=0A=
  var select =3D xmlGetAttribute(template, 'select');=0A=
=0A=
  var value;=0A=
=0A=
  if (template.childNodes.length > 0) {=0A=
    var root =3D input.node.ownerDocument.createDocumentFragment();=0A=
    xsltChildNodes(input, template, root);=0A=
    value =3D new NodeSetValue([root]);=0A=
=0A=
  } else if (select) {=0A=
    value =3D xpathEval(select, input);=0A=
=0A=
  } else {=0A=
    value =3D new StringValue('');=0A=
  }=0A=
=0A=
  if (override || !input.getVariable(name)) {=0A=
    input.setVariable(name, value);=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Implements xsl:chose and its child nodes xsl:when and=0A=
// xsl:otherwise.=0A=
=0A=
function xsltChoose(input, template, output) {=0A=
  for (var i =3D 0; i < template.childNodes.length; ++i) {=0A=
    var childNode =3D template.childNodes[i];=0A=
    if (childNode.nodeType !=3D DOM_ELEMENT_NODE) {=0A=
      continue;=0A=
=0A=
    } else if (childNode.nodeName =3D=3D 'xsl:when') {=0A=
      var test =3D xmlGetAttribute(childNode, 'test');=0A=
      if (xpathEval(test, input).booleanValue()) {=0A=
        xsltChildNodes(input, childNode, output);=0A=
        break;=0A=
      }=0A=
=0A=
    } else if (childNode.nodeName =3D=3D 'xsl:otherwise') {=0A=
      xsltChildNodes(input, childNode, output);=0A=
      break;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Implements xsl:for-each.=0A=
=0A=
function xsltForEach(input, template, output) {=0A=
  var select =3D xmlGetAttribute(template, 'select');=0A=
  var nodes =3D xpathEval(select, input).nodeSetValue();=0A=
  for (var i =3D 0; i < nodes.length; ++i) {=0A=
    var context =3D input.clone(nodes[i], i, nodes);=0A=
    xsltChildNodes(context, template, output);=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Traverses the template node tree. Calls the main processing=0A=
// function with the current input context for every child node of the=0A=
// current template node.=0A=
=0A=
function xsltChildNodes(input, template, output) {=0A=
  // Clone input context to keep variables declared here local to the=0A=
  // siblings of the children.=0A=
  var context =3D input.clone();=0A=
  for (var i =3D 0; i < template.childNodes.length; ++i) {=0A=
    xsltProcessContext(context, template.childNodes[i], output);=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Passes template text to the output. The current template node does=0A=
// not specify an XSL-T operation and therefore is appended to the=0A=
// output with all its attributes. Then continues traversing the=0A=
// template node tree.=0A=
=0A=
function xsltPassThrough(input, template, output) {=0A=
  if (template.nodeType =3D=3D DOM_TEXT_NODE) {=0A=
    if (xsltPassText(template)) {=0A=
      var node =3D =
output.ownerDocument.createTextNode(template.nodeValue);=0A=
      output.appendChild(node);=0A=
    }=0A=
=0A=
  } else if (template.nodeType =3D=3D DOM_ELEMENT_NODE) {=0A=
    var node =3D output.ownerDocument.createElement(template.nodeName);=0A=
    for (var i =3D 0; i < template.attributes.length; ++i) {=0A=
      var a =3D template.attributes[i];=0A=
      if (a) {=0A=
        var name =3D a.nodeName;=0A=
        var value =3D xsltAttributeValue(a.nodeValue, input);=0A=
        node.setAttribute(name, value);=0A=
      }=0A=
    }=0A=
    output.appendChild(node);=0A=
    xsltChildNodes(input, template, node);=0A=
=0A=
  } else {=0A=
    // This applies also to the DOCUMENT_NODE of the XSL stylesheet,=0A=
    // so we don't have to treat it specially.=0A=
    xsltChildNodes(input, template, output);=0A=
  }=0A=
}=0A=
=0A=
// Determines if a text node in the XSLT template document is to be=0A=
// stripped according to XSLT whitespace stipping rules.=0A=
//=0A=
// See [XSLT], section 3.4.=0A=
//=0A=
// TODO(mesch): Whitespace stripping on the input document is=0A=
// currently not implemented.=0A=
=0A=
function xsltPassText(template) {=0A=
  if (!template.nodeValue.match(/^\s*$/)) {=0A=
    return true;=0A=
  }=0A=
=0A=
  var element =3D template.parentNode;=0A=
  if (element.nodeName =3D=3D 'xsl:text') {=0A=
    return true;=0A=
  }=0A=
=0A=
  while (element && element.nodeType =3D=3D DOM_ELEMENT_NODE) {=0A=
    var xmlspace =3D element.getAttribute('xml:space');=0A=
    if (xmlspace) {=0A=
      if (xmlspace =3D=3D 'default') {=0A=
        return false;=0A=
      } else if (xmlspace =3D=3D 'preserve') {=0A=
        return true;=0A=
      }=0A=
    }=0A=
=0A=
    element =3D element.parentNode;=0A=
  }=0A=
=0A=
  return false;=0A=
}=0A=
=0A=
// Evaluates an XSL-T attribute value template. Attribute value=0A=
// templates are attributes on XSL-T elements that contain XPath=0A=
// expressions in braces {}. The XSL-T expressions are evaluated in=0A=
// the current input context. NOTE(mesch): We are using stringSplit()=0A=
// instead of string.split() for IE compatibility, see comment on=0A=
// stringSplit().=0A=
=0A=
function xsltAttributeValue(value, context) {=0A=
  var parts =3D stringSplit(value, '{');=0A=
  if (parts.length =3D=3D 1) {=0A=
    return value;=0A=
  }=0A=
=0A=
  var ret =3D '';=0A=
  for (var i =3D 0; i < parts.length; ++i) {=0A=
    var rp =3D stringSplit(parts[i], '}');=0A=
    if (rp.length !=3D 2) {=0A=
      // first literal part of the value=0A=
      ret +=3D parts[i];=0A=
      continue;=0A=
    }=0A=
=0A=
    var val =3D xpathEval(rp[0], context).stringValue();=0A=
    ret +=3D val + rp[1];=0A=
  }=0A=
=0A=
  return ret;=0A=
}=0A=
=0A=
=0A=
// Wrapper function to access attribute values of template element=0A=
// nodes. Currently this calls xmlResolveEntities because in some DOM=0A=
// implementations the return value of node.getAttributeValue()=0A=
// contains unresolved XML entities, although the DOM spec requires=0A=
// that entity references are resolved by te DOM.=0A=
=0A=
function xmlGetAttribute(node, name) {=0A=
  // TODO(mesch): This should not be necessary if the DOM is working=0A=
  // correctly. The DOM is responsible for resolving entities, not the=0A=
  // application.=0A=
  var value =3D node.getAttribute(name);=0A=
  if (value) {=0A=
    return xmlResolveEntities(value);=0A=
  } else {=0A=
    return value;=0A=
  }=0A=
};=0A=
=0A=
=0A=
// Implements xsl:copy-of for node-set values of the select=0A=
// expression. Recurses down the source node tree, which is part of=0A=
// the input document.=0A=
//=0A=
// @param dst the node being copied to, part of output document,=0A=
// @param src the node being copied, part in input document,=0A=
=0A=
function xsltCopyOf(dst, src) {=0A=
  if (src.nodeType =3D=3D DOM_TEXT_NODE) {=0A=
    var node =3D dst.ownerDocument.createTextNode(src.nodeValue);=0A=
    dst.appendChild(node);=0A=
=0A=
  } else if (src.nodeType =3D=3D DOM_ATTRIBUTE_NODE) {=0A=
    dst.setAttribute(src.nodeName, src.nodeValue);=0A=
=0A=
  } else if (src.nodeType =3D=3D DOM_ELEMENT_NODE) {=0A=
    var node =3D dst.ownerDocument.createElement(src.nodeName);=0A=
    dst.appendChild(node);=0A=
=0A=
    // Recursion is implemented by the function calling itself via=0A=
    // arguments.callee, independent of its name. Very convenient for=0A=
    // renaming the function.=0A=
=0A=
    for (var i =3D 0; i < src.attributes.length; ++i) {=0A=
      arguments.callee(node, src.attributes[i]);=0A=
    }=0A=
=0A=
    for (var i =3D 0; i < src.childNodes.length; ++i) {=0A=
      arguments.callee(node, src.childNodes[i]);=0A=
    }=0A=
=0A=
  } else if (src.nodeType =3D=3D DOM_DOCUMENT_FRAGMENT_NODE ||=0A=
             src.nodeType =3D=3D DOM_DOCUMENT_NODE) {=0A=
    for (var i =3D 0; i < src.childNodes.length; ++i) {=0A=
      arguments.callee(dst, src.childNodes[i]);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
=0A=
// Evaluates an XPath expression in the current input context as a=0A=
// match (see [XSLT] section 5.2, paragraph 1).=0A=
=0A=
function xpathMatch(match, context) {=0A=
  var expr =3D xpathParse(match);=0A=
=0A=
  var ret;=0A=
  // Shortcut for the most common case.=0A=
  if (expr.steps && !expr.absolute && expr.steps.length =3D=3D 1 &&=0A=
      expr.steps[0].axis =3D=3D 'child' && =
expr.steps[0].predicate.length =3D=3D 0) {=0A=
    ret =3D expr.steps[0].nodetest.evaluate(context).booleanValue();=0A=
=0A=
  } else {=0A=
=0A=
    ret =3D false;=0A=
    var node =3D context.node;=0A=
=0A=
    while (!ret && node) {=0A=
      var result =3D =
expr.evaluate(context.clone(node,0,[node])).nodeSetValue();=0A=
      for (var i =3D 0; i < result.length; ++i) {=0A=
        if (result[i] =3D=3D context.node) {=0A=
          ret =3D true;=0A=
          break;=0A=
        }=0A=
      }=0A=
      node =3D node.parentNode;=0A=
    }=0A=
  }=0A=
=0A=
  return ret;=0A=
}=0A=
=0A=
=0A=
// Parses and then evaluates the given XPath expression in the given=0A=
// input context. Notice that parsed xpath expressions are cached.=0A=
=0A=
function xpathEval(select, context) {=0A=
  var expr =3D xpathParse(select);=0A=
  var ret =3D expr.evaluate(context);=0A=
  return ret;=0A=
}
------=_NextPart_000_014B_01C8384C.47BD2FF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://affiliate.es.espotting.com/search/content/implementations/EspottingContentInclude.js


function createEspottingContentPage (sContentIdentifier, sTemplate, =
lHits, lAffiliateID, sUserHostIP, sReferralURL) {
	var sPathToEspottingScript =3D =
'http://affiliate.es.espotting.com/search/content/implementations/Espotti=
ngVariableAffiliateIDContentAPI.asp'

	document.write("<scr"+"ipt language=3D'Javascript' src=3D'" + =
sPathToEspottingScript + "?Espotting_XSLFileName=3D" + sTemplate + =
"&Espotting_ContentIdentifier=3D" + sContentIdentifier + =
"&Espotting_Hits=3D" + lHits + =
"&Espotting_JavaScriptInclude=3DTrue&Espotting_AffiliateID=3D" + =
lAffiliateID + "&Espotting_UserHostIP=3D" + sUserHostIP + =
"&Espotting_ReferralURL=3D" + sReferralURL + "&Time=3D" + (new =
Date()).getTime() + "'></scr"+"ipt>");
}
------=_NextPart_000_014B_01C8384C.47BD2FF0--

