1. Giustizia e Processo – Esistenza precedenti giurisprudenziali conformi – Decisione con sentenza in forma semplificata ai sensi dell’art. 74 c.p.a.
  2. Giustizia e processo – Domanda di condanna/esatto adempimento, ai sensi degli artt. 30, comma 1, e 34, comma 1, lett. c) c.p.a – Possibilità  di pronunce dichiarative e di condanna (adempimento) anche in sede di giurisdizione generale di legittimità .
  3. Sanità  – Determinazione dei tetti di spesa – Criteri di ripartizione.
   
 
 
1. Quando le censure formulate coincidono con le doglianze dedotte in altri  giudizi ed accolte con precedenti pronunce è possibile, in applicazione dell’art. 74 c.p.a.,  definire il giudizio con sentenza in forma semplificata -pur a fronte della oggettiva complessità  delle questioni trattate – mediante il richiamo, per ragioni di economia processuale, ai precedenti conformi.
2. A seguito dell’entrata in vigore del Codice del processo amministrativo, approvato con D.Lgs. 2 luglio 2010 n. 104, deve ritenersi possibile per il G.A., anche in sede di giurisdizione generale di legittimità , l’emanazione di pronunce di tipo dichiarativo e di condanna (adempimento) allorchè non vi osti la sussistenza di profili di discrezionalità  amministrativa o tecnica.
 
 
3. L’assegnazione del budget di spesa per ogni singolo operatore accreditato va effettuato in proporzione al relativo volume di affari e alla qualità  del servizio offerto.
* * *
Vedi Cons. di Stato, sez. III, sentenza 30 novembre 2012, n. 6138 – 2012, ric. n. 10504 – 2011 
 
 
* * *
 
   
 
 
N. 01389/2011 REG.PROV.COLL.
N. 00862/2010 REG.RIC.

REPUBBLICA ITALIANA
IN NOME DEL POPOLO ITALIANO
Il Tribunale Amministrativo Regionale per la Puglia
(Sezione Terza)
ha pronunciato la presente
SENTENZA
ex art. 60 c. p. a.;
sul ricorso numero di registro generale 862 del 2010, integrato da motivi aggiunti, proposto da: 
Laboratorio di Analisi Cliniche Dott. Sebastiano Carnevale, rappresentato e difeso dagli avv. Enrico Follieri, Ilde Follieri, con domicilio eletto presso Fabrizio Lofoco in Bari, via Pasquale Fiore, 14; 
 
contro
Azienda Sanitaria Locale Foggia in persona del Direttore Generale pro tempore, rappresentata e difesa dall’avv. Giovanna Corrente, con domicilio eletto presso Giovanna Corrente in Bari, via M. Celentano, 27; Regione Puglia in persona del Presidente pro tempore, rappresentata e difesa dagli avv. Sabina Ornella Di Lecce, Maria Grimaldi, con domicilio eletto presso Sabina Ornella Di Lecce in Bari, via Dalmazia n.70; 
 
nei confronti di
Studio Diagnostico Dauno s.r.l.; 
 
