From: Subject: =?Windows-1252?Q?C=F3ctel_neoyorquino=2C_vi=F1os_galegos_y_cocina_de_di?= =?Windows-1252?Q?se=F1o?= Date: Wed, 6 Aug 2008 10:31:31 +0200 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C8F7AF.97787310" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/coruna/2008/07/18/0003_6994627.htm C=F3ctel neoyorquino, vi=F1os galegos y cocina de = dise=F1o Ocio gastron=F3mico. Calidad y cantidad. Vengo = cargado de noticias sociogastron=F3micas . Ayer estuvo en A = Coru=F1a uno de los grandes de la cocina universal, los productores de = albari=F1o vinieron a promocionar sus caldos, se present=F3 el sal=F3n = de vinos y aguardientes y los del pub Suite preparan una fiesta = inspirada en la pel=EDcula Sexo en Nueva York , que est=E1 dando = mucho juego. Empiezo por esta =FAltima cita que resulta de lo m=E1s = atractiva. Parece ser que lo =FAltimo no es el c=F3ctel Cosmopolitan = sino la versi=F3n denominada Cointreaupolitan , que lleva tres = partes del producto que da nombre al combinado y tan solo una de vodka = =ABpara que resulte menos fuerte para las chicas. Est=E1 muy de moda=BB, = me explican los propietarios del pub Suite de la calle Alfonso VII. Esta = semana todo va de Reyes. Juan Rodr=EDguez Rivera , Fernando = Iglesias y Javier =C1lvarez ( Che ), no confundir con = el de Oleiros, est=E1n siempre atentos a cualquier novedad. Recuerdo que = la =FAltima vez que habl=E9 con ellos fue por un asunto de un champ=E1n = al rev=E9s. El combinado lleva, adem=E1s, cuatro partes de zumo de = ar=E1ndanos y un poco de zumo de lima a gusto del consumidor. Esta noche = lo servir=E1n de forma gratuita a los clientes en la fiesta denominada = Sex in the city -suena fant=E1stico- y regalar=E1n una coctelera = muy original que sirve para preparar una sola dosis-c=F3ctel de la = jugosa novedad. Hay que agitar en=E9rgicamente y servir fr=EDo. = =ABCuanto m=E1s fr=EDo entra mejor=BB, aclaran."=20 name=3Ddescription> // // // // // // // // // // // // // // // // //
pub
LVDG_PUBLICIDAD_p01:megabanner
LVDG_PUBLICIDAD:12:edi.coruna
Elegir idioma:
Edici=F3n Impresa: Diario en PDF | Hemeroteca =
=20

Buscador de contenidos

=20
=
=20
Elige:=20
=20 =

Indice de contenidos

EL PULSO DE LA CiUDAD = C=F3ctel=20 neoyorquino, vi=F1os galegos y cocina de dise=F1o

Autor:=20
Pablo Portabales pablo.portabales@radiovoz.com
Fecha de publicaci=F3n:=20

Ocio gastron=F3mico. Calidad y cantidad. = Vengo=20 cargado de noticias sociogastron=F3micas . Ayer estuvo en A = Coru=F1a uno de=20 los grandes de la cocina universal, los productores de albari=F1o = vinieron a=20 promocionar sus caldos, se present=F3 el sal=F3n de vinos y aguardientes = y los del=20 pub Suite preparan una fiesta inspirada en la pel=EDcula Sexo en = Nueva York=20 , que est=E1 dando mucho juego. Empiezo por esta =FAltima cita que = resulta de lo m=E1s=20 atractiva. Parece ser que lo =FAltimo no es el c=F3ctel Cosmopolitan = sino la versi=F3n=20 denominada Cointreaupolitan , que lleva tres partes del producto = que da=20 nombre al combinado y tan solo una de vodka =ABpara que resulte menos = fuerte para=20 las chicas. Est=E1 muy de moda=BB, me explican los propietarios del pub = Suite de la=20 calle Alfonso VII. Esta semana todo va de Reyes. Juan Rodr=EDguez = Rivera ,=20 Fernando Iglesias y Javier =C1lvarez ( Che ), no = confundir=20 con el de Oleiros, est=E1n siempre atentos a cualquier novedad. Recuerdo = que la=20 =FAltima vez que habl=E9 con ellos fue por un asunto de un champ=E1n al = rev=E9s. El=20 combinado lleva, adem=E1s, cuatro partes de zumo de ar=E1ndanos y un = poco de zumo de=20 lima a gusto del consumidor. Esta noche lo servir=E1n de forma gratuita = a los=20 clientes en la fiesta denominada Sex in the city -suena = fant=E1stico- y=20 regalar=E1n una coctelera muy original que sirve para preparar una sola=20 dosis-c=F3ctel de la jugosa novedad. Hay que agitar en=E9rgicamente y = servir fr=EDo.=20 =ABCuanto m=E1s fr=EDo entra mejor=BB, aclaran.

Uno de los grandes. Paco Roncero , director y = jefe de=20 cocina del casino de Madrid de la calle Alcal=E1, que salt=F3 al primer = plano de la=20 actualidad por preparar la cena para los pr=EDncipes y sus invitados la = noche=20 anterior a la boda de don Felipe y do=F1a Letizia, utiliz=F3 ayer los = fogones del=20 hotel NH Atl=E1ntico para preparar un almuerzo para empresarios con = motivo del 30=20 aniversario de la cadena que preside Gabriele Burgio . =ABAunque = no vengo=20 mucho por aqu=ED, me gusta todo. El pulpo, el marisco... Todo=BB, resume = Roncero,=20 que lleva unos a=F1os viajando por todo el mundo sin parar. =ABMa=F1ana = -por hoy- me=20 voy a la Republicana Dominicana y acabamos de inaugurar un bar de tapas=20 tradicional en el hotel Paseo del Prado de Madrid con el nombre de En = Estado=20 Puro=BB, comenta este referente internacional de la gastronom=EDa. Ayer = apost=F3 por=20 la tradici=F3n, pero no dej=F3 de sorprender a los invitados con su = tortilla del=20 siglo XXI, que se come con cuchara, la croqueta l=EDquida, o los platos = preparados=20 con nitr=F3geno l=EDquido, que no dejan a nadie indiferente. =ABLa gente = disfrut=F3 y se=20 lo pas=F3 bien, que es lo importante=BB, destaca.

Veinte bodegas de albari=F1o presentaron ayer en el = hotel Hesperia=20 Finisterre sus vinos del 2007, en lo que supone su primera = presentaci=F3n oficial=20 orientada al consumidor final. =ABEs la quinta ocasi=F3n en la historia = en la que se=20 califica como excelente una a=F1ada=BB, destacaron Jos=E9 Ram=F3n = Meiri=F1o y=20 Ram=F3n Huidobro , presidente y gerente de la denominaci=F3n de = origen R=EDas=20 Baixas. Est=E1n muy satisfechos porque el cr=EDtico Robert Parker = , el m=E1s=20 temido y alabado, destac=F3 47 vinos de la denominaci=F3n con notas = entre los 85 y=20 93 puntos e incluye, por primera vez, vinos tintos de esta zona = productiva.=20 Gotas de aguardiente. Sigo con temas con alcohol para = contarles=20 que m=E1s de ochenta bodegas, algunas de ellas de las R=EDas Baixas, = estar=E1n=20 presentes en la cuarta edici=F3n del Sal=F3n de Vinos y Aguardientes = de=20 Galicia, que tendr=E1 lugar en Palexco del 2 al 8 de agosto, siendo = los dos=20 primeros para profesionales. Los anteriores cert=E1menes fueron en = oto=F1o y en esta=20 ocasi=F3n los organizadores prefirieron trasladarlo a la semana = grande para=20 captar m=E1s p=FAblico, aunque es posible que sea menor la presencia de=20 especialistas. La presentaci=F3n se celebr=F3 ayer y corri=F3 a cargo = del concejal de=20 Fiestas, Carlos Gonz=E1lez Garc=E9s, el secretario de la = delegaci=F3n de la=20 Conseller=EDa de Medio Rural, Mario Lage , el presidente de la = Asociaci=F3n=20 Provincial de Hosteler=EDa, H=E9ctor Ca=F1ete , y Luis = Paad=EDn , experto=20 sumiller y gran conocedor del sector, que es el director del sal=F3n. = Entre tantos=20 c=F3cteles neoyorquinos, cocina de dise=F1o, albari=F1os de no s=E9 = cuantas bodegas=20 diferentes y los vinos y aguardientes m=E1s destacados de Galicia ya = empiezo a=20 estar un poco mareado.

ENVIAR NOTICIA  =20

EL PULSO DE LA CiUDAD = C=F3ctel=20 neoyorquino, vi=F1os galegos y cocina de dise=F1o

* Campos obligatorios=20
Enviar a:
=20
Tus datos:
=20 = =20 =20

ENVIAR NOTICIA  =20

Su env=EDo se ha realizado correctamente

En breve los contactos recibir=E1n en su correo electr=F3nico un = enlace a la=20 noticia

Gracias por usar nuestros servicios

Cerrar=20

ENVIAR NOTICIA  =20

Se ha producido un error
No se ha podido realizar el env=EDo =

Revise sus datos y vuelva a=20 intentarlo

Si se vuelve a producir un error, es posible que el servicio est=E1=20 moment=E1neamente no disponible. Int=E9ntelo m=E1s tarde.

Disculpe las molestias. Gracias por usar nuestros = servicios=20

Cerrar=20

LVDG_PUBLICIDAD_MIVA:
=0A=
=
3D""=20=20
Roncero, rodeado del equipo del hotel, muestra un = plato
Autor de la imagen: | = FERM=CDN CORROCHANO=20
=
3D""=20=20
Roncero, rodeado del equipo del hotel, muestra un = plato
Autor de la imagen: | = FERM=CDN CORROCHANO=20
=
3D""=20=20
La denominaci=F3n de origen R=EDas Baixas = promociona sus=20 vinos
Autor de la imagen: | F. = CORROCHANO=20
=
3D""=20=20
Paad=EDn, Gonz=E1lez Garc=E9s, Lage y Ca=F1ete = presentaron el sal=F3n=20 del vino
Autor de la imagen: | SILA = DOSIL=20
 
LVDG_PUBLICIDAD:robapaginas:edi.coruna
Cargando
LVDG_PUBLICIDAD_EXTERNOS:08A
LVDG_PUBLICIDAD_EXTERNOS:08B
LVDG_PUBLICIDAD_EXTERNOS:08C
LVDG_PUBLICIDAD_EXTERNOS:08D
LVDG_PUBLICIDAD_EXTERNOS:08E
LVDG_PUBLICIDAD:10:edi.coruna
Otros enlaces de inter=E9s:
= =A9=20 Copyright LA VOZ DE GALICIA S.A.
Pol=EDgono de Sab=F3n, Arteixo, A = CORU=D1A=20 (Espa=F1a)

R.M. de A Coru=F1a: tomo 2438 del Archivo, = Secci=F3n General,=20 folio 114 vto., hoja C-2141. CIF: A-15000649.
3Dojd=20 ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://publicidadinternet.lavozdegalicia.es/adview.php?what=zone:1351&target=_blank&n=adda1f64 R0lGODlhAQABAIAAAAQCBAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.lavozdegalicia.es/default/2008/03/13/00121205413701711217121/Foto/cabecera_mini.gif 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 hmZ4hmiYhmq4hmzYhm74hj8YBAA7 ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://media.lavozdegalicia.es/default/2008/07/18/0012_2380227/Foto/h18c12f2.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCADfATwDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDitufx pQMGlw2Ow/Gk+YN2rhuejcVe/wBakANMAOc5HPtTwGx979KlgOCmnqhIyBxUYz/eNSqxVSNz89cO RUsAxS4qMg46n8zSBRxmlYCbAoyB3FR7Fz0H5UpRdp+UdPSlYZJuT+8v50odP7wpijgcdqcPpSsA 7enrS719/wAqaBS4paAO3j0b8qA49D+VJjjNHPaloA7f7GguKbzRz6UaBYkiceYu9Rtzz82P6Gi4 dTIfKVQvb5if6Co+aSgLDWLsOdo703knHFKc0IPmP0qgsLhiOo/Kk+YHr+lP60hFK4DDn+9+lNwc /eNSEU3FVcBnI/ib86Tn+8351Jim7adwI9oA4z+dRSr8h6/nVgj2qOUfIaqL1AzoR++/A/zq9AuI 8nuapxf67j3/AJir8P8Aqk9+a9K/7tHBU+Nla7Xa6t6giq2OCR3FaMqeZGQev9apBMKQe2Qa0pO6 sZs6O0fOn2x7mPFPYZUjrVbTG3aXCM8qxWpmyGYd65JaNmsdiM8EUpYuM45pd3HNMZuOtSUNI9TS ce9ITSAnHBp2JuVcUwj56lxxTSPn/CuW52ABzS4pwFLjmlcYwCngGjFPApNgNxTcHNSYoxSuMQUv XilxTto4pXGRpyo+lPHSkRcKKcBSYhRS8UAUuKQAMUoAoxilwaQCEUmKfikwB2oAbt9qMe1Pzj1r N1PUfs58mDBlxyf7v/16qEXN2QpSUVdl7bx0poA3dO1c61xdsPOaaTrgHcasWmqSxyAXBMidM9xW 7w0ktGZKvFs3MYoxQjK6B0YFWGQfWg1zm40ioWuIFODNGCO24VRl8/UpmSL5YEOBn+I+tWI9DjEe XZicc10Roq3vMyc23oiz1GRz7iiqUaSWE6R790Ejbef4TV3GaiUeVlRlcULkE+lRSD5TUo6YzTJl /dnmpW5RloMTH/gX8xWhEuI1B7DFZ44kH1b+laQIwcdq9JP3Ejgq/GxuD+tU5MefIB04P6Ve681R uf3dyDj5XBGferpO0jNmjpUu2MruHDZAq2zqTyefrXOyuyKrocHioRcy95GP1pzo3le41Kx0xB61 E8qKfmYD61zv2mUdHb8GNNa5mbgu351HsbdQ5rnRNLGCB5iAnpzTDLGD/rE/76rmiSepJopcnmO6 OkxQR8w+hp200MpyPxrzjuDFOwACTwB1JoAJrOyL6/kilJ8qEHCjuQcc04QchSlYufaLYnHnx5/3 hU2OBUQsbXbgQpn6VDEPs1ysS/6mVtoGfut2x9aqVNW0BSfUuYoxTiqr94gfjSqqseGB+hrKzLuN 4pQRRKu2owaVikODYGPejNNqpqE8iIsUAPmP3HYVUY8zshSkoq7LzPGmPMkRM/3mAqRQCAQQQe4O awU0a8ly23GecuetMiN5pU+5kYLn5lP3Wrf6uraPUw9s+q0OkCml2mpY2SRA6EFWGQadgVhymvMR BCelIYzjpVtFXFNkUYNU4C5int5xWDBbi81G4aXJCuf510EjBOeuKy4bW4KF7d/LcyMzD+VXRVrk 1NbEV1o1w5XyWHlgfdJ6VQu9PltY97kEZxxXSLcXCW53okkgbGB8oPvWVftPcW8nmwCPBGADnnNd EZMylCJNpG46cmegYgVafJUgdwaq24MFskJI+QHOD1OeadvGetck1eTaOiCtFINHwLdRjlcg/XNb bMiQFm2qo6kmsG0iDNMN33mLjPbNXFi8qNoSWZcBsHnvXTvqZJPYq6ptntjJBklCGBxUmSCQever LpF9mZYgBkdhiqasSOVOcelZ1dkaQ3HhjmlkUlDn0pFDE8KanZWMZGw9PUVitypMwycSL7uR+q1p kD7v51mSgrKueCJCf/Qa0z3PvXfH4UcVX42L61SvF3wk91YEVbkJGMd/SoLn/UN/t4FNGZQkJaBu OVIqqetXHXCv/tA1TbrXUyQPHSm0poFS9RiUUpHFAFTYDsQid/50yYIAuMdfX2p8SqJZRgcMD09h VjjFefy6HZcpLtyPmFUIbdkvLt1wGf5l9s5rUJAzVaRAHEgOOcGiOmg3qRQG7iDec5kyPlHpVMrc s6yyuWAYOAfY1euZHLjaCFUZ3A1FArTqkEnBBxnvitNRWQxpdzEnJJpyv0IBzVaQ+UxVyF2nBzTk kUjKsD9OaycTdF5rjeBlefXNNDH0qsGOBUgas3ELErPgc461BLu+227AEg5HA/HFSABlKntg1JFw 4OOP881UHyyJmrqxatrzzNweGRNoyCTwaoahK1zayAwOgXkE/Wr00nzqpCgYP3jjNJ5pa0ZiAwTo ezYro21Mmror6czxiOFiQQu1h71qqMckk1lWoInVjywyTWgZWHVawTRbRaR8H1+tSmdmjKbY8Y7R rn88ZqrHJlhxV62t2mUngADJLHAArSKb2M3ZbmZcgeU5KgsBkVRtpHRWJyWBOa3JrIygjs3FZ+oW i2kqNGG/eEsc96pQa1F7RbIrLOAI8heuQ27r+FOk/fzxoOATmlWMuwSBHeRuAoGT+Fb2m6IyQvLc 8TOMKB/AP8aahcUqljA1AbLgBcAFR0FVCxrS1i1mhcb1BAJAYdDWakckr7Y0LH2rnlH3rG8WuW5M iqqxyHvnP0zUxTMu9WUqRjGOakttLnbAnJCE/dHP60htzG5V90bA4IJreMWlqZOSbsiOTbEjgZLE ZJPWo5oZIGKupHoccEVetbQSzJGFZgzAMQCeK6F4FbqMeg60/Z86E6nKzjYTz17VcIPl8dMVvPpl q4IaFCT14rNvdFeMb7AnPeMnr9KzdBrUftoyOUkXM4H+039KsSSkROcnIXP4g0l+oiuFAx96TP5i oJ3It/XJANdSVqaMJazJFWa4T5iwGcjnGKjaAwtkOeDkgnINTWcg2gSDg9CM02RZGkzzjtz/AExW PNK+5vyxtsRSBdjbemD/ACrPrQAfy5SSNgHH41QIxzXZCXNG5zSjyuwnak6Cl7UhPFMkKv2dg1zC ZAcDdgVn5rptNwNOh2jHy/1NS2BaL7bh/dVP8xS+YW6Usu1pv+AfyP8A9erNrbGUcDCjvXnJtuyO xtJXZSyTmlNpO1vLJ5TbUGcY5PNbcNrFCwIXBPRquRpsfPrW0aP8zMpVexxEqSHDRvweoIyDUBll 0+F5jy8nyoSPTqfoK6290dZLnzLfYiNy6njB9QB61jeLLQC808RR4RlKBccDBz/WrUWtxOaa0OWk kknlLyMXdu570iO8TBkyD/OuxtzYfJCEiBxxmPr+NQXtrpzM8ZESSMM8cEUc62sP2b3uZdvKJoFf HzdGHvUyj2qlZo0QkVlxhsZ7ZFXUJY7VBJJwAK55qz0OqDbimyVMAHNWrOH7RJ5frwcVesdFLgG5 OM/wKf5mtu3tYbf5I41VepwKcKLerMqlZLRHOIDnA+dcnB70ohaeZISjMrNjaP510MmkwSyFonaM k5OFyP8A61W7azjtYtgYMxOScYJrflMefQ5aKyktrhxKjBeQrdiKfgeYu4cetdJLEGOG5rNvtN6t CdrDnHY1nKjbYpVb7lMIgkJXlc8VqWah4RuAx1/AVlRBmlEJUrJu2ken+RW6gCxsF6DgfQU6V9RV H0GqnmZH944/CkvdOivBskD4Q/KyHpxirUMZCgnoTVpEBf2zgVuY3M/SdHismeYszuwxlhjA9K0Z MKOOp6D0qQtufHYdBVdjuJb14H0o2C99WULqBZkZWUMrdQe9UrW1itR5ccYC1tqgKD6VFJAqt0yc cj2pW6jvpYqqq+lSiEEAEKT9Af50zAyR/dOKsqO9MQ1V+Xbkgeg4psg2k471OAM1HIMkEjnpTERA Y/rTe34VEt7C8ojXfuOOq465/wAMVNkcCgDiPFdsbbVI3UYjm3MPr3rLkXMGR2Oa67xbbefpJlAy 8B3j6d/0rk4Srblz94U7Xgyr6khZfNiCoAMZ+boamVpFJUH5OhPrVPDwuivkqV3DHpk/4VZDs+Nq kccZNcrVjpUrq5WnOC8a9OtUOSoNb9vprXUFzgDzEQFSTj5ien5ZrFubae1+SeJ4z2yOD+NdVFrl OepfmIiv8qYRzTs8U04rVpGaEHWun0of8S2HPof5muYrqdNH/Ett8f3f6ms7ajJgrPdRIOr5X+Vd LHCsSBEHyqOKxLZd19aYH/LX+hroByv4VyYZe7c3rvVIZtGNp+6f0pHieaJoVnkgfIIeMgHg1MAC uacgwwOCcdMda6TAUjccenWsjXIN4gkP3YnyeK0bW6E9ssphmid85idcOvPcVT1edltGUx8vwoJq ZaoqLszHe1gjPmqoDtio5bWKW4dnUbgc+/NOO50wpG4dVIzmmRo6ydACxAChcHNY6nVdWGz2gawu GQfMreaMD86f4XiEl1LKwz5agD6n/wCsK3I9OMMWM7ty7Wz3qvpNg2mJLHIQ25sgj096vl1Rn7T3 WjZVQGOOmBUkIHnjI4wahicFmGfQ1ND/AK9foa0MC2EXGcdaNijoBSgEdPyqnq95FY2D3MrFFBAO Op9h70CHzFS3HJXg4FMYhgGweOCCMVxdxrWuXLbrRI7aLPyjALY9yaLfX9Xs5IxqSrNCW+Z8cgfh U8yuXyO17HSw2obWWm9ICPxzwfyzVmM8EGktnUl5wdyyBcEemP8A69ICDMQvQ4qkrEt3NAcQ/kam Xk5qseYio/u1OpKxJJjKkDn0piHyYVcE9eSfQVjpd3vmsfLWVCvAGMKzHhQR2APJ9jWjKFlZd5dR nKsrYINRbSk3mCVJOScunzAegI/rQBaXCrnPQ8VBKeA1ET71bnqaWToR68igCsRiX/eqwFFV2OWX 1q0DkDIxQAAYFMnHycHB7GnFgKqX92lnZyXE3McfPFADGiyf9bJ05wQB+lKp+dj7CuGm8X37xuI1 jjds4ZR90fj1qKx8VajbzZuWFxGeoYAH8CKBnd3ESzW7xtyGBB/GuVs9FitseYfMdeMkYA+grS03 xPZX0wt2DwO33d+MMfTNXZocSn0akCMTUtMcJHeJhkVArrj7oycH9aqR7TIqxRksxwAB1NdhEo8n BAPtVOw0mG1vZrlSWDcRKf4B3rOULs1jUSWoWth9ktcE5djukPvjtTZIFkQq6hlbqCMg1oSt8pUe lVyO1WlZGTd3c5698NW02Wt28hz2Ayv5Vz95pNzZyBZsAN91h0avQgtUtZtBd2EiAfOo3J9RVXaK ja+pwX2Vs8sK1be/aC3jiESnYMZz1qnRUc7OpUYdjq9EBkvGckkRr+p4/wAa2WOFPqKzvDkW20kl P8b4H0H/AOutF+GI9amhHlgjnrO82SKwxx0p6hnHoPUVWgJaFQeoJB/A1diI8vFbMyQqwoGAHGe9 Q31kt5C0ZO11OUb0P+FWSPmX3HWnkTeemI0KMp3tu5B7ADvnmpsO5yLWUzSFFifzVOCqjJrT07SG icT3PMg+6uc4Nb+3PXgegpEAY78cdFFJRsU5tkZjwoA7CmmBSORn61O/JxQw4471RJl3MDwN5kJx jsehHpU1nKJAsgyOcEHtUl3g8DoFqnYnazpno2aANcHrXM+MXZpdOh58su8jehwBj+ddIOT9Rmuf 8S27G6tZ8thVZcdgfWplsVBXkipZrEy9RkdR3qverHPviXDdjx0oihEbhkzuc5JyT2oEMe0SgLvI wTjmubQ7NS74TnMmkJG+C8DtGT3wDx/OtFjtvCM/KR09KreHrYRi4kC7VkYfjV25C+euOuOfpmuq LujikrOxdi5wKtW+BA6NyFJ/KqUBq0CQpBPDUyRqAbdhO5Ox7ihlwPnAI/vVDKNrb1/GnBY3Gen1 NADEdRM6Kc7efzqaZQ0eR9RVQKPtOUBwRjJPUZqzhth2gED3oAz5X2MmRwWwfarytlRVKVS7cjAP WrMGfKBZtx+lAAzVyXjSSWeSysYmAEpZmz7dP611j965nxPEBdWE4Ulg7L19s0nsVHcx7bRLcNl2 Zx6dKs3Ok28u3Z8hUY4Gcii0vn8wJLCArHAYA06e5vDcMkSrsXGBtxn8a59b7nWuW2xzWoWxs7rY GzxkEV6Bps32vR7a4Y5Z0AYk9xwf5VzGrWbTQISv70EYx6HrW5o4Ftp6WaEkIxbcT1zWsJXVjnqQ s79DZUEfKpPPX2qTcABt7VHHkoGI+8OKcOelWZjX5BPtVK781lPkySRMAQDsJBJxg/hzV5vunkdK hYkduKAI4pTtJZwx3nGBjjtUp5BqKY4ZB6n+lSLzTEcTqtv9n1GaMcKW3L9DzVTFb/iiDbJBOB94 FD/Mf1rBxWbPQpvmimdLYaubKEQtCHQc8Ng81NJr8DHiCUH6isOZQRn3FPVUGDgZ+lRTq+7axhUo +9e51mnzC4tkuAu0SDcAetXI/mhDDqMg1z/h+8kZ2tpADEoJU9156fSt+LIjbHfmt1LmVznlHldm ToxYAjnA61azWbazbbkxlwd3Qf4Vpc44/U0EiSfcx609eFzjHoKiLFepBoDlsk9KdguOP3tuQCaZ K/7xEBBPWo5cGQP/ABAYBqGMk3YORjacD8aAuSS/NJj/AGapRrsuEfnDcGtDHzO3oMVTjw2V9DSK NCJsqM9qqagomhZSexxUyZ8s44OTTPLwx3HJ9TTsI5Uq+4KCMjqGFKQyAhyD6ADFWtaj8i5ilHCy rjI9R/8AWqvYx/ar2KLJO88knoO/6VzONnY64zvG5uabbSQ2iNGARKgYjGCDUMkNylyZHG4H0PQZ 9K2sBVGBgAYA9BStg8Hke9dCVjlbuypbuPN2E98VZuFMahlOf6ioZ4QvzxjkdQKRJ1lRVB5UYIPW gRNkOoI5Bqu7LHkM2FNLEsqMV2gxnkc4IqRo8nJQHPGcUroLMih/0iU7GyBxkHFXzbtt4Zc+magh jMR+ZDj2FSmYduPYii6HYzLvEc65Xax6gd/epoX/AHY+lVNTuA9yi4xtGTS282QFAyx9KYi0x45r E1ya3Nvhpk82NwQuec//AKq1yrupBJGR261Sm0azCM/kBmI+8xJNS9dC42Wpz0kiKUOMnPQdTU8U uCWdcc5Cn0qtf2/k3Bt5CQy/dPTcvapIY444w0n3u9YNWOuMrq4+6yWyRnHQVbtoLlFWSSMc9dhy BT9MtHv7pZNpMEbAlvU5+6K6V1VFcBRjd6VpBW1MKsruxQhbMcfsvP504jDbl6elK0SseFwfagJI OPvD8jV3MbAwBU8dqrj5DjOVPY1Oy7ucnj0OKh4Yc4NUIguY8GJgxwr5H+FPTdngZFUdaaaGwZ4J SpjIbgZ4HasEa1qTKpF0V+iAH+VKUkty4wclodFrlu02kzYXJQBx+H/1s1xtW7q/vnCiS5uJQwIK huPyqnl/+eMv5Vm5J6nVSXIrMvyDKHHpQ7/6OHz271P5bYHK1UlQi3lTOSp4rlpO7saVB1nq7aWs MnkrKsynzFJwcZ7Hsa7uI/uAfVQf0rzS++aW1hGCAi9PevS0IFuBnAHFdlL4Tiq/EU2hd7m2dDgp JvJ9un9a3FAYYIHFYzPt1KGEZAeJiCR6EVpRtLGf3i7h6r/hWhkTGNfSkbjt0p4ljKl9w2+tQtO7 nEK4H95hQFiG5kCAdiar20jNegY42kH2qfyixLMTk9Sep/wpYows6lRxg0BYnfiB2/vGstZRHdyK MAnHU4FadxxEi+pqhJETJvAz60IZetmzGS2MMccHP0pX/Wm2SqYHUetPA+bB78fjTEVrzTUv4WjY 7XT5o29D7+1UNK0meC5FxKpiMZI2/wB49/wregYL97A7ZNSuhI+Xn0NS4pu5Sm0rELA5w3XrUZbr 7CppCFTd3qpKSkLE9SpJqiRZJClsT3bH4U23iRcykZdu/oKiU+ZD8xxmm/avs07K+TE2CDjlTUyT toOLLM9yIDGq43yNhR/M1lyXtw2p+RNOPIbOCvHParlzbwahCNsmdh+V0PKn/PY1kyaPeKxKPHJz 1YkfpXLPm6G8OXqW7q8vIpoFtX3bwd4boKm0/VxdSeTMqhz90joayf7KvieVHJydzitDT9KeCcT3 Eu9wSQqjjJ7k/wCFKDkOSjY0Z4Y51KuMg9x1H0NZGkw3Vve3UV0wfbIEjYDG5cZz+orRv7+002Ey 3s6xDHCn7zfQdTVexuWuxDdFCnmlWVT2B6fpXRC5jI1wqkgjvSFVMeGHGcGl3DII6Mcj+tAIIceu D+fFWSZWsaPHfwFfuSpzHJ3H/wBasWPwzft/rbmEL6hiePpiuzjw+5e4XFRCMltvp1osmCk1oSQQ pbwpHAgVEGAPQVFJy0nt839KssflPtxVXIEvPQqQaARDHgtzU+1ducZJ/lVdkKuR/n0p0cm78OKL DuRzJtYtzjvVPKN3wfyrTYArWfOiocMuc9DQBm6mSIGUgkEHpXKuMSYrptUkhtofMlbaM4HPU+gr nLvHnqV4DdKxq7o3o7MUczx/Q549qmKioofmmyewJqwRzXJN6nTHYnqFlHmv7qM1ZC1DcRtuyOjL j8aik/eKlsQ6DYmTxNG4G9YlMuD7cAfmRXdxQNwWXjOcZrgtO1mTS4/tUEETAMI5EkY7uPQ12Gke JLLUoC43QMpwyvzg+xFelHbU4Ki97QHTdrcZcfOIXOR0GSoFa8J3RgisaO8trrVJvssokaKIBsAj GTx1+laETq42MdvORk4zVGZYeIFsgAH1FMdvKI3sB+PWhokB+6zfU5o2xr1iUe+KBEfmxsSeWx6D gU22kkluS23CBeBTiQy7duVHpSRXkFtnzQylj1AyDQMlnOWHsKqXKyBBJGcbSc+9OudasThQGeQn CrsOfrVaS987fHEoJI2lj/D9KaB6FzTZDLFIx4IbHP0qb7zyITyfmHsaqabgF4ySAefrVpyqSK6g 8HGe1USSRbWXdj5u4qVVI+6Nv0NRYKyFkUkHk47VKCWXHINAhsu4gEnIJ5rLvriYmSNYBs5XeWwO mc/j0rQlk+VlGcgZ5FVGhiSMYRd3XJGTQMi0591vGDzhQPyqSdQXBIyDwapWL7J5Ezxk7f61fm5i z3BzQBQNtJHM01tnPcCrQmuQoPz/AEK5rnvE+sXmlXVuLOZV8xCzoyBu/B5/GsxfG2rKuNlqfcxn /Gk7D1OxlursD5cD3MYrlvEus6pA8cUd7LEGB3BPkz09KzrnxZrM/H2lYh/0zjA/XrWPPPNcymW4 leSQ9Wc5NToNXJIElvr+KN3Z5JpFTcxySScV6giBLVdgG1eB/s46V5z4dGfEOn/9d0P616cEASRM cbjigGSytgZA6kOP61HFNncCeQp/Q5p0jFbIMoyyjpVGGdXO4cZBUj0qhGr8yTKy8seR7+1TI6v8 w7n8qqo5e2jcdQMfiDSygq5Kk7JBuU0rBctyZCcY696z7h/LXeF3cEYziriyeZaq+evWqd1E0gUr NIhXJ+Qjkd6ARWiu2e3Dzp5fO0Et9OD70scnylh3JplxbxIWlEYZjzubk/magtXzbPjqHNAF8N8y ++RSXCF4jtIDY4JGQDUUb7nQd8/0qywJQ56BaQzzTUbi5nunN45MiEqQeAvsB2p27zkg29VUg1e8 Z2Zt9SS5QfJdKCf98YB/pVKwjwp9RxWVW1kb0b3LECcvnqQBU2002DBZwPapsVwzfvHXHYuJGSOl PMIdSGHBqe3iLpmphbtmrjDQhyOS8QwJbrbiMbQ+7dz1xin+F92+4x0+Xj86s+MITHHaE92f/wBl rP8ADRxqTDJx5Z4/KuuPwHM3+8Op0GIx6nqDMPvCI/UYI/nXUQxBlw2CMd6xtKA+1Sj+9GP0P/16 3IThQvetIaozmrMa0Cocq5THoaNsz/Kh4/vkYqYq7HcrAexFKPNHUBvpVmZV+zqM72LEevSsvU3G 5Y1x8mScVtOjtkbDz71zOo3H7+bfFKNp2qVXcCB7iom9DSmtTNk/e3ahhxjNbcSCNBtGAB0FYNvc xz3TBFYeXgNuGOT7V0MJzGDVwVkTUd2DXElqGniVX2qTtbocVVvdcvLm0Pkxwx5XggEn9at4HIPI rEVDBLJbN/CflPqO1RWckk0aUFGTaZ1mlXa3VjFOOkiAkeh7j86nJzwDXOaHP9mieOTd5W8kFf4T /nFb6OrqDGQR65rSLurmUlZ2HuB5TDPaqMj7mz2q24UcliW9qzpJiSVVNxHpTJMieeS2vl2gHBJI PQg0t94pSzt2xY7pOi5k+XP5ZpNQjcTLI+MtxgdsVz+qwGWznuCcLC6KPdjnj8qwcpKdkdCjHk5m Y95dTXt09zcuXkc5J/oPaoKKKszCiiigDQ0B9mvWLek6/wA69Y+XG5hw3tXj+nyeVqFtIP4ZVP6i vaIVbYNgLL2yKaEyowBjKp93ng1w9xqT6Z4quY5ifs8xTP8As/KMN/jXockJIP7kZ9q8v8bxyR+I n8xSu6JCM9xjH9DTYkd9p8hYNEDy3zL6bh2/Gr8YE0BXHTkD09RXHeHL5/sMAmPzoAM/+gn8uK6y KYBjKuNrYbGfzoEyGOYRK8Um4DdkEdqJnJXcgyc1Pe25J86MZVhyKqBQE+9wRyPSnYVyvJM5QjHB 7GqCv5MzKPuyc4PY1oToN3y1l3a/NikykaFkxefJAGFOADWg3CEe1Zum4VyzE52gZxWiCGUkUgMX xXaC60NzxugZZQT2HQ/of0rk7ZwXmeMZUkY7Zr0OaITQyxMMh0ZcHvkVwljYlkxv2quNxHUms6i0 ubUpa2HW4Cs7txngcVN5iep/I1IyKqgY4HQVGRzXnTabO1LQ1bG4fyyFjU49Xx/Srgml4/dxf99n /Csyx+UNnvV0yY6da6afwmM9zC8XySTWdnI6oo3uBtJPp/hWBpt39ivUmK5Xow9jW14mbNhbrn7s 0grmq6IaxOeekjtZr6S1eO5hnEe6NlD9ucEfnirFr4qu4gpuIYZgDkkfIf8ACuJju540KCQlCMbW 5GPoa1LeTfArewzVRViaklLU6i58bOIX+y2ChweDLJuGPoMVlR+NtVuH8syQQk9PLiH8zmsmUYwR 0qhcgRzq6jAPNWQjr4dT1C5YyXV9N5KkZ+baCfTjFXpM+XxjpXKxM7oEJzEDux71rvfeTb2hYb1d PnGecCspptmsGkhsCIupSqp+dlUsPSt+HiICsC1l36lsBDoUJSQdSM5wfpW9A+UC1pDYie5J1H0r N1geW8M4HQ7WPoO361prwcVHdxrIAjAEEYOa0lHmVjOMuV3Oa1K+u9NkhubZlMbHDIy5BNa+jeIr C9Kx3GLO4PHJ+Rj7Ht+NZypHe6e8Lnch6MP0NcxJG0MjRSDDLwa56U+h0Voa83c9Uux9jt5bm5bZ FEu5mOelYg8TaQoJ86Xk5wIDXLJcX91oksEtzO9rbMpjQnKg+n/1u1ZbD8DWzkYqJ2U+p22olpbV ZRHHkEyAAk8dOa5bUb55l+zDAiSQucfxMeMn6Ditq1tzBpCKByw3N+PNczKrrKyyDDZ5Fc8XebZv NcsEhlFFFamQUUUUAWtMuEtdStriQZSOQMfp617FpNyHgAJ3D1rxOvQfBurxtbxQNLukRNrqeDgd D78YpoTO7dRj/CvK/Hc0cvirZJkRxRojEdcdT/OvU4yHhyrdK8j8b4Piq8KggZUH0zsGabEjobGy jazSaCQNGR8pXkYrW0mcjdbufukMhrgfDustpV5iXc1pJxInXH+0Pf8AnXoMFv5t5BJaMkiMvmKw PBWmmJo0RM0LFVO5OoHtTZFikBZOp/Sp5IWdRuGT/C9VmiZQRg9c0xGdLktwpxVORDJJ6VpuGVuQ TnpVKYtuwB+CjmoZSHQ74nBDHnjI6GtNAT0qjFlolG0k4B+hq/BOyttdGUeuKaQNiiNg4JHeuNt/ lmuUOBtcj9TXcMfnxnvXD3Y26tehQFUynArOtpTbNKPxobKQelQ05jUeTmvK3PSsWopSowMVIJm6 5qoCRS7jVqbRLiUPEDbrWP8A66sfzUVgVta4cwJ/v/0rFrvoO8DirK0wrV04gwAdhkGsqr2lv+8d D3Ga2Riy9NgKevFZNz1WtWf5Yzn0rLnGQp9aYkaVid0KH2xVuRx5MOTkxoVOfrVDTSfKUfXH51dm XKHjv0pWHexFpUqw6hFI/Cs+w+2Rj+tdfAhFcvpFsk94pduIMOV9W7V1UTYHXNUiWybo1MnON2c4 VcmnlWLAAE8im3TxQRyyTzRxKRgF2x2rQgxLSNYotijao6D0rM1y0WWP7XAVYx/LKFOcfWreoXHk 2Exib5gqoCPU/wD66wbO4a0kLKAyMNroTwwrihF7nfUkl7rNizhVPDO5ioMrOeT1OcD+VYlvAZtQ W3PeTBPtT7SQ+aUA+TkqM5208XAtLm4kUN5zLiMjouRyfrVuTcreRlGKUb+Z1LKpQqMccVzOt24X bMvBzsb+lQWF7JZTBxloz99f7w/xq5rkqtbIIzlHYMpPUrg/yqFFxkaOanFmHRRRWxzhRRRQAU+G aS3mWWF2jkQ5VlOCKZRQB3mheI9SuLUK92dw4J2Ln+Vcz4mWX+2JJZnZ/OAkBJ/A/wAquaDEYlDN nLc4qbxJatPapcIOYc5HqprJS942cPc2OXrrfAOrzwazBp0jbreUttB/gO0nj646VyVS2txLaXUV zbtsliYOp9CK1MWe67jGTvPytyP9mopVz0Ofoa43R/Hq3l2kGrQxWyMOJoycBvcHOB9KfB4ujXVJ xIsj6e5BVtvzIQOWA9D6df5VTkluTGEnsdJJFvyGcis+7g2jhia0leKa3Se3kWSORcq6nIYVR1Bh HGXboBk0mCI7UnbjOPSry5IGea4+yvLuIs8cx2sSdjDcPyNM1TxdfWbLDDFbFiMktGT+maUZplSp tHbKoOcVwd7Pv1mRs/K8sg+uP/1VnDXL/VJGS8uHYHnYvyrj6CmXVykE0JJyyPlkB9qKq5oNIKb5 ZJs1GxUZNZz6wCCUgPpy1RSamyMF8oZA5GTwa85Yep2O914dzWA4pe1YA1G7P/LY/kKP7Rusf65v yFX9Vn3RH1mPY2p7OO9/dyMy4GQV9f8AJrOn0G4TJgkSUen3TVcajdKdyzvkDrS/2nekH/SpCcet aQpVYbNGU6lOWrRWe1njk8t4mD+g5qa1imhuEdo2C5wcirMd9C2Wbekp68A7jTGvAeEckng5HSut I52W7jHl5rLmT5Aa1VImtkkHRh+tUposRMvUnn6UyUOsnXyEAwCpOavysRESMZAzWRYHEjrj+HP6 1rHrt7YxQgZVttQk02dp4lWQOMFW6VZPiy9B/cwW6fVS38zWXdoUVh27VTobKRrPr+p3bhJ711Q9 kwg/Smlka2m3SKzFT1bJJrLpVOO+KzlHmerNIy5Vaxry6glxZSR872eNunBwuD/Ks9n74zTUPNNJ 6/WqSsQ5N7klvKsbFmODSzSiaZnUHbwBVc9aljGB9aSir3Kc3y8ouKbNK7xxxscrHnb+NPJGKhbq TVMhMbRRRSGFFFFABTkALqD0JptKCQQR1FAHYWSbXIYYb/Cljv7fUZZrOMlhsIzjg9qhtb1TbR3R +6pJfjs3/wBesdi2k6gzhQ6SK2za2OD0/KsVE6XKyTMxlKsVPUHBpKUkkkk5JpK2OYKcDj3ptFAG zoHiG60WUoMy2jnLwk/qp7Gumv8AVBqARYA6ROATvGGPtXD2jQpMJJ9xC8gAZyauJrEouxJtAiB+ 57fWpld6IuFlqzpVjA4Fc/4gtysqXGchhsPsRW/FLvj3jkYzVXWbX7TZPs4ZfnHvisouzNpq6OUR irAqSD6ipTxknn1561CKnP3Tn0roRysZ5zAbVAUdcChp5HOSR+QpmB6UYqblcp//2Q== ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://media.lavozdegalicia.es/default/2008/07/18/0012_2380228/Foto/h18c12f1.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCAGyATwDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwC6tSCo UNSqaRTHinCmilFMQ+lpKWgYUopKcKQwxRilooAQjIxSLwcU+gjuKAKdxGQ2RVYjB5NaUi7l5qm6 YPQVLRSI84AZR0qYojsJXOQBwKi57ninRdCnPHTNQDRFfIbuB06cce1a+hXRutNjZ/vp8rj3FZvT gUaRIbTVZLcnCXA3r9R1oT1ItoaOrxboPMA5Tmsvd8q/SugmUPGynoRXPziOIBFJ3KcGlNdQiODU qnk1ArU8N1qbjJS1KGqEtQHqhFgNS7qgD0u+qETbqfAA86q33ep+lVt1JvOcBsZ4zTA27e6kuJ4h 5Zit5G2rKxx+VXZNVh097iO5mR5lYYPTIx6e1cv4kuLiz0tsKCYht2A/Kc/xCuFm1F7i8VogVbrn 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 ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://media.lavozdegalicia.es/default/2008/07/18/0012_2380229/Foto/h18c12f3.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCADfATwDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDmx7tS 5QdWrO/ta3B/d2xY/SkOsTD7lrt9zx/SuH2cux18yNMFewY/QVKssn/PNyPXFYbaxeHp5Sj/AHv/ AK9QvqV23W4QfRf/AK1NUZCc0dKZCvU4qGURSHOdreo6GsPT7iae/iV5pHBJyuOOhreEecbR25+t RNOm7NlRakiJZYIx+8u0H5Cg6hYJ9653fQ/4VnalpUqRz3qiNokxuBJDDJA6d+TWOJMdET8s1tGl zK9zJ1LOx0x1nTl6bm/A03/hILcf6q2dv+A//XrnfOk7ED6KBTka5mbbGZXY9lyT+lV7BC9ob7eI Lk/6uyfHucf0qGTW9QPSKJM/3n/+vU9pojf8I5fPqGl6gL0sn2SQRsQxJ5GPwPPv9Ko2/hTxBcge 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 ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://media.lavozdegalicia.es/default/2008/07/18/0012_2380230/Foto/h18c12f4.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCACrATwDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDK129T UNZ+1xqyrLMSA3UfKP8ACmw9Kl8R2cdjrptYS3lxzYXccnG0H+tRQDgVJmLdOBHbr/tyH81TH8jX Y2vjiCO2iiNjKSiBSQ4wcCuLukPm27Z+X94Me4C/416JZeFdJks4JHilLPGrE+awySPrTBX6FX/h OYP+fCX/AL7H+FL/AMJvB/z4yf8AfY/wrSHhXSB/yxl/7/N/jS/8IvpP/PCT/v8AN/jQO0jM/wCE 3i/58n/77/8ArUh8bJ2sm/77/wDrVq/8IxpP/PB/+/rf40v/AAjOk/8APu3/AH9b/GjULSMj/hNh /wA+J/77/wDrUn/Can/nxP8A33/9atj/AIRrSf8An3b/AL+N/jS/8I3pP/Psf+/jf40BaRjf8Jqf +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 f//Z ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.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_0000_01C8F7AF.97787310 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://lavozdegalicia.ojdinteractiva.com/cgi-bin/ivw/CP/coruna R0lGODlhAQABAIAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://media.lavozdegalicia.es/img/empty.gif R0lGODlhAQABAJEAAP///////////wAAACH5BAEHAAIALAAAAAABAAEAAAICVAEAOw== ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Location: http://secure-uk.imrworldwide.com/cgi-bin/m?ci=es-lavozgal&cg=0&cc=1 R0lGODlhAQABAPAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOwA= ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/img/pub.gif) no-repeat = 3px center } .mod OBJECT { DISPLAY: block! important } .a660 .pub { WIDTH: 100% } UNKNOWN { WIDTH: auto! important } .a330 .pub { PADDING-LEFT: 7px; BACKGROUND: = url(http://media.lavozdegalicia.es/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 } .p15 { OVERFLOW: hidden; WIDTH: 728px; HEIGHT: 50px } .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 { =09 } .m05 { WIDTH: 300px; HEIGHT: 90px } .m07 { WIDTH: 140px; HEIGHT: 140px } .p04 { =09 } .pubpie { BACKGROUND: url(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-x left bottom; = PADDING-BOTTOM: 6px } .pubcont .auto { BORDER-TOP-WIDTH: 1px; BACKGROUND: = url(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/img/pubh.gif) no-repeat = center top; MARGIN: 0px 0px 0px 3px; PADDING-TOP: 10px } UNKNOWN { 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(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/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 } .m06 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: = 0px; PADDING-TOP: 0px; HEIGHT: 155px } .m06 H2 { PADDING-RIGHT: 7px; PADDING-LEFT: 7px; FONT-WEIGHT: normal; FONT-SIZE: = 10px; PADDING-BOTTOM: 3px; PADDING-TOP: 7px } .m06 DIV { PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px; PADDING-TOP: 0px } .m06 DIV.caja { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px; WIDTH: 155px; PADDING-TOP: 0px } .m06 DIV.brd { BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: = #ccc 1px solid; WIDTH: 153px; BORDER-BOTTOM: #ccc 1px solid } .m06 DIV.xunta06 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: = 0px; MARGIN: 0px 0px 5px; OVERFLOW: hidden; WIDTH: 490px! important; = PADDING-TOP: 0px; HEIGHT: 125px } .m06 DIV.xunta06 DL DT { PADDING-BOTTOM: 2px } .m06 DIV.xunta06 DL DD { PADDING-RIGHT: 0px; PADDING-LEFT: 10px; BACKGROUND: = url(http://media.lavozdegalicia.es/img/f_dot_rel.gif) no-repeat 0px 4px; = PADDING-BOTTOM: 2px; PADDING-TOP: 2px } .m06 DIV.brd { WIDTH: 488px! important } .m06 DIV.xunta06 DIV { MARGIN: 0px } .m06 DIV.xunta06 .caja { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px = 4px; WIDTH: 231px! important; PADDING-TOP: 0px } .m06 DIV.caja IMG { MARGIN: 7px } .m06 DIV.xunta06 DIV IMG { MARGIN: 0px 7px 7px } .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(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-x left bottom; = PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; LIST-STYLE-TYPE: = none } .ptrcn LI A { FONT-SIZE: 11px } .prtcoru .rot { BACKGROUND-IMAGE: = url(http://media.lavozdegalicia.es/img/logos/lg_prtcoru.gif) } .consorcio .rot { BACKGROUND-IMAGE: = url(http://media.lavozdegalicia.es/img/logos/lg_consorcio.gif) } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/img/icos/rss_ico.gif) no-repeat right = 2px } .enlaces H2 .boton { MARGIN-TOP: 10px; FONT-SIZE: 10px } .copy { BACKGROUND: url(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/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 } UNKNOWN { WIDTH: 450px } UL.comercial LI A { CLEAR: right; FLOAT: right } .cmvocento_ico { BACKGROUND: url(http://media.lavozdegalicia.es/img/icos/cmvocento.gif) = no-repeat left top; WIDTH: 60px; HEIGHT: 18px } .cvoz_ico { BACKGROUND: url(http://media.lavozdegalicia.es/img/icos/cvoz.gif) = no-repeat left top; WIDTH: 60px; HEIGHT: 18px } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-x left bottom; = PADDING-BOTTOM: 4px; MARGIN: 7px; WIDTH: 100%; PADDING-TOP: 21px; = POSITION: relative; TEXT-ALIGN: left } UNKNOWN { 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(http://media.lavozdegalicia.es/img/icos/vol.gif) } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/1202835993967578199/LVDG_estilos_cliches.css .elecciones { BACKGROUND: = url(http://media.lavozdegalicia.es/img/cliches/elecciones.gif) = no-repeat; WIDTH: 225px; HEIGHT: 35px } .elecciones SMALL { VISIBILITY: hidden } .olimpiadas { BACKGROUND: = url(http://media.lavozdegalicia.es/default/2008/08/01/0012121758040050846= 4168/Foto/cliche_olimpiadas.gif) no-repeat; WIDTH: 225px; HEIGHT: 34px } .olimpiadas SMALL { VISIBILITY: hidden } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/1205422036720533891/LVDG_estilos_generales_130308.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 } UNKNOWN { 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; DISPLAY: inline; PADDING-LEFT: 0px; = FONT-SIZE: 12px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; = PADDING-TOP: 0px } FIELDSET { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; = FONT-SIZE: 12px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; = PADDING-TOP: 0px } LEGEND { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; = FONT-SIZE: 12px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; = PADDING-TOP: 0px } SELECT { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; = FONT-SIZE: 12px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; = PADDING-TOP: 0px } INPUT { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; = FONT-SIZE: 12px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; = PADDING-TOP: 0px } LABEL { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: inline; 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 } UNKNOWN { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 2px; = PADDING-TOP: 2px } UNKNOWN { 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 } UNKNOWN { 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 } .area { =09 } .auto { WIDTH: 100% } UNKNOWN { 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(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = right top } .act .a660 .noticias { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = 410px top } .not { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-x = left top } .crp { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = 658px top } .col2 { BACKGROUND: url(http://media.lavozdegalicia.es/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 } UNKNOWN { 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 } .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 } UNKNOWN { 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(http://media.lavozdegalicia.es/img/ant.gif) } .nav .sig { PADDING-RIGHT: 14px; BACKGROUND-POSITION: right center; = BACKGROUND-IMAGE: url(http://media.lavozdegalicia.es/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 } UNKNOWN { 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 } UNKNOWN { 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 } .titulogrande { FONT-SIZE: 50px } .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 } UNKNOWN { 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(http://media.lavozdegalicia.es/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 } UNKNOWN { PADDING-LEFT: 0px; MARGIN-LEFT: 4px } .op { LIST-STYLE-IMAGE: url(http://media.lavozdegalicia.es/img/icos/op.gif)! = important } .op EM { COLOR: #cc0000 } .dc { LIST-STYLE-IMAGE: url(http://media.lavozdegalicia.es/img/icos/dc.gif)! = important } .ft { LIST-STYLE-IMAGE: url(http://media.lavozdegalicia.es/img/icos/ft.gif)! = important } .vd { LIST-STYLE-IMAGE: url(http://media.lavozdegalicia.es/img/icos/vd.gif)! = important } .pdf { LIST-STYLE-IMAGE: url(http://media.lavozdegalicia.es/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 } UNKNOWN { MARGIN-LEFT: 3px } UNKNOWN { 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 } .i298 IMG { WIDTH: 298px } .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(http://media.lavozdegalicia.es/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 } UNKNOWN { 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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { POSITION: fixed; HEIGHT: 100% } .porter { Z-INDEX: 5001; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; = TEXT-ALIGN: center } UNKNOWN { 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(http://media.lavozdegalicia.es/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; = PADDING-TOP: 7px; HEIGHT: auto; max-height: 400px } .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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { 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 } UNKNOWN { 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(http://media.lavozdegalicia.es/img/f_li.gif) no-repeat left center; = FLOAT: left; WIDTH: 49.9%; COLOR: #8c8266 } UNKNOWN { PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; = LIST-STYLE-TYPE: square } .tvgtucoche { BACKGROUND-IMAGE: = url(http://media.lavozdegalicia.es/img/logos/lg_tvgtcoche.gif) } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-x left bottom; = PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; LIST-STYLE-TYPE: = none } .ptrcn LI A { FONT-SIZE: 11px } .prtcoru .rot { BACKGROUND-IMAGE: = url(http://media.lavozdegalicia.es/img/logos/lg_prtcoru.gif) } .consorcio .rot { BACKGROUND-IMAGE: = url(http://media.lavozdegalicia.es/img/logos/lg_consorcio.gif) } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { 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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css Content-Transfer-Encoding: 7bit Content-Location: http://www.lavozdegalicia.es/ficheros/4C88D3620A80E0AB015D8D75B9C5111B/LVDG_estilos_caja_encuentros.css .encuentros .invitado { FONT-WEIGHT: bolder } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/img/paso_01.gif) } .paso_02 { BACKGROUND-IMAGE: url(http://media.lavozdegalicia.es/img/paso_02.gif) } .paso_03 { BACKGROUND-IMAGE: url(http://media.lavozdegalicia.es/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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/DB579D200A80E0AB01A3AA2CAA225BF5/LVDG_estilos_edicion.css .ed01 .act .noticias { BORDER-BOTTOM-WIDTH: 1px } .ed01 .act .a242 .not .titulo { FONT-WEIGHT: normal; FONT-SIZE: 17px } .ed01 .act .info { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = 487px top } .ed01 .act .info .a495 { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = 240px top } .ed01 .act .info { BORDER-TOP-WIDTH: 1px } .ed01 .info .a495 .not { MARGIN-LEFT: 7px; MARGIN-RIGHT: 7px } .ed01 .info .a495 .a253 .not { MARGIN-RIGHT: 14px } .ed01 .info .a253 .titulo { FONT-WEIGHT: bolder; FONT-SIZE: 14px } .ed01 .info .a242 .not .titulo { FONT-WEIGHT: bolder; FONT-SIZE: 14px } .ed01 .info .titulo { FONT-WEIGHT: normal } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/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 { BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium = none; BORDER-BOTTOM: medium none } .info .a660 { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = right top } .auto { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; MARGIN: 7px = 0px; PADDING-TOP: 7px } .img .relimg { MARGIN: 0px 3px } .info .sub_info { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-x = left bottom } .info .sub_info .a418 { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = 410px top; MARGIN: 7px 0px } .info .sub_info .a418 .auto { BACKGROUND: url(http://media.lavozdegalicia.es/img/f_dot.gif) repeat-y = 205px top } .info .sub_info .a242 { MARGIN: 7px 0px } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-css 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(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { 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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { 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 } UNKNOWN { 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 } UNKNOWN { 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(http://media.lavozdegalicia.es/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_0000_01C8F7AF.97787310 Content-Type: application/x-css Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/1205422220475162240/LVDG_estilos_sector_cabecero_mini_130308.css .cab { BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN-BOTTOM: 0px; BORDER-LEFT: = 0px; BORDER-BOTTOM: 0px } UNKNOWN { 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(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/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 } UNKNOWN { WIDTH: auto } .cabecera { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 20px; = FLOAT: left; PADDING-BOTTOM: 0px; CURSOR: pointer; PADDING-TOP: 10px } UNKNOWN { =09 } .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; MARGIN-LEFT: 6px } .busca .google { PADDING-RIGHT: 44px; BACKGROUND: = url(http://media.lavozdegalicia.es/img/logos/lg_google.gif) no-repeat = right top; PADDING-BOTTOM: 0px; 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 } UNKNOWN { 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(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/img/f_cabecero_rojo.gif) = repeat-x right top; PADDING-BOTTOM: 0px; PADDING-TOP: 0px } UNKNOWN { 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(http://media.lavozdegalicia.es/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 } UNKNOWN { 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(http://media.lavozdegalicia.es/img/f_cabecero_rojo_pulsado.gif) = repeat-x right center; COLOR: #fff } .indx .mg_util A.pestana:hover { BACKGROUND: = url(http://media.lavozdegalicia.es/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_0000_01C8F7AF.97787310 Content-Type: application/x-css Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/76D3865F0A80B1A100AE997B485F3286/LVDG_estilos_detalle.css .det { BACKGROUND: url(http://media.lavozdegalicia.es/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(http://media.lavozdegalicia.es/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% } #texto P { FONT: 16px/145% Verdana, Arial, Helvetica, sans-serif; OVERFLOW: = hidden; WIDTH: 100% } .texto1 P { FONT-SIZE: 16px! important } .texto2 P { FONT-SIZE: 18px! important } .texto3 P { FONT-SIZE: 22px! important } .texto4 P { FONT-SIZE: 24px! important } .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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { HEIGHT: 26px } .utnot LI { CLEAR: none; FLOAT: left } .utnot SPAN { DISPLAY: none } .utnot EM { FONT-SIZE: 11px; 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 } UNKNOWN { 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 } .vote A { CLEAR: none; PADDING-RIGHT: 0px; DISPLAY: block! important; = PADDING-LEFT: 0px; FONT-SIZE: 13px; FLOAT: left; PADDING-BOTTOM: 0px; = MARGIN: 0px 3px; WIDTH: 20px; LINE-HEIGHT: 20px; PADDING-TOP: 0px; = BACKGROUND-REPEAT: no-repeat; HEIGHT: 18px } .vote A:hover { TEXT-DECORATION: none! important } 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 { MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px } A.tmas { 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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { 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_0000_01C8F7AF.97787310 Content-Type: application/x-css 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 } UNKNOWN { POSITION: fixed; HEIGHT: 100% } .porter { Z-INDEX: 5001; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; = TEXT-ALIGN: center } UNKNOWN { 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(http://media.lavozdegalicia.es/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; = PADDING-TOP: 7px; HEIGHT: auto; max-height: 400px } .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_0000_01C8F7AF.97787310 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/558124BE0A80E0AB012F41A585B45977/LVDG_script.js var G_SECCIONADO=3Dfalse;=0A= function ObjetoListaInteractiva(){=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= this.getIdentificador=3DgetIdentificador;=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= //devuelve el id del objeto en funci=F3n de la posici=F3n que ocupa=0A= function getIdentificador(posicion){=0A= //restamos 1 a la posicion, porque empieza en 0 y pediremos del 1 al n=0A= //actualizamos la posicion que estamos mostramos=0A= this.posicion=3Dposicion-1;=0A= return this.list[posicion-1];=0A= =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= function llamarOJD(seccion){=0A= var seccionado=3D"0"=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= if (G_SECCIONADO){=0A= seccionado=3Dseccion;=0A= }=0A= = document.getElementById("ojd").src=3D"//secure-uk.imrworldwide.com/cgi-bi= n/m?ci=3Des-lavozgal&cg=3D"+ seccionado +"&cc=3D1";=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= var seccionado=3D"0"=0A= if (document.getElementById("ojd")!=3Dnull){=0A= document.getElementById("ojd").src=3Durl;=0A= if (G_SECCIONADO){=0A= seccionado=3DtratarUrl(url);=0A= }=0A= = document.getElementById("ojd").src=3D"//secure-uk.imrworldwide.com/cgi-bi= n/m?ci=3Des-lavozgal&cg=3D" + seccionado + "&cc=3D1";=0A= }=0A= if (direccion=3D=3D"1"){=0A= this.mostrarSiguiente();=0A= }else {=0A= this.mostrarAnterior();=0A= }=0A= }=0A= =0A= =0A= function tratarUrl(m_url){=0A= var rdo=3Dm_url;=0A= var = pos1=3Dm_url.indexOf("http://lavozdegalicia.ojdinteractiva.com/cgi-bin/iv= w/CP/");=0A= var pos2 =3D m_url.indexOf("?r=3D");=0A= if (pos1!=3D-1) {=0A= rdo=3Dm_url.substring(56,pos2);=0A= } =0A= return rdo;=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= function hacerInvisibleTodos(id){=0A= capa =3D document.getElementById(id);=0A= cnjIMG =3D capa.getElementsByTagName('img');=0A= for (var i=3D0; i -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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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_0000_01C8F7AF.97787310 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/93D696360A80E09D0176E9C0E8D2FCCA/LVDG_fechasUtil.js /**=0A= =0A= =0A= =0A= exslt:date-time=0A= =0A= dates=0A= =0A= 2.0=0A= =0A= exslt:javascript=0A= =0A= =0A= =0A= Chris Bayes=0A= =0A= Implementation of EXSLT - Dates = (http://www.exslt.org/date)=0A= =0A= _validDuration is not 100%=0A= =0A= All timezone code.=0A= =0A= =0A= =0A= =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= =0A= =0A= add=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= addDuration=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= date=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dateTime=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dayAbbreviation=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dayInMonth=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dayInWeek=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dayInYear=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dayName=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= dayOfWeekInMonth=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= difference=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= duration=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= formatDate=0A= =0A= 1.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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 & Number) = July & 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= =0A= =0A= hourInDay=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= leapYear=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= minuteInHour=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= monthAbbreviation=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= monthInYear=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= monthName=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= parseDate=0A= =0A= 1.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= secondInMinute=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= seconds=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= sum=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= time=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= weekInMonth=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= weekInYear=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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= =0A= =0A= year=0A= =0A= 2.0=0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =0A= =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 & Number) = July & 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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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(" 3D\"\"\r\n");=0A= =0A= return true;=0A= } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-js 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= // = =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= // .=0A= //=0A= // =0A= // Author: Steffen Meschkat =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 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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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= // .=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 =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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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 '';=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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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=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 '';=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, '&').replace(//g, = '>');=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, '"');=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, '>');=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(/');=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('
') + '
';=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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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;i0) {=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 '(?:)((\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<" + "/script>");=0A= =0A= }=0A= =0A= var llamada =3D true;=0A= =0A= function OAS_AD(pos) {=0A= var m_OAS_url=3DOAS_url;=0A= if (pos=3D=3D"megabanner"){=0A= var size=3D'728x90,468x60';=0A= m_OAS_url+=3D';dcopt=3Dist';=0A= =0A= }else if (pos=3D=3D"robapaginas"){=0A= var size=3D'300x300,300x250,200x200';=0A= =0A= }else if (pos=3D=3D"pastilla_superior"){=0A= var size=3D'240x90';=0A= =0A= }else if (pos=3D=3D"ventana"){=0A= var size=3D'300x140';=0A= =0A= }else if (pos=3D=3D"skyscraper"){=0A= var size=3D'120x600,200x600';=0A= =0A= }else if (pos=3D=3D"megabanner_inf"){=0A= var size=3D'728x90,468x60';=0A= =0A= }else if (pos=3D=3D"pastilla_inferior"){=0A= var size=3D'240x45';=0A= =0A= }else if (pos=3D=3D"cintillo_superior"){=0A= var size=3D'640x30';=0A= var str_source =3D "/portada"; = ///www\.lavozdegalicia\.es/;=0A= var str_replace_with =3D "/cintillo.portada";=0A= m_OAS_url =3D = m_OAS_url.replace(str_source,str_replace_with); =0A= }else{=0A= var size=3D'0';=0A= }=0A= =0A= =0A= if(typeof(v_randomnumber)=3D=3D"undefined"){=0A= var v_randomnumber=3DMath.floor(Math.random()*10000000000)}=0A= =0A= if(typeof(v_tile)=3D=3D"undefined"){v_tile=3D1}else{v_tile++}=0A= document.write('<\/scr'+'ipt>');=0A= =0A= }=0A= // para compatiblidad de segmentacion antigua = [replace[segmentacion-vieja, por nuevo]=0A= function configuracionOAS(segmentacion) {=0A= var str_source =3D /www\.lavozdegalicia\.es/;=0A= var str_replace_with =3D "vocento.lavozdegalicia";=0A= if (segmentacion.indexOf('www.lavozdegalicia')!=3D-1)=0A= segmentacion =3D = segmentacion.replace(str_source,str_replace_with); =0A= if (llamada){ =0A= OAS_url =3D server_name_external + segmentacion;=0A= }=0A= llamada =3D false;=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) && = !(contenido.indexOf('-grey.gif') !=3D -1)) {=0A= caja.style.display =3D "block";=0A= } else {=0A= caja.innerHTML =3D "";=0A= caja.style.display =3D "none";=0A= }=0A= }=0A= }=0A= =0A= function phpads_deliverActiveX(content)=0A= {=0A= document.write(content); =0A= } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://www.lavozdegalicia.es/ficheros/1200937757704715300/LVDG_utiles.js // Aumentar y disminuir parrafos=0A= =0A= var tamanoParrafoDefecto =3D 16;=0A= var tamanoParrafo =3D tamanoParrafoDefecto;=0A= var tamanoParrafoMinimo =3D 16;=0A= var tamanoParrafoMaximo =3D 24;=0A= var cambioTamano;=0A= =0A= function aumentaParrafo(estilo, id) {=0A= if (tamanoParrafo < tamanoParrafoMaximo) {=0A= tamanoParrafo +=3D 2;=0A= cambioTamano =3D document.getElementById(id);=0A= =0A= var parrafos =3D cambioTamano.getElementsByTagName('p');=0A= for (var i=3D0; i tamanoParrafoMinimo) {=0A= tamanoParrafo -=3D 2;=0A= cambioTamano =3D document.getElementById(id);=0A= =0A= var parrafos =3D cambioTamano.getElementsByTagName('p');=0A= for (var i=3D0; ii){=0A= if (document.getElementById('star'+id_noticia+i)!=3Dnull){=0A= document.getElementById('star'+id_noticia+i).className=3D"star on";=0A= }else{=0A= document.getElementById('star'+i).className=3D"star on";=0A= }=0A= }else{=0A= if (document.getElementById('star'+id_noticia+i)!=3Dnull){=0A= document.getElementById('star'+id_noticia+i).className=3D"star";=0A= }else{=0A= document.getElementById('star'+i).className=3D"star";=0A= }=0A= }=0A= }=0A= if (document.getElementById('numeroVotos'+id_noticia)!=3Dnull){=0A= = document.getElementById('numeroVotos'+id_noticia).innerHTML=3D"("+numeroV= otos+" votos)";=0A= }else{=0A= document.getElementById('numeroVotos').innerHTML=3D"("+numeroVotos+" = votos)";=0A= }=0A= }=0A= }=0A= } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-js 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= // .=0A= //=0A= // [ECMA] ECMAScript Language Specification=0A= // = .=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 =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= // =0A= // =0A= // =0A= // =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_0000_01C8F7AF.97787310 Content-Type: application/x-js 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(""); } ------=_NextPart_000_0000_01C8F7AF.97787310 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: http://secure-uk.imrworldwide.com/v53.js // Netratings SiteCensus v53.js=0A= // COPYRIGHT 2007 Nielsen//Netratings=0A= =0A= function random()=0A= {=0A= random.seed =3D (random.seed*random.a + random.c) % random.m;=0A= return random.seed / random.m;=0A= }=0A= random.m=3D714025;=0A= random.a=3D4096;=0A= random.c=3D150889;=0A= random.seed =3D (new Date()).getTime()%random.m;=0A= =0A= function _rsEH(){}=0A= window.onerror=3D_rsEH;=0A= =0A= var _rsLP=3Dlocation.protocol.indexOf('https')>-1?'https:':'http:';=0A= var _rsND=3D_rsLP+_rsDN;=0A= var _rsRD=3D(new Date()).getTime();=0A= if (typeof(_rsCC)=3D=3D"undefined") {var _rsCC=3D1;}=0A= if (typeof(_rsDT)=3D=3D"undefined") {var _rsDT=3D0;}=0A= if (typeof(_rsSE)=3D=3D"undefined") {var _rsSE=3D0;}=0A= if (typeof(_rsSV)=3D=3D"undefined") {var _rsSV=3D"";}=0A= if (typeof(_rsSM)=3D=3D"undefined") {var _rsSM=3D0;}=0A= if (typeof(_rsSS)=3D=3D"undefined") {var _rsSS=3D1;}=0A= if (typeof(_rsUT)=3D=3D"undefined") {var _rsUT=3D0;}=0A= if (typeof(_rsMP)=3D=3D"undefined") {var _rsMP=3D1;}=0A= if (typeof(_rsIP)=3D=3D"undefined") {var _rsIP=3D0;}=0A= if (typeof(_rsCG)=3D=3D"undefined") {var _rsCG=3D0;}=0A= if (typeof(_rsTC)=3D=3D"undefined") {var _rsTC=3D500;}=0A= if (typeof(_rsSI)=3D=3D"undefined") {var = _rsSI=3Descape(window.location);}=0A= if (typeof(_rsCL)=3D=3D"undefined") {var _rsCL=3D0;}=0A= if (typeof(_rsCU)=3D=3D"undefined") {var _rsCU=3Dwindow.location;}=0A= if (typeof(_rsPLfl)=3D=3D"undefined") {var _rsPLfl=3D1; }=0A= if (typeof(_rsPLqt)=3D=3D"undefined") {var _rsPLqt=3D0; }=0A= if (typeof(_rsPLre)=3D=3D"undefined") {var _rsPLre=3D0; }=0A= if (typeof(_rsPLwm)=3D=3D"undefined") {var _rsPLwm=3D0; }=0A= if (typeof(_rsPLjj)=3D=3D"undefined") {var _rsPLjj=3D0; }=0A= if (typeof(_rsPLac)=3D=3D"undefined") {var _rsPLac=3D0; }=0A= if (typeof(_rsC0)=3D=3D"undefined") {var _rsC0;}=0A= if (typeof(_rsC1)=3D=3D"undefined") {var _rsC1;}=0A= if (typeof(_rsC2)=3D=3D"undefined") {var _rsC2;}=0A= if (typeof(_rsC3)=3D=3D"undefined") {var _rsC3;}=0A= if (typeof(_rsC4)=3D=3D"undefined") {var _rsC4;}=0A= if (typeof(_rsC5)=3D=3D"undefined") {var _rsC5;}=0A= if (typeof(_rsC6)=3D=3D"undefined") {var _rsC6;}=0A= if (typeof(_rsC7)=3D=3D"undefined") {var _rsC7;}=0A= if (typeof(_rsC8)=3D=3D"undefined") {var _rsC8;}=0A= if (typeof(_rsC9)=3D=3D"undefined") {var _rsC9;}=0A= =0A= function _rsPause(_rsMillis) {=0A= var _rsDate =3D new Date();=0A= var _rsCurrDate;=0A= =0A= do { =0A= _rsCurrDate =3D new Date(); =0A= } while(_rsCurrDate - _rsDate < _rsMillis);=0A= } =0A= =0A= function _rsRecordFactory(_rsClickUrl, _rsNewCG) {=0A= var _rsSrc =3D _rsND + 'cgi-bin/m?rnd=3D' + (new Date()).getTime();=0A= _rsSrc +=3D '&ci=3D' + _rsCI;=0A= _rsSrc +=3D '&cg=3D' + escape(_rsNewCG);=0A= _rsSrc +=3D '&cc=3D0';=0A= _rsSrc +=3D '&si=3D' + _rsCI + '-ctgw-' + escape(_rsClickUrl);=0A= _rsSrc +=3D '&rp=3D' + escape(window.location);=0A= if(_rsSrc.length > 2048) {=0A= _rsSrc =3D _rsSrc.substring(0, 2048);=0A= }=0A= return _rsSrc;=0A= }=0A= =0A= function _rsEvent(_rsClickUrl) {=0A= var _rsNewCG =3D _rsEvent.arguments.length > 1 ? _rsEvent.arguments[1] = : _rsCG;=0A= (new Image(1,1)).src =3D _rsRecordFactory(_rsClickUrl, _rsNewCG);=0A= }=0A= =0A= function _rsLinkTrack(_rsClickUrl) {=0A= =0A= var _rsNewCG =3D _rsLinkTrack.arguments.length > 1 ? = _rsLinkTrack.arguments[1] : _rsCG;=0A= var _rsClickImg =3D new Image(1,1);=0A= _rsClickImg.src =3D _rsRecordFactory(_rsClickUrl, _rsNewCG);=0A= _rsPause(_rsTC);=0A= }=0A= =0A= var _rsClickDst;=0A= function _rsClick(_rsClickUrl) {=0A= var _rsNewCG =3D _rsClick.arguments.length > 1 ? = _rsClick.arguments[1] : _rsCG;=0A= var _rsClickImg =3D new Image(1,1);=0A= _rsClickImg.src =3D _rsRecordFactory(_rsClickUrl, _rsNewCG);=0A= _rsClickDst =3D _rsClickUrl;=0A= setTimeout("window.location =3D _rsClickDst", _rsTC);=0A= }=0A= =0A= function _rsVerInfo(str, ct) {=0A= var p =3D 0;=0A= for(var i=3D0;i=3D0;i++) { p =3D str.indexOf('.', p+1); }=0A= if(p>0) {=0A= var v =3D str.charAt(p-1);=0A= return v.match(/\d+/g) ? v : 0;=0A= } else {=0A= return 0;=0A= }=0A= }=0A= =0A= function _rsPluginDetect() {=0A= var _rsPlugins =3D [];=0A= var _rsMT =3D navigator.mimeTypes; // -1 indicates unknown=0A= if(_rsMT && _rsMT.length > 0) {=0A= var k;=0A= if(_rsPLfl=3D=3D1) {=0A= _rsPlugins['FL']=3D-1;=0A= k =3D 'application/x-shockwave-flash';=0A= if(_rsMT[k] && _rsMT[k].enabledPlugin) {=0A= _rsPlugins['FL'] =3D _rsVerInfo(_rsMT[k].enabledPlugin.description, = 1);=0A= }=0A= }=0A= if(_rsPLqt=3D=3D1) {=0A= _rsPlugins['QT']=3D-1;=0A= k =3D 'video/quicktime';=0A= if(_rsMT[k] && _rsMT[k].enabledPlugin) {=0A= _rsPlugins['QT'] =3D _rsVerInfo(_rsMT[k].enabledPlugin.name, 1);=0A= }=0A= }=0A= if(_rsPLre=3D=3D1) {=0A= _rsPlugins['RE']=3D-1;=0A= k =3D 'audio/x-pn-realaudio-plugin';=0A= if(_rsMT[k] && _rsMT[k].enabledPlugin) {=0A= _rsPlugins['RE'] =3D 0;=0A= }=0A= }=0A= if(_rsPLwm=3D=3D1) {=0A= _rsPlugins['QT']=3D-1;=0A= var rt =3D true;=0A= if(window.GeckoActiveXObject) {=0A= try {=0A= var p =3D new GeckoActiveXObject("WMPlayer.OCX.7");=0A= _rsPlugins['WM'] =3D _rsVerInfo(p.versionInfo, 1);=0A= rt =3D false;=0A= } catch(e) {}=0A= } =0A= if(rt) {=0A= k =3D 'application/x-mplayer2';=0A= if(_rsMT[k] && _rsMT[k].enabledPlugin) {=0A= _rsPlugins['WM'] =3D 0;=0A= }=0A= }=0A= =0A= }=0A= if(_rsPLjj=3D=3D1) {=0A= _rsPlugins['JJ']=3D-1;=0A= k =3D 'application/x-java-applet';=0A= if(_rsMT[k] && _rsMT[k].enabledPlugin) {=0A= var v =3D _rsVerInfo(_rsMT[k].enabledPlugin.description, 2);=0A= _rsPlugins['JJ'] =3D (v =3D=3D 0 ? v : '1.'+v);=0A= }=0A= }=0A= if(_rsPLac=3D=3D1) {=0A= _rsPlugins['AC']=3D-1;=0A= k =3D 'application/pdf';=0A= if(_rsMT[k] && _rsMT[k].enabledPlugin) {=0A= _rsPlugins['AC'] =3D 0;=0A= }=0A= }=0A= } else if(window.ActiveXObject) {=0A= var _rsP;=0A= =0A= if(_rsPLfl=3D=3D1) {=0A= _rsPlugins['FL']=3D-1;=0A= for(var i=3D9;i>0;i--) {=0A= try {=0A= _rsP =3D new ActiveXObject('ShockwaveFlash.ShockwaveFlash.'+i);=0A= if(_rsP !=3D null) { _rsPlugins['FL'] =3D i; break; }=0A= } catch(e) {}=0A= }=0A= }=0A= if(_rsPLqt=3D=3D1) {=0A= _rsPlugins['QT']=3D-1;=0A= try {=0A= _rsP =3D new ActiveXObject('QuickTimeCheckObject.QuickTimeCheck.1');=0A= if(_rsP !=3D null) { _rsPlugins['QT'] =3D = parseInt(_rsP.QuickTimeVersion.toString(16).substring(0,1)); }=0A= } catch(e) {}=0A= }=0A= if(_rsPLre=3D=3D1) {=0A= _rsPlugins['RE']=3D-1;=0A= try {=0A= _rsP =3D new ActiveXObject('rmocx.RealPlayer G2 Control.1');=0A= if(_rsP !=3D null) { _rsPlugins['RE'] =3D 0; }=0A= } catch(e) {}=0A= }=0A= if(_rsPLwm=3D=3D1) {=0A= _rsPlugins['WM']=3D-1;=0A= try {=0A= _rsP =3D new ActiveXObject('WMPlayer.OCX.7');=0A= if(_rsP !=3D null) { _rsPlugins['WM'] =3D = _rsVerInfo(_rsP.versionInfo, 1); }=0A= } catch(e) {}=0A= }=0A= if(_rsPLjj=3D=3D1) {=0A= _rsPlugins['JJ']=3D-1;=0A= try {=0A= _rsP =3D new ActiveXObject('JavaPlugin');=0A= if(_rsP !=3D null) { _rsPlugins['JJ'] =3D 0; }=0A= } catch(e) {}=0A= }=0A= if(_rsPLac=3D=3D1) {=0A= _rsPlugins['AC']=3D-1;=0A= var rt =3D true;=0A= try {=0A= _rsP =3D new ActiveXObject('AcroPDF.PDF.1');=0A= if(_rsP !=3D null) { _rsPlugins['AC'] =3D = _rsVerInfo(_rsP.GetVersions(), 1); rt =3D false; }=0A= } catch(e) {}=0A= if(rt) {=0A= for(var i=3D6;i>2;i--) {=0A= try {=0A= _rsP =3D new ActiveXObject('PDF.PdfCtrl.'+i);=0A= if(_rsP !=3D null) { _rsPlugins['AC'] =3D i; break; }=0A= } catch(e) {}=0A= }=0A= }=0A= }=0A= }=0A= return _rsPlugins;=0A= }=0A= =0A= function rsCi()=0A= {=0A= var _rsUA=3Dnavigator.appName+" "+navigator.appVersion;=0A= var _rsRUA=3Dnavigator.userAgent;=0A= var _rsWS=3Dwindow.screen;=0A= var _rsBV=3Dnavigator.appVersion.substring(0, 1);=0A= var _rsNN=3D(_rsUA.indexOf('Netscape'));=0A= var _rsMC=3D(_rsUA.indexOf('Mac'));=0A= var _rsIE=3D(_rsUA.indexOf('MSIE'));=0A= var _rsOP=3D(_rsRUA.indexOf('Opera'));=0A= var _rsIEV=3D(parseInt(_rsUA.substr(_rsIE+5)));=0A= var _rsRP=3Descape(document.referrer);=0A= var _rsSR;=0A= var _rsCD;=0A= var _rsLG;=0A= var _rsJE;=0A= var _rsCK;=0A= var _rsTZ;=0A= var _rsCT;=0A= var _rsHP;=0A= var _rsTL;=0A= var _rsSW;=0A= var _rsSH;=0A= var _rsFL;=0A= var _rsQT;=0A= var _rsRE;=0A= var _rsWM;=0A= var _rsJJ;=0A= var _rsAC;=0A= if (_rsMP=3D=3D0) {return;}=0A= _rsJE=3D(navigator.javaEnabled()=3D=3Dtrue)?"y":"n";=0A= if (_rsDT=3D=3D1) {=0A= _rsTL=3Descape(document.title);=0A= }=0A= if((_rsIE>0)||((_rsNN!=3D-1)&&(_rsBV >=3D5))) {=0A= _rsCK=3D(navigator.cookieEnabled=3D=3Dtrue)?"y":"n";=0A= }=0A= if((_rsIE>=3D0)&&(_rsIEV>=3D5)&&(_rsMC=3D=3D-1)&&(_rsOP=3D=3D-1)) {=0A= document.body.addBehavior("#default#clientCaps");=0A= _rsCT=3Ddocument.body.connectionType;=0A= document.body.addBehavior("#default#homePage");=0A= _rsHP=3D(document.body.isHomePage(location.href))?"y":"n";=0A= }=0A= var _rsD =3D new Date();=0A= _rsTZ =3D _rsD.getTimezoneOffset()/-60;=0A= if((typeof(_rsWS)!=3D"undefined")&&(_rsWS!=3Dnull)) {=0A= _rsSW=3D_rsWS.width;=0A= _rsSH=3D_rsWS.height;=0A= _rsCD=3D_rsWS.colorDepth;=0A= _rsSR=3D_rsSW+'x'+_rsSH;=0A= if((_rsNN!=3D-1)&&(_rsBV >=3D4)) {=0A= _rsCD=3D_rsWS.pixelDepth;=0A= }=0A= }=0A= if((_rsNN!=3D-1)&&(_rsBV >=3D4)||(_rsOP>=3D0)) {=0A= _rsLG=3Dnavigator.language;=0A= }=0A= if((_rsIE!=3D-1)&&(_rsBV >=3D4)&&(_rsOP=3D=3D-1)) {=0A= _rsLG=3Dnavigator.userLanguage;=0A= }=0A= var _rsPlugins =3D _rsPluginDetect();=0A= var _rsPR=3D"";=0A= _rsPR=3D'3D""/';=0A= document.write(_rsPR);=0A= }=0A= =0A= function _rsCLSendIt(_rsSrc, _rsDest, _rsTargetType, _rsClickName, = _rsClickValue) {=0A= var _rsCLData =3D _rsND+'cgi-bin/m?rnd=3D'+(new Date()).getTime();=0A= _rsCLData =3D _rsCLData+'&ci=3D'+_rsCI;=0A= _rsCLData =3D _rsCLData+'&cg=3D'+escape(_rsCG);=0A= _rsCLData =3D _rsCLData+'&cc=3D0';=0A= _rsCLData =3D _rsCLData+'&si=3D'+_rsCI+'-ctpo-'+escape(_rsDest);=0A= _rsCLData =3D _rsCLData+'&rp=3D'+escape(_rsSrc);=0A= _rsCLData =3D _rsCLData+'&tt=3D'+escape(_rsTargetType);=0A= _rsCLData =3D _rsCLData+'&cn=3D'+escape(_rsClickName);=0A= _rsCLData =3D _rsCLData+'&cv=3D'+escape(_rsClickValue);=0A= if(_rsCLData.length > 2048) {=0A= _rsCLData =3D _rsCLData.substring(0, 2048);=0A= }=0A= var _rsPx =3D new Image(1,1);=0A= _rsPx.src =3D _rsCLData;=0A= _rsPause(_rsTC);=0A= }=0A= function _rsCLSendALink(_rsALink) {=0A= var _rsName =3D _rsALink.innerHTML.toLowerCase().indexOf('img') > -1 ? = 'image' : 'text';=0A= _rsCLSendIt(_rsCU, _rsALink.href, _rsALink.tagName.toLowerCase(), = _rsName, _rsALink.innerHTML);=0A= }=0A= function _rsCLSendForm(_rsInput) {=0A= if(_rsInput.form =3D=3D undefined || _rsInput.form.action =3D=3D = undefined) {=0A= return;=0A= }=0A= =0A= if (_rsInput.type =3D=3D 'image') {=0A= var _rsValue =3D _rsInput.src;=0A= }=0A= else if (_rsInput.tagName =3D=3D 'BUTTON') {=0A= var _rsValue =3D = _rsInput.innerHTML.replace(/^\s+|\s+$/g, '').replace(/\s+/g, ' ');=0A= if (_rsValue =3D=3D "") _rsValue =3D _rsInput.value;=0A= }=0A= else {=0A= var _rsValue =3D _rsInput.value;=0A= }=0A= =0A= _rsCLSendIt(_rsCU, _rsInput.form.action, = _rsInput.form.tagName.toLowerCase(), _rsInput.type.toLowerCase(), = _rsValue);=0A= }=0A= function _rsCLCatchIt(e) {=0A= var _rsCurr =3D e ? e.target : window.event.srcElement;=0A= if ((_rsCurr.tagName =3D=3D 'INPUT' || _rsCurr.tagName =3D=3D 'BUTTON')=0A= && (_rsCurr.type =3D=3D 'image' || _rsCurr.type =3D=3D 'submit' || = _rsCurr.type =3D=3D 'button')) {=0A= _rsCLSendForm(_rsCurr);=0A= }=0A= else=0A= {=0A= do {=0A= if ((_rsCurr.tagName =3D=3D 'A') && (_rsCurr.href.length > 0)) {=0A= _rsCLSendALink(_rsCurr);=0A= break;=0A= }=0A= _rsCurr =3D _rsCurr.parentNode;=0A= } while (_rsCurr !=3D null && _rsCurr.tagName !=3D 'BODY')=0A= }=0A= }=0A= =0A= function _rsCLRegisterIt() {=0A= if(!document.getElementById) {=0A= return;=0A= }=0A= var _rsOld =3D document.body.onclick;=0A= if(_rsOld) {=0A= document.body.onclick =3D function () {=0A= _rsCLCatchIt();=0A= _rsOld();=0A= }=0A= }=0A= else {=0A= document.body.onclick =3D _rsCLCatchIt;=0A= }=0A= }=0A= =0A= // main=0A= if((_rsSE)&&(random() <=3D _rsSM)) {=0A= var _rsIM=3D'<\/scr'+'ipt>';=0A= document.write(_rsIM);=0A= }=0A= else {=0A= rsCi();=0A= }=0A= if(_rsCL=3D=3D1) {=0A= _rsCLRegisterIt();=0A= }=0A= ------=_NextPart_000_0000_01C8F7AF.97787310--