<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7787585216948583860</id><updated>2012-02-16T19:41:29.203-08:00</updated><title type='text'>Féile Joe Mháirtín</title><subtitle type='html'>Ceiliúradh ar sheanchas, ar dhúchas agus ar stair Inis Oírr.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://inisoirr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7787585216948583860/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://inisoirr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Seomra na Gaeilge</name><uri>http://www.blogger.com/profile/01120647644173282307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/-X61SgZxVaVg/TrkLYZyBRlI/AAAAAAAAAEc/XlKjGKG36fg/s220/IMG_1313.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7787585216948583860.post-2220775666782042189</id><published>2011-09-13T04:48:00.000-07:00</published><updated>2011-09-13T04:53:24.241-07:00</updated><title type='text'>Tuairisc ar Fhéile Joe Mháirtín 2011</title><content type='html'>&lt;div class="MsoBodyText" style="margin: 0cm 0cm 0pt;"&gt;&lt;div class="MsoBodyText" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="color: windowtext;"&gt;&lt;span style="font-size: large;"&gt;Tuairisc Ar Fhéile Joe Mháirtín 2011&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-IE"&gt;Tá deireadh tagtha anois le Féile Joe Mháirtín 2011, agus táimid sásta agus buíoch gur éirigh chomh maith sin lenár gcéad iarracht.&lt;/span&gt;&lt;span style="mso-ansi-language: EN-GB;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-IE"&gt;Luan 8ú Lúnasa:&amp;nbsp; Chuir&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt; muid &lt;/span&gt;&lt;span lang="EN-IE"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;tús maith leis an bhFéile ar maidin Dé Luain le léacht ó Bhrian Ó Catháin&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;,&lt;/span&gt;&lt;span lang="GA"&gt; &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Ollscoil na hÉireann Má Nuad, &lt;/span&gt;&lt;span lang="EN-IE"&gt;ar “Joe Mháirtín – an fear agus a chuid scéalaíochta”. Bhí an-chur síos ag Brian ar Joe Mháirtín agus fuair muid blaiseadh den scéalaíochta freisin le scéal beag gairid le Joe a bhí tógtha ar téip aige.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Tar éis an lóin thug Eoghan Póil na rannpháirtithe ar s&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;h&lt;/span&gt;&lt;span lang="EN-IE"&gt;iúl treoraithe timpeall an oileáin agus buíochas le Dia bhí an tráthnóna go breá agus iad ag fáil chuile eolas faoi Ch&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;n&lt;/span&gt;&lt;span lang="EN-IE"&gt;oc Raithní ón gCré-Umhaois, Dún Fhormna ón gClochaois, Caisleán Uí Bhriain agus an Túr Faire, Teampall Chaomháin, Tobar Éanna, Cill na Seacht n-Iníon, Teampall Ghobnait chomh maith le eolas faoi shaol an oileáin sa lá atá inniu ann.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Bhí ocras ar chuile dhuine am dinnéir agus tar éis an bhéile bhí neart ceoil acu i dTigh Ruairí.&lt;/span&gt;&lt;span style="mso-ansi-language: EN-GB;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-IE"&gt;Ar maidin Dé Máirt bhí tús deas réidh againn ag &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;breathnú&lt;/span&gt;&lt;span lang="EN-IE"&gt; ar scannán de chuid Mhic Dara Ó Curraidhín, an clár faisnéise “Máirtín Ó Direáin - An Charraig Stoite”.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Ansin tar éis an bhriseadh, bhí léacht b&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;h&lt;/span&gt;&lt;span lang="EN-IE"&gt;reá againn ar an Direánach ón scríbhneoir Tomás Mac Síom&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;ó&lt;/span&gt;&lt;span lang="EN-IE"&gt;in agus ceisteanna ag teacht go tiubh ón lucht éisteachta.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Tháinig scoláirí Choláiste Laic&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;h&lt;/span&gt;&lt;span lang="EN-IE"&gt;tín chuig imeachtaí na maidine agus bhí slua maith againn arís tráthnóna ag ceardlann damhsa ar an sean-nós le Emma &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Ó&lt;/span&gt;&lt;span lang="EN-IE"&gt; Suilleabháin.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Bhí idir sean agus óg ag baint torann as clár urláir an halla agus ag baint deatach as urláir na &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;d&lt;/span&gt;&lt;span lang="EN-IE"&gt;tithe tábhairne níos &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;deireanaí. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="EN-IE"&gt;Bhí turas eagraithe againn &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;go h&lt;/span&gt;&lt;span lang="EN-IE"&gt;Inis Meáin don C&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;h&lt;/span&gt;&lt;span lang="EN-IE"&gt;éadaoin ach faraor, de bharr droch aimsir&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;e&lt;/span&gt;&lt;span lang="EN-IE"&gt;, ní raibh na báid ag seoladh.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Mar sin shocraigh muid le Mairéad Uí Fhlatharta agus Bríd Uí Chonghaile&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt; cur síos a dhéanamh &lt;/span&gt;&lt;span lang="EN-IE"&gt;dúinn &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;ar an &lt;/span&gt;&lt;span lang="EN-IE"&gt;tionscnamh “Seanstíl Éadach”, taispeántas d’éadaí traidisiúnta a bhí ar siúl in amharclann Áras Éanna.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Ós rud é go bhfuil an sean ghléasadh&lt;/span&gt;&lt;span lang="EN-IE" style="mso-ansi-language: GA;"&gt; &lt;/span&gt;&lt;span lang="EN-IE"&gt;imithe uil&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;i&lt;/span&gt;&lt;span lang="EN-IE"&gt;g as an saol anois bhí sé an-fheiliúnach an taispeántas seo a bheith ar siúl le linn féile atá ag ceiliúradh seanchas agus sean traidisiúin an oileáin.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-GB;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;D’eagraigh &lt;/span&gt;&lt;span lang="EN-IE"&gt;muid ceardlann ansin le Brian Ó Catháin le iarracht a dhéanamh gaolta Joe Mháirtín a dhéanamh amach.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Le linn &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;na ceardlainne&lt;/span&gt;&lt;span lang="EN-IE"&gt; chuala muid go leor scéalta ó mhuintir an oileá&lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;i&lt;/span&gt;&lt;span lang="EN-IE"&gt;n faoin scéalaí agus roinn daoine a gcuimhní féin ar Joe Mháirtín le chéile.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Ba dheas an tráthnóna a bhí againn.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Tar éis an dinnéir oíche Dé Céadaoin suas linn arís ag amharclann Áras Éanna áit a raibh an seó stáitse “Slata Mara” ar siúl.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Dráma nua-scríofa le Máire Uí Mhaoláin é Slata Mara agus aisteoirí áitiúla atá páirteach san léiriú spraíúil seo de stair an oileáin.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Ar maidin Déardaoin, bhí an clár le n-athrú arís de bharr nár tháinig an t-eitleán. Thaispeáin muid scannán gairid ar maidin fhad is a bhí muid ag fanacht le Conchúr Ó Giollagáin, teacht ar an mbád. &lt;/span&gt;&lt;span lang="EN-IE"&gt;Phioc muid clár de chuid Radharc a déanadh sna caogaidí agus bhí plé ansin againn ar na hathraithe éagsúla atá tagtha ar an oileán ó shin.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Ina dhiaidh sin bhí léacht agus seiminéar Chonchúir againn faoin teideal ar “Ár gcuid den éagsúlacht: athraithe cultúrtha agus cosaint na mionteangacha”.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Is Ceannasaí ar Aonad na Pleanála Teanga in Acadamh na hOllscolaíochta Gaeilge in Ollscoil na hÉireann Gaillimh é Conchúr agus bhí ábhar an-tábhachtach agus tromchúiseach á phlé againn tar éis na léachta.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Neart ábhar smaoineamh anseo dúinn ar cá bhfuil muid maidir le ceist na teanga ar Inis Oírr.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Oíche Déardaoin bhí Aifreann le bheith sa teampall agus leac chuimneacháin do Joe Mháirtín le nochtú ach arís b’éigin an t-Aifreann a athrú go dtí an séipéal de bharr droch aimsire.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Tar éis an Aifrinn tháinig grúpa deas chomh fada leis an sean teach inár mhair an scéalaí.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Bhí an áit glanta amach agus stólta fada déanta as píosa adhmaid socraithe ann.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Thug muid an aibhléis aníos as an teach ba ghaire dúinn agus ansin bhí glór Joe Mháirtín le cloisteáil ag scéalaíocht arís sa sean teach.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;B’iontach speisialta an oíche a bhí ansin.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Agus muid ag druidim le deireadh na Féile, bhí Brian Ó Catháin arais arís chugainn le caint a thabhairt ar “Ghaeilge Inis Oírr”.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Bhí plé spraoiúil agus spéisiúl againn ar chuid de na frásaí agus focail atá le fáil ar an oileán seo.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Tar éis an sos bhí seoladh oifigiúil againn den leabhrán “Gaeilge Inis Oírr – Notaí do Chuairteoirí” le Pól Breathnach agus ansin léigh Pól agus an scríobhneoir Dara Ó Conaola sleachta óna saothair féin.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Le críoch a chuir leis an bhFéile, bhí ceardlann lúibíní againn le Fearghas MacLochlainn, imeacht eile a tharraing óg agus sean le chéile.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Thug Fearghas leargas maith dúinn ar cheird na lúibíní agus tar éis roinnt oibre i ngrúpaí beaga, m’anam go raibh lúibín dheas cumtha againn ag cur síos ar Fhéile Joe Mháirtín.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Chas muid an lúibín le chéile agus d’fhág muid slán ag ár gcairde nua a bhí ag déanamh ar bhád an tráthnóna.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;D’fhan roinnt de na cuairteoirí agus bhí neart ceoil agus craic níos deireanaí againn i dTigh Ned.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Tá muid fíor bhuíoch do na cainteoirí breatha Brian Ó Catháin, Tomás Mac Síomáin agus Conchúr Ó Giollagáin a thug léachtaí d’ardchaighdéan dúinn.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Níl a sárú le fáil!&amp;nbsp; &lt;/span&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Thug an triúr a gcuid táillí ar ais dúinn le go bhféadfadh muid ciste a thosnú don chéad bhliain eile. Tá muid fíor bhuíoch freisin do Mháirín Mhéiní in Inis Meáin ná raibh sásta glacadh le aon cheo ach an oiread mar gur bhraith sí gur pribhléid bheith páirteach sa bhféile.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Nár laga Dia thú a Mháirín, is trua nár éirigh linn dul chomh fada leat ach beidh lá eile ag an bPaorach!&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Tá muid fíor bhuíoch freisin d’ Fhearghas a chuir críoch dheas leis an bhFéile le Lúibín Fhéile Joe Mháirtín.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Ba cheart go mbeadh na véarsaí ag feabhsú chuile bhliain agus an Fhéile ag dul i bhfeabhais!&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Buíochas freisin le stiúrthóir Áras Éanna, Mairéad Ní Ghallachóir, a bhreathnaigh inár ndiaidh agus an teicneoir fuaime/soilse Ciarán Ó Conghaile.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Thug go leor eile ar an oileán cúnamh dúinn freisin idir comhairle, moltaí agus obair dheonach.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Buíochas speisialta do Sheán Éanna Ó Gríofa a shocraigh seanteach Joe Mháirtín, rud a lig dúinn an oíche scéalaíochta a bheith againn ar an teallach ansin.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span lang="GA" style="mso-ansi-language: GA;"&gt;Ní féidir dearmad a dhéanamh ach an oiread ar Fhoras na Gaeilge agus ar Údarás na Gaeltachta a rinne urraíocht ar an bhFéile.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Go raibh míle maith agaibh uilig.&lt;script type="text/javascript"&gt;﻿///////////    SEARCH    ///////////var g_aEng;var g_loc;// Initialize namespace, use existing contextvar searchshield = searchshield || {};searchshield.clockUrl;// constantssearchshield.SCORE_SS_SAFE  = 1;searchshield.SCORE_SS_CAUTION = 2;searchshield.SCORE_SS_WARNING = 3;searchshield.SCORE_SS_BLOCK  = 4;searchshield.SCORE_SS_VERISIGN = 7;searchshield.BLOCK_NONE  = 0;searchshield.BLOCK_NORMAL = 1;searchshield.BLOCK_PHISH = 2;searchshield.BLOCK_YAHOO = 3;searchshield.XPLCHECK_RESULT_SEV_NONE = 0;searchshield.XPLCHECK_RESULT_SEV_LOW = 1;searchshield.XPLCHECK_RESULT_SEV_MED = 2;searchshield.XPLCHECK_RESULT_SEV_BLOCK = 3;searchshield.VERISIGN_SPLIT_NOTEST  = 0;searchshield.VERISIGN_SPLIT_TESTA  = 1;searchshield.VERISIGN_SPLIT_TESTB  = 2;searchshield.needLivePhishCheck = false;searchshield.allowedSites = [];searchshield.enabled = function (doc){ var result = searchshield.avgCallFunc(doc, 'GetSearchEnabled'); return (result == '1' ? 1 : 0);};searchshield.init = function (doc){ if ((doc == null) || (doc.location == null) || (doc.location.href.search(/about:/) != -1))  return; if (!searchshield.enabled(doc))  return; if (!g_aEng)  g_aEng = searchshield.Search.prototype.detectEngine(doc.location.href); if (!g_aEng)  return; // init search object (not declared or is null) if (typeof xplSearch === 'undefined') {  // global  xplSearch = new searchshield.Search();  // reset the links added flag  xplSearch.new_links = false;  xplSearch.doc = doc;  xplSearch.href = xplSearch.doc.location.href;  xplSearch.uri = searchshield.parseLink(xplSearch.href);    xplSearch.engine = new searchshield[g_aEng+'SearchEngine'](xplSearch)  xplSearch.addEngine(xplSearch.engine);  searchshield.launch(doc); } if (doc.location.href != g_loc) {  g_loc = doc.location.href;  if ((typeof xplSearch !== 'undefined') &amp;&amp; (xplSearch != null))   searchshield.launch(doc); }};searchshield.launch = function (doc){ // IE specific check searchshield.quirksMode = (self.top.document.compatMode == 'BackCompat'); searchshield.docMode = parseInt(navigator.userAgent.split('MSIE')[1]);   if ((self === top) &amp;&amp; (self.document === doc)) {  if (!xplSearch.engine)   return;  // set verdict display config  xplSearch.engine.setRatingsConfig(doc);  // init the alert popup  searchshield.initPopupAlert(doc);  if (xplSearch.engine.type != 'inline')  {   // save function reference for memory clean up later   var fn = function(event){avglsflyover.hide(null)};   //hide flyover if these events occur   window.detachEvent('onscroll', fn);   window.attachEvent('onscroll', fn);   doc.detachEvent('onkeydown', fn);   doc.attachEvent('onkeydown', fn);  }    // only start monitor on top doc  searchshield.avgPageMonitor.start(doc); } return;};// search monitors and processors - doc is always top most documentsearchshield.avgPageMonitor = { previousUrl: null, start: function(doc){  searchshield.avgPageMonitor.stop();  searchshield.avgPageMonitor.process(doc);  searchshield.avgPageMonitor.timeoutID = window.setTimeout(function(){searchshield.avgPageMonitor.start(doc)}, 1000); }, process: function(doc){  var currentUrl = doc.location.href;  var refresh = 0;  if (this.previousUrl != currentUrl) {   this.previousUrl = currentUrl;   avgreport.scanResult(doc, currentUrl);   refresh = (xplSearch.engine.name == 'google') ? 1 : 0;  }  searchshield.avgProcessSearch(doc, refresh); }, stop: function(){  if (searchshield.avgPageMonitor.timeoutID)  {   window.clearTimeout(searchshield.avgPageMonitor.timeoutID);   delete searchshield.avgPageMonitor.timeoutID;  } }};searchshield.avgProcessSearch = function (doc, refresh){ // doc may be about:Tabs or about:Blank if (!doc)  return;   if (!searchshield.enabled(doc))  return; if (!searchshield.clockUrl)  searchshield.clockUrl = searchshield.avgCallFunc(doc, 'GetIconUrl', '0');   xplSearch.clockUrl = searchshield.clockUrl if (!xplSearch.engine)  return; // get result links xplSearch.links = []; var links = searchshield.avgGetSearchLinks(doc, xplSearch.engine, refresh); searchshield.needLivePhishCheck = false; for (var i=0; i &lt; links.length; i++) {  var isPhishing = searchshield.avglsCheckandUpdate(links[i]);  if (isPhishing)   searchshield.needLivePhishCheck = true; }  if (searchshield.needLivePhishCheck) {  var prev = '1';  if ( xplSearch.engine.type == 'inline' )   prev = '0';  searchshield.avgCallFunc(doc, 'GetPhishingResults', prev);  searchshield.needLivePhishCheck = false; } else if (links.length &gt; 0 &amp;&amp; xplSearch.engine.type != 'inline') {  searchshield.avgCallFunc(doc, 'FinalScanComplete'); }  // attach click handlers for popup alerts doc.body.detachEvent("onclick", searchshield.blockClick); doc.body.attachEvent("onclick", searchshield.blockClick);  doc.body.detachEvent("ondblclick", searchshield.blockClick); doc.body.attachEvent("ondblclick", searchshield.blockClick);};searchshield.avgGetSearchLinks = function (doc, engine, refresh){ if (!doc.body)  return; var alltags = doc.body.getElementsByTagName('a'); for (var i = 0; i &lt; alltags.length; i++) {  if ( !refresh )  { // no checked test if refreshing - google   if (alltags[i].getAttribute('avglschecked'))    continue;  }    // ignore linked resources  if (alltags[i].tagName == 'LINK')   continue;  // ignore in-page bookmarks and javascript  if ((!alltags[i].href) ||   (alltags[i].href.charAt(0) == '#') || // in-page bookmark   (alltags[i].href.indexOf("javascript") == 0))   continue;     // ignore verdicts  if (/XPLSS_/.test(alltags[i].id))   continue;  // ignore flyover anchors  if (/linkscanner|avgthreatlabs|avg\.com/.test(alltags[i].href))   continue;     var href = engine.includeLink(alltags[i]);  if (!href)   continue;    var newNode = engine.search.addLink(alltags[i], href);  engine.addImage(newNode, engine.search.clockUrl, false); }  // recursivesly process all frames var docFrames = doc.frames; if (docFrames &amp;&amp; engine.processFrames) {  for (var j = 0; j &lt; docFrames.length; j++)  {   var attr;   var frameDoc;   try {    attr = docFrames[j].frameElement.className;    frameDoc = docFrames[j].document;   }   catch(err){}   //TODO: make frame processing an engine function or at least make exclusions an engine property   // 'editable' frame it's probably a gmail reply   if (attr &amp;&amp; (attr.indexOf("editable") != -1))    continue;   if (frameDoc)    searchshield.avgGetSearchLinks(frameDoc, engine, 0);  } }  return engine.search.links;};searchshield.avglsCheckandUpdate = function (linkNode){ if (!xplSearch)  return; // element is the search result anchor var element = linkNode.element; var href = linkNode.href; var result = searchshield.avgCallFunc(xplSearch.doc, 'CheckSite', href, element.href); if (result == null)  return;  var resultParse = result.split('::'); var phishing  = resultParse[0];  // if phishing then rest of array does not exist. if (phishing == 1)  return true; if (resultParse.length &lt; 8)  return;  var hash   = resultParse[1]; var score   = resultParse[2]; var new_image = resultParse[3]; var alt_image = resultParse[4]; var flyover   = resultParse[5]; var click_thru= resultParse[6]; var altClick_thru = resultParse[7]; // iterate to get verdict anchor nextElem = element.nextSibling; while (nextElem) {  if (nextElem.nodeType == 1 &amp;&amp; nextElem.id &amp;&amp; (nextElem.id.indexOf("XPLSS_") != -1))   break;  nextElem = nextElem.nextSibling; }  return xplSearch.engine.updateImage(hash, xplSearch.searchHash, score, new_image, alt_image, flyover, click_thru, altClick_thru);};// click event handler - shows popup for links of caution and warning severitysearchshield.blockClick = function(event){ if (!event)  event = window.event;   // no action needed if click is not the left mouse button if (event.button != 0)  return;   var anchor = searchshield.getAnchorNode(event.srcElement,         function(node) {return ((node.tagName.charAt(0) == "H") ||              (node.tagName.charAt(0) == "D") ||              (node.tagName.charAt(0) == "T"))} );  if ((anchor == null) || (anchor.href == null))  return true;  // ignore if anchor is on an xpl verdict if (!!anchor.id) {  if (anchor.id.indexOf('LXPLSS_') == 0)   return true;    if (anchor.id.indexOf('XPLSS_INTR') == 0)  {   searchshield.allowedSites.push(searchshield.GetDomain(anchor.href));   return true;  } }  // VeriSign A/B Split reporting - only for VerSign domains var avglschecked = anchor.getAttribute("avglschecked"); if (avglschecked &amp;&amp; avglschecked != 1) {  var sPos = avglschecked.indexOf("S");  var hash = (sPos &gt; -1) ? avglschecked.substring(0, sPos) : null;  var split = (sPos &gt; -1) ? avglschecked.substring(sPos+1) : null;  if (hash &amp;&amp; split &amp;&amp; split != searchshield.VERISIGN_SPLIT_NOTEST)  {   // check updated verdict anchor for verisign domain   var d = event.srcElement.ownerDocument;   if (d.getElementById("LXPLSS_" + hash + "U" + searchshield.SCORE_SS_VERISIGN))   {    searchshield.avgCallFunc(d, "RecordVSClick", hash, d.location.href);   }  } } var link = anchor.href; var verdict = searchshield.getAvgImage(anchor); var score = -1; var img_id = ''; if (verdict != null) {  score = verdict.score;  img_id = verdict.rawId; }  // show popup alert (upper left) if ((score &gt;= searchshield.SCORE_SS_CAUTION) &amp;&amp; (score &lt;= searchshield.SCORE_SS_WARNING)) {  // prevent this click from going any further  var search_hash = searchshield.avgCallFunc(document, 'GetHash', document.location.href);  searchshield.ShowPopupAlert(document, link, img_id, search_hash);  // if possible, stop the event from going any further  searchshield.cancelEvent(event);  return false; }  return true;};// called by native to update phishing linkssearchshield.updatePhishingLinks = function (results){ if (!results)  return; if (!xplSearch)  return; var engine = xplSearch.engine; var resultParse = results.split("::"); var resultsLength = resultParse[0]; for (var i=0; i &lt; resultsLength; i++) {  var idx = i*7;  var hash   = resultParse[idx+1];  var score   = resultParse[idx+2];  var new_image = resultParse[idx+3];  var alt_image = resultParse[idx+4];  var flyover   = resultParse[idx+5];  var click_thru= resultParse[idx+6];  var altClick_thru = resultParse[idx+7];  engine.updateImage(hash, xplSearch.searchHash, score, new_image, alt_image, flyover, click_thru, altClick_thru); }};searchshield.getAvgImage = function (element){ var obj = {}; obj.img = xplSearch.engine.getImgElement(element); obj.score = -1;  //parse the score from the id if (obj.img != null &amp;&amp; obj.img.id) {  var pos = !!obj.img.id ? obj.img.id.indexOf('U') + 1 : -1;  obj.score = (pos &lt; 1) ? -1 : obj.img.id.charAt(pos);  obj.rawId = obj.img.id.substring(0,pos-1); }  return obj;};searchshield.GetScannedLink = function (link){ if (!xplSearch || !(xplSearch.links instanceof Array))  return link; // look for the link we scanned based on original element for (var i = 0; i &lt; xplSearch.links.length; i++) {  if (xplSearch.links[i].element.href == link)   return xplSearch.links[i].href; } // else return the incoming link return link;};searchshield.previouslyScanned = function (links, hash){ for (var i = 0; i &lt; links.length; i++) {  if ((links[i] != null) &amp;&amp; (links[i].hash != null) &amp;&amp;    (links[i].hash == hash) &amp;&amp; (links[i].checked == true))   return true; } return false;};searchshield.initPopupAlert = function (doc){ // check if it exists first if (doc.getElementById("XPLSS_PopupAlert"))  return; // create a div to use for the popup itself, hide for now var popup_div = doc.createElement("DIV"); popup_div.setAttribute("id", "XPLSS_PopupAlert"); popup_div.style.position = "absolute"; popup_div.style.zIndex = "10000"; doc.body.appendChild(popup_div);};searchshield.initFlyover = function (doc, engine){ // create in top doc only if (doc !== window.top.document)  doc = window.top.document; // check if it exists first if ((doc == null) || (doc.getElementById("XPLSS_Flyover")))  return; // create a div to use for the flyover itself, hide for now var flyover_div = doc.createElement("DIV"); flyover_div.setAttribute("id", "XPLSS_Flyover"); flyover_div.style.position = "absolute"; flyover_div.style.zIndex = "10000"; doc.body.appendChild(flyover_div); // create a layer for the image var trans_div = doc.createElement("DIV"); trans_div.setAttribute("id", "XPLSS_Trans"); trans_div.style.position = "absolute"; trans_div.style.zIndex = "9999"; doc.body.appendChild(trans_div);};searchshield.ShowPopupAlert = function (doc, link, hash, search){ // build the content var popup_content = searchshield.avgCallFunc(doc, 'BuildPopupAlert', hash, search); if (popup_content == null || popup_content == "")  return; // get the div var div = doc.getElementById("XPLSS_PopupAlert"); div.innerHTML = searchshield.CleanupHTML(popup_content); // set position, account for scrolling var zoom = searchshield.zoomLevel(); var pageOffsetX = Math.round(doc.documentElement.scrollLeft/zoom); var pageOffsetY = Math.round(doc.documentElement.scrollTop/zoom);  div.style.left = 10 + pageOffsetX + "px"; div.style.top = 10 + pageOffsetY + "px";  // TODO: the event handler function doesn't exist so, is this even necessary? //div.attachEvent("onmouseout", HidePopupAlert); // set the link //var data = doc.getElementById("avgalertpopurl"); //if (data) //  data.innerHTML = escape(link); // set visibility div.style.visibility = "visible"; //navigate to the link after timed delay // TODO: Bug 31707 - make this open a new tab/window setTimeout(function(){doc.location.assign(link)}, 3000);};searchshield.avgCallFunc = function (doc, name /*, param1..., paramN*/){ // get the data element var avg_ls_data = (typeof gAvgDataElement !== 'undefined') ? gAvgDataElement : doc.getElementById("avglsdata"); if ((avg_ls_data == null) || (name == null))  return;  // save the data element gAvgDataElement = avg_ls_data; // for some reason you can't fire and event on an element with no parent node if (avg_ls_data.parentNode == null)  return; // set the attributes avg_ls_data.setAttribute("function", name);  // set variable length of optional parameter attributes var pcnt = 0; for (var i=2; i &lt; arguments.length; i++)  avg_ls_data.setAttribute("param"+(++pcnt), String(arguments[i])); avg_ls_data.fireEvent("onrowenter"); // get the result return avg_ls_data.getAttribute("result"); };// general use functions - begin// DOM Functionssearchshield.getAnchorNode = function (node, filterFunc){ // filterFunc should return a boolean if (!filterFunc || !filterFunc instanceof Function)  return null;   // go up the dom tree starting at node and look for anchor  // before hitting a header, div or table element  while ((node != null)   &amp;&amp;   (node.tagName != null) &amp;&amp;    (node.tagName != "A")) {  if (filterFunc(node))  {   node = null;   break;  }  node = node.parentNode; } return node;};searchshield.getDocuments = function (frame, frameArray){ // recursively get all embedded frames/docs frameArray.push(frame.document); var frames = frame.frames; for (var i = 0; i &lt; frames.length; i++) {  // recurse on each frame  searchshield.getDocuments(frames[i], frameArray); } return frameArray;};searchshield.NextSiblingNode = function (element){ var TEXTNODE = 3; var ParentNode = element.parentNode; if (!ParentNode)  return; var NextSibling = ParentNode.nextSibling; while (NextSibling) {  if (NextSibling.nodeType != TEXTNODE)   return NextSibling;  NextSibling = NextSibling.nextSibling; } return;};searchshield.getParentNodeByAttribute = function (attrName, attrValue, node, maxDepth){ if (!node)  return null;  var maxLoop = maxDepth ? maxDepth : 1; var pNode = node.parentNode;  if (!pNode)  return null;  for(; 0 &lt; maxLoop; maxLoop--)  {  if ((pNode[attrName]) &amp;&amp;    (pNode[attrName].toLowerCase() === attrValue.toLowerCase()))   {   return pNode;  }  pNode = pNode.parentNode;  if (!pNode)   return null; } return null;};searchshield.getParentNodeByClassName = function (className, node, maxDepth) { return searchshield.getParentNodeByAttribute("className", className, node, maxDepth);};searchshield.getParentNodeById = function (id, node, maxDepth){ return searchshield.getParentNodeByAttribute("id", id, node, maxDepth);};searchshield.getParentNodeByTagName = function (tagName, node, attrName) { // find parent node by tag name and optional attribute name if (!tagName || !node || !node.parentNode)  return null; tagName = tagName.toUpperCase(); while ((node != null) &amp;&amp; (node.nodeType != 9)) {  // if attrName is not provided just return TRUE  if (node.nodeName == tagName)  {   var nodeHasAttribute = !!attrName ? node[attrName] : true;   if (nodeHasAttribute)    return node;  }     node = node.parentNode; }  // no div return null;};searchshield.getHrefFromCiteElement = function (tag){ var rtnHtml; var tp = tag.parentNode; var tgpn = tp ? tp.parentNode : null; if (!tgpn)  return; lastChildElem = tgpn.lastChild; while ((lastChildElem != null) &amp;&amp; (lastChildElem.nodeName != 'SPAN') &amp;&amp; (lastChildElem.nodeName != 'DIV')) {  lastChildElem = lastChildElem.previousSibling; }  if (lastChildElem)  rtnHtml = lastChildElem.getElementsByTagName('cite')[0];  if (rtnHtml)  rtnHtml = rtnHtml.innerHTML;  return rtnHtml;};searchshield.getHrefFromSpanElement = function (tag){ var rtnHtml;  var tp = tag.parentNode; var tgpn = tp ? tp.parentNode : null; if (!tgpn)  return; siblingElem = tgpn.nextSibling; while ((siblingElem != null) &amp;&amp; (siblingElem.nodeName != 'SPAN') &amp;&amp; (siblingElem.className != 'site')) {  siblingElem = siblingElem.nextSibling;  if (siblingElem &amp;&amp; siblingElem.className  &amp;&amp; (siblingElem.className.match(/res[13]/)))   break; }  if (siblingElem)  rtnHtml = siblingElem.getElementsByTagName('a')[0];  if (rtnHtml)  rtnHtml = rtnHtml.innerHTML;  return rtnHtml;};searchshield.getTopLevelDocument = function (doc){ // return the top level document for the given doc, could be itself // TODO: determine a method of doing this for IE, if necessary  // don't check about:blank if (doc &amp;&amp; ((doc.location.href == "about:blank") || (doc.location.href == "about:Tabs")))  return doc; // Check if already a top level document for (var i = 0; i &lt; gBrowser.browsers.length; i++) {  if (doc == gBrowser.browsers[i].contentDocument)   return doc; } // Not a top level, check all frames  var documents; for (var j = 0; j &lt; gBrowser.browsers.length; j++) {  // get all docs for each browser  documents = searchshield.getDocuments(gBrowser.browsers[j].contentWindow, new Array());  for (var k = 0; k &lt; documents.length; k++)  {   // check if doc is from current browser   if (doc == documents[k])   {    // it is, return the top level doc for this browser    return gBrowser.browsers[j].contentDocument;   }  } }  return doc;};searchshield.getTopLevelWindow = function (){ // TODO: determine a method of doing this for IE, if necessary return mediator.getMostRecentWindow("navigator:browser");};//Event functionssearchshield.addListener = function (object, evtType, listener, useCapture){ useCapture = !!useCapture; if (object.addEventListener) {  object.addEventListener(evtType, listener, useCapture);  return true; } else if (object.attachEvent) {   object.attachEvent("on"+evtType, listener);   return true; }  return false;};searchshield.cancelEvent = function (event){ event.cancelBubble = true; event.returnValue = false;};searchshield.doEvent = function (evtObj, evtTarget, evtName, evtType, bubbles, cancelable){ bubbles  = !!bubbles; cancelable = !!cancelable;  if (document.createEvent) {  var evt = document.createEvent("Events");  evt.initEvent(evtName, bubbles, cancelable);  evtTarget.dispatchEvent(evt);  return true; } else if (document.createEventObject) {  var evt = document.createEventObject(evtObj);  evtTarget.fireEvent("on" + evtType, evt);  return true; }  return false;};searchshield.removeListener = function (object, evtType, listener, useCapture){ useCapture = !!useCapture;  if (object.removeEventListener) {  object.removeEventListener(evtType, listener, useCapture);  return true; } else if (object.detachEvent) {   object.detachEvent(evtType, listener);   return true; }  return false;};// HTML functionssearchshield.CleanupHTML = function (data){ if (data == null)  return data; // cleanup html data, replace any new lines data = data.replace(/\r/g, ""); data = data.replace(/\n/g, ""); // escape any single quotes data = data.replace(/'/g, "\\'"); return data;};searchshield.removeHtmlTags = function (str){ var re = new RegExp('(&lt;[^&gt;]+&gt;)','g'); var strStr = new String(str); if (!!strStr)  return strStr.replace(re, ''); else  return str; };// Browser functionssearchshield.elementSize = function (element){ //returns an array [sizeX, sizeY]  var elemX; var elemY;  elemX = parseInt(element.offsetWidth); elemY = parseInt(element.offsetHeight)  return [elemX, elemY];};searchshield.GetFullBoundingRect = function (element){ if (!element) return; // get bounding rect for incoming element var elementRect = element.getBoundingClientRect(); var nextImg = null; var nextImgRect = null; // first check for another non-TextNode element after this one var siblingElement = searchshield.NextSiblingNode(element); if ( siblingElement &amp;&amp;   siblingElement.firstChild &amp;&amp;   siblingElement.id &amp;&amp;   siblingElement.id.indexOf("XPLSS_") != -1) {  nextImg = siblingElement.firstChild;    nextImgRect = nextImg.getBoundingClientRect();  } else {  return elementRect; }  if ((nextImgRect.top &gt;= elementRect.bottom) &amp;&amp;   (nextImgRect.left &lt;= elementRect.left)) { // images appear to be on seperate lines  return elementRect; } // else merge the rects together into a new one var newRect = new function() { this.top=0; this.left=0; this.right=0; this.bottom=0; this.mid=0;}; newRect.top = Math.min(elementRect.top, nextImgRect.top); newRect.left= Math.min(elementRect.left, nextImgRect.left); newRect.right=Math.max(elementRect.right, nextImgRect.right); newRect.bottom=Math.max(elementRect.bottom, nextImgRect.bottom); newRect.mid = Math.min(elementRect.right, nextImgRect.left);  return newRect;};searchshield.offsetLeft = function (element){ var offset = 0; while (element) {  offset += element.offsetLeft;  element = element.offsetParent; } return offset;};searchshield.offsetTop = function (element){ var offset = 0; while (element) {  offset += element.offsetTop;   element = element.offsetParent; } return offset;};searchshield.scrollSize = function (imageElem){ // returns an array [scrollX, scrollY, hasParentFrame] var scrollX; var scrollY; var hasParentFrame;  // firefox if (window.pageXOffset &amp;&amp; window.pageYOffset) {  scrollX = window.pageXOffset;  scrollY = window.pageYOffset; } else if (document.documentElement || document.body) {  scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;  scrollY = document.documentElement.scrollTop || document.body.scrollTop;  if (imageElem)  {   var frames = document.frames;   if (frames)   {    for (var i=0; i &lt; frames.length; i++)    {     var img;     try {      img = frames[i].document.getElementById(imageElem.id);     }     catch(domErr){}     if (img != null)     {      scrollX = frames[i].document.documentElement.scrollLeft;      scrollY = frames[i].document.documentElement.scrollTop;      hasParentFrame = true;      break;     }    }   }  } } else {  scrollX = 0;  scrollY = 0; }  return [parseInt(scrollX,10), parseInt(scrollY,10), hasParentFrame];};searchshield.viewPortSize = function (){ // returns an array [width, height, scrollYWidth], where scrollYWidth is always 0 for IE var scrollXWidth  = 19; var scrollYWidth  = 0; // 0 for Microsoft IE var scrollBarX  = false; var windowX; var windowY;  // firefox if (window.innerWidth &amp;&amp; window.innerHeight) {  //TODO: validate this block if implemented for firefox    windowX = window.innerWidth - scrollXWidth;  windowY = window.innerHeight;  try  {   scrollYWidth = Math.floor(Math.abs(window.innerHeight - document.documentElement.clientHeight)) + 1;   scrollBarX = (document.documentElement.clientWidth &lt; document.documentElement.scrollWidth);  }  catch(err){}  if (scrollBarX &amp;&amp; !scrollYWidth)   scrollYWidth = 18; //normally 17 (+1 top border)      } else if (document.documentElement || document.body)  {  windowX = (document.documentElement.clientWidth || document.body.clientWidth) - scrollXWidth;  windowY = document.documentElement.clientHeight || document.body.clientHeight; } else {  windowX = 0;  windowY = 0; } return [windowX, windowY, scrollYWidth];};searchshield.zoomLevel = function (){  var level = 1;  if (document.body.getBoundingClientRect) {   // rect is only in physical pixel size before IE8    var rect = document.body.getBoundingClientRect();   level = Math.round (((rect.right - rect.left) / (document.body.offsetWidth)) * 100) / 100;  }    return level;};// Href functionssearchshield.checkUrl = function (url){ // cleanup a url, make sure there is a protocol on the front for scanning try {  // trim  url = url.replace(/^\s+/, "").replace(/\s+$/, "");  // if no protocol, add http:// to it   if (url.indexOf("://") == -1)   url = "http://" + url; } catch(err){} return url;};searchshield.DoesURLContain = function (url, contain){ if ((url == null) || (url.length &lt; 1))  return false; // breakup the url to check var parts = url.split('/'); if (parts.length &lt; 3)  return false; var domain= parts[2].toLowerCase(); if (domain.indexOf(contain) &gt; -1)  return true; return false;};searchshield.FilterUrl = function (url, filter){ if (!url || (url.length &lt; 1))  return false;  if (!filter || !(filter instanceof Array))   return false;   var parts = url.split('/'); if ((parts == null) || (parts.length &lt; 3))  return false; var domain = parts[2]; for (var i = 0; i &lt; filter.length; i++) {  if (domain.indexOf(filter[i]) != -1)   return true; } return false;};searchshield.GetDomain = function (url){ if (url != null) {  // get url domain  var parts = url.split('/');  if ((parts != null) &amp;&amp; (parts.length &gt;= 3))  {   return parts[2].toLowerCase();  } }  return url;};searchshield.getUrlContents = function (url) { if (url == null)  return null; // don't query if local url if (url.indexOf("linkscanner://") != -1)  return null; try  {  req = new XMLHttpRequest();  req.open("GET", url, false);  req.send(null);  if (req.status == 200)   return req.responseText;  else   return null; }  catch (err) {  // nothing to do  return null; }};searchshield.parseLink = function (href, simpleMode){ var uri    = {}; var parameter = {   complex: {    pattern: /^(?:([a-z]+):(?:([a-z]*):)?\/\/)?(?:([^:@]*)(?::([^:@]*))?@)?((?:[a-z0-9_-]+\.)+[a-z]{2,})(?::(\d+))?(?:([^:\?\#]+))?(?:\?([^\#]+))?(?:\#([^\s]+))?$/i,    element: ['source','scheme','subscheme','user','pass','host','port','path','query','fragment']    },   simple: {    pattern: /^(?:([a-z]+):\/\/)?((?:[a-z0-9_-]+\.)+[a-z]{2,})(?:\/)([^:\?]+)?(?:([\?|\#])([^\?]+))?$/i,    element: ['source','scheme','host','path','delimiter','query']   }  }; var mode = simpleMode !== false ? 'simple' : 'complex'; var pattern = parameter[mode].pattern; var element = parameter[mode].element;  if (!href)  return uri; var matches = href.match(pattern);  if (matches) {  // --------------------  // iterate over the matches array and populate uri properties  // using the respective element parameter as the name.  // NOTE: set raw property type as String to make inArray()  // work properly with instanceof.  // --------------------  for (var i=0; i &lt; matches.length; i++)   uri[element[i]] = new String(matches[i] || "");    // --------------------  // create an array, hostArray, from host, for example,  // host="www.google.com" and hostArray=["www","google","com"]  // --------------------  uri.hostArray = uri.host.split(".");    // --------------------  // create an array, qsArray, from query, for example,  // query='hl=en&amp;q=javascript&amp;btnG=Search&amp;aq=f&amp;aqi=g10&amp;aql=&amp;oq=&amp;gs_rfai='  // qsArray=[{hl:'en'},{q:javascript}, ... ,(qs_rfai:''}]  //  // $0=entire match, $1=capture 1, $2=capture 2  // must include $0 even though it is unused so  // the replace works properly  // --------------------  uri.qsArray  = searchshield.parseQuery(uri.query); }  //non-standard urls require a fail-safe that relies on simply splitting the href function splitLink(href) {  // split the href on '/'  var linkParts = href.split("/");  // need domain and path  if ((linkParts == null) || (linkParts.length &lt; 2))   return false;   var uri = {   delimiter: (linkParts[3]).substring(0,1),   host: linkParts[2],   hostArray: (linkParts[2]).split('.'),   path: (linkParts[3]).substring(1),   qsArray: [],   query: '',   scheme: (linkParts[0]).substring(0, linkParts[0].length-1),   source: href   };  return uri; } if (!uri.host)  uri = splitLink(href); return uri;};searchshield.parseQuery = function (qs){ var qsArray = []; qs.replace(/(?:^|&amp;)([^&amp;=]*)=?([^&amp;]*)/g,      function ($0, $1, $2) {      if ($1) qsArray[$1] = $2;     } );  return qsArray;};// general functionssearchshield.arrayKeys = function (array){ var keys = new Array(); for(k in array)  keys.push(k); return keys;};searchshield.inArray = function (key, array, caseSensitive, exactMatch){ if (! array instanceof Array)  return false;  if (caseSensitive !== true)  caseSensitive = false;   if (exactMatch !== false)  exactMatch = true;  if (key instanceof String) {  for (var i=0; i &lt; array.length; i++)  {   var k = caseSensitive ? key.valueOf() : key.valueOf().toLowerCase();   var a = caseSensitive ? array[i] : array[i].toLowerCase();   if(exactMatch &amp;&amp; k === a)    return true;   else if (!exactMatch &amp;&amp; (-1 !== k.indexOf(a)))    return true;  } } else if (key instanceof Array) {  for (var i=0; i &lt; array.length; i++)   for (var j=0; j &lt; key.length; j++)   {    var k = caseSensitive ? key[j] : key[j].toLowerCase();    var a = caseSensitive ? array[i] : array[i].toLowerCase();    if (exactMatch &amp;&amp; k === a)     return true;    else if (!exactMatch &amp;&amp; (-1 !== k.indexOf(a)))     return true;   } } return false;};searchshield.getClickHandlerParams = function(clickHandler){ var re = /((?:'[^']*')|[\w]*)(?:,|\))/ig; var chParams = []; clickHandler.replace(re,   function($0, $1, $2){   if ($1)    chParams.push($1);  } );  return chParams;};// general use functions - end// Search constructorsearchshield.Search = function(){ this.doc    = null; this.engine   = null; this.engines   = null; this.links    = null; this.uri    = null; this.searchHash  = null; this.checkUrl   = null; this.useLocalImgs  = null; this.clockUrl   = null; // create engine list (actually key/value object will be used) this.engineList  = {};};searchshield.Search.prototype.getSearchNames = function(){ // order is important var names =  [  'Google',  'AVGGoogle',  'AltaVista',  'AVGYahoo',  'Yahoo',  'Bing',  'MSN', // MSN redirects to BING  'Baidu',  'Earthlink',  'AOL',  'Ask',  'Yandex',  'Seznam',  'Webhledani',  'eBay',///temp  'Digg',  'Slashdot',  'Twitter',  'GMail',  'Facebook',  'MySpace' ]; return names;};searchshield.Search.prototype.detectEngine = function(href){ if (!href)  return; var aEng = searchshield.Search.prototype.getSearchNames(); var aEngLen = aEng.length; for (var i=0; i &lt; aEngLen; i++) {  if (searchshield[aEng[i] + 'SearchEngine'].prototype.validSearch(href))   return aEng[i]; } return;};searchshield.Search.prototype.addEngine = function(engine){ if (!this.engines)  this.engines = new Array();  this.engines.push(engine);};searchshield.Search.prototype.addLink = function(inElement, inHref){ if (!this.links)  this.links = new Array(); var hrefHash; try {  hrefHash = searchshield.avgCallFunc(this.doc, 'GetHash', inHref); } catch (e){} var newNode = {   element: inElement,   href:   inHref,   hash:  hrefHash,   search:  this.searchHash  };  this.links.push(newNode);  return newNode;}// process the search result page after all search engines have been addedsearchshield.Search.prototype.process = function(doc){ // only process when searchshield is enabled if (!searchshield.enabled(doc))  return;   this.doc = doc; this.href = this.doc.location.href; this.uri = searchshield.parseLink(this.href); try {  this.searchHash  = searchshield.avgCallFunc(this.doc, 'GetHash', this.href);  // get any previously active engine  this.engine  = this.engineList[this.searchHash.toString()]; } catch (e) {} /*  Process Steps: 1. Add all supported search engines 2. Identify the active search engine 3. Get all document links and add AVG images  */  // STEP 1 - Add all supported search engines if (!this.engines) {  var aEng = xplSearch.getSearchNames();  var aEngLen = aEng.length;  for (var i=0; i &lt; aEngLen; i++)  {   xplSearch.addEngine(new searchshield[aEng[i]+'SearchEngine'](this));  } }  // search the engines if we didn't find one if (!this.engine) {  // STEP 2 - Identify the active search engine  var engLen = this.engines.length;  for (var i = 0; i &lt; engLen; i++)  {   if (this.engines[i].validSearch())   {    this.engine  = this.engines[i];    break;   }  }    // create a new engine instance to store  this.engineList[this.searchHash.toString()] = this.engine;    // init this search, if &lt; 1 either an error or disabled  //var sdkInit = 0;  //try {  // sdkInit = xpl_sdk.SXPL_InitSearch(this.href);  //}  //catch(e){}  //if (sdkInit &lt; 1)  // return false; } // return immediately if there is not an active search engine if (!this.engine)  return false;  try {   // base url to check for icons  this.checkUrl  = searchshield.avgCallFunc(this.doc, 'GetIconUrl', '1');  // check if using linked or local icons  this.useLocalImgs = !searchshield.getUrlContents(this.checkUrl);  // get the clock url  this.clockUrl  = searchshield.avgCallFunc(this.doc, 'GetIconUrl', '0'); } catch(e){}   // STEP 3 - Get all document links and add AVG images var alltags = this.doc.getElementsByTagName("*"); // this method works for IE, FF and Chrome for (var i=0; i &lt; alltags.length; i++) {  // ignore verdicts  if (alltags[i].id &amp;&amp; (alltags[i].id.indexOf("LXPLSS_") != -1))   continue;   //should the link be included?  Make sure includeLink always returns an href else FALSE,  var href = this.engine.includeLink(alltags[i]);   if (!href)   continue;  var newNode = this.addLink(alltags[i], href);  this.engine.addImage(newNode, this.clockUrl, false); } return (this.links ? this.links.length : false);};////////////////    SEARCH    ////////////////////////////////    SEARCH ENGINE    ////////////////// Interface for a SearchEngine objectsearchshield.SearchEngine = function(search){ this.search = search; this.type = 'standard'; this.processFrames = false; this.new_links  = true; this.onlyPrimaries = true; this.inline = {  clockImage: "linkscanner://clock12.png",  image: [ "linkscanner://safe12.png",     "linkscanner://caution12.png",     "linkscanner://warning12.png",     "linkscanner://blocked12.png"    ],  color: {   classname: ["green","yellow","orange","red"],   border: ["#00A120", "#EAA500", "#F57301", "#D20003"],   background: ["#C3E5CA", "#FEEFAE", "#FFD3B0", "#F5D4C1"]  } }; this.filter_urls = [  "ad.doubleclick.net", "ads1.revenue.net", "aslads.ask.com",  "bluestreak.com", "clickbacktrack.net", "clickbank.net",  "clickboothlnk.com", "clickmanager.com", "clickserve.cc-dt.com",  "dartsearch.net", "clicktraxmedia.com", "clk.atdmt.com",  "dpi-digialphoto.com", "feedpoint.net", "hypertracker.com",  "jdoqocy.com", "kqzyfj.com", "m1428.ic-live.com",  "mediaplex.com", "mr.mdmngr.com", "n339.asp-cc.com",  "offeredby.net", "offerweb.com", "pinktrax.com",  "pinktrax.com", "pixel1523.everesttech.net", "qckjmp.com",  "r.rd06.com", "revenuewire.net", "s0b.bluestreak.com",  "s2.srtk.net", "servedby.advertising.com", "store.yahoo.com",  "tf8.cpcmanager.com", "thetoptracker.com", "track.searchignite.com",  "tracking.searchmarketing.com", "www.dpbolvw.net", "www.rkdms.com",  "www.yellowbookleads.com"  ]; this.shortened_urls = [  "3.ly", "bit.ly", "is.gd", "tr.im", "short.to", "tiny.cc", "tinyurl.com", "lnk.ms", "msplinks.com"  ]; this.showCleanVerdicts  = true; this.showLowRiskVerdicts = true; this.showMedRiskVerdicts = true; this.VeriSignSplit   = searchshield.VERISIGN_SPLIT_NOTEST;};searchshield.SearchEngine.prototype.flyoverExists = function (doc){ return !!doc.getElementById("XPLSS_Flyover");};searchshield.SearchEngine.prototype.inlineExists = function (doc){ return !!doc.getElementById("XPLSS_InlineFlyover");};searchshield.SearchEngine.prototype.validSearch = function(href) { return false; };searchshield.SearchEngine.prototype.includeLink = function(link) { return false; };searchshield.SearchEngine.prototype.insertNodes = function(node, doc){ var element = node.element; var parentNode = node.element.parentNode; if (parentNode == null) {  // try and find element again based on the hash  element = doc.getElementById("xplid_" + node.hash);  parentNode = !!element ? element.parentNode : null; } var insertNode = !!element ? element.nextSibling : null; while ((insertNode   != null) &amp;&amp;    (insertNode.tagName != null) &amp;&amp;    (insertNode.tagName == "SPAN")) {  insertNode = insertNode.nextSibling; }  return [insertNode, parentNode];};searchshield.SearchEngine.prototype.addImage = function(node, image, hidden){ var element = node.element; var hash = node.hash; var score  = node.score; // set verdict display configuration var doc = element.ownerDocument; if (this.type != 'inline' &amp;&amp; !doc.getElementById('XPLSS_Flyover'))  searchshield.initFlyover(doc, this); // get the proper insertion point for the image var insertNodes = this.insertNodes(node, doc); var insertNode = insertNodes[0]; var parentNode = insertNodes[1]; if (!parentNode)  return; // see if we already have an image if ((insertNode  != null) &amp;&amp;   (insertNode.id != null) &amp;&amp;   (insertNode.id.indexOf("XPLSS_") &gt; -1)) {  return; } // mark search result anchor so it isn't processed repeatedly if (score == undefined)  element.setAttribute("avglschecked", hash + "S" + this.VeriSignSplit); // create a new image var img = doc.createElement('img'); img.src = image; img.id = "XPLSS_" + hash; img.style.borderStyle = "none"; img.style.margin = "0 3px";  // for IE, specify these style attributes to prevent inadvertent inheritance from parent if (img.width &amp;&amp; img.height) {  img.style.width = img.width + 'px';  img.style.height = img.height + 'px'; }  // apply custom element styles this.updateElementStyle(img, this.addImageStyle);  // create the link element  var anchor = doc.createElement("A"); anchor.setAttribute("id", "LXPLSS_" + hash); if ((hidden != null) &amp;&amp; (hidden == true)) { // hiding the parent will also hide its child nodes  anchor.style.display = "none"; }  // Default anchor styles //Over-ride possible border style with inline declaration anchor.style.borderStyle = "none"; // apply custom element styles this.updateElementStyle(anchor, this.addAnchorStyle); if (score == searchshield.SCORE_SS_VERISIGN) {  anchor.style.textDecoration = "none";  anchor.style.background = "none repeat scroll 0 0 transparent"; } // append the image to the link anchor.appendChild(img); // insert the node as either a sibling or a child if (insertNode != null)  parentNode.insertBefore(anchor, insertNode); else  parentNode.appendChild(anchor);   return anchor;};searchshield.SearchEngine.prototype.updateImage = function (hash, search, score, image, alt_image, flyover, click_thru, altClick_thru){  var updated = false;  var frameDoc  = this.search.doc;  var docFrames = frameDoc.frames;  var frameElem;  if (docFrames &amp;&amp; this.processFrames)  {   for (var i=0; i &lt; docFrames.length; i++)   {    try {     if (docFrames[i].document.getElementById(hash))     {      frameElem = docFrames[i].frameElement;      frameDoc = docFrames[i].document;      break;     }    }     catch(err){}   }  }  while ((element = frameDoc.getElementById(hash)) != null)  {   // check configuration to determine if verdict display property   var showVerdict = true;      var nSeverity = Number(score - 1);   switch (nSeverity)   {    case searchshield.XPLCHECK_RESULT_SEV_LOW:     showVerdict = this.showLowRiskVerdicts;     break;    case searchshield.XPLCHECK_RESULT_SEV_MED:     showVerdict = this.showMedRiskVerdicts;     break;    case searchshield.XPLCHECK_RESULT_SEV_NONE:     showVerdict = this.showCleanVerdicts;     break;    default:     if (score == searchshield.SCORE_SS_VERISIGN)      showVerdict = this.showCleanVerdicts;     break;   }      // remove image if no url specified   if ((!showVerdict) || (image == null) || (image.length &lt; 1))   {    // hide the parent anchor node    element.parentNode.style.display = "none";    // mark the id as being hidden (element is the image)    element.id = element.id + "H";    updated = true;        // if not a verisign score    if (score != searchshield.SCORE_SS_VERISIGN)     continue;   }   // cleanup flyover, replace any new lines or single quotes   flyover = searchshield.CleanupHTML(flyover);   // mark the id as having been updated   element.id = element.id + "U" + score;   element.src = image;   element.attachEvent("onmouseover", function(e){avglsflyover.popup(e, hash, search, flyover)});   element.attachEvent("onmouseout", function(e){avglsflyover.hide(e)});   // check for attribute updates (elementAttribute is an associative array (i.e., object)   if (this.elementAttribute)   {    for (a in this.elementAttribute)    {     if(this.elementAttribute[a])      element.setAttribute(a, this.elementAttribute[a]);    }   }   // To dynamically reduce verdict image size if it causes its container to scroll   // when not showing alt images determine if the element containing   // the verdict image is scrolling and decrease the image size by   // the scroll amount (min size is 80% or original)   var reduceBy = 0.8;   var scrl  = 0;   if (!alt_image || this.omitAltImage || this.VeriSignSplit == searchshield.VERISIGN_SPLIT_TESTB)   {    try{     var maxLoop = 5;     var cN = element.parentNode.parentNode;  //image-&gt;anchor-&gt;containerNodes...     while (cN &amp;&amp; maxLoop--)     {      if (cN.tagName == "DIV" || cN.tagName == "SPAN")      {       // get object height depending on ie document mode       var clientHeight = (cN.clientHeight == 0 ||         (this.search.doc.documentMode &amp;&amp; this.search.doc.documentMode &lt; 8)) ?         cN.offsetHeight :         cN.clientHeight;       scrl = cN.scrollHeight - clientHeight;       break;      }      cN = cN.parentNode;     }     if (0 &lt; scrl)     {      var eH = (element.height - scrl)/element.height;      if (reduceBy &gt; eH)       eH = reduceBy;            var newDim = Math.ceil(eH*element.height);            element.height = newDim;      element.width = newDim;            element.style.height = newDim + "px";      element.style.width = newDim + "px";     }    }    catch(e){}   }   // set default style attributes   element.style.display  = "";      // if verisign icon showing move our icon up for better centering of the 2   // except for IE7 browser - it does not like this style   try {    var ieVersion = parseFloat(navigator.appVersion.split("MSIE")[1]);    if (alt_image &amp;&amp; (alt_image.length &gt; 0) &amp;&amp; ieVersion != 7)     element.style.verticalAlign = "10%";   }   catch(err){};   // apply custom element styles   this.updateElementStyle(element, this.updateImageStyle)   // update the click thru   var link = this.search.doc.getElementById("L" + hash);   if (link)   {    link.href = click_thru;    link.id = link.id + "U" + score;   }   updated = true;   // add the alternate image if supplied BUT not on avg yahoo   if ((alt_image)    &amp;&amp;     (alt_image.length &gt; 0) &amp;&amp;     (!this.omitAltImage) &amp;&amp;    (this.VeriSignSplit != searchshield.VERISIGN_SPLIT_TESTB))   {    var vhash = hash.substring(hash.indexOf("_")+1);    // create a temporary link node    var tmp_node = {      element: element.parentNode,      href:  altClick_thru,      hash:  vhash + "VU" + score,      search:  this.searchHash,      score:  score     };    var altAnchor = this.addImage(tmp_node, alt_image, false);    if (altAnchor &amp;&amp; altAnchor.firstChild)    {     altAnchor.firstChild.setAttribute("onmouseover", "");     altAnchor.href = altClick_thru;    }   }  }    if (updated != false)  {   this.resizeFrame(frameElem);   return true;  } return false;};searchshield.SearchEngine.prototype.updateElementStyle = function (element, elementStyle){ if (elementStyle) { // a NULL attribte value will unset it  for(attr in elementStyle)  {   try {    if (element.style.setAttribute)     element.style.setAttribute(attr, elementStyle[attr]);    else     element.style[attr] = elementStyle[attr];   } catch(err){}  } }};searchshield.SearchEngine.prototype.resizeFrame = function (frameElem){ // resize frame to prevent unwanted scrolling after inserting verdicts // ignore inline and non-frame engines if ((this.type == 'inline') || (!this.processFrames))  return; // ensure all required elements are available if ((frameElem == null) || (frameElem.style == null) || (frameElem.contentWindow == null))  return; // if frame is scrolling vertically then resize var frameHeight = parseInt(frameElem.style.height, 10); if (!isNaN(frameHeight) &amp;&amp; (frameHeight &lt; frameElem.contentWindow.document.body.scrollHeight))  frameElem.style.height = frameElem.contentWindow.document.body.scrollHeight + 'px'; return;};searchshield.SearchEngine.prototype.getImgElement = function (element){ // return an xpl img element associated with a given element if (element == null)  return null; // go up the parent tree looking for a header or div while ( (element.parentNode != null) &amp;&amp;    (element.tagName.charAt(0) != "H") &amp;&amp;    (element.tagName.charAt(0) != "D") &amp;&amp;   (element.tagName.charAt(0) != "T") ) {  element = element.parentNode; } // if all the way to the top, nothing if ((element.tagName == "HTML") || (element == null))  return null; // get image tags, if none we are done var imgTags = element.getElementsByTagName("IMG"); if ((imgTags == null) || (imgTags.Length &lt; 1))  return null; for (var i = 0; i &lt; imgTags.length; i++) {  if ((imgTags[i].id == null) || (imgTags[i].id.indexOf("XPLSS_") == -1))   continue;  return imgTags[i]; } // else didn't find anything return null;};searchshield.SearchEngine.prototype.setRatingsConfig = function (doc){ // get verdict configuration, need at least severity var results = searchshield.avgCallFunc(doc, 'GetRatingsConfig'); var parts = !!results ? results.split('::') : null; if (parts != null &amp;&amp; parts.length &gt;= 5) { //if set to default then get config value  if (this.showCleanVerdicts === true)   this.showCleanVerdicts  = (parseInt(parts[0]) == 1) ? true : false;     if (this.showLowRiskVerdicts === true)   this.showLowRiskVerdicts = (parseInt(parts[1]) == 1) ? true : false;    if (this.showMedRiskVerdicts === true)   this.showMedRiskVerdicts = (parseInt(parts[2]) == 1) ? true : false;     this.VeriSignSplit = (parseInt(parts[4])); }  return true;};searchshield.SearchEngine.prototype.init_inline_ratings = function (doc){ if ((doc == null) || (doc.getElementById("XPLSS_InlineFlyover")))  return; if (!searchshield.quirksMode) {  // create style for inline flyovers  var styleTag = doc.createElement("style");  styleTag.setAttribute("id","avgILFOStyle");    var headTag = doc.getElementsByTagName("head")[0];  headTag.appendChild(styleTag);  var inline_style = styleTag.styleSheet;  // stub in the base image name as the url  inline_style.addRule(".avgILFO", "background: url(linkscanner://default_inline_border_tl.png) no-repeat top left;");  inline_style.addRule(".avgILFO", "width:0px; font-size:0px; z-index:9999; visibility:hidden; position:absolute; left:-5000px;");    inline_style.addRule(".avgILFO_content", "background: url(linkscanner://default_inline_border_r.png) top right repeat-y;");  inline_style.addRule(".avgILFO_content","font-size:10px; color:black; padding:0px 10px; text-align:left; word-wrap:break-word; line-height:130%");    inline_style.addRule(".avgILFO_head", "background: url(linkscanner://default_inline_border_tr.png) no-repeat top right;");  inline_style.addRule(".avgILFO_head", "width:0px; height:5px;");  inline_style.addRule(".avgILFO_head div","height:5px;");   inline_style.addRule(".avgILFO_foot", "background: url(linkscanner://default_inline_border_bl.png) no-repeat bottom left");  inline_style.addRule(".avgILFO_foot", "height:5px;");    inline_style.addRule(".avgILFO_foot div", "background: url(linkscanner://default_inline_border_br.png) no-repeat bottom right");  inline_style.addRule(".avgILFO_foot div", "height:5px; width:0px;"); }  try {   // create the popup box  var box = doc.createElement("DIV");  if (searchshield.quirksMode)  {   box.style.visibility = "hidden";   box.style.position = "absolute";   box.style.left = "-5000px";  }  box.setAttribute("id", "XPLSS_InlineFlyover");  box.setAttribute("class", "avgILFO");  doc.body.appendChild(box);  box = null; } catch(boxErr){}};searchshield.SearchEngine.prototype.show_inline_ratings = function (doc, node, image){  var href = node.href; var anchor = node.element; if ((href == null) || (href.length &lt; 1))  return;   if (avglsinlineflyover.imageExists(anchor))  return;  // mark search result anchor so it isn't processed repeatedly anchor.setAttribute("avglschecked", "1");  // get verdict  this.display_inline(doc, anchor, href, node, false);};searchshield.SearchEngine.prototype.display_inline = function (doc, anchor, href, node, update, min_severity){ // min_severity is the lowest severity to display, so setting it to // 1 would not display safe icons  var results = searchshield.avgCallFunc(doc, 'MalsiteCheck', href); if (results == null)  return;  var parts = results.split('::');  // need at least severity if (parts == null)  return;    var nSeverity = parseInt(parts[0]);  if (!update &amp;&amp; nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE) {  var shortUrl = searchshield.FilterUrl(href, this.shortened_urls);  if (shortUrl)  { // shortened url verdicts display later   var engine = this;   anchor.attachEvent("onmouseover", function(event){avglsinlineflyover.mouseOverHandler(event, doc, engine)});   return;  } }  // severity -1 signifies sb.dat load failure if ( nSeverity == -1 )  nSeverity = searchshield.XPLCHECK_RESULT_SEV_NONE; //blacklist url var blShortUrl = false; if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_BLOCK) {  var shortUrl = searchshield.FilterUrl(href, this.shortened_urls);  if (shortUrl)   blShortUrl = true; }  // need xlated cat tag and category if (parts.length &lt; 3)  return; // check the minimum to display if ((min_severity != null) &amp;&amp; (nSeverity &lt; min_severity))  return;   if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_LOW &amp;&amp; !this.showLowRiskVerdicts) {  if (update)   this.avg_ls_inline_hide_verdict(anchor);    return; }  if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_MED &amp;&amp; !this.showMedRiskVerdicts) {  if (update)   this.avg_ls_inline_hide_verdict(anchor);    return; } if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE &amp;&amp; !this.showCleanVerdicts)  {  if (update)   this.avg_ls_inline_hide_verdict(anchor);     return; } if (update)  this.update_inline_image(anchor, nSeverity, parts); else  this.add_inline_image(doc, anchor, nSeverity, parts, blShortUrl);};searchshield.SearchEngine.prototype.avg_ls_inline_hide_verdict = function (anchor){ var image = avglsinlineflyover.getImage(anchor); if (image) {  image.style.display = "none";  if (image.parentNode &amp;&amp; image.parentNode.id == "avg_ls_anch")   image.parentNode.style.display = "none"; }};searchshield.SearchEngine.prototype.update_inline_image = function (anchor, nSeverity, aRisk){ // update the image already in the page if (anchor &amp;&amp; anchor.firstChild) {  var html  = '';  var image = '';   if (aRisk != null &amp;&amp; nSeverity != null)  {   var riskCategory = aRisk[1];   var riskName  = aRisk[2];   var bgColor   = this.inline.color.background[nSeverity];   var borderColor  = this.inline.color.border[nSeverity];   image    = this.inline.image[nSeverity];   html    = avglsinlineflyover.build(riskCategory, riskName, bgColor, borderColor);  }    var imageElem = anchor.firstChild;  imageElem.src = image;    if ( html &amp;&amp; html.length &gt; 0 )  {   imageElem.setAttribute("title", "");   imageElem.attachEvent("onmouseover", function(e){avglsinlineflyover.popup(e, html, nSeverity)});   imageElem.attachEvent("onmouseout", function(e){avglsinlineflyover.hide(e)});  } }};// add the image to the pagesearchshield.SearchEngine.prototype.add_inline_image = function (doc, anchor, nSeverity, aRisk, blShortUrl){ if (anchor == null || anchor.parentNode == null)  return null; // get the proper insertion point for the image var insertNode = anchor.nextSibling; while ((insertNode   != null) &amp;&amp;    (insertNode.tagName != null) &amp;&amp;    (insertNode.tagName == "SPAN")) {  insertNode= insertNode.nextSibling; }  // see if we already have an image anchor if ((insertNode  != null) &amp;&amp;   (insertNode.id != null) &amp;&amp;   (insertNode.id == "avg_ls_anch")) {  return null; } var html  = ''; var image = this.inline.clockImage;  if (aRisk != null &amp;&amp; nSeverity != null) {  var riskCategory = aRisk[1];  var riskName  = aRisk[2];  var bgColor   = this.inline.color.background[nSeverity];  var borderColor  = this.inline.color.border[nSeverity];  image    = this.inline.image[nSeverity];  var blUrl;  if (blShortUrl)  {   var aRiskName = riskName.split(':');   var sUrl = searchshield.checkUrl(aRiskName[1]);   blUrl = {};   blUrl.riskNameLabel = aRiskName[0] + ': ';   blUrl.riskCategory = riskCategory;   blUrl.bgColor = bgColor;   blUrl.borderColor = borderColor;   blUrl.sUrl = sUrl;  }  else  {   html = avglsinlineflyover.build(riskCategory, riskName, bgColor, borderColor);  } } doc = anchor.ownerDocument; var img   = doc.createElement("img"); img.src   = image; img.setAttribute("id","avg_ls_image"); img.style.width = "12px"; img.style.height = "12px"; img.style.border = "none"; img.style.padding = "0 3px"; img.style.margin = "0";  if ((html &amp;&amp; html.length &gt; 0) || (blUrl != undefined)) {  img.setAttribute("title", "");  img.attachEvent("onmouseover", function(e){avglsinlineflyover.popup(e, html, nSeverity, blUrl)});  img.attachEvent("onmouseout", function(e){avglsinlineflyover.hide(e)}); } // create the link element  var newAnchor = doc.createElement("A"); newAnchor.setAttribute("id", "avg_ls_anch"); newAnchor.style.display = "inline-block"; newAnchor.style.background = "none repeat scroll 0 0 transparent";  newAnchor.appendChild(img); img = null; // insert the node as either a sibling or a child if (insertNode != null)  anchor.parentNode.insertBefore(newAnchor, insertNode); else  anchor.parentNode.appendChild(newAnchor);    return newAnchor;  };////////////////    SEARCH ENGINE    ///////////////////////////////    GOOGLE SEARCH ENGINE    ///////////////searchshield.GoogleSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.onlyPrimaries = false;};searchshield.GoogleSearchEngine.prototype = new searchshield.SearchEngine();searchshield.GoogleSearchEngine.prototype.constructor = searchshield.GoogleSearchEngine;searchshield.GoogleSearchEngine.prototype.name = "google"; // the name by which the search engine is known (always lowercase)searchshield.GoogleSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var hostMatch = false; var domain  = uri.host;  // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; // For Google the host must match: // .google.com  OR // .google.com.XX OR // .google.co.XX OR // .google.XX  where XX is a country code // one special case is www.googe.off.ai (Anguilla) // Where any subdomain can come before the top level domain if ( /(\.(?:google|mozilla)\.(?:com|(?:co|off)\.[a-z]{2}|[a-z]{2}))/i.test(domain) ) {  //check the path  if ((path.indexOf("search?") == 0) ||   (path.indexOf("sponsoredlinks?") == 0) ||   (path.indexOf("webhp?") == 0) ||   (path.indexOf("webhp#") == 0) ||   (path.indexOf("#q=") == 0) ||   (path.indexOf("#hl=") == 0) ||   (path.indexOf("#sclient=") == 0))  {   return true;  } } return false;};searchshield.GoogleSearchEngine.prototype.includeLink = function(tag){ var href = ""; var outHref = false; var findStr = ""; // check for interstitials if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) {  findStr = this.search.uri.host + "/interstitial?";  if (tag.className == "l" &amp;&amp; tag.href)  {   if (tag.href.indexOf(findStr) != -1)   {    findStr = "?url=";    var pos = tag.href.indexOf(findStr);    if (pos !== -1)    {     pos += 5;     outHref = tag.href.substring(pos);     if (searchshield.FilterUrl(outHref, this.filter_urls))      return false;            return outHref;    }   }  }  if (tag.className == "sla")  {   findStr = "/url?q=";   urlPos = tag.href.indexOf(findStr);   if (urlPos != -1)   {    urlPos += 7;    outHref = tag.href.substring(urlPos);    return outHref;   }  }    // if an ad id  if ((tag.id.indexOf("pa") == 0) || (tag.id.indexOf("an") == 0) ||   (tag.className == "resultLink"))  {   var urlPos = -1;    // ads now need unescaping   href = unescape(tag.href);   findStr= "/url?sa=";   if (href.indexOf(findStr) != -1)   { // first kind, locate real url    findStr= "&amp;q=http";    urlPos = href.indexOf(findStr);    if (urlPos != -1)     urlPos += 3; // puts it on the http   }   if (urlPos == -1)   {    findStr = "/pagead/iclk?sa=";    if (href.indexOf(findStr) != -1)    { // second kind, locate real url     findStr = "&amp;adurl=http";     urlPos = href.indexOf(findStr);     if (urlPos != -1)      urlPos += 7; // puts it on the http    }   }   if (urlPos == -1)   {    if (href.indexOf("/aclk?sa=") != -1)    { // third kind     urlPos = href.indexOf("&amp;q=http");     if (urlPos != -1)      urlPos += 3; // puts it on the http     else     {      urlPos  = href.indexOf("&amp;lp=http");      if (urlPos != -1)       urlPos += 4;      else      {       findStr = "&amp;adurl=http";       urlPos = href.indexOf(findStr);       if (urlPos != -1)        urlPos += 7; // puts it on the http      }           }    }   }   if (urlPos == -1)   {    if (href.indexOf("/url?cad=") != -1)    { // fourth kind     urlPos = href.indexOf("&amp;q=http");     if (urlPos != -1)      urlPos += 3; // puts it on the http    }   }   if (urlPos != -1)   {    outHref = href.substring(urlPos);    // the destination url is in the href string of this redirector    if (outHref.indexOf('xg4ken.com') &gt; -1)    {     urlPos = (unescape(outHref)).indexOf('url[]=') + 6;     var destUrl = (unescape(outHref)).substring(urlPos);     if (searchshield.FilterUrl(destUrl, this.filter_urls))     {      var destUrl = searchshield.getHrefFromCiteElement(tag);      if (destUrl)       return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));      return false;     }     return destUrl;    }    // filtered url but can get destination from href string    if (outHref.indexOf('altfarm.mediaplex.com') &gt; -1)    {     var tmpoh = unescape(outHref);     var destUrl = tmpoh.substring(tmpoh.indexOf('DURL=')+5);     if (destUrl != null)     {      var destUrl = unescape(destUrl);      return destUrl;     }    }    // extract any fragment text, shouldn't be unescaped    var pound = outHref.indexOf("#");     if (pound != -1)    {     var fragment = outHref.substring(pound);     outHref = outHref.substring(0, pound);     outHref = unescape(outHref);     outHref += fragment;     if (searchshield.FilterUrl(outHref, this.filter_urls))      return false;     return outHref;    }    outHref = unescape(outHref);    if (outHref.indexOf("?") == -1)    {     var ampPos = outHref.indexOf("&amp;");     if (ampPos != -1)      outHref = outHref.substring(0, ampPos);    }        if (searchshield.FilterUrl(outHref, this.filter_urls))    {     var destUrl = searchshield.getHrefFromCiteElement(tag);     if (destUrl)      return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));     return false;    }    return outHref;   }  }  // recommended link - use following to see one  // http://www.google.cz/search?hl=cs&amp;q=warey&amp;btnG=Hledat&amp;lr=lang_cs  // elem parent class = r  // href must contain - url? and q=http  var parentNode = tag.parentNode;  if (parentNode &amp;&amp; (parentNode.className.toLowerCase() == "r"))  {   href = tag.href;   if (href &amp;&amp; (href.indexOf("/url?") != -1))   {    // locate the real url    var urlPos = href.indexOf("q=http");    if (urlPos != -1)    {     urlPos += 2;     outHref = href.substring(urlPos);     // include entire param up to '&amp;'     var ampPos = outHref.indexOf("&amp;");     if (ampPos != -1)      outHref = outHref.substring(0, ampPos);     return outHref;    }   }  } } // no link to self else if (tag.className &amp;&amp; (tag.className.charAt(0) == "l" || tag.className == "sla")) {  // check for any images on the link  if (0 === tag.getElementsByTagName("IMG").length)   return tag.href; } // else nothing return false;};///////////////    GOOGLE    //////////////////////////////    AVG GOOGLE SEARCH ENGINE    ///////////////searchshield.AVGGoogleSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.onlyPrimaries = false;};searchshield.AVGGoogleSearchEngine.prototype = new searchshield.SearchEngine();searchshield.AVGGoogleSearchEngine.prototype.constructor = searchshield.AVGGoogleSearchEngine;searchshield.AVGGoogleSearchEngine.prototype.name = "avggoogle"; // the name by which the search engine is known (always lowercase)searchshield.AVGGoogleSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var domain  = uri.host;  // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; if  (domain.indexOf("search.avg.com") &gt; -1) {   // ads link back to google  return true; }  return false;};searchshield.AVGGoogleSearchEngine.prototype.includeLink = function(tag){ var outHref = false; var findStr = ""; // check for interstitials if (searchshield.DoesURLContain(tag.href, "google.com")) {  // link back to self - DIV elem GrandParent class of res1 or res3 is Sponsored Link   var parentNode = tag.parentNode;  if (parentNode)  {   var grandParentNode = tag.parentNode.parentNode;   if (grandParentNode)   {    if ((grandParentNode.tagName == "DIV") &amp;&amp;      ((grandParentNode.className.toLowerCase() == "res1") ||     (grandParentNode.className.toLowerCase() == "res3")))    {     var urlPos = -1;      // ads now need unescaping     href = unescape(tag.href);     if (urlPos == -1)     {      if (href.indexOf("/aclk?sa=") != -1)      {        findStr = "&amp;adurl=http";       urlPos = href.indexOf(findStr);       if (urlPos != -1)        urlPos += 7; // puts it on the http              }     }     if (urlPos != -1)     {      outHref = href.substring(urlPos);      // the destination url is in the href string of this redirector      if (outHref.indexOf('xg4ken.com') &gt; -1)      {       urlPos = (unescape(outHref)).indexOf('url[]=') + 6;       var destUrl = (unescape(outHref)).substring(urlPos);       if (searchshield.FilterUrl(destUrl, this.filter_urls))       {        var destUrl = searchshield.getHrefFromCiteElement(tag);        if (destUrl)         return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));        return false;       }       return destUrl;      }      // filtered url but can get destination from href string      if (outHref.indexOf('altfarm.mediaplex.com') &gt; -1)      {       var tmpoh = unescape(outHref);       var destUrl = tmpoh.substring(tmpoh.indexOf('DURL=')+5);       if (destUrl != null)       {        var destUrl = unescape(destUrl);        return destUrl;       }      }          // extract any fragment text, shouldn't be unescaped      var pound = outHref.indexOf("#");       if (pound != -1)      {       var fragment = outHref.substring(pound);       outHref = outHref.substring(0, pound);       outHref = unescape(outHref);       outHref += fragment;       if (searchshield.FilterUrl(outHref, this.filter_urls))        return false;       return outHref;      }      outHref = unescape(outHref);      if (outHref.indexOf("?") == -1)      {       var ampPos = outHref.indexOf("&amp;");       if (ampPos != -1)        outHref = outHref.substring(0, ampPos);      }          if (searchshield.FilterUrl(outHref, this.filter_urls))      {       var destUrl = searchshield.getHrefFromCiteElement(tag);       if (destUrl)        return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));       return false;      }      return outHref;     }    }   }  } }    // no link to self else {  var parentNode = tag.parentNode;  if (parentNode)  {   var grandParentNode = tag.parentNode.parentNode;   if (grandParentNode)   {    if ((grandParentNode.tagName == "DIV") &amp;&amp;      (grandParentNode.className.toLowerCase() == "res2"))    {     // check for any images on the link     if (0 === tag.getElementsByTagName("IMG").length)      return tag.href;    }   }  } } // else nothing return false;}///////////////    AVG GOOGLE    //////////////////////////////    YAHOO SEARCH ENGINE    ///////////////searchshield.YahooSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false;};searchshield.YahooSearchEngine.prototype = new searchshield.SearchEngine();searchshield.YahooSearchEngine.prototype.constructor = searchshield.YahooSearchEngine;searchshield.YahooSearchEngine.prototype.name = "yahoo";searchshield.YahooSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var domain = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; // For Yahoo the host must match: // search.yahoo.com  OR // xx.search.yahoo.com where xx is the country code OR // search.yahoo.co.jp OR // for Yahoo China: one.cn.yahoo.com, search.cn.yahoo.com or www.yahoo.cn if ((domain.match(/search\.yahoo\.co(?:m|\.jp)/i) ||  domain.match(/(?:search|one)\.cn\.yahoo\.com/i) ||  domain.match(/www\.yahoo\.cn/i)) &amp;&amp;   path.match(/^(?:search[;?]|s\?)/i)) {  return true; } return false;};searchshield.YahooSearchEngine.prototype.includeLink = function(tag){ var href  = ""; var outHref  = ""; var findStr  = ""; // yahoo likes to encode the url href = unescape(tag.href); if ((tag.className.indexOf("yschttl") != -1) ||   (tag.className.indexOf("spt") != -1)) {  var da = href.indexOf("**");  var ad = href.indexOf("*-");  if (da != -1)   outHref = href.substring(da+2);  else if (ad != -1)   outHref = href.substring(ad+2);  else   outHref = href ;     if (outHref.toLowerCase().indexOf("overture.") !== -1)   return false; } else if ((tag.tagName)   &amp;&amp;     (tag.tagName === "A")  &amp;&amp;     (!tag.className)) {  var tagParent = tag.parentNode;    // if anchor without className then search parentNodes  if ((tagParent) &amp;&amp;   (tagParent.tagName !== "EM") &amp;&amp;   (searchshield.getParentNodeByClassName("yst-web", tag, 4)))  {   // China Yahoo support   outHref = href;  }    else if ((tagParent) &amp;&amp;    (tagParent.tagName === "H3") &amp;&amp;    (!!searchshield.getParentNodeById("WS2m",tag, 5)))  {   // Japan Yahoo support   var da = href.indexOf("**");   if (da == -1)    outHref = href;   else    outHref = href.substring(da+2);  }  else if ((tagParent) &amp;&amp;    (tagParent.className !== "c") &amp;&amp;    (tagParent.parentNode.id !== "fpn") &amp;&amp;    (!!searchshield.getParentNodeByClassName("ymc", tag, 7)))  {   // Korea Yahoo support - when not caught by yschttl   var da = href.indexOf("**");   if (da !== -1)    outHref = href.substring(da+2);  } } else if (!this.onlyPrimaries) {  findStr = "&amp;yargs=";  var yargs = href.indexOf(findStr);  if (yargs != -1)  {   outHref = href.substring(yargs+findStr.length);   // check for prefix   if (outHref.indexOf("://") == -1)    outHref = "http://" + outHref;   // if inside an &lt;i&gt;, probably a paypal link, don't include   if (tag.parentNode &amp;&amp; (tag.parentNode.tagName == "I"))    return false;  }  } // filter domains // split the url based on '/' var parts = !!outHref ? outHref.split('/') : null; // Filter out domains that match any of the search engine's names if (!parts || !parts[2])  return false;   var domain = parts[2]; if ((domain.indexOf("rdrjp.yahoo.com") != -1) ||  (domain.indexOf("rdrkrs.yahoo.com") != -1) ||  (domain.indexOf("rdrtpe.yahoo.com") != -1) ||  (domain.indexOf("rdrird.yahoo.com") != -1) ||  (domain.indexOf("rdrhk2.yahoo.com") != -1) ||  (domain.indexOf("rdrsg1.yahoo.com") != -1) ||  (domain.indexOf("rdrin2.yahoo.com") != -1) ||  (domain.indexOf("rdre1.yahoo.com") != -1) ||  (domain.indexOf("rdrw1.yahoo.com") != -1)  ) {  return false; } // set for yahoo to get parent node for image insertion var hash = searchshield.avgCallFunc(this.doc, 'GetHash', outHref); tag.setAttribute("id", "xplid_" + hash); return outHref;};///////////////    YAHOO SEARCH ENGINE    //////////////////////////////    AVG YAHOO SEARCH ENGINE    ///////////////searchshield.AVGYahooSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.omitAltImage = true; this.updateImageStyle = {  verticalAlign: null };};searchshield.AVGYahooSearchEngine.prototype = new searchshield.SearchEngine();searchshield.AVGYahooSearchEngine.prototype.constructor = searchshield.AVGYahooSearchEngine;searchshield.AVGYahooSearchEngine.prototype.name = "avgyahoo";searchshield.AVGYahooSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; //path may be 'avg/search' or 'search' var pathArray = uri.path.split("/"); var avg = pathArray[0]; // re stitch the uri path and query elements // to use existing logic var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1];  path += uri.delimiter + uri.query; // For AVG Yahoo classic the host must match: // yhs.search.yahoo.com OR // .yhs.search.yahoo.com if (domain.indexOf("yhs.search.yahoo.co") != -1) {  if ((avg == "avg") &amp;&amp;   ((path.indexOf("search?") == 0) ||    (path.indexOf("search;") == 0)))  {   return true;  } }  // also support new metro version which DOESN'T  // contain /avg so avg split part is path // valid domains are: // search.yahoo.com,  // xx.search.yahoo.com and // search.yahoo.co.xx if (domain.indexOf("search.yahoo.co") != -1)  {  // path (split avg) must start with search and  // contain the avg toolbar parameter  if (((path.indexOf("search?") == 0) ||   (path.indexOf("search;") == 0)) &amp;&amp;   (path.indexOf("fr=yhs-avg") != -1))  {   return true;  } } return false;};searchshield.AVGYahooSearchEngine.prototype.includeLink = function(tag){ var href  = ""; var outHref  = ""; var findStr  = ""; if (this.search.doc.body.className.toLowerCase() != "standard") { // handle as std Yahoo results page  return searchshield.YahooSearchEngine.prototype.includeLink(tag); }  // yahoo likes to encode the url href = unescape(tag.href); if (tag.target == "_top") {  var da = href.indexOf("**");  if (da != -1)   outHref = href.substring(da+2);  else   outHref = href ;  if (outHref.toLowerCase().indexOf("overture.") !== -1)   return false; } else if (!this.onlyPrimaries) {  findStr = "&amp;yargs=";  var yargs = href.indexOf(findStr);  if (yargs != -1)  {   outHref = href.substring(yargs+findStr.length);   // check for prefix   if (outHref.indexOf("://") == -1)    outHref = "http://" + outHref;   // if inside an &lt;i&gt;, probably a paypal link, don't include   if (tag.parentNode &amp;&amp; (tag.parentNode.tagName == "I"))    return false;  }  } // filter domains // split the url based on '/' var parts = outHref.split('/'); // Filter out domains that match any of the search engine's names if (!parts[2])  return false;   var domain = parts[2]; if ((domain.indexOf("rdrjp.yahoo.com") != -1) ||  (domain.indexOf("rdrkrs.yahoo.com") != -1) ||  (domain.indexOf("rdrtpe.yahoo.com") != -1) ||  (domain.indexOf("rdrird.yahoo.com") != -1) ||  (domain.indexOf("rdrhk2.yahoo.com") != -1) ||  (domain.indexOf("rdrsg1.yahoo.com") != -1) ||  (domain.indexOf("rdrin2.yahoo.com") != -1) ||  (domain.indexOf("rdre1.yahoo.com") != -1) ||  (domain.indexOf("rdrw1.yahoo.com") != -1)  ) {  return false; } return outHref;};///////////////    AVG YAHOO SEARCH ENGINE    //////////////////////////////    MSN SEARCH ENGINE    ///////////////searchshield.MSNSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.onlyPrimaries = false;};searchshield.MSNSearchEngine.prototype = new searchshield.SearchEngine();searchshield.MSNSearchEngine.prototype.constructor = searchshield.MSNSearchEngine;searchshield.MSNSearchEngine.prototype.name = "msn";searchshield.MSNSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var hostMatch = false; var domain  = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; // For MSN the host must match: // search.msn.com  OR // search.live.com if (domain.indexOf("search.msn.co") &gt; -1) {  if (domain.charAt(13) == 'm')   hostMatch = true;  else if ((domain.charAt(13) == '.') &amp;&amp; (domain.length == 16))   hostMatch = true; } else if (domain.indexOf("search.live.co") &gt; -1) {  if (domain.charAt(14) == 'm')   hostMatch = true;  else if ((domain.charAt(14) == '.') &amp;&amp; (domain.length == 17))   hostMatch = true; }  if (hostMatch) {  if (path.indexOf("results.aspx") == 0)   return true; } return false;};searchshield.MSNSearchEngine.prototype.includeLink = function(tag){ var outHref = false;  // these don't seem common from Firefox, but they are in IE if (searchshield.DoesURLContain(tag.href, "g.msn.co")) {  var qPos = tag.href.indexOf("?");  if (qPos != -1)  {   var postPart = tag.href.substring(qPos+1);   var dblAmp = postPart.indexOf("&amp;&amp;");   if (dblAmp != -1)   {    outHref = postPart.substring(0, dblAmp);    return outHref;   }  } } else if (searchshield.DoesURLContain(tag.href, "r.msn.co")) {  var element = tag;  var parentNode = tag.parentNode;  // top links - check for a CITE  var spanElements = element.getElementsByTagName("CITE");  if ((spanElements != null)    &amp;&amp;    (spanElements.length &gt; 0))  {   outHref = spanElements[0].innerHTML;   // replace any nbsp's   outHref = outHref.replace("&amp;nbsp;", " ");   // url is after the last space in the html, after the '-'   var space_pos = outHref.lastIndexOf(" ");   if (space_pos != -1)    outHref = outHref.slice(space_pos + 1);   outHref = searchshield.checkUrl(outHref);   return outHref;  }    // side links   if (element.lastChild != null)  {   outHref = element.lastChild.innerHTML;   if ( outHref != null)   {    outHref = searchshield.checkUrl(outHref);    return outHref;   }  } } else if (searchshield.DoesURLContain(tag.href, this.search.uri.host)     ||    searchshield.DoesURLContain(tag.href, ".live.com")     ||    searchshield.DoesURLContain(tag.href, "msn.")      ||    searchshield.DoesURLContain(tag.href, "msnscache.com")    ||    searchshield.DoesURLContain(tag.href, "advertising.microsoft.co") ||    searchshield.DoesURLContain(tag.href, "javascript:")    ||    searchshield.DoesURLContain(tag.href, "go.microsoft.co")   ||    searchshield.DoesURLContain(tag.href, "hotmail.co")) {  // not a link  return false; } else if (tag.id.toLowerCase() == "trademarks") {  // don't link the trademark at the bottom of the page  return false; } else {  // include it  return tag.href; }};///////////////    MSN SEARCH ENGINE    //////////////////////////////    BING SEARCH ENGINE    ///////////////searchshield.BingSearchEngine = function(search){ searchshield.SearchEngine.call(this, search);};searchshield.BingSearchEngine.prototype = new searchshield.SearchEngine();searchshield.BingSearchEngine.prototype.constructor = searchshield.BingSearchEngine;searchshield.BingSearchEngine.prototype.name = "bing";searchshield.BingSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var hostMatch = false; var domain  = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query;  // For bing the host must match: // www.bing.com or www.bing.net // xx.bing.com or xx.bing.net where xx is a country code // bing.com.xx where xx is a country code // bing.search.xxxx.net where xxxx may be something like daum if ((domain.indexOf("www.bing.com") !== -1) ||  (domain.indexOf("www.bing.net") !== -1) ||  (domain.indexOf("bing.net") !== -1)) {  hostMatch = true; } else if ((domain.indexOf("bing.search.") !== -1) &amp;&amp;     (domain.indexOf(".net") === (domain.length-4)))  { //bing.search.xxxx.net  hostMatch = true; } else { // xx.bing.com or bing.com.xx  var domainLen = domain.length;  var tldPos = domain.indexOf(".bing.com");  if (tldPos &gt; -1)  {   if ((domainLen - tldPos) == 9)    hostMatch = true;  }  }  if (hostMatch) {  var displayStyle = (domain == 'bing.search.daum.net') ? 'inline-block' : 'inline';  this.addAnchorStyle = {   display: displayStyle  };    if (path.indexOf("search?") == 0)   return true; } return false;};searchshield.BingSearchEngine.prototype.includeLink = function(tag){ var outHref = false; if (tag.tagName == 'IMG') { //no images   return false; }   if (tag.href.charAt(0) == '/') { //no relative links  return false; } if (/trademarks/i.test(tag.id)) {  // don't link the trademark at the bottom of the page  return false; }  if ((tag.parentNode) &amp;&amp; (/sc_stc/i.test(tag.parentNode.id))) { // don't verdict the social sites - our verdict doesn't fit  return false; } else if (!!searchshield.getParentNodeByClassName("sw_t",tag,3)) { // no links in page header  return false; } else if (searchshield.DoesURLContain(tag.href, "r.msn.co") ||    searchshield.DoesURLContain(tag.href, "overture.com")) { // france has r.msn.co and italy has overture.com sponsored links  // with the link in CITE element    var spanElements = null;    // top links - check for a CITE  spanElements = tag.getElementsByTagName("CITE");  if ((spanElements == null) || (spanElements.length &lt;= 0))  {   if (tag.parentNode &amp;&amp; tag.parentNode.parentNode)    spanElements = tag.parentNode.parentNode.getElementsByTagName("CITE");  }    if ((spanElements != null) &amp;&amp; (spanElements.length &gt; 0))  {   outHref = spanElements[0].innerHTML;   if (outHref != null)   {    // replace any nbsp's    outHref = outHref.replace("&amp;nbsp;", " ");    // url is after the last space in the html, after the '-'    var space_pos = outHref.lastIndexOf(" ");    if (space_pos != -1)     outHref = outHref.slice(space_pos + 1);    outHref = searchshield.checkUrl(outHref);    // save the link    return outHref;   }  }    // side links   if (tag.lastChild != null)  {   outHref = tag.lastChild.innerHTML;   if (outHref != null)   {    outHref = searchshield.checkUrl(outHref);    // save the link    return outHref;   }  } } // no sponsored links for now  else if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||   searchshield.DoesURLContain(tag.href, ".live.com")    ||   searchshield.DoesURLContain(tag.href, ".bing.com")    ||   searchshield.DoesURLContain(tag.href, ".bing.net")    ||   searchshield.DoesURLContain(tag.href, ".daum.net")    ||   searchshield.DoesURLContain(tag.href, ".gmarket.co")   ||   searchshield.DoesURLContain(tag.href, ".multimap.com")   ||   searchshield.DoesURLContain(tag.href, "msn.")     ||   searchshield.DoesURLContain(tag.href, "ms.ciao.")    ||   searchshield.DoesURLContain(tag.href, "ms.ciao-")    ||   searchshield.DoesURLContain(tag.href, "advertising.microsoft.co") ||   searchshield.DoesURLContain(tag.href, "javascript:")    ||   searchshield.DoesURLContain(tag.href, "go.microsoft.co")   ||   searchshield.DoesURLContain(tag.href, "hotmail.co")     ||   searchshield.DoesURLContain(tag.href, "cc.bingj.com")    ||   searchshield.DoesURLContain(tag.href, "microsofttranslator.com") ||   searchshield.DoesURLContain(tag.href, ".engkoo.com")    ||   searchshield.DoesURLContain(tag.href, "sealinfo.verisign.com")  ||   searchshield.DoesURLContain(tag.href, "explabs.com")    ||   searchshield.DoesURLContain(tag.href, "onlinehelp.microsoft.com") ||   searchshield.DoesURLContain(tag.href, ".myoverture")) {  // not a link  return false; } else  return tag.href;};searchshield.BingSearchEngine.prototype.addImage = function(node, image, hidden){ var element = node.element; var parentNode  = node.element.parentNode; var grandParentNode = !!parentNode ? parentNode.parentNode : null; // if there are redundant links in the same grandparent then skip them if (!!grandParentNode) {  gpChildren = grandParentNode.childNodes;  for (var i=0; i &lt; gpChildren.length; i++)  {   if (!!element.href &amp;&amp; gpChildren[i].tagName == "A" &amp;&amp; gpChildren[i].href == element.href)    return;  } } var parent = searchshield.SearchEngine.prototype.addImage; return parent.call(this, node, image, hidden);};///////////////    BING SEARCH ENGINE    //////////////////////////////    BAIDU SEARCH ENGINE    ///////////////searchshield.BaiduSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.updateImageStyle = {  verticalAlign: null };};searchshield.BaiduSearchEngine.prototype = new searchshield.SearchEngine();searchshield.BaiduSearchEngine.prototype.constructor = searchshield.BaiduSearchEngine;searchshield.BaiduSearchEngine.prototype.name = "baidu";searchshield.BaiduSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var hostMatch = false; var domain  = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query;  if (domain == "www.baidu.com" || path.indexOf("testBaidu") !== -1)  hostMatch = true;   if (hostMatch) {  if (path.indexOf("s?") == 0)   return true; } return false;};searchshield.BaiduSearchEngine.prototype.includeLink = function(tag){    if (tag.className &amp;&amp; tag.className == "m")   return false;  if (searchshield.DoesURLContain(tag.href, this.search.uri.host))   return false;  else   {   // no link to self   var traverseElement = tag.parentNode;   while ( traverseElement &amp;&amp; traverseElement.className != "tbody")   {    if (traverseElement.className == "f")     return tag.href;    traverseElement = traverseElement.parentNode;   }      return false;  }};///////////////    BAIDU SEARCH ENGINE    //////////////////////////////    EARTHLINK SEARCH ENGINE    ///////////////searchshield.EarthlinkSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.onlyPrimaries = false; this.addAnchorStyle = {  position: "static" };};searchshield.EarthlinkSearchEngine.prototype = new searchshield.SearchEngine();searchshield.EarthlinkSearchEngine.prototype.constructor = searchshield.EarthlinkSearchEngine;searchshield.EarthlinkSearchEngine.prototype.name = "earthlink";searchshield.EarthlinkSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var hostMatch = false; var domain  = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; // For EarthLink the host must match: // search.earthlink.net if (("search.earthlink.net" == domain) &amp;&amp;  (path.indexOf("search?") == 0)) {  return true; } return false;};searchshield.EarthlinkSearchEngine.prototype.includeLink = function(tag){ var outHref = ""; var findStr = ""; // check for an anchor if (tag.tagName == "A") {  // check for sponsored  if (tag.id.indexOf("a") == 0)  {   var q = tag.href.indexOf("&amp;q=");   var qlen = 3;   if (q == -1)   {    q = tag.href.indexOf("&amp;adurl=");    qlen = 7;    if (q == -1)     return false;   }   // find end of url   var end = tag.href.indexOf("&amp;", q+qlen);   if (end &lt; 0)    end = tag.href.length;   // add the link   outHref = tag.href.substring(q+qlen, end);      if (searchshield.FilterUrl(outHref, this.filter_urls))    return false;       return outHref;  }  // don't search url's to self  if ((tag.href.indexOf("://") == -1) || searchshield.DoesURLContain(tag.href, this.search.uri.host))   return false;  // if a normal web result add it  if (tag.parentNode &amp;&amp; (tag.parentNode.tagName == "H3") &amp;&amp;   tag.parentNode.parentNode &amp;&amp; (tag.parentNode.parentNode.tagName == "LI") &amp;&amp;   tag.parentNode.parentNode.parentNode &amp;&amp; (tag.parentNode.parentNode.parentNode.tagName == "UL"))  {   if (searchshield.FilterUrl(tag.href, this.filter_urls))    return false;       return tag.href;  } }  return false;};///////////////    EARTHLINK SEARCH ENGINE    //////////////////////////////    AOL SEARCH ENGINE    ///////////////searchshield.AOLSearchEngine = function(search){ searchshield.SearchEngine.call(this, search);  this.addImageStyle = {  display: "inline" }; this.addAnchorStyle = {  display: null }; this.updateImageStyle = {  verticalAlign: null,  display: "inline" };};searchshield.AOLSearchEngine.prototype = new searchshield.SearchEngine();searchshield.AOLSearchEngine.prototype.constructor = searchshield.AOLSearchEngine;searchshield.AOLSearchEngine.prototype.name = "aol";searchshield.AOLSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain = uri.host; //path may be 'aol/search' or 'search' var pathArray = uri.path.split("/"); var aol = pathArray[0]; // re stitch the uri path and query elements // to use existing logic var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1];  path += uri.delimiter + uri.query; if (/search\.aol\.com/.test(domain)) {  if ((aol == "aol") &amp;&amp;   (path.indexOf("search?") == 0))  {   return true;  } }  return false;};searchshield.AOLSearchEngine.prototype.includeLink = function(tag){ if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;  // sponsored links - google if ((tag.className) &amp;&amp; (tag.className.indexOf("slLink topAnchor") != -1)) { //parse for embedded href  if (tag.href.indexOf("/aclk?sa=") == -1)   return false;  var adurl = tag.href.indexOf("&amp;adurl=http");  // if an adurl the destination href can be acquired from the onclick handler  if (adurl != -1)  {   var destUrl;   var clickHandler = tag.getAttribute('onclick');   if (clickHandler != null)   {    // the destination href is the 2nd parameter (zero-based array)    destUrl = searchshield.getClickHandlerParams(clickHandler)[1];    if (destUrl != null)    {     destUrl = searchshield.removeHtmlTags(destUrl.replace(/'/g,''));     return searchshield.checkUrl(destUrl);    }   }  }  return false; } if (tag.className == "find")  return tag.href;   return false;};searchshield.AOLSearchEngine.prototype.insertNodes = function(node, doc){ var element = node.element; var score = node.score; if (element &amp;&amp; element.className &amp;&amp; element.className.indexOf("slLink") != -1) { //sponsored links only  // for alt image  if (score == searchshield.SCORE_SS_VERISIGN)   return [element.nextSibling, element.parentNode];  // for verdict image  var cN = element.childNodes;  var cnLen = cN.length;  for (var i=0; i &lt; cnLen; i++)  {   if ((cN[i].nodeType == 1) &amp;&amp;     (cN[i].nodeName == 'SPAN') &amp;&amp;     ((cN[i].className == 'title') || (cN[i].className == 'durl')))    return [cN[i].nextSibling, cN[i].parentNode];  } } var parent = searchshield.SearchEngine.prototype.insertNodes; return parent.call(this, node, doc);};///////////////    AOL SEARCH ENGINE    //////////////////////////////    ASK SEARCH ENGINE    ///////////////searchshield.AskSearchEngine = function(search){ searchshield.SearchEngine.call(this, search);};searchshield.AskSearchEngine.prototype = new searchshield.SearchEngine();searchshield.AskSearchEngine.prototype.constructor = searchshield.AskSearchEngine;searchshield.AskSearchEngine.prototype.name = "ask";searchshield.AskSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query;  if ("www.ask.com" == domain) {  if (path.indexOf("web?") == 0)   return true; } return false;};searchshield.AskSearchEngine.prototype.includeLink = function(tag){ var outHref = ""; var findStr = ""; if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;  if ((tag.className) &amp;&amp; (tag.className.indexOf("nu") != -1) &amp;&amp; (tag.className.indexOf("info") == -1))  {  // exclude green links  if ((tag.firstChild) &amp;&amp;   (tag.firstChild.className) &amp;&amp;   (tag.firstChild.className.indexOf('attrib') == 0))  {   return false;  }  // ads link to google with class nu  findStr = "www.google.com";  if (tag.href.indexOf(findStr) != 0)  {   if (tag.href.indexOf(findStr + "/aclk?sa=") != -1)   {     findStr = "&amp;adurl=http";    var pos = tag.href.indexOf(findStr);    if (pos != -1)    {     pos += 7;     outHref = tag.href.substring(pos);     outHref = unescape(outHref);     if (searchshield.FilterUrl(outHref, this.filter_urls))       return false;     return outHref;    }   }  }  else  { // ad not to google just use href   outHref = tag.href;   if (searchshield.FilterUrl(outHref, this.filter_urls))    return false;   return outHref;  } } // primary results have class containing title or L2 ( Wikipedia links ) else if ((tag.className) &amp;&amp; ((tag.className.indexOf("title") != -1) || (tag.className.toLowerCase() == "l2"))) {  outHref = tag.href;  if (searchshield.FilterUrl(outHref, this.filter_urls))   return false;  return outHref; }  return false;};///////////////    ASK SEARCH ENGINE    //////////////////////////////    ALTAVISTA SEARCH ENGINE    ///////////////searchshield.AltaVistaSearchEngine = function(search){ searchshield.SearchEngine.call(this, search);};searchshield.AltaVistaSearchEngine.prototype = new searchshield.SearchEngine();searchshield.AltaVistaSearchEngine.prototype.constructor = searchshield.AltaVistaSearchEngine;searchshield.AltaVistaSearchEngine.prototype.name = "altavista";searchshield.AltaVistaSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host;  // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; // www.atlavista.com ---&gt; now http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista&amp;fr=altavista&amp;itag=ody&amp;q=warez&amp;kgs=1&amp;kls=0 // xx.altavista.com where xx is a country code var hostMatch = false; if ("www.altavista.com" == domain) {  hostMatch = true; } else {  // xx.altavista.com  var pDest = domain.indexOf(".altavista.com");  if ((pDest != -1 ) &amp;&amp; ((domain.length - pDest) == 14))  {   hostMatch = true;  }  else  {   // a reference to altavista must be present in yahoo search url   var pRef = (uri.qsArray.fr &amp;&amp; uri.qsArray.fr == 'altavista');   pDest = domain.indexOf("search.yahoo.com");   if (pDest != -1 &amp;&amp; pRef)    hostMatch = true;  } } if (hostMatch) {  //path must start with web/results?  if ((path.indexOf("yhs/search?") == 0) ||   (path.indexOf("search;") == 0)  ||   (path.indexOf("yhs/search;") == 0) ||   (path.indexOf("web/results?") == 0)||   (path.indexOf("fr=altavista") != -1))  {   return true;  } }  return false;};searchshield.AltaVistaSearchEngine.prototype.includeLink = function(tag){ var outHref = ""; var findStr = ""; // initial checks if ((!tag.href) ||   (tag.href.charAt(0) == '#') ||  (tag.href.indexOf("javascript:") == 0)) {  return false; }   if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;  var spnsdLinks = searchshield.getParentNodeByTagName("DIV", tag, "className"); if ((spnsdLinks) &amp;&amp;  (spnsdLinks.className.indexOf('ads') &gt; -1)) // sponsored links {  if (!tag.parentNode)   return false;  // parse ads for em tag  var baseNode;  if (spnsdLinks.className.indexOf('ads horiz') &gt; -1) // horizontal ads sections   baseNode = tag.parentNode.parentNode;  else   baseNode = tag.parentNode;    if (!baseNode || !baseNode.lastChild || baseNode.lastChild.tagName != 'EM')   return false;  var outHref = searchshield.removeHtmlTags(baseNode.lastChild.innerHTML);  return outHref; }  if ((tag.className == "spt") ||   (tag.className == "res") ||  (tag.className == "yschttl spt")) {  findStr = "/**";  var pos = tag.href.indexOf(findStr);  if (pos != -1)  {   pos += 3;   outHref = tag.href.substring(pos);   outHref = unescape(outHref);      // no results for overture.com &amp; no yahoo domains   chkHref = outHref.toLowerCase();   if (chkHref.indexOf("overture.") != -1)    return false;   // split the url based on '/'   var parts = outHref.split('/');   // only need a domain   if ((parts != null) &amp;&amp; (parts[2] != null))   {    var domain = parts[2];    if ((domain.indexOf("rdrjp.yahoo.com") != -1) ||     (domain.indexOf("rdrkrs.yahoo.com") != -1) ||     (domain.indexOf("rdrtpe.yahoo.com") != -1) ||     (domain.indexOf("rdrird.yahoo.com") != -1) ||     (domain.indexOf("rdrhk2.yahoo.com") != -1) ||     (domain.indexOf("rdrsg1.yahoo.com") != -1) ||     (domain.indexOf("rdrin2.yahoo.com") != -1) ||     (domain.indexOf("rdre1.yahoo.com") != -1) ||     (domain.indexOf("rdrw1.yahoo.com") != -1)  )    {     return false    }   }   return outHref;  }  else  {   return tag.href;  } }  return false;};searchshield.AltaVistaSearchEngine.prototype.getImgElement = function (element){ while (element != null)  {  element = element.nextSibling;  if (element != null)  {   if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1))   {   // not our id but hit another anchor no verdict    if (element.tagName == "A")    {     element = null;     break;    }   }   else if (element.tagName == "A")    break;  } }   var rtnElem = !!element ? element.firstChild : element; return rtnElem;};///////////////    ALTAVISTA SEARCH ENGINE    //////////////////////////////    YANDEX SEARCH ENGINE    ///////////////searchshield.YandexSearchEngine = function(search){ searchshield.SearchEngine.call(this, search);};searchshield.YandexSearchEngine.prototype = new searchshield.SearchEngine();searchshield.YandexSearchEngine.prototype.constructor = searchshield.YandexSearchEngine;searchshield.YandexSearchEngine.prototype.name = "yandex";searchshield.YandexSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.match(/yandex\.com|by|kz|ru|ua/i)) &amp;&amp;  (path.indexOf("yandsearch?") == 0)) {  return true; }  return false;};searchshield.YandexSearchEngine.prototype.includeLink = function(tag){ if (tag.href.indexOf("/search") != -1) {  return false; }  if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||  searchshield.DoesURLContain(tag.href, ".yandex.net")  ||  searchshield.DoesURLContain(tag.href, ".yandex.ru")   ||  searchshield.DoesURLContain(tag.href, "moikrug.ru")   ||  searchshield.DoesURLContain(tag.href, "ya.ru")    ||  searchshield.DoesURLContain(tag.href, ".yandex.com")  ||  searchshield.DoesURLContain(tag.href, "yandex.st")) {  return false; }   parentNode = tag.parentNode; if ((tag.parentNode)   &amp;&amp;   (tag.parentNode.parentNode) &amp;&amp;  (tag.parentNode.parentNode.className.toLowerCase() == "moreinfo")) {  return false; }  return tag.href;};searchshield.YandexSearchEngine.prototype.getImgElement = function (element){ while (element != null)  {  element = element.nextSibling;  if (element != null)  {   if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1))   {   // not our id but hit another anchor no verdict    if (element.tagName == "A")    {     element = null;     break;    }   }   else if (element.tagName == "A")    break;  } }   var rtnElem = !!element ? element.firstChild : element; return rtnElem;};///////////////    YANDEX SEARCH ENGINE    //////////////////////////////    SEZNAM SEARCH ENGINE    ///////////////searchshield.SeznamSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.elementAttribute = {  width: "18",  height: "18" }; this.updateImageStyle = {  width: "18px",  height: "18px" };};searchshield.SeznamSearchEngine.prototype = new searchshield.SearchEngine();searchshield.SeznamSearchEngine.prototype.constructor = searchshield.SeznamSearchEngine;searchshield.SeznamSearchEngine.prototype.name = "seznam";searchshield.SeznamSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("search.seznam.cz") &gt; -1) &amp;&amp;  ((path.indexOf("?") == 0) || (path.indexOf("svet") == 0))) {  return true; }  return false;};searchshield.SeznamSearchEngine.prototype.includeLink = function(tag){ if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;  var parentNode = tag.parentNode; if (parentNode) {  var grandParentNode = tag.parentNode.parentNode;  if ((parentNode.tagName == "SPAN") &amp;&amp;    ((parentNode.className.toLowerCase() == "sklik-url") ||   (parentNode.className.toLowerCase() == "sklik-title")))  { // locate the real url and unencode it   var urlPos = tag.href.indexOf("&amp;url=http");   if (urlPos != -1)   {    urlPos += 5;     outHref = tag.href.substring(urlPos);    outHref = unescape(outHref);    return outHref;   }  }  else if (grandParentNode)   {   var greatGrandParentNode = tag.parentNode.parentNode.parentNode;   if ((grandParentNode.tagName == "DIV") &amp;&amp;    ((grandParentNode.className.toLowerCase() == "text") || (grandParentNode.className.toLowerCase() == "hlasky otz")))   { // standard link    return tag.href;   }   else if (greatGrandParentNode &amp;&amp; greatGrandParentNode.tagName == "DIV" &amp;&amp;     (greatGrandParentNode.className.toLowerCase() == "hotlinks"))    { // hint link    return tag.href;   }     } }  return false;};///////////////    SEZNAM SEARCH ENGINE    //////////////////////////////    WEBHLEDANI SEARCH ENGINE    ///////////////searchshield.WebhledaniSearchEngine = function(search){ searchshield.SearchEngine.call(this, search);};searchshield.WebhledaniSearchEngine.prototype = new searchshield.SearchEngine();searchshield.WebhledaniSearchEngine.prototype.constructor = searchshield.WebhledaniSearchEngine;searchshield.WebhledaniSearchEngine.prototype.name = "webhledani";searchshield.WebhledaniSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("webhledani.cz") &gt; -1) &amp;&amp;  (path.indexOf("results.aspx?") == 0)) {  return true; }  return false;};searchshield.WebhledaniSearchEngine.prototype.includeLink = function(tag){ if (tag.href.indexOf("/redir.aspx?") != -1) {  var ancestorNode;  // sponsored link  if ((ancestorNode = searchshield.getParentNodeByClassName("results sponsored", tag, 3)) != null)  {   if ((ancestorNode = searchshield.getParentNodeByClassName("res1", tag, 2)) != null)   {        var spanSibling = ancestorNode.nextSibling;    while (spanSibling.nodeName != 'SPAN')    {     spanSibling = spanSibling.nextSibling;     if (spanSibling.nodeName == 'DIV' || spanSibling.className == 'res1')     {      spanSibling = null;      break;     }    }    if (spanSibling)      outHref = spanSibling.innerHTML;   }   if (outHref)    return searchshield.checkUrl(searchshield.removeHtmlTags(outHref));   }   if ((ancestorNode = searchshield.getParentNodeByClassName("right-sponsored", tag, 3)) != null)  {   var outHref;   if ((ancestorNode = searchshield.getParentNodeByClassName("res3", tag, 2)) != null)   {        var spanSibling = ancestorNode.nextSibling;    while (spanSibling.nodeName != 'SPAN')    {     spanSibling = spanSibling.nextSibling;     if (spanSibling.nodeName == 'DIV' || spanSibling.className == 'res3')     {      spanSibling = null;      break;     }    }    if (spanSibling)      outHref = spanSibling.innerHTML;   }   if (outHref)    return searchshield.checkUrl(searchshield.removeHtmlTags(outHref));   }  // result link  if (searchshield.getParentNodeByClassName("results", tag, 3) != null)  {   if ((ancestorNode = searchshield.getParentNodeByClassName("res2", tag, 2)) != null)   {    if (tag.parentNode &amp;&amp; (tag.parentNode.nodeName != 'P'))     return getLinkHref(ancestorNode);   }  } } return false; function getLinkHref(aNode) {  var spanElems = aNode.getElementsByTagName('span');  for (var i=0; i &lt; spanElems.length; i++)  {   if (spanElems[i].className != 'site')    continue;   var outAnchor = spanElems[i].getElementsByTagName('a')[0];   if (outAnchor == null)    outAnchor = spanElems[i];   return searchshield.checkUrl(searchshield.removeHtmlTags(outAnchor.innerHTML));  }  return false; }};///////////////    WEBHLEDANI SEARCH ENGINE    //////////////////////////////    EBAY SEARCH ENGINE    ///////////////searchshield.eBaySearchEngine = function(search){ searchshield.SearchEngine.call(this, search);};searchshield.eBaySearchEngine.prototype = new searchshield.SearchEngine();searchshield.eBaySearchEngine.prototype.constructor = searchshield.eBaySearchEngine;searchshield.eBaySearchEngine.prototype.name = "ebay";searchshield.eBaySearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // shop.ebay.xx // shop.xxxx.ebay.xx like shop.benl.ebay.be // search.auction.co.kr  var path = uri.path + uri.delimiter + uri.query;  if ((domain.indexOf("shop.ebay") &gt; -1) ||  (domain.indexOf("shop.benl.ebay") &gt; -1)) {  if ((path.indexOf("?_from=") == 0) ||   (path.indexOf("i.html") &gt; -1))  {   return true;  } }  // ebay.se if ((domain.indexOf("search.eim.ebay") &gt; -1) &amp;&amp;  ((path.indexOf("?kw=") &gt; -1) || (path.indexOf("?ev=") &gt; -1))) {  return true; }  if ((domain.indexOf("search.auction.co.kr") &gt; -1 ) &amp;&amp;  ((path.indexOf("?keyword=") &gt; -1))) {  // would normally set these properties in the constructor or in an  // overriding function but they're only required for this domain     // links are in iframes  this.processFrames = true;    // must downsize verdicts for proper display  this.elementAttribute = {   width: "16",   height: "16"  };  this.updateImageStyle = {   width: "16px",   height: "16px"  };    return true; } // latin america ebay // listado.mercadolibre.com.xx or listado.mercadolibre.co.xx //   or listado.mercadolibre.xx or //   category.mercadolibre.com.xx or listado.mercadolibre.xx/category // lista.mercadolivre.com.xx or lista.mercadolivre.com.xx/category if ((domain.indexOf("www.") == -1) &amp;&amp;  ((domain.indexOf(".mercadolibre.") &gt; -1 ) ||   (domain.indexOf(".mercadolivre.") &gt; -1 )))  {  return true; } return false;};searchshield.eBaySearchEngine.prototype.includeLink = function(tag){ var parentNode = null; var outHref = false;  if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;  if ( tag.href.indexOf(".ebayrtm.com/clk?") &gt; -1 ) {  if ( tag.title == null || tag.title.length &lt; 0 )   return false;       outHref = searchshield.removeHtmlTags(tag.title);  if (outHref.indexOf(" ") == -1)  { // no spaces   if (outHref.indexOf(".") &gt; -1)   { // at least one dot     if (outHref.indexOf(this.search.uri.host) == -1)    { // no host     if (outHref.toLowerCase().indexOf("ebay.com") == -1)     {      return outHref;     }    }   }  }    } // ebay.se - Google ads parentNode = tag.parentNode; if (parentNode &amp;&amp; (parentNode.className.toLowerCase() == "google-ad-link")) {  if (tag.href.indexOf("/aclk?sa=") != -1)  {    findStr = "&amp;adurl=http";   var urlPos = tag.href.indexOf(findStr);   if (urlPos != -1)   {    urlPos += 7; // puts it on the http    outHref = tag.href.substring(urlPos);        // extract any fragment text, shouldn't be unescaped    var pound = outHref.indexOf("#");     if (pound != -1)    {     var fragment = outHref.substring(pound);     outHref = outHref.substring(0, pound);     outHref = unescape(outHref);     outHref += fragment;     if (searchshield.FilterUrl(outHref, this.filter_urls))      return false;     return outHref;    }    outHref = unescape(outHref);    if (outHref.indexOf("?") == -1)    {     var ampPos = outHref.indexOf("&amp;");     if (ampPos != -1)      outHref = outHref.substring(0, ampPos);    }        if (searchshield.FilterUrl(outHref, this.filter_urls))     return false;    return outHref;   }  } }  // auction.co.kr parentNode = tag.parentNode; if (parentNode &amp;&amp; (parentNode.className.toLowerCase() == "link")) {  if (tag.href.indexOf("adcr.naver.com") &gt; -1)  {   outHref = tag.innerText;   if ((outHref == null) || (outHref.length &lt; 0))    return false;       return outHref;  } }  // latin america ebay if ( tag.href.toLowerCase().indexOf("clickcounter?") &gt; -1 ) {  var spanElements = tag.getElementsByTagName("span");  if ((spanElements != null)    &amp;&amp;    (spanElements.length &gt; 0))  {   if ( spanElements[0].className.toLowerCase() == "mclics-url" )   {    outHref = spanElements[0].innerHTML;    if ( outHref == null || outHref.length &lt; 0 )     return false;    outHref = searchshield.removeHtmlTags(outHref);    if (outHref.indexOf(" ") == -1)    { // no spaces     if (outHref.indexOf(".") &gt; -1)     { // at least one dot       if ((outHref.toLowerCase().indexOf("mercadolibre") == -1) &amp;&amp;        (outHref.toLowerCase().indexOf("mercadolivre") == -1))       {       return outHref;      }     }    }   }  } }  return false;};///////////////    EBAY SEARCH ENGINE    //////////////////////////////    DIGG SEARCH ENGINE    ///////////////searchshield.DiggSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.new_links = false;};searchshield.DiggSearchEngine.prototype = new searchshield.SearchEngine();searchshield.DiggSearchEngine.prototype.constructor = searchshield.DiggSearchEngine;searchshield.DiggSearchEngine.prototype.name = "digg";searchshield.DiggSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query;  if ((domain.indexOf("digg.com") &gt; -1) &amp;&amp;  (path.indexOf("/ad") == -1)) {  return true; }  return false;};searchshield.DiggSearchEngine.prototype.includeLink = function(tag){ var outHref = false; var findStr = "";  if ((tag.parentNode) &amp;&amp;  (tag.parentNode.className.toLowerCase() == "digg-count")) {  return false; }  if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) {  if (tag.className &amp;&amp; tag.className.indexOf('source') != -1)  {   findStr = "/search?q=site:";   var urlPos = tag.href.indexOf(findStr);   if (urlPos != -1)   {    urlPos += 15;    outHref = tag.href.substring(urlPos);    return outHref;   }  } }  return false;};searchshield.DiggSearchEngine.prototype.addImage = function(node, image, hidden){ // remove style that is set when alt image is applied this.addAnchorStyle = {  background: "none" };   var parent = searchshield.SearchEngine.prototype.addImage; return parent.call(this, node, image, hidden);};///////////////    DIGG SEARCH ENGINE    //////////////////////////////    SLASHDOT SEARCH ENGINE    ///////////////searchshield.SlashdotSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.new_links = false; this.type = 'inline';};searchshield.SlashdotSearchEngine.prototype = new searchshield.SearchEngine();searchshield.SlashdotSearchEngine.prototype.constructor = searchshield.SlashdotSearchEngine;searchshield.SlashdotSearchEngine.prototype.name = "slashdot";searchshield.SlashdotSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query;  if (domain.indexOf("slashdot.org") != -1) {  return true; }  return false;};searchshield.SlashdotSearchEngine.prototype.includeLink = function(tag){ if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;   if ( tag.href.indexOf("mailto:") != -1 )  return false;   if ( tag.href.indexOf("slashdot.org") != -1 )  return false;   if (tag.parentNode &amp;&amp; (tag.parentNode.tagName == "DIV")) {  if (tag.parentNode.id.indexOf("text-") != -1)  {   return tag.href;  } } else if ( tag.parentNode &amp;&amp; tag.parentNode.parentNode &amp;&amp; tag.parentNode.parentNode.tagName == "DIV" ) {  if ( tag.parentNode.parentNode.id.indexOf("text-") != -1 )  {   return tag.href;  } } return false;};searchshield.SlashdotSearchEngine.prototype.addImage = function(node, image, hidden){ var doc   = this.search.doc;  this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image);};///////////////    SLASHDOT SEARCH ENGINE    //////////////////////////////    TWITTER SEARCH ENGINE    ///////////////searchshield.TwitterSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.new_links = false; this.type = 'inline';};searchshield.TwitterSearchEngine.prototype = new searchshield.SearchEngine();searchshield.TwitterSearchEngine.prototype.constructor = searchshield.TwitterSearchEngine;searchshield.TwitterSearchEngine.prototype.name = "twitter";searchshield.TwitterSearchEngine.prototype.twitter_filter_urls = ["twitpic.com", "twitterfeed.com", "twitter.peoplebrowsr.com"];searchshield.TwitterSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false;  var domain= uri.host; if (domain.indexOf("twitter.com") != -1) {  return true; }  return false;};searchshield.TwitterSearchEngine.prototype.includeLink = function(tag){ if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false;   if (tag.className.length &lt; 1)  return false;  // no verdicts on source of twit for example "from TweetDeck" if ((tag.className.indexOf("tweet-url web") == 0) &amp;&amp;  (tag.className.indexOf("url") == 0 )) {  return false; }   if (searchshield.FilterUrl(tag.href, this.twitter_filter_urls)) {  return false; }  return tag.href;};searchshield.TwitterSearchEngine.prototype.addImage = function(node, image, hidden){ var doc   = this.search.doc;   this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image);};///////////////    TWITTER SEARCH ENGINE    //////////////////////////////    GMAIL SEARCH ENGINE    ///////////////searchshield.GMailSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.processFrames = true; this.showCleanVerdicts  = false; this.type = 'inline';};searchshield.GMailSearchEngine.prototype = new searchshield.SearchEngine();searchshield.GMailSearchEngine.prototype.constructor = searchshield.GMailSearchEngine;searchshield.GMailSearchEngine.prototype.name = "gmail"; // the name by which the search engine is known (always lowercase)searchshield.GMailSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; var domain  = uri.host;  // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("mail.google.") != -1) ||   (domain.indexOf("gmail.") != -1)) {  return true; } return false;};searchshield.GMailSearchEngine.prototype.includeLink = function(tag){ if (searchshield.DoesURLContain(tag.href, this.search.uri.host))  return false; // don't mark anything but http:// if (tag.href.indexOf("mailto") == 0)  return false; var parentDiv = searchshield.getParentNodeByTagName("DIV", tag, "className"); if ((parentDiv) &amp;&amp;  ((parentDiv.className == "ii gt") || // mail message body   (parentDiv.className == "mv") || // top sponsored links   (parentDiv.className == "vb") || // right sponsored links   (parentDiv.className == "im") || // inside quotes   (parentDiv.className == "gmail_quote") || // quote   (parentDiv.className == "msg") // basic html mode   )) // right ads {  // parse for any ads  var newHref = this.parseAdUrl(tag.href);  return newHref; }  return false;};searchshield.GMailSearchEngine.prototype.addImage = function(node, image, hidden){ var doc   = this.search.doc;   this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image);};searchshield.GMailSearchEngine.prototype.parseAdUrl = function(href){ if (!href)  return href; // check for google ad var regex = "^http(s)?\:\/\/([a-zA-Z0-9]+)\.googlesyndication\.com.+\&amp;adurl\=(.+)"; var re = new RegExp(regex); var matches = href.match(re); if (matches &amp;&amp; (matches.length &gt;= 4)) {  // else we want the fourth value  var match = matches[3];  if (match &amp;&amp; (match.length &gt; 0))   return match } return href;};///////////////    GMAIL SEARCH ENGINE    //////////////////////////////    FACEBOOK SEARCH ENGINE    ///////////////searchshield.FacebookSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.type = 'inline';};searchshield.FacebookSearchEngine.prototype = new searchshield.SearchEngine();searchshield.FacebookSearchEngine.prototype.constructor = searchshield.FacebookSearchEngine;searchshield.FacebookSearchEngine.prototype.name = "facebook"; // the name by which the search engine is known (always lowercase)searchshield.FacebookSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; if (uri.host.indexOf("www.facebook.com") != -1)   return true; return false;};searchshield.FacebookSearchEngine.prototype.includeLink = function(tag){ if (!tag.href || (tag.href.indexOf('facebook.com') &gt; -1) || (tag.href.indexOf('ak.fbcdn.net') &gt; -1))  return false;  return tag.href};searchshield.FacebookSearchEngine.prototype.addImage = function(node, image, hidden){ var doc   = this.search.doc;   this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image);};///////////////    FACEBOOK SEARCH ENGINE    //////////////////////////////    MYSPACE SEARCH ENGINE    ///////////////searchshield.MySpaceSearchEngine = function(search){ searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.type = 'inline';};searchshield.MySpaceSearchEngine.prototype = new searchshield.SearchEngine();searchshield.MySpaceSearchEngine.prototype.constructor = searchshield.MySpaceSearchEngine;searchshield.MySpaceSearchEngine.prototype.name = "myspace"; // the name by which the search engine is known (always lowercase)searchshield.MySpaceSearchEngine.prototype.validSearch = function(href){ var uri; if (typeof(this.search) === 'undefined' || null === this.search)  uri = searchshield.parseLink(href); else  uri = this.search.uri; if(!uri || !uri.host)  return false; if (uri.host.indexOf("www.myspace.com") != -1)   return true; return false;};searchshield.MySpaceSearchEngine.prototype.includeLink = function(tag){ if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ) {  return false; }  return tag.href};searchshield.MySpaceSearchEngine.prototype.addImage = function(node, image, hidden){ var doc   = this.search.doc;   this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image);};///////////////    MYSPACE SEARCH ENGINE    //////////////////////////////    AVG TOOLBAR REPORTING    ///////////////var avgreport = { BLOCK_SEVERITY: 3, scanResult: function (doc, url, foundUrl, ip) {  // report scan end only if surf enabled  if ('1' != searchshield.avgCallFunc(doc, 'GetSurfEnabled'))   return;    // for now native is handling the interstitial   var results = searchshield.avgCallFunc(doc, 'MalsiteCheck', url);  if ( results == null )   return;    var parts = results.split('::');    // need at least severity  if (parts == null)   return;  if (!ip)   ip = "";     // use a block severity if foundUrl is given  var severity = !!foundUrl ? avgreport.BLOCK_SEVERITY : parseInt(parts[0], 10);  var category = "";  var threat  = "";  // fill in the category and threat if something was found  if (severity &gt; 0)  {   category = parts[2];   threat  = parts[4];  }//  else//   return;    var scan_result = searchshield.avgCallFunc(doc, 'ReportScanResult', url, url, threat, category, ip, severity);  var scan_end = avgreport.scanEnd(doc, url);    return (scan_result &amp;&amp; scan_end); }, scanEnd: function (doc, url) {  return searchshield.avgCallFunc(doc, 'ReportScanEnd', url); }, GetInterstitialIP: function (interstitial) {  // simple regex to pull the IP address  var regex = /(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)/;  var match = regex.exec(interstitial);  if (!match)   return '';  return match[0]; }}///////////////    AVG TOOLBAR REPORTING    //////////////////////////////    FLYOVERS    ///////////////var avglsflyover = { count: 0, poppedUp: false, poppedElement: null, reset: function () {  avglsflyover.count = 0;  avglsflyover.poppedUp = false;  avglsflyover.poppedElement = null; }, popup: function (event, hash, search, flyover) {  if (!event)   event = window.event;  var div = document.getElementById("XPLSS_Flyover");  if (div == null)   return;  // establish target element and get its containing document object  // in case verdict is inside a frame  var eventTarget = event.srcElement;  var frameDoc = eventTarget.ownerDocument;  // if the element is the clock, don't pop over it  if ((eventTarget.src != null) &amp;&amp; (eventTarget.src.indexOf("clock.gif") != -1))   return;    // save the element we popped over  avglsflyover.poppedElement = eventTarget;  // if no flyover get it  if ((flyover == null) || (flyover == ""))  {   flyover = searchshield.avgCallFunc(frameDoc, 'BuildFlyover', hash);   if (!flyover)    return;   // cleanup flyover, replace any new lines   flyover = flyover.replace(/\r/g, "");   flyover = flyover.replace(/\n/g, "");   // escape any single quotes   flyover = flyover.replace(/'/g, "&amp;#39;");  }  // set the html in the layer  div.innerHTML = flyover;  // there is an unwanted text node that causes vertical misalignment of flyover  if (div.firstChild.nodeType == 3)   div.removeChild(div.firstChild);    avglsflyover.poppedUp = true;  // reset display count  avglsflyover.count = 0;  avglsflyover.position(); }, hide: function (event) {  var frameDoc = document || top.document;  var div = frameDoc.getElementById("XPLSS_Flyover");  if ((div == null) || (div.style == null) || (div.style.visibility == "hidden"))   return;  var trans_div = frameDoc.getElementById("XPLSS_Trans");  if ((trans_div == null) || (trans_div.style == null) || (trans_div.style.visibility == "hidden"))   return;  // scroll and keydown events will pass a null event by design  // toElement will be null when mousing out of frameelement containing a verdict  if (event == null || event.toElement == null)  {   return;  }  if (trans_div.contains(event.toElement) || div.contains(event.toElement))   return;  // if the toElement is a cooresponding alt image then don't hide  // use try/catch because toElement will be null when mousing out of frame  try {   if (!!event.toElement.id &amp;&amp; !!event.srcElement.id)   {    if (event.toElement.id.indexOf(event.srcElement.id.substring(0,event.srcElement.id.length-2)) == 0)     return;      if (event.srcElement.id == 'XPLSS_Trans' &amp;&amp; /XPLSS_\d+VU\d/.test(event.toElement.id))     return;   }  }  catch(err){}  // hide and move somewhere off screen (negative offsets)  div.style.visibility = "hidden";  div.style.left = "-2100px";  div.style.top  = "-2100px";  trans_div.style.visibility = "hidden";  trans_div.style.left = "-2100px";  trans_div.style.top  = "-2100px";  return true; }, position: function () {  if (!avglsflyover.poppedUp || (avglsflyover.poppedElement == null))   return;  var flyover = document.getElementById("XPLSS_Flyover");  if (flyover == null)   return;  // relative position of flyover in relation to icon  var locateX = 0;  // 0=left, 1=right  var locateY = 0;  // 0=above, 1=below, 2=beside icon   // get window sizes  var winSize  = searchshield.viewPortSize();  var windowX  = winSize[0];  var windowY  = winSize[1];  // get the exact size of the flyover  var flyoverSize  = searchshield.elementSize(flyover);  var flyoverX  = flyoverSize[0];  var flyoverY  = flyoverSize[1];  var verdictWidth = 0;  if (avglsflyover.poppedElement &amp;&amp; avglsflyover.poppedElement.width)   verdictWidth = avglsflyover.poppedElement.width;    // get the bounding rect for image(s)  var imgRect = searchshield.GetFullBoundingRect(avglsflyover.poppedElement);  // half width/height of element bounding rect  var halfX = (imgRect.right - imgRect.left) / 2;  var halfY = (imgRect.bottom- imgRect.top) / 2;  // element the mouse is over, get the center position  var posX = searchshield.offsetLeft(avglsflyover.poppedElement) + halfX;  var posY = searchshield.offsetTop(avglsflyover.poppedElement) + halfY;  // if a verdict is inside a frame must get offsets for the frame element  var docFrames = document.frames;  if (docFrames)  {   for (var i=0; i &lt; docFrames.length; i++)   {    try {     var frameElem = docFrames[i].frameElement;     if (frameElem.contentWindow.document.getElementById(avglsflyover.poppedElement.id))     {      posX += searchshield.offsetLeft(frameElem);      posY += searchshield.offsetTop(frameElem);      break;     }    }    catch(frmErr){}   }  }  var transXOffset = 0;  if (imgRect.mid == undefined)   transXOffset = -1 * halfX;  else   transXOffset = ((imgRect.right + imgRect.left) / 2) - imgRect.mid;    // normalize pos to 0  -- get amount of scrolling in browser window  var scroll   = searchshield.scrollSize();  var pageOffsetX  = scroll[0];  var pageOffsetY  = scroll[1];  posX -= pageOffsetX;  posY -= pageOffsetY;  // setup the offsets  var offsetX = posX;  var offsetY = posY;  // calc where to display on page  if ((windowX - posX) &gt; posX)  {   // right   offsetX += halfX;   locateX = 1;  }  else  {   //left   offsetX -= (flyoverX + halfX);  }  if ((windowY - posY) &gt; posY)  {   // below   if (posY &lt; (windowY/4))   {    offsetY -= halfY;    locateY = 1;   }   else   {    offsetY -= (flyoverY / 2);    locateY = 2;   }  }  else  {   // above   if ((windowY - posY) &lt; (windowY/4))   {    offsetY -= (flyoverY - halfY);   }   else   {    offsetY -= (flyoverY / 2);    locateY = 2;   }  }  // make sure we aren't off the screen  if (offsetY &lt; 0)   offsetY = 0;  if ((offsetY + flyoverY) &gt; windowY)   offsetY = windowY - flyoverY;  // add page offsets back  offsetX += pageOffsetX;  offsetY += pageOffsetY;  posX += pageOffsetX;  posY += pageOffsetY;  var paddedOffsetX = 0; //provide space between icon and flyover  var padX = 3;  if (locateX == 0)   paddedOffsetX = offsetX - padX;  else   paddedOffsetX = offsetX + padX;  // set where to put the flyover  flyover.style.top = offsetY + "px";  flyover.style.left = paddedOffsetX + "px";  // set where to put the transparent layer  var trans = document.getElementById("XPLSS_Trans");  if (trans != null)  {   var trans_left = 0;   var trans_top  = 0;   var trans_width= 0;   var trans_height = 0;   // transparent layer should overlap verdict image   if (locateX == 0)    trans_left = posX - flyoverX - halfX;  // left    else    trans_left = posX - transXOffset - verdictWidth; // right   trans.style.left = trans_left + "px";   trans.style.top  = offsetY + "px";   trans.style.width = flyoverX + verdictWidth + "px";   trans.style.height = flyoverY + "px";  }  avglsflyover.display(); }, display: function () {  avglsflyover.count++;  if (avglsflyover.count == 1)  {   var flyover = document.getElementById("XPLSS_Flyover");   if (flyover == null)    return;   // show the flyover, must use a little count to tell, crazy stuff   flyover.style.visibility = "visible";   flyover.onmouseout = function(){    avglsflyover.hide(event);   };   // show the transparent layer   var trans_div = document.getElementById("XPLSS_Trans");   if (trans_div == null)    return;   trans_div.style.visibility = "visible";   trans_div.onmouseout = function(){    avglsflyover.hide(event);   };   avglsflyover.poppedUp = false;  } }, show: function () {  var div = document.getElementById("XPLSS_Flyover");  if (div == null)   return;  div.style.visibility = "visible";  var trans_div = document.getElementById("XPLSS_Trans");  if (trans_div == null)   return;  trans_div.style.visible = "visible"; }};var avglsinlineflyover = { build: function (riskCategory, riskName, bgColor, borderColor) {  var html = '';  html += '&lt;div class="avgILFO_head"&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="avgILFO_content"&gt;';  html += '&lt;img src=linkscanner://LS_Logo_Results.gif /&gt;';  html += riskCategory + '';  html += riskName + '';  html += '&lt;/div&gt;&lt;div class="avgILFO_foot"&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;';  return html; }, popup: function (event, flyover, nSeverity, blUrl) {  //set verdict info  var div = document.getElementById('XPLSS_InlineFlyover');  if (div == null)   return;    // blUrl is an object for a blacklisted short url  // when it is passed get the final url   if (blUrl != undefined)  {   var finalUrl = searchshield.avgCallFunc(document, 'GetFinalUrl', blUrl.sUrl);   var riskUrl = blUrl.sUrl;   if ((finalUrl) &amp;&amp; (searchshield.FilterUrl(finalUrl, xplSearch.engine.shortened_urls)))    finalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl);   var riskName = blUrl.riskNameLabel + finalUrl;   flyover = avglsinlineflyover.build(blUrl.riskCategory, riskName, blUrl.bgColor, blUrl.borderColor);  }  div.innerHTML = flyover;  div.style.width = "auto";  //reset width  div.style.position = "absolute";  if (searchshield.quirksMode || searchshield.docMode &lt;= 7)  {   var className = xplSearch.engine.inline.color.classname[nSeverity];   var imgBase = "linkscanner://" + className + "_inline_border_";   var divWidth = searchshield.elementSize(div)[0];   //round up to nearest 10 to avoid intentional wrapping in div   var flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10))));   var ilfoDivs = div.getElementsByTagName("div");   if (ilfoDivs &amp;&amp; ilfoDivs.length == 5)   {    //div.style.fontSize = "10px";    div.style.backgroundImage = "url(" + imgBase + "tl.png)";    div.style.backgroundPosition = "0 0";    div.style.backgroundRepeat = "no-repeat";    div.style.width = flyoverWidth + "px";    div.style.zIndex = "9999";       // avgILFO_head    ilfoDivs[0].style.backgroundImage = "url(" + imgBase + "tr.png)";    ilfoDivs[0].style.backgroundPosition = "top right";    ilfoDivs[0].style.backgroundRepeat = "no-repeat";    ilfoDivs[0].style.width = flyoverWidth + "px";    ilfoDivs[0].style.height = "5px";    // avgILFO_head div    ilfoDivs[1].style.height = "5px";       // avgILFO_content    ilfoDivs[2].style.backgroundImage = "url(" + imgBase + "r.png)";    ilfoDivs[2].style.backgroundPosition = "top right";    ilfoDivs[2].style.backgroundRepeat = "repeat-y";    ilfoDivs[2].style.fontSize = "10px";    ilfoDivs[2].style.color = "black";    ilfoDivs[2].style.padding = "0px 10px";    ilfoDivs[2].style.textAlign = "left";    ilfoDivs[2].style.wordWrap = "break-word";    ilfoDivs[2].style.lineHeight = "130%";    // avgILFO_foot    ilfoDivs[3].style.backgroundImage = "url(" + imgBase + "bl.png)";    ilfoDivs[3].style.backgroundPosition = "bottom left";    ilfoDivs[3].style.backgroundRepeat = "no-repeat";    ilfoDivs[3].style.height = "5px";       // avgILFO_foot div    ilfoDivs[4].style.backgroundImage = "url(" + imgBase + "br.png)";    ilfoDivs[4].style.backgroundPosition = "bottom right";    ilfoDivs[4].style.backgroundRepeat = "no-repeat";    ilfoDivs[4].style.width = flyoverWidth + "px";    ilfoDivs[4].style.height = "5px";   }   else   {    div.style.fontSize = "10px";    div.style.backgroundColor = xplSearch.engine.inline.color.background[nSeverity];    div.style.border = xplSearch.engine.inline.color.border[nSeverity] + " solid 3px";    div.style.padding = "3px 8px";   }  }  else  {   // apply updated styles for new flyover content   var sheets = document.styleSheets;   for (var i=0; i &lt; sheets.length; i++)   {    if (sheets[i].id &amp;&amp; sheets[i].id == "avgILFOStyle")    {     var avgILFOStyle = sheets[i];     break;    }   }   if (typeof(avgILFOStyle) !== "undefined")   {    var className = xplSearch.engine.inline.color.classname[nSeverity];    var divWidth = searchshield.elementSize(div)[0];    //round up to nearest 10 to avoid intentional wrapping in div    var flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10))));    var rules = avgILFOStyle.rules;    for (var i=0; i &lt; rules.length; i++)    {     var bgImg = rules[i].style.backgroundImage;     var selText = rules[i].selectorText.toLowerCase();     if (bgImg)     {      var bgImgStyle = bgImg.replace(/default/, className);      rules[i].style.backgroundImage = bgImgStyle;     }     if (((selText == ".avgilfo") ||      (selText == ".avgilfo_head") ||      (selText == ".avgilfo_foot div")) &amp;&amp;      (rules[i].style.width) &amp;&amp; (rules[i].style.width == "0px"))     {      rules[i].style.width = (flyoverWidth) + "px";     }    }   }  }  if (!event)   event = window.event;     var eventTarget = event.srcElement;  avglsinlineflyover.position(eventTarget); }, hide: function (event) {  if (!event)   event = window.event;     var div = document.getElementById("XPLSS_InlineFlyover");  if (div == null)   return;     div.style.visibility = "hidden"; //invisible  div.style.left = "-5000px";  if (!searchshield.quirksMode)  {   // reset flyover styles   var sheets = document.styleSheets;   for (var i=0; i &lt; sheets.length; i++)   {    if (sheets[i].id &amp;&amp; sheets[i].id == "avgILFOStyle")    {     var avgILFOStyle = sheets[i];     break;    }   }   if (typeof(avgILFOStyle) !== "undefined")   {    var rules = avgILFOStyle.rules;    for (var i=0; i &lt; rules.length; i++)    {     var bgImg = rules[i].style.backgroundImage;     var selText = rules[i].selectorText.toLowerCase();     if (bgImg)     {       var bgImgStyle = bgImg.replace(/:\/\/([a-z]+)_/i, '://default_');      rules[i].style.backgroundImage = bgImgStyle;     }     if (((selText == ".avgilfo") ||      (selText == ".avgilfo_head") ||      (selText == ".avgilfo_foot div")) &amp;&amp;      (rules[i].style.width))     {      rules[i].style.width = "0px";     }    }   }  } }, position: function (imageElem) {  var flyover = document.getElementById('XPLSS_InlineFlyover');  if (flyover == null)   return;     // relative position of flyover in relation to icon  var locateX = 0;  // 0=left, 1=right  var locateY = 0;  // 0=above, 1=below, 2=beside icon        // get window sizes  var winSize  = searchshield.viewPortSize();  var windowX  = winSize[0];  var windowY  = winSize[1];  // Must know if there is a horizontal scroll bar for Firefox  // for proper flyover positioning near bottom edge  var scrollYWidth  = winSize[2];  var scrollBarX  = winSize[2] &gt; 0 ? true : false;  // get the exact size of the flyover  var flyoverSize  = searchshield.elementSize(flyover);  var flyoverX  = flyoverSize[0];  var flyoverY  = flyoverSize[1];    flyover.style.width = flyoverX + "px";    // get the bounding rect for image(s)  var imgRect = imageElem.getBoundingClientRect();  // half width/height (center) of element bounding rect  var halfX = (imgRect.right - imgRect.left) / 2;  var halfY = (imgRect.bottom- imgRect.top) / 2;  // element the mouse is over, get the center position  var posX = searchshield.offsetLeft(imageElem) + halfX;  var posY = searchshield.offsetTop(imageElem) + halfY;    var pageOffsetX = 0;  var pageOffsetY = 0;  var hasParentFrame = false;  // normalize pos to 0  -- get amount of scrolling in browser window  var scroll  = searchshield.scrollSize(imageElem);  pageOffsetX  = scroll[0];  pageOffsetY  = scroll[1];  hasParentFrame = scroll[2];    posX -= pageOffsetX;  posY -= pageOffsetY;  //compensate for Firefox 3  if (posX &lt; imgRect.left)   posX = imgRect.left+halfX;  // setup the offsets  var offsetX = posX;  var offsetY = posY;  // calc where to display on page  if ((windowX - posX) &gt; posX)  {   // right   //offsetX += halfX;   offsetX = imgRect.right + 3;   locateX = 1;  }  else  {   //left   //offsetX -= (flyoverX + halfX);   offsetX = imgRect.left - flyoverX - 3;  }  if ((windowY - posY) &gt; posY)  {   // below   if (posY &lt; (windowY/4))   {    offsetY -= halfY;    locateY = 1;   }   else   {    offsetY -= (flyoverY / 2) - halfY;    locateY = 2;   }  }  else  {   // above   if ((windowY - posY) &lt; (windowY/4))   {    offsetY -= (flyoverY - halfY);   }   else   {    offsetY -= (flyoverY / 2) + halfY;    locateY = 2;   }  }  // make sure we aren't off the screen  if (offsetY &lt; 0)   offsetY = 0;  if ((offsetY + flyoverY) &gt; windowY)  {   offsetY = windowY - flyoverY;  }  else if (scrollBarX &amp;&amp; ((windowY - (posY + halfY)) &lt; scrollYWidth))  { //verdict overlaps the horizontal scrollbar   offsetY = windowY - (flyoverY + scrollYWidth);  }  // add page offsets back - if not in frame  if (!hasParentFrame)  {   offsetX += pageOffsetX;   offsetY += pageOffsetY;  }  //posX += pageOffsetX;  //posY += pageOffsetY;  //var paddedOffsetX = 0; //provide space between icon and flyover  //var padX = 3;  //if (locateX == 0)  // paddedOffsetX = offsetX - padX;  //else  // paddedOffsetX = offsetX + padX;  // set where to put the flyover  flyover.style.top = offsetY + "px";  flyover.style.left = offsetX + "px";  avglsinlineflyover.display(); }, display: function () {  var div = document.getElementById('XPLSS_InlineFlyover');  if (div == null)   return;    // show the flyover  div.style.visibility = "visible"; }, imageExists: function(element) {  if (element)  {   // check next siblings children   var sibling = element.nextSibling;      if ((sibling == null) || (sibling.getElementsByTagName == null))    return false;      var images = sibling.getElementsByTagName("IMG");   if (images == null)    return false;   for (var i = 0; i &lt; images.length; i++)   {    if (images[i].id == "avg_ls_image")     return true;   }  }  return false; }, getImage: function (anchor) {  if (anchor)  {   var imageElem = null;   var images = anchor.getElementsByTagName("img");   if (images == null)    return imageElem;   for (var i = 0; i &lt; images.length; i++)   {    if (images[i].id == "avg_ls_image")    {     imageElem = images[i];     break;      }       }   return imageElem;  }   }, getUrlFromQueryString: function (inUrl) {  var url = inUrl;  var uri = searchshield.parseLink(unescape(inUrl));  if (uri.source != null)  { // regexp failed so used split to parse url   var qsUrl = uri.source.indexOf("?url=");   if (qsUrl != -1)    url = uri.source.substring(qsUrl + 5);   else    url = uri.source;  }  else if ((uri.qsArray.url != null) &amp;&amp; (uri.qsArray.url.length &gt; 0))  {   url = uri.qsArray.url;  }  return url; }, mouseOverHandler: function (e, doc, engine) {  if (e &amp;&amp; e.srcElement &amp;&amp; e.srcElement.href)  {   // need to keep a reference to the function registered    // by the listener to be able to remove it.   var handlerFunc = arguments.callee;   var element = e.srcElement;   var href = e.srcElement.href;   // need an engine      if (!engine)    return;   // check if it has an image already   if (avglsinlineflyover.imageExists(element))    return;   // add the image, returns the anchor not the image   var new_element = engine.add_inline_image(doc, element, null, null);   // do the check and update in the background   setTimeout(function() {avglsinlineflyover.checkAndUpdate(doc, element, new_element, engine, handlerFunc)}, 1);  } }, checkAndUpdate: function (doc, element, new_element, engine, handlerFunc) {  if (!engine)   return;  try {   // remove the listener and get final url   element.detachEvent("onmouseover", handlerFunc, false);   var finalUrl = searchshield.avgCallFunc(doc, 'GetFinalUrl', element.href);  }  catch(e) {}  if ((typeof(finalUrl) != 'undefined') &amp;&amp; finalUrl)  {   // if still a tiny url check for final url embedded in querystring   if (searchshield.FilterUrl(finalUrl, engine.shortened_urls) &amp;&amp;     (finalUrl.indexOf("?url=") != -1))   {    finalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl);   }   // update the verdict   engine.display_inline(doc, new_element, finalUrl, null, true);  }  else  {   engine.avg_ls_inline_hide_verdict(new_element);  } }};///////////////    FLYOVERS    ///////////////(function(){ setTimeout( function() {  try {   if ((self == top) &amp;&amp; top.document) {    searchshield.init(top.document, 1);   }  }  catch(e){return;} }, 1 ); return;})();&lt;/script&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7787585216948583860-2220775666782042189?l=inisoirr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inisoirr.blogspot.com/feeds/2220775666782042189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://inisoirr.blogspot.com/2011/09/tuairisc-ar-fheile-joe-mhairtin-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7787585216948583860/posts/default/2220775666782042189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7787585216948583860/posts/default/2220775666782042189'/><link rel='alternate' type='text/html' href='http://inisoirr.blogspot.com/2011/09/tuairisc-ar-fheile-joe-mhairtin-2011.html' title='Tuairisc ar Fhéile Joe Mháirtín 2011'/><author><name>Seomra na Gaeilge</name><uri>http://www.blogger.com/profile/01120647644173282307</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/-X61SgZxVaVg/TrkLYZyBRlI/AAAAAAAAAEc/XlKjGKG36fg/s220/IMG_1313.JPG'/></author><thr:total>0</thr:total></entry></feed>