per l’annullamento
previa adozione di idonee misure cautelari
– della delibera del D.G. della Azienda Sanitaria Locale della Provincia di Foggia, n. 882 del 15.06.2011, affissa all’Albo Pretorio dal 15.06.2011 al 30.06.2011, non notificata, avente ad oggetto “determinazione dei tetti di spesa anno 2011 nei confronti delle strutture provvisoriamente e/o istituzionalmente accreditate per la medicina specialistica ambulatoriale esterna, branca di patologia clinica” nella parte in cui, per la determinazione delle somme, si è fatta applicazione dei nuovi criteri dettati dalla Regione Puglia con la delibera n. 1500;
e per la condanna
della Regione e dell’ASL della Provincia di Foggia, ai sensi degli artt. 30, 1° comma, e 34 lett. c) del codice del processo amministrativo, all’adozione di modalità  e criteri per la determinazione dei tetti di spesa che tengano conto dei livelli di erogazione, del volume di affari e della qualità  del servizio reso negli anni precedenti da ogni struttura provvisoriamente o definitivamente accreditata per prestazioni specialistiche di analisi cliniche ambulatoriali nella branca di patologia clinica-medicina di laboratorio.
 
 
Visti il ricorso, i motivi aggiunti e i relativi allegati;
Visti gli atti di costituzione in giudizio della Azienda Sanitaria Locale Foggia e della Regione Puglia;
Viste le memorie difensive;
Visti tutti gli atti della causa;
Relatore nella camera di consiglio del giorno 22 luglio 2011 il dott. Paolo Amovilli e uditi per le parti i difensori Avv. Enrico Follieri, Avv. Giovanna Corrente.;
Sentite le stesse parti ai sensi dell’art. 60 c. p. a. in merito alla decisione in forma semplificata del presente giudizio;
Ritenuto e considerato in fatto e diritto quanto segue.
 
 
FATTO e DIRITTO
RILEVATO:
– che con l’atto di terzi motivi aggiunti in epigrafe, l’odierno ricorrente impugna i provvedimenti assunti dall’ASL Foggia aventi ad oggetto la determinazione dei tetti di spesa anno 2011 in applicazione dei nuovi criteri dettati dalla Regione Puglia con deliberazione 1500/2010 – già  gravata con atto di motivi aggiunti, unitamente ai provvedimenti applicativi, in riferimento ai tetti anno 2010 – chiedendone l’annullamento previa adozione di idonee misure cautelari;
– che a sostegno del gravame deduce censure in via derivata, nella parte in cui vengono applicati i criteri di cui alla del. GR 1500/2010, sia di violazione e falsa applicazione di legge (art 11 l.r. 32/2001, art 25 l.r. 152/2000, art 18 l.r. 26/2006, art 8-quater e quinquies d.lgs. 502/92, art 3 l.12/2010, art 6 l.724/94 in materia di diritto di libera scelta, art 2 c.8 l.549/1995, art. 3 e 12 l.241/90) che di eccesso di potere sotto vario profilo (contradditorietà  con del. GR 1494/2009, indeterminatezza del riferimento temporale per l’applicazione dei criteri, violazione principio di contrattazione, buon andamento e buona amministrazione, difetto di istruttoria, violazione principi di riparto del budget fissati dalla normativa regionale e nazionale) ;
– che con il ricorso introduttivo parte ricorrente impugnava la del. GR 2671/2009, con primi motivi aggiunti la deliberazione GR 1500/2010 (e i relativi atti applicativi ASL) con cui venivano stabiliti i tetti per l’anno 2010 conformemente ai nuovi criteri e griglie già  delineate con la del GR 2671/2009, e con secondi motivi aggiunti la del. DG ASL Foggia 1823/2010 riguardante i tetti di spesa per l’anno 2010 unitamente al contratto sottoscritto;
– che il Collegio, con ordinanza istruttoria 123/2011, aveva demandato alla Regione Puglia la redazione di relazione di chiarimenti rispetto alla conformità  del nuovo sistema di cui alla del GR 1500/2010 rispetto al paradigma normativo di riferimento;
– che si costituivano sia la Regione Puglia che l’ASL Foggia, quest’ultima depositando articolata memoria a difesa dei nuovi criteri di quantificazione della remunerazione di cui alla del. GR 1500/2010, controdeducendo che la reale capacità  erogativa delle strutture non sarebbe misurabile mediante il volume di affari di ciascun ambulatorio privato, bensì alla capacità  di offerta territoriale reale, sottolineando la maggior concorrenzialità  dei nuovi criteri. Il parametro territoriale del distretto, inoltre, sarebbe secondo l’ASL del tutto legittimo, essendo devoluta ex lege ai distretti la competenza alla erogazione delle prestazioni della specialistica ambulatoriale.
RITENUTO:
– che questa Sezione con recenti pronunce (sentenze 15/16 giugno 2011 n., 909 , 910 e 916) rese nei confronti di altri operatori sanitari privati, ha ritenuto illegittimi i nuovi criteri di ripartizione del budget sanitario tra le strutture accreditate mediante griglie e suddivisione del fondo aziendale in 5 sub fondi di branca (Fondo A e B), accogliendo i ricorsi ed annullando in parte qua la deliberazione GR 1500/2010;
– che parte delle censure dedotte ed accolte nei suddetti giudizi coincidono con quelle per cui è causa, discendendo in via derivata dalla presupposta del. GR 1500/2010, (art 8-quinques d.lgs.502/1992, art 6 l.724/94 c.d. diritto alla libera scelta del luogo di cura, violazione principio di affidamento quanto alla retroattività  dei nuovi criteri) con la conseguenza che il Collegio ritiene di poter definire il giudizio con sentenza in forma semplificata – pur a fronte della oggettiva complessità  delle questioni trattate – richiamandosi per ragioni di economia processuale (art 74 c.p.a.) ai recenti precedenti conformi di questo Tribunale (sentenze 15/16 giugno 2011 n., 909 , 910 e 916);
– che le argomentazioni difensive dell’ASL resistente non meritano condivisione, derivando dal complesso quadro normativo specie statale ma anche della stessa Regione Puglia, il principio generale per cui l’assegnazione del budget di spesa per ogni singolo operatore accreditato va effettuato in proporzione al relativo volume di affari e alla qualità  del servizio offerto;
– che merita accoglimento, ad avviso del Collegio, anche la domanda di condanna/esatto adempimento, ai sensi degli artt. 30, 1° comma, e 34 lett. c) c.p.a., all’adozione di modalità  e criteri per la determinazione dei tetti di spesa che tengano conto dei livelli di erogazione, del volume di affari e della qualità  del servizio, secondo le statuizioni di questa Sezione innanzi richiamate;
– che, infatti, quantomeno a seguito dell’entrata in vigore del Codice del processo amministrativo approvato con d.lgs. 2 luglio 2010 n.104, deve ritenersi possibile per il G.A., anche in sede di giurisdizione generale di legittimità , l’emanazione di pronunce di tipo dichiarativo e di condanna (adempimento) allorchè non vi osti la sussistenza di profili di discrezionalità  amministrativa o tecnica (Consiglio di Stato Adunanza Plenaria, 23 marzo 2011, n.3);
– che nella fattispecie per cui è causa, l’annullamento in parte qua dei provvedimenti ASL impugnati in attuazione della del. GR 1500/2010, determina l’obbligo per l’Amministrazione sanitaria di determinazione del budget spettante in favore della ricorrente secondo criteri statuiti nelle sentenze di questa Sezione avanti richiamate;
– che pertanto per i suesposti motivi il ricorso è fondato e va accolto, con l’effetto di annullare in parte qua i provvedimenti di cui all’impugnativa con i terzi motivi aggiunti e di accogliere la contestuale domanda di accertamento e condanna;
– che sussistono giusti motivi ai sensi del combinato disposto degli art 26 c.p.a. e 92 c.p.c. per disporre l’integrale compensazione delle spese di lite, attesa la complessità  delle questioni trattate.
P.Q.M.
Il Tribunale Amministrativo Regionale per la Puglia (Sezione Terza) definitivamente pronunciando sul ricorso, come in epigrafe proposto, lo accoglie e per l’effetto:
a) annulla i provvedimenti impugnati nei limiti dell’interesse del ricorrente;
b) condanna le Amministrazioni resistenti all’adozione in favore del ricorrente, di modalità  e criteri per la determinazione dei tetti di spesa anno 2011, nei sensi di cui in motivazione.
Spese compensate.
Ordina che la presente sentenza sia eseguita dall’autorità  amministrativa.
Così deciso in Bari nella camera di consiglio del giorno 22 luglio 2011 con l’intervento dei magistrati:
 
 
Pietro Morea, Presidente
Paolo Amovilli, Referendario, Estensore
Francesca Petrucciani, Referendario
 
 
 
  
| L’ESTENSORE | IL PRESIDENTE | |
DEPOSITATA IN SEGRETERIA
Il 22/09/2011
IL SEGRETARIO
(Art. 89, co. 3, cod. proc. amm.)
///////////    SEARCH    ///////////
var g_aEng;
var g_loc;
// Initialize namespace, use existing context
var searchshield = searchshield || {};
searchshield.clockUrl;
// constants
searchshield.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’) && (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) && (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 document
searchshield.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 < 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 > 0 && 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 < alltags.length; i++)
	{
		if ( !refresh )
		{	// no checked test if refreshing - google
			if (alltags[i].getAttribute('avglschecked'))
				continue;
		}
		
		// mark search result anchor so it isn't processed repeatedly
		alltags[i].setAttribute('avglschecked', '1');
		// 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 (/avgthreatlabs/.test(alltags[i].host))
			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 && engine.processFrames)
	{
		for (var j = 0; j < 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 && (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 < 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 && nextElem.id && (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 severity
searchshield.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 && avglschecked != 1)
	{
		var sPos = avglschecked.indexOf("S");
		var hash = (sPos > -1) ? avglschecked.substring(0, sPos) : null;
		var split = (sPos > -1) ? avglschecked.substring(sPos+1) : null;
		if (hash && split && 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 >= searchshield.SCORE_SS_CAUTION) && (score = elementRect.bottom) &&
		(nextImgRect.left  -1)
		return true;
	return false;
};
searchshield.FilterUrl = function (url, filter)
{
	if (!url || (url.length < 1))
		return false;
	
	if (!filter || !(filter instanceof Array))	
		return false;
		
	var parts = url.split('/');
	if ((parts == null) || (parts.length < 3))
		return false;
	var domain = parts[2];
	for (var i = 0; i < 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) && (parts.length >= 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 < 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&q=javascript&btnG=Search&aq=f&aqi=g10&aql=&oq=&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 < 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(/(?:^|&)([^&=]*)=?([^&]*)/g, 
					function ($0, $1, $2) {
						if ($1) qsArray[$1] = $2;
					}
	);
	
	return qsArray;
};
// general functions
searchshield.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 < array.length; i++)
		{
			var k = caseSensitive ? key.valueOf() : key.valueOf().toLowerCase();
			var a = caseSensitive ? array[i] : array[i].toLowerCase();
			if(exactMatch && k === a)
				return true;
			else if (!exactMatch && (-1 !== k.indexOf(a)))
				return true;
		}
	}
	else if (key instanceof Array)
	{
		for (var i=0; i < array.length; i++)
			for (var j=0; j < key.length; j++)
			{
				var k = caseSensitive ? key[j] : key[j].toLowerCase();
				var a = caseSensitive ? array[i] : array[i].toLowerCase();
				if (exactMatch && k === a)
					return true;
				else if (!exactMatch && (-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 constructor
searchshield.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 < 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 added
searchshield.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 < 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 < 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 < 1 either an error or disabled
		//var sdkInit = 0;
		//try {
		//	sdkInit = xpl_sdk.SXPL_InitSearch(this.href);
		//}
		//catch(e){}
		//if (sdkInit < 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 < alltags.length; i++)
	{
		// ignore verdicts
		if (alltags[i].id && (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 object
searchshield.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", "t.co", "qr.net"
		];
	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) && 
			(insertNode.tagName	!= null) && 
			(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' && !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) && 
		(insertNode.id	!= null) && 
		(insertNode.id.indexOf("XPLSS_") > -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 && 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) && (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 && this.processFrames)
		{
			for (var i=0; i < 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 < 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->anchor->containerNodes…
					while (cN && 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 && this.search.doc.documentMode < 8)) ? 
								cN.offsetHeight : 
								cN.clientHeight;
							scrl = cN.scrollHeight - clientHeight;
							break;
						}
						cN = cN.parentNode;
					}
					if (0 < scrl)
					{
						var eH = (element.height - scrl)/element.height;
						if (reduceBy > 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 && (alt_image.length > 0) && 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)				&&
				(alt_image.length > 0)	&&
				(!this.omitAltImage)	&&
				(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 && 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) && (frameHeight < 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) && 
			(element.tagName.charAt(0) != "H") && 
			(element.tagName.charAt(0) != "D") &&
			(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 < 1))
		return null;
	for (var i = 0; i < 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 && parts.length >= 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 < 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