• user warning: Duplicate entry '536306482' for key 'PRIMARY' query: INSERT INTO accesslog (title, path, url, hostname, uid, sid, timer, timestamp) values('Present Simple Tense', 'node/73893', '', '3.138.69.172', 0, 'f9359a04a653cddc00e3b29937d80d37', 133, 1716068518) in /home/tgv/htdocs/modules/statistics/statistics.module on line 63.
  • user warning: Table 'cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:60b4ce288cbf5492400fd2377cd019ac' in /home/tgv/htdocs/includes/cache.inc on line 27.
  • user warning: Table 'cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<!--paging_filter--><p>  <strong><span style=\"color: #0000ff\">ระบบหายใจ<br />\n</span></strong>     มนุษย์ทุกคนต้องหายใจเพื่อมีชีวิตอยู่ การหายใจเข้า อากาศผ่านไปตามอวัยวะของระบบหายใจตามลำดับ ดังนี้<br />\n     <b>1.จมูก</b> (Nose)<br />\n     จมูกส่วนนอกเป็นส่วนที่ยื่นออกมาจากตรงกึ่งกลางของใบหน้า รูปร่างของจมูกมีลักษณะเป็นรูปสามเหลี่ยมพีระมิด ฐานของรูปสามเหลี่ยมวางปะ ติดกับหน้าผากระหว่างตาสองข้าง สันจมูกหรือดั้งจมูก มีรูปร่างและขนาดต่างๆกัน ยื่นตั้งแต่ฐานออกมาข้างนอกและลงข้างล่างมาสุดที่ปลายจมูก อีกด้านหนึ่งของรูปสามเหลี่ยมห้อยติดกับริมฝีปากบนรู จมูกเปิดออกสู่ภายนกทางด้านนี้ รูจมูกทำหน้าที่เป็นทางผ่านของอากาศที่หายใจเข้าไปยังช่องจมูกและกรองฝุ่นละอองด้วย <br />\n     <b>2. หลอดคอ</b> (Pharynx)<br />\n     เมื่ออากาศผ่านรูจมูกแล้วก็ผ่านเข้าสู่หลอดคอ ซึ่งเป็นหลอดตั้งตรงยาวประมาณยาวประมาณ 5 &quot; หลอดคอติดต่อทั้งช่องปากและช่องจมูก จึงแบ่งเป็นหลอดคอส่วนจมูก กับ หลอดคอส่วนปาก โดยมีเพดานอ่อนเป็นตัวแยกสองส่วนนี้ออกจากกัน โครงของหลอดคอประกอบด้วยกระดูกอ่อน 9 ชิ้นด้วยกัน ชิ้นที่ใหญ่ทีสุด คือกระดูกธัยรอยด์ ที่เราเรียกว่า &quot;ลูกกระเดือก&quot; ในผู้ชายเห็นได้ชัดกว่าผู้หญิง<br />\n     <b>3. หลอดเสียง</b> (Larynx)<br />\n     เป็นหลอดยาวประมาณ 4.5 cm ในผู้ชาย และ 3.5 cm ในผู้หญิง หลอดเสียงเจริญเติยโตขึ้นมาเรื่อยๆ ตามอายุ ในวัยเริ่มเป็นหนุ่มสาว หลอดเสียงเจริญขึ้นอย่างรวดเร็ว โดยเฉพาะในผู้ชาย เนื่องจากสายเสียง (Vocal cord) ซึ่งอยู่ภายในหลอดเสียงนี้ยาวและหนาขึ้นอย่างรวดเร็วเกินไป จึงทำให้เสียงแตกพร่า การเปลี่ยนแปลงนี้เกิดจากฮอร์โมนของเพศชาย<br />\n     <b>4. หลอดลม</b> (Trachea)<br />\n     เป็นส่วนที่ต่ออกมาจากหลอดเสียง ยาวลงไปในทรวงอก ลักษณะรูปร่างของหลอดลมเป็นหลอดกลมๆ ประกอบด้วยกระดูกอ่อนรูปวงแหวน หรือรูปตัว U ซึ่งมีอยู่ 20 ชิ้น วางอยู่ทางด้านหลังของหลอดลม ช่องว่าง ระหว่างกระดูกอ่อนรูปตัว U ที่วางเรียงต่อกันมีเนื้อเยื่อและกล้ามเนื้อเรียบมายึดติดกัน การที่หลอดลมมีกระดูกอ่อนจึงทำให้เปิดอยู่ตลอดเวลา ไม่มีโอกาสที่จะแฟบเข้าหากันได้โดยแรงดันจากภายนอก จึงรับประกันได้ว่าอากาศเข้าได้ตลอดเวลา หลอดลม ส่วนที่ตรงกับกระดูกสันหลังช่วงอกแตกแขนงออกเป็นหลอดลมแขนงใหญ่ (Bronchi) ข้างซ้ายและขวา เมื่อเข้าสู่ปอดก็แตกแขนงเป็นหลอดลมเล็กในปอดหรือที่เรียกว่า หลอดลมฝอย (Bronchiole) และไปสุดที่ถุงลม (Aveolus) ซึ่งเป็นการที่อากาศอยู่ ใกล้กับเลือดในปอดมากที่สุด จึงเป็นบริเวณแลกเปลี่ยนก๊าซออกซิเจน กับคาร์บอนไดออกไซด์<br />\n     <b>5. ปอด</b> (Lung)<br />\n     ปอดมีอยู่สองข้าง วางอยู่ในทรวงอก มีรูปร่างคล้ายกรวย มีปลายหรือยอดชี้ขึ้นไปข้างบนและไปสวมพอดีกับช่องเปิดแคบๆของทรวงอก ซึ่งช่องเปิดแคบๆนี้ประกอบขึ้นด้วยซี่โครงบนของกระดูกสันอกและกระดูกสันหลัง ฐานของปอดแต่ละข้างจะใหญ่และวางแนบสนิทกับกระบังลม<br />\n     ระหว่างปอด 2 ข้าง จะพบว่ามีหัวใจอยู่ ปอดข้างขวาจะโตกว่าปอดข้างซ้ายเล็กน้อย และมีอยู่ 3 ก้อน ส่วนข้างซ้ายมี 2 ก้อน<br />\n     หน้าที่ของปอดคือ การนำก๊าซ CO<sub>2</sub> ออกจากเลือด และนำออกซิเจนเข้าสู่เลือด ปอดจึงมีรูปร่างใหญ่ มีลักษณะยืดหยุ่นคล้ายฟองน้ำ<br />\n     <b>6. เยื่อหุ้มปอด</b> (Pleura)<br />\n     เป็นเยื่อที่บางและละเอียดอ่อน เปียกชื้น และเป็นมันลื่น หุ้มผิวภายนอกของปอด เยื่อหุ้มนี้ ไม่เพียงคลุมปอดเท่านั้น ยังไปบุผิวหนังด้านในของทรวงอกอีก หรือกล่าวได้อีกอย่างหนึ่งว่า เยื่อหุ้มปอดซึ่งมี 2 ชั้น ระหว่าง 2 ชั้นนี้มี ของเหลวอยู่นิดหน่อย เพื่อลดแรงเสียดสี ระหว่างเยื่อหุ้มมีโพรงว่าง เรียกว่าช่องระหว่างเยื่อหุ้มปอด</p>\n<p><img height=\"351\" width=\"388\" src=\"http://null/c71.jpg\" /><br />\n<img height=\"441\" width=\"510\" src=\"http://null/c72.jpg\" /><br />\n<b>กระบวนการในการหายใจ</b><br />\n     ในการหายใจนั้นมีโครงกระดูกส่วนอกและ กล้ามเนื้อบริเวณอกเป็นตัวช่วยขณะหายใจเข้า กล้าม เนื้อหลายมัดหดตัวทำให้ทรวงอกขยายออกไปข้างหน้า และยกขึ้นบน ในเวลาเดียวกันกะบังลมจะลดต่ำลง การกระทำทั้งสองอย่างนี้ทำให้โพรงของทรวงอกขยาย ใหญ่มากขึ้น เมื่อกล้ามเนึ้อหยุดทำงานและหย่อนตัวลง ทรวงอกยุบลงและความดันในช่องท้องจะดันกะบังลม กลับขึ้นมาอยู่ในลักษณะเดิม กระบวนการเข่นนี้ทำให้ ความดันในปอดเพิ่มขึ้น เมื่อความดันในปอดเพิ่มขึ้นสูง กว่าความดันของบรรยากาศ อากาศจะถูกดันออกจาก ปอด ฉะนั้นจึงสรุปได้ว่า ปัจจัยประการแรกที่ทำให้ อากาศมีการเคลื่อนไหวเข้าออกจากปอดได้นั้น เกิด จากความดันที่แตกต่างกันนั่นเอง<br />\n<b>การแลกเปลี่ยนก๊าซและการใช้ออกซิเจน</b><br />\n     เมื่อเราหายใจเข้า อากาศภายนอกเข้าสู่อวัยวะ ของระบบหายใจไปยังถุงลมในปอด ที่ผนังของถุงลมมีหลอดเลือดแดงฝอยติดอยู่ ดังนั้นอากาศจึงมีโอกาสใกล้ชิดกับเม็ดเลือดแดงมากออกชิเจนก็จะผ่านผนังนี้เข้าสู่เม็ดเลือดแดง และคาร์บอนไดออกไชด์ก็จะออกจากเม็ดเลือดผ่านผนังออกมาสู่ถุงลม ปกติในอากาศมีออกชิเจนร้อยละ 20 แต่อากาศที่เราหายใจมีออกขิเจนร้อยละ 13<br />\n<img height=\"378\" width=\"365\" src=\"http://null/c73.jpg\" /><br />\n<a target=\"_blank\" href=\"http://null/c73f.jpg\"><span style=\"color: #00a0ff\">Click for the full size image</span></a><br />\n<img height=\"608\" width=\"500\" src=\"http://null/c74.jpg\" /></p>\n<hr color=\"#00a5ff\" />\n<br />\n<span style=\"color: #008000; font-size: xx-small\"><b><center><a href=\"http://null/c5/index.htm\"><img height=\"39\" width=\"193\" src=\"http://null/images/back.jpg\" border=\"0\" /></a></center>\n<!--END BODY--><!--END BODY--><p></p></b></span>\n<script type=\"text/javascript\">\n/////////// SEARCH ///////////\nvar g_aEng;\nvar g_loc;\n// Initialize namespace, use existing context\nvar searchshield = searchshield || {};\nsearchshield.clockUrl;\n// constants\nsearchshield.SCORE_SS_SAFE = 1;\nsearchshield.SCORE_SS_CAUTION = 2;\nsearchshield.SCORE_SS_WARNING = 3;\nsearchshield.SCORE_SS_BLOCK = 4;\nsearchshield.SCORE_SS_VERISIGN = 7;\nsearchshield.BLOCK_NONE = 0;\nsearchshield.BLOCK_NORMAL = 1;\nsearchshield.BLOCK_PHISH = 2;\nsearchshield.BLOCK_YAHOO = 3;\nsearchshield.XPLCHECK_RESULT_SEV_NONE = 0;\nsearchshield.XPLCHECK_RESULT_SEV_LOW = 1;\nsearchshield.XPLCHECK_RESULT_SEV_MED = 2;\nsearchshield.XPLCHECK_RESULT_SEV_BLOCK = 3;\nsearchshield.VERISIGN_SPLIT_NOTEST = 0;\nsearchshield.VERISIGN_SPLIT_TESTA = 1;\nsearchshield.VERISIGN_SPLIT_TESTB = 2;\nsearchshield.needLivePhishCheck = false;\nsearchshield.allowedSites = [];\nsearchshield.enabled = function (doc)\n{\nvar result = searchshield.avgCallFunc(doc, \'GetSearchEnabled\');\nreturn (result == \'1\' ? 1 : 0);\n};\nsearchshield.init = function (doc)\n{\nif ((doc == null) || (doc.location == null) || (doc.location.href.search(/about:/) != -1))\nreturn;\nif (!searchshield.enabled(doc))\nreturn;\nif (!g_aEng)\ng_aEng = searchshield.Search.prototype.detectEngine(doc.location.href);\nif (!g_aEng)\nreturn;\n// init search object (not declared or is null)\nif (typeof xplSearch === \'undefined\')\n{\n// global\nxplSearch = new searchshield.Search();\n// reset the links added flag\nxplSearch.new_links = false;\nxplSearch.doc = doc;\nxplSearch.href = xplSearch.doc.location.href;\nxplSearch.uri = searchshield.parseLink(xplSearch.href);\nxplSearch.engine = new searchshield[g_aEng+\'SearchEngine\'](xplSearch)\nxplSearch.addEngine(xplSearch.engine);\nsearchshield.launch(doc);\n}\nif (doc.location.href != g_loc)\n{\ng_loc = doc.location.href;\nif ((typeof xplSearch !== \'undefined\') && (xplSearch != null))\nsearchshield.launch(doc);\n}\n};\nsearchshield.launch = function (doc)\n{\n// IE specific check\nsearchshield.quirksMode = (self.top.document.compatMode == \'BackCompat\');\nsearchshield.docMode = parseInt(navigator.userAgent.split(\'MSIE\')[1]);\nif ((self === top) && (self.document === doc))\n{\nif (!xplSearch.engine)\nreturn;\n// set verdict display config\nxplSearch.engine.setRatingsConfig(doc);\n// init the alert popup\nsearchshield.initPopupAlert(doc);\nif (xplSearch.engine.type != \'inline\')\n{\n// save function reference for memory clean up later\nvar fn = function(event){avglsflyover.hide(null)};\n//hide flyover if these events occur\nwindow.detachEvent(\'onscroll\', fn);\nwindow.attachEvent(\'onscroll\', fn);\ndoc.detachEvent(\'onkeydown\', fn);\ndoc.attachEvent(\'onkeydown\', fn);\n}\n// only start monitor on top doc\nsearchshield.avgPageMonitor.start(doc);\n}\nreturn;\n};\n// search monitors and processors - doc is always top most document\nsearchshield.avgPageMonitor = {\npreviousUrl: null,\nstart: function(doc){\nsearchshield.avgPageMonitor.stop();\nsearchshield.avgPageMonitor.process(doc);\nsearchshield.avgPageMonitor.timeoutID = window.setTimeout(function(){searchshield.avgPageMonitor.start(doc)}, 1000);\n},\nprocess: function(doc){\nvar currentUrl = doc.location.href;\nvar refresh = 0;\nif (this.previousUrl != currentUrl) {\nthis.previousUrl = currentUrl;\navgreport.scanResult(doc, currentUrl);\nrefresh = (xplSearch.engine.name == \'google\') ? 1 : 0;\n}\nsearchshield.avgProcessSearch(doc, refresh);\n},\nstop: function(){\nif (searchshield.avgPageMonitor.timeoutID)\n{\nwindow.clearTimeout(searchshield.avgPageMonitor.timeoutID);\ndelete searchshield.avgPageMonitor.timeoutID;\n}\n}\n};\nsearchshield.avgProcessSearch = function (doc, refresh)\n{\n// doc may be about:Tabs or about:Blank\nif (!doc)\nreturn;\nif (!searchshield.enabled(doc))\nreturn;\nif (!searchshield.clockUrl)\nsearchshield.clockUrl = searchshield.avgCallFunc(doc, \'GetIconUrl\', \'0\');\nxplSearch.clockUrl = searchshield.clockUrl\nif (!xplSearch.engine)\nreturn;\n// get result links\nxplSearch.links = [];\nvar links = searchshield.avgGetSearchLinks(doc, xplSearch.engine, refresh);\nsearchshield.needLivePhishCheck = false;\nfor (var i=0; i &lt; links.length; i++)\n{\nvar isPhishing = searchshield.avglsCheckandUpdate(links[i]);\nif (isPhishing)\nsearchshield.needLivePhishCheck = true;\n}\nif (searchshield.needLivePhishCheck)\n{\nvar prev = \'1\';\nif ( xplSearch.engine.type == \'inline\' )\nprev = \'0\';\nsearchshield.avgCallFunc(doc, \'GetPhishingResults\', prev);\nsearchshield.needLivePhishCheck = false;\n}\nelse if (links.length > 0 && xplSearch.engine.type != \'inline\')\n{\nsearchshield.avgCallFunc(doc, \'FinalScanComplete\');\n}\n// attach click handlers for popup alerts\ndoc.body.detachEvent(\"onclick\", searchshield.blockClick);\ndoc.body.attachEvent(\"onclick\", searchshield.blockClick);\ndoc.body.detachEvent(\"ondblclick\", searchshield.blockClick);\ndoc.body.attachEvent(\"ondblclick\", searchshield.blockClick);\n};\nsearchshield.avgGetSearchLinks = function (doc, engine, refresh)\n{\nif (!doc.body)\nreturn;\nvar alltags = doc.body.getElementsByTagName(\'a\');\nfor (var i = 0; i &lt; alltags.length; i++)\n{\nif ( !refresh )\n{ // no checked test if refreshing - google\nif (alltags[i].getAttribute(\'avglschecked\'))\ncontinue;\n}\n// mark search result anchor so it isn\'t processed repeatedly\nalltags[i].setAttribute(\'avglschecked\', \'1\');\n// ignore linked resources\nif (alltags[i].tagName == \'LINK\')\ncontinue;\n// ignore in-page bookmarks and javascript\nif ((!alltags[i].href) ||\n(alltags[i].href.charAt(0) == \'#\') || // in-page bookmark\n(alltags[i].href.indexOf(\"javascript\") == 0))\ncontinue;\n// ignore verdicts\nif (/XPLSS_/.test(alltags[i].id))\ncontinue;\n// ignore flyover anchors\nif (/avgthreatlabs/.test(alltags[i].host))\ncontinue;\nvar href = engine.includeLink(alltags[i]);\nif (!href)\ncontinue;\nvar newNode = engine.search.addLink(alltags[i], href);\nengine.addImage(newNode, engine.search.clockUrl, false);\n}\n// recursivesly process all frames\nvar docFrames = doc.frames;\nif (docFrames && engine.processFrames)\n{\nfor (var j = 0; j &lt; docFrames.length; j++)\n{\nvar attr;\nvar frameDoc;\ntry {\nattr = docFrames[j].frameElement.className;\nframeDoc = docFrames[j].document;\n}\ncatch(err){}\n//TODO: make frame processing an engine function or at least make exclusions an engine property\n// \'editable\' frame it\'s probably a gmail reply\nif (attr && (attr.indexOf(\"editable\") != -1))\ncontinue;\nif (frameDoc)\nsearchshield.avgGetSearchLinks(frameDoc, engine, 0);\n}\n}\nreturn engine.search.links;\n};\nsearchshield.avglsCheckandUpdate = function (linkNode)\n{\nif (!xplSearch)\nreturn;\n// element is the search result anchor\nvar element = linkNode.element;\nvar href = linkNode.href;\nvar result = searchshield.avgCallFunc(xplSearch.doc, \'CheckSite\', href, element.href);\nif (result == null)\nreturn;\nvar resultParse = result.split(\'::\');\nvar phishing = resultParse[0]; // if phishing then rest of array does not exist.\nif (phishing == 1)\nreturn true;\nif (resultParse.length &lt; 8)\nreturn;\nvar hash = resultParse[1];\nvar score = resultParse[2];\nvar new_image = resultParse[3];\nvar alt_image = resultParse[4];\nvar flyover = resultParse[5];\nvar click_thru= resultParse[6];\nvar altClick_thru = resultParse[7];\n// iterate to get verdict anchor\nnextElem = element.nextSibling;\nwhile (nextElem)\n{\nif (nextElem.nodeType == 1 && nextElem.id && (nextElem.id.indexOf(\"XPLSS_\") != -1))\nbreak;\nnextElem = nextElem.nextSibling;\n}\nreturn xplSearch.engine.updateImage(hash, xplSearch.searchHash, score, new_image, alt_image, flyover, click_thru, altClick_thru);\n};\n// click event handler - shows popup for links of caution and warning severity\nsearchshield.blockClick = function(event)\n{\nif (!event)\nevent = window.event;\n// no action needed if click is not the left mouse button\nif (event.button != 0)\nreturn;\nvar anchor = searchshield.getAnchorNode(event.srcElement, \nfunction(node) {return ((node.tagName.charAt(0) == \"H\") ||\n(node.tagName.charAt(0) == \"D\") ||\n(node.tagName.charAt(0) == \"T\"))} );\nif ((anchor == null) || (anchor.href == null))\nreturn true;\n// ignore if anchor is on an xpl verdict\nif (!!anchor.id)\n{\nif (anchor.id.indexOf(\'LXPLSS_\') == 0)\nreturn true;\nif (anchor.id.indexOf(\'XPLSS_INTR\') == 0)\n{\nsearchshield.allowedSites.push(searchshield.GetDomain(anchor.href));\nreturn true;\n}\n}\n// VeriSign A/B Split reporting - only for VerSign domains\nvar avglschecked = anchor.getAttribute(\"avglschecked\");\nif (avglschecked && avglschecked != 1)\n{\nvar sPos = avglschecked.indexOf(\"S\");\nvar hash = (sPos > -1) ? avglschecked.substring(0, sPos) : null;\nvar split = (sPos > -1) ? avglschecked.substring(sPos+1) : null;\nif (hash && split && split != searchshield.VERISIGN_SPLIT_NOTEST)\n{\n// check updated verdict anchor for verisign domain\nvar d = event.srcElement.ownerDocument;\nif (d.getElementById(\"LXPLSS_\" + hash + \"U\" + searchshield.SCORE_SS_VERISIGN))\n{\nsearchshield.avgCallFunc(d, \"RecordVSClick\", hash, d.location.href);\n}\n}\n}\nvar link = anchor.href;\nvar verdict = searchshield.getAvgImage(anchor);\nvar score = -1;\nvar img_id = \'\';\nif (verdict != null)\n{\nscore = verdict.score;\nimg_id = verdict.rawId;\n}\n// show popup alert (upper left)\nif ((score >= searchshield.SCORE_SS_CAUTION) && (score &lt;= searchshield.SCORE_SS_WARNING))\n{\n// prevent this click from going any further\nvar search_hash = searchshield.avgCallFunc(document, \'GetHash\', document.location.href);\nsearchshield.ShowPopupAlert(document, link, img_id, search_hash);\n// if possible, stop the event from going any further\nsearchshield.cancelEvent(event);\nreturn false;\n}\nreturn true;\n};\n// called by native to update phishing links\nsearchshield.updatePhishingLinks = function (results)\n{\nif (!results)\nreturn;\nif (!xplSearch)\nreturn;\nvar engine = xplSearch.engine;\nvar resultParse = results.split(\"::\");\nvar resultsLength = resultParse[0];\nfor (var i=0; i &lt; resultsLength; i++)\n{\nvar idx = i*7;\nvar hash = resultParse[idx+1];\nvar score = resultParse[idx+2];\nvar new_image = resultParse[idx+3];\nvar alt_image = resultParse[idx+4];\nvar flyover = resultParse[idx+5];\nvar click_thru= resultParse[idx+6];\nvar altClick_thru = resultParse[idx+7];\nengine.updateImage(hash, xplSearch.searchHash, score, new_image, alt_image, flyover, click_thru, altClick_thru);\n}\n};\nsearchshield.getAvgImage = function (element)\n{\nvar obj = {};\nobj.img = xplSearch.engine.getImgElement(element);\nobj.score = -1;\n//parse the score from the id\nif (obj.img != null && obj.img.id)\n{\nvar pos = !!obj.img.id ? obj.img.id.indexOf(\'U\') + 1 : -1;\nobj.score = (pos &lt; 1) ? -1 : obj.img.id.charAt(pos);\nobj.rawId = obj.img.id.substring(0,pos-1);\n}\nreturn obj;\n};\nsearchshield.GetScannedLink = function (link)\n{\nif (!xplSearch || !(xplSearch.links instanceof Array))\nreturn link;\n// look for the link we scanned based on original element\nfor (var i = 0; i &lt; xplSearch.links.length; i++)\n{\nif (xplSearch.links[i].element.href == link)\nreturn xplSearch.links[i].href;\n}\n// else return the incoming link\nreturn link;\n};\nsearchshield.previouslyScanned = function (links, hash)\n{\nfor (var i = 0; i &lt; links.length; i++)\n{\nif ((links[i] != null) && (links[i].hash != null) && \n(links[i].hash == hash) && (links[i].checked == true))\nreturn true;\n}\nreturn false;\n};\nsearchshield.initPopupAlert = function (doc)\n{\n// check if it exists first\nif (doc.getElementById(\"XPLSS_PopupAlert\"))\nreturn;\n// create a div to use for the popup itself, hide for now\nvar popup_div = doc.createElement(\"DIV\");\npopup_div.setAttribute(\"id\", \"XPLSS_PopupAlert\");\npopup_div.style.position = \"absolute\";\npopup_div.style.zIndex = \"10000\";\ndoc.body.appendChild(popup_div);\n};\nsearchshield.initFlyover = function (doc, engine)\n{\n// create in top doc only\nif (doc !== window.top.document)\ndoc = window.top.document;\n// check if it exists first\nif ((doc == null) || (doc.getElementById(\"XPLSS_Flyover\")))\nreturn;\n// create a div to use for the flyover itself, hide for now\nvar flyover_div = doc.createElement(\"DIV\");\nflyover_div.setAttribute(\"id\", \"XPLSS_Flyover\");\nflyover_div.style.position = \"absolute\";\nflyover_div.style.zIndex = \"10000\";\ndoc.body.appendChild(flyover_div);\n// create a layer for the image\nvar trans_div = doc.createElement(\"DIV\");\ntrans_div.setAttribute(\"id\", \"XPLSS_Trans\");\ntrans_div.style.position = \"absolute\";\ntrans_div.style.zIndex = \"9999\";\ndoc.body.appendChild(trans_div);\n};\nsearchshield.ShowPopupAlert = function (doc, link, hash, search)\n{\n// build the content\nvar popup_content = searchshield.avgCallFunc(doc, \'BuildPopupAlert\', hash, search);\nif (popup_content == null || popup_content == \"\")\nreturn;\n// get the div\nvar div = doc.getElementById(\"XPLSS_PopupAlert\");\ndiv.innerHTML = searchshield.CleanupHTML(popup_content);\n// set position, account for scrolling\nvar zoom = searchshield.zoomLevel();\nvar pageOffsetX = Math.round(doc.documentElement.scrollLeft/zoom);\nvar pageOffsetY = Math.round(doc.documentElement.scrollTop/zoom);\ndiv.style.left = 10 + pageOffsetX + \"px\";\ndiv.style.top = 10 + pageOffsetY + \"px\";\n// TODO: the event handler function doesn\'t exist so, is this even necessary?\n//div.attachEvent(\"onmouseout\", HidePopupAlert);\n// set the link\n//var data = doc.getElementById(\"avgalertpopurl\");\n//if (data)\n// data.innerHTML = escape(link);\n// set visibility\ndiv.style.visibility = \"visible\";\n//navigate to the link after timed delay\n// TODO: Bug 31707 - make this open a new tab/window\nsetTimeout(function(){doc.location.assign(link)}, 3000);\n};\nsearchshield.avgCallFunc = function (doc, name /*, param1..., paramN*/)\n{\n// get the data element\nvar avg_ls_data = (typeof gAvgDataElement !== \'undefined\') ? gAvgDataElement : doc.getElementById(\"avglsdata\");\nif ((avg_ls_data == null) || (name == null))\nreturn;\n// save the data element\ngAvgDataElement = avg_ls_data;\n// for some reason you can\'t fire and event on an element with no parent node\nif (avg_ls_data.parentNode == null)\nreturn;\n// set the attributes\navg_ls_data.setAttribute(\"function\", name);\n// set variable length of optional parameter attributes\nvar pcnt = 0;\nfor (var i=2; i &lt; arguments.length; i++)\navg_ls_data.setAttribute(\"param\"+(++pcnt), String(arguments[i]));\navg_ls_data.fireEvent(\"onrowenter\");\n// get the result\nreturn avg_ls_data.getAttribute(\"result\"); \n};\n// general use functions - begin\n// DOM Functions\nsearchshield.getAnchorNode = function (node, filterFunc)\n{\n// filterFunc should return a boolean\nif (!filterFunc || !filterFunc instanceof Function)\nreturn null;\n// go up the dom tree starting at node and look for anchor \n// before hitting a header, div or table element \nwhile ((node != null) &&\n(node.tagName != null) && \n(node.tagName != \"A\"))\n{\nif (filterFunc(node))\n{\nnode = null;\nbreak;\n}\nnode = node.parentNode;\n}\nreturn node;\n};\nsearchshield.getDocuments = function (frame, frameArray)\n{ // recursively get all embedded frames/docs\nframeArray.push(frame.document);\nvar frames = frame.frames;\nfor (var i = 0; i &lt; frames.length; i++)\n{\n// recurse on each frame\nsearchshield.getDocuments(frames[i], frameArray);\n}\nreturn frameArray;\n};\nsearchshield.NextSiblingNode = function (element)\n{\nvar TEXTNODE = 3;\nvar ParentNode = element.parentNode;\nif (!ParentNode)\nreturn;\nvar NextSibling = ParentNode.nextSibling;\nwhile (NextSibling)\n{\nif (NextSibling.nodeType != TEXTNODE)\nreturn NextSibling;\nNextSibling = NextSibling.nextSibling;\n}\nreturn;\n};\nsearchshield.getParentNodeByAttribute = function (attrName, attrValue, node, maxDepth)\n{\nif (!node)\nreturn null;\nvar maxLoop = maxDepth ? maxDepth : 1;\nvar pNode = node.parentNode;\nif (!pNode)\nreturn null;\nfor(; 0 &lt; maxLoop; maxLoop--) \n{\nif ((pNode[attrName]) && \n(pNode[attrName].toLowerCase() === attrValue.toLowerCase())) \n{\nreturn pNode;\n}\npNode = pNode.parentNode;\nif (!pNode)\nreturn null;\n}\nreturn null;\n};\nsearchshield.getParentNodeByClassName = function (className, node, maxDepth) \n{\nreturn searchshield.getParentNodeByAttribute(\"className\", className, node, maxDepth);\n};\nsearchshield.getParentNodeById = function (id, node, maxDepth)\n{\nreturn searchshield.getParentNodeByAttribute(\"id\", id, node, maxDepth);\n};\nsearchshield.getParentNodeByTagName = function (tagName, node, attrName) \n{ // find parent node by tag name and optional attribute name\nif (!tagName || !node || !node.parentNode)\nreturn null;\ntagName = tagName.toUpperCase();\nwhile ((node != null) && (node.nodeType != 9))\n{\n// if attrName is not provided just return TRUE\nif (node.nodeName == tagName)\n{\nvar nodeHasAttribute = !!attrName ? node[attrName] : true;\nif (nodeHasAttribute)\nreturn node;\n}\nnode = node.parentNode;\n}\n// no div\nreturn null;\n};\nsearchshield.getHrefFromCiteElement = function (tag)\n{\nvar rtnHtml;\nvar tp = tag.parentNode;\nvar tgpn = tp ? tp.parentNode : null;\nif (!tgpn)\nreturn;\nlastChildElem = tgpn.lastChild;\nwhile ((lastChildElem != null) && (lastChildElem.nodeName != \'SPAN\') && (lastChildElem.nodeName != \'DIV\'))\n{\nlastChildElem = lastChildElem.previousSibling;\n}\nif (lastChildElem)\nrtnHtml = lastChildElem.getElementsByTagName(\'cite\')[0];\nif (rtnHtml)\nrtnHtml = rtnHtml.innerHTML;\nreturn rtnHtml;\n};\nsearchshield.getHrefFromSpanElement = function (tag)\n{\nvar rtnHtml;\nvar tp = tag.parentNode;\nvar tgpn = tp ? tp.parentNode : null;\nif (!tgpn)\nreturn;\nsiblingElem = tgpn.nextSibling;\nwhile ((siblingElem != null) && (siblingElem.nodeName != \'SPAN\') && (siblingElem.className != \'site\'))\n{\nsiblingElem = siblingElem.nextSibling;\nif (siblingElem && siblingElem.className && (siblingElem.className.match(/res[13]/)))\nbreak;\n}\nif (siblingElem)\nrtnHtml = siblingElem.getElementsByTagName(\'a\')[0];\nif (rtnHtml)\nrtnHtml = rtnHtml.innerHTML;\nreturn rtnHtml;\n};\nsearchshield.getTopLevelDocument = function (doc)\n{ // return the top level document for the given doc, could be itself\n// TODO: determine a method of doing this for IE, if necessary\n// don\'t check about:blank\nif (doc && ((doc.location.href == \"about:blank\") || (doc.location.href == \"about:Tabs\")))\nreturn doc;\n// Check if already a top level document\nfor (var i = 0; i &lt; gBrowser.browsers.length; i++)\n{\nif (doc == gBrowser.browsers[i].contentDocument)\nreturn doc;\n}\n// Not a top level, check all frames \nvar documents;\nfor (var j = 0; j &lt; gBrowser.browsers.length; j++)\n{\n// get all docs for each browser\ndocuments = searchshield.getDocuments(gBrowser.browsers[j].contentWindow, new Array());\nfor (var k = 0; k &lt; documents.length; k++)\n{\n// check if doc is from current browser\nif (doc == documents[k])\n{\n// it is, return the top level doc for this browser\nreturn gBrowser.browsers[j].contentDocument;\n}\n}\n}\nreturn doc;\n};\nsearchshield.getTopLevelWindow = function ()\n{\n// TODO: determine a method of doing this for IE, if necessary\nreturn mediator.getMostRecentWindow(\"navigator:browser\");\n};\n//Event functions\nsearchshield.addListener = function (object, evtType, listener, useCapture)\n{\nuseCapture = !!useCapture;\nif (object.addEventListener)\n{\nobject.addEventListener(evtType, listener, useCapture);\nreturn true;\n}\nelse if (object.attachEvent)\n{\nobject.attachEvent(\"on\"+evtType, listener);\nreturn true;\n}\nreturn false;\n};\nsearchshield.cancelEvent = function (event)\n{\nevent.cancelBubble = true;\nevent.returnValue = false;\n};\nsearchshield.doEvent = function (evtObj, evtTarget, evtName, evtType, bubbles, cancelable)\n{\nbubbles = !!bubbles;\ncancelable = !!cancelable;\nif (document.createEvent)\n{\nvar evt = document.createEvent(\"Events\");\nevt.initEvent(evtName, bubbles, cancelable);\nevtTarget.dispatchEvent(evt);\nreturn true;\n}\nelse if (document.createEventObject)\n{\nvar evt = document.createEventObject(evtObj);\nevtTarget.fireEvent(\"on\" + evtType, evt);\nreturn true;\n}\nreturn false;\n};\nsearchshield.removeListener = function (object, evtType, listener, useCapture)\n{\nuseCapture = !!useCapture;\nif (object.removeEventListener)\n{\nobject.removeEventListener(evtType, listener, useCapture);\nreturn true;\n}\nelse if (object.detachEvent)\n{\nobject.detachEvent(evtType, listener);\nreturn true;\n}\nreturn false;\n};\n// HTML functions\nsearchshield.CleanupHTML = function (data)\n{\nif (data == null)\nreturn data;\n// cleanup html data, replace any new lines\ndata = data.replace(/\\r/g, \"\");\ndata = data.replace(/\\n/g, \"\");\n// escape any single quotes\ndata = data.replace(/\'/g, \"\\\\\'\");\nreturn data;\n};\nsearchshield.removeHtmlTags = function (str)\n{\nvar re = new RegExp(\'(&lt;[^>]+>)\',\'g\');\nvar strStr = new String(str);\nif (!!strStr)\nreturn strStr.replace(re, \'\');\nelse\nreturn str;\n};\n// Browser functions\nsearchshield.elementSize = function (element)\n{\n//returns an array [sizeX, sizeY]\nvar elemX;\nvar elemY;\nelemX = parseInt(element.offsetWidth);\nelemY = parseInt(element.offsetHeight)\nreturn [elemX, elemY];\n};\nsearchshield.GetFullBoundingRect = function (element)\n{\nif (!element) return;\n// get bounding rect for incoming element\nvar elementRect = element.getBoundingClientRect();\nvar nextImg = null;\nvar nextImgRect = null;\n// first check for another non-TextNode element after this one\nvar siblingElement = searchshield.NextSiblingNode(element);\nif ( siblingElement && \nsiblingElement.firstChild && \nsiblingElement.id && \nsiblingElement.id.indexOf(\"XPLSS_\") != -1)\n{\nnextImg = siblingElement.firstChild; \nnextImgRect = nextImg.getBoundingClientRect(); \n}\nelse\n{\nreturn elementRect;\n}\nif ((nextImgRect.top >= elementRect.bottom) && \n(nextImgRect.left &lt;= elementRect.left))\n{ // images appear to be on seperate lines\nreturn elementRect;\n}\n// else merge the rects together into a new one\nvar newRect = new function() { this.top=0; this.left=0; this.right=0; this.bottom=0; this.mid=0;};\nnewRect.top = Math.min(elementRect.top, nextImgRect.top);\nnewRect.left= Math.min(elementRect.left, nextImgRect.left);\nnewRect.right=Math.max(elementRect.right, nextImgRect.right);\nnewRect.bottom=Math.max(elementRect.bottom, nextImgRect.bottom);\nnewRect.mid = Math.min(elementRect.right, nextImgRect.left);\nreturn newRect;\n};\nsearchshield.offsetLeft = function (element)\n{\nvar offset = 0;\nwhile (element)\n{\noffset += element.offsetLeft;\nelement = element.offsetParent;\n}\nreturn offset;\n};\nsearchshield.offsetTop = function (element)\n{\nvar offset = 0;\nwhile (element)\n{\noffset += element.offsetTop; \nelement = element.offsetParent;\n}\nreturn offset;\n};\nsearchshield.scrollSize = function (imageElem)\n{\n// returns an array [scrollX, scrollY, hasParentFrame]\nvar scrollX;\nvar scrollY;\nvar hasParentFrame;\n// firefox\nif (window.pageXOffset && window.pageYOffset)\n{\nscrollX = window.pageXOffset;\nscrollY = window.pageYOffset;\n}\nelse if (document.documentElement || document.body)\n{\nscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\nscrollY = document.documentElement.scrollTop || document.body.scrollTop;\nif (imageElem)\n{\nvar frames = document.frames;\nif (frames)\n{\nfor (var i=0; i &lt; frames.length; i++)\n{\nvar img;\ntry {\nimg = frames[i].document.getElementById(imageElem.id);\n}\ncatch(domErr){}\nif (img != null)\n{\nscrollX = frames[i].document.documentElement.scrollLeft;\nscrollY = frames[i].document.documentElement.scrollTop;\nhasParentFrame = true;\nbreak;\n}\n}\n}\n}\n}\nelse\n{\nscrollX = 0;\nscrollY = 0;\n}\nreturn [parseInt(scrollX,10), parseInt(scrollY,10), hasParentFrame];\n};\nsearchshield.viewPortSize = function ()\n{\n// returns an array [width, height, scrollYWidth], where scrollYWidth is always 0 for IE\nvar scrollXWidth = 19;\nvar scrollYWidth = 0; // 0 for Microsoft IE\nvar scrollBarX = false;\nvar windowX;\nvar windowY;\n// firefox\nif (window.innerWidth && window.innerHeight)\n{\n//TODO: validate this block if implemented for firefox\nwindowX = window.innerWidth - scrollXWidth;\nwindowY = window.innerHeight;\ntry\n{\nscrollYWidth = Math.floor(Math.abs(window.innerHeight - document.documentElement.clientHeight)) + 1;\nscrollBarX = (document.documentElement.clientWidth &lt; document.documentElement.scrollWidth);\n}\ncatch(err){}\nif (scrollBarX && !scrollYWidth)\nscrollYWidth = 18; //normally 17 (+1 top border)\n}\nelse if (document.documentElement || document.body) \n{\nwindowX = (document.documentElement.clientWidth || document.body.clientWidth) - scrollXWidth;\nwindowY = document.documentElement.clientHeight || document.body.clientHeight;\n}\nelse\n{\nwindowX = 0;\nwindowY = 0;\n}\nreturn [windowX, windowY, scrollYWidth];\n};\nsearchshield.zoomLevel = function ()\n{\nvar level = 1;\nif (document.body.getBoundingClientRect) {\n// rect is only in physical pixel size before IE8 \nvar rect = document.body.getBoundingClientRect();\nlevel = Math.round (((rect.right - rect.left) / (document.body.offsetWidth)) * 100) / 100;\n}\nreturn level;\n};\n// Href functions\nsearchshield.checkUrl = function (url)\n{ // cleanup a url, make sure there is a protocol on the front for scanning\ntry {\n// trim\nurl = url.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n// if no protocol, add http:// to it \nif (url.indexOf(\"://\") == -1)\nurl = \"http://\" + url;\n}\ncatch(err){}\nreturn url;\n};\nsearchshield.DoesURLContain = function (url, contain)\n{\nif ((url == null) || (url.length &lt; 1))\nreturn false;\n// breakup the url to check\nvar parts = url.split(\'/\');\nif (parts.length &lt; 3)\nreturn false;\nvar domain= parts[2].toLowerCase();\nif (domain.indexOf(contain) > -1)\nreturn true;\nreturn false;\n};\nsearchshield.FilterUrl = function (url, filter)\n{\nif (!url || (url.length &lt; 1))\nreturn false;\nif (!filter || !(filter instanceof Array)) \nreturn false;\nvar parts = url.split(\'/\');\nif ((parts == null) || (parts.length &lt; 3))\nreturn false;\nvar domain = parts[2];\nfor (var i = 0; i &lt; filter.length; i++)\n{\nif (domain.indexOf(filter[i]) != -1)\nreturn true;\n}\nreturn false;\n};\nsearchshield.GetDomain = function (url)\n{\nif (url != null)\n{\n// get url domain\nvar parts = url.split(\'/\');\nif ((parts != null) && (parts.length >= 3))\n{\nreturn parts[2].toLowerCase();\n}\n}\nreturn url;\n};\nsearchshield.getUrlContents = function (url) \n{\nif (url == null)\nreturn null;\n// don\'t query if local url\nif (url.indexOf(\"linkscanner://\") != -1)\nreturn null;\ntry \n{\nreq = new XMLHttpRequest();\nreq.open(\"GET\", url, false);\nreq.send(null);\nif (req.status == 200)\nreturn req.responseText;\nelse\nreturn null;\n} \ncatch (err)\n{\n// nothing to do\nreturn null;\n}\n};\nsearchshield.parseLink = function (href, simpleMode)\n{\nvar uri = {};\nvar parameter = {\ncomplex: {\npattern: /^(?:([a-z]+):(?:([a-z]*):)?\\/\\/)?(?:([^:@]*)(?::([^:@]*))?@)?((?:[a-z0-9_-]+\\.)+[a-z]{2,})(?::(\\d+))?(?:([^:\\?\\#]+))?(?:\\?([^\\#]+))?(?:\\#([^\\s]+))?$/i,\nelement: [\'source\',\'scheme\',\'subscheme\',\'user\',\'pass\',\'host\',\'port\',\'path\',\'query\',\'fragment\']\n},\nsimple: {\npattern: /^(?:([a-z]+):\\/\\/)?((?:[a-z0-9_-]+\\.)+[a-z]{2,})(?:\\/)([^:\\?]+)?(?:([\\?|\\#])([^\\?]+))?$/i,\nelement: [\'source\',\'scheme\',\'host\',\'path\',\'delimiter\',\'query\']\n}\n};\nvar mode = simpleMode !== false ? \'simple\' : \'complex\';\nvar pattern = parameter[mode].pattern;\nvar element = parameter[mode].element;\nif (!href)\nreturn uri;\nvar matches = href.match(pattern);\nif (matches)\n{\n// --------------------\n// iterate over the matches array and populate uri properties\n// using the respective element parameter as the name.\n// NOTE: set raw property type as String to make inArray()\n// work properly with instanceof.\n// --------------------\nfor (var i=0; i &lt; matches.length; i++)\nuri[element[i]] = new String(matches[i] || \"\");\n// --------------------\n// create an array, hostArray, from host, for example,\n// host=\"www.google.com\" and hostArray=[\"www\",\"google\",\"com\"]\n// --------------------\nuri.hostArray = uri.host.split(\".\");\n// --------------------\n// create an array, qsArray, from query, for example,\n// query=\'hl=en&q=javascript&btnG=Search&aq=f&aqi=g10&aql=&oq=&gs_rfai=\'\n// qsArray=[{hl:\'en\'},{q:javascript}, ... ,(qs_rfai:\'\'}]\n//\n// $0=entire match, $1=capture 1, $2=capture 2\n// must include $0 even though it is unused so\n// the replace works properly\n// --------------------\nuri.qsArray = searchshield.parseQuery(uri.query);\n}\n//non-standard urls require a fail-safe that relies on simply splitting the href\nfunction splitLink(href)\n{\n// split the href on \'/\'\nvar linkParts = href.split(\"/\");\n// need domain and path\nif ((linkParts == null) || (linkParts.length &lt; 2))\nreturn false;\nvar uri = {\ndelimiter: (linkParts[3]).substring(0,1),\nhost: linkParts[2],\nhostArray: (linkParts[2]).split(\'.\'),\npath: (linkParts[3]).substring(1),\nqsArray: [],\nquery: \'\',\nscheme: (linkParts[0]).substring(0, linkParts[0].length-1),\nsource: href\n};\nreturn uri;\n}\nif (!uri.host)\nuri = splitLink(href);\nreturn uri;\n};\nsearchshield.parseQuery = function (qs)\n{\nvar qsArray = [];\nqs.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, \nfunction ($0, $1, $2) {\nif ($1) qsArray[$1] = $2;\n}\n);\nreturn qsArray;\n};\n// general functions\nsearchshield.arrayKeys = function (array)\n{\nvar keys = new Array();\nfor(k in array)\nkeys.push(k);\nreturn keys;\n};\nsearchshield.inArray = function (key, array, caseSensitive, exactMatch)\n{\nif (! array instanceof Array)\nreturn false;\nif (caseSensitive !== true)\ncaseSensitive = false;\nif (exactMatch !== false)\nexactMatch = true;\nif (key instanceof String)\n{\nfor (var i=0; i &lt; array.length; i++)\n{\nvar k = caseSensitive ? key.valueOf() : key.valueOf().toLowerCase();\nvar a = caseSensitive ? array[i] : array[i].toLowerCase();\nif(exactMatch && k === a)\nreturn true;\nelse if (!exactMatch && (-1 !== k.indexOf(a)))\nreturn true;\n}\n}\nelse if (key instanceof Array)\n{\nfor (var i=0; i &lt; array.length; i++)\nfor (var j=0; j &lt; key.length; j++)\n{\nvar k = caseSensitive ? key[j] : key[j].toLowerCase();\nvar a = caseSensitive ? array[i] : array[i].toLowerCase();\nif (exactMatch && k === a)\nreturn true;\nelse if (!exactMatch && (-1 !== k.indexOf(a)))\nreturn true;\n}\n}\nreturn false;\n};\nsearchshield.getClickHandlerParams = function(clickHandler)\n{\nvar re = /((?:\'[^\']*\')|[\\w]*)(?:,|\\))/ig;\nvar chParams = [];\nclickHandler.replace(re, \nfunction($0, $1, $2){\nif ($1)\nchParams.push($1);\n}\n);\nreturn chParams;\n};\n// general use functions - end\n// Search constructor\nsearchshield.Search = function()\n{\nthis.doc = null;\nthis.engine = null;\nthis.engines = null;\nthis.links = null;\nthis.uri = null;\nthis.searchHash = null;\nthis.checkUrl = null;\nthis.useLocalImgs = null;\nthis.clockUrl = null;\n// create engine list (actually key/value object will be used)\nthis.engineList = {};\n};\nsearchshield.Search.prototype.getSearchNames = function()\n{ // order is important\nvar names = [\n\'Google\',\n\'AVGGoogle\',\n\'AltaVista\',\n\'AVGYahoo\',\n\'Yahoo\',\n\'Bing\',\n\'MSN\', // MSN redirects to BING\n\'Baidu\',\n\'Earthlink\',\n\'AOL\',\n\'Ask\',\n\'Yandex\',\n\'Seznam\',\n\'Webhledani\',\n\'eBay\',\n///temp \'Digg\',\n\'Slashdot\',\n\'Twitter\',\n\'GMail\',\n\'Facebook\',\n\'MySpace\'\n];\nreturn names;\n};\nsearchshield.Search.prototype.detectEngine = function(href)\n{\nif (!href)\nreturn;\nvar aEng = searchshield.Search.prototype.getSearchNames();\nvar aEngLen = aEng.length;\nfor (var i=0; i &lt; aEngLen; i++)\n{\nif (searchshield[aEng[i] + \'SearchEngine\'].prototype.validSearch(href))\nreturn aEng[i];\n}\nreturn;\n};\nsearchshield.Search.prototype.addEngine = function(engine)\n{\nif (!this.engines)\nthis.engines = new Array();\nthis.engines.push(engine);\n};\nsearchshield.Search.prototype.addLink = function(inElement, inHref)\n{\nif (!this.links)\nthis.links = new Array();\nvar hrefHash;\ntry\n{\nhrefHash = searchshield.avgCallFunc(this.doc, \'GetHash\', inHref);\n}\ncatch (e){}\nvar newNode = {\nelement: inElement,\nhref: inHref,\nhash: hrefHash,\nsearch: this.searchHash\n};\nthis.links.push(newNode);\nreturn newNode;\n}\n// process the search result page after all search engines have been added\nsearchshield.Search.prototype.process = function(doc)\n{\n// only process when searchshield is enabled\nif (!searchshield.enabled(doc))\nreturn;\nthis.doc = doc;\nthis.href = this.doc.location.href;\nthis.uri = searchshield.parseLink(this.href);\ntry\n{\nthis.searchHash = searchshield.avgCallFunc(this.doc, \'GetHash\', this.href);\n// get any previously active engine\nthis.engine = this.engineList[this.searchHash.toString()];\n}\ncatch (e) {}\n/*\nProcess Steps:\n1. Add all supported search engines\n2. Identify the active search engine\n3. Get all document links and add AVG images \n*/\n// STEP 1 - Add all supported search engines\nif (!this.engines)\n{\nvar aEng = xplSearch.getSearchNames();\nvar aEngLen = aEng.length;\nfor (var i=0; i &lt; aEngLen; i++)\n{\nxplSearch.addEngine(new searchshield[aEng[i]+\'SearchEngine\'](this));\n}\n}\n// search the engines if we didn\'t find one\nif (!this.engine)\n{\n// STEP 2 - Identify the active search engine\nvar engLen = this.engines.length;\nfor (var i = 0; i &lt; engLen; i++)\n{\nif (this.engines[i].validSearch())\n{\nthis.engine = this.engines[i];\nbreak;\n}\n}\n// create a new engine instance to store\nthis.engineList[this.searchHash.toString()] = this.engine;\n// init this search, if &lt; 1 either an error or disabled\n//var sdkInit = 0;\n//try {\n// sdkInit = xpl_sdk.SXPL_InitSearch(this.href);\n//}\n//catch(e){}\n//if (sdkInit &lt; 1)\n// return false;\n}\n// return immediately if there is not an active search engine\nif (!this.engine)\nreturn false;\ntry { \n// base url to check for icons\nthis.checkUrl = searchshield.avgCallFunc(this.doc, \'GetIconUrl\', \'1\');\n// check if using linked or local icons\nthis.useLocalImgs = !searchshield.getUrlContents(this.checkUrl);\n// get the clock url\nthis.clockUrl = searchshield.avgCallFunc(this.doc, \'GetIconUrl\', \'0\');\n}\ncatch(e){}\n// STEP 3 - Get all document links and add AVG images\nvar alltags = this.doc.getElementsByTagName(\"*\"); // this method works for IE, FF and Chrome\nfor (var i=0; i &lt; alltags.length; i++)\n{\n// ignore verdicts\nif (alltags[i].id && (alltags[i].id.indexOf(\"LXPLSS_\") != -1))\ncontinue;\n//should the link be included? Make sure includeLink always returns an href else FALSE,\nvar href = this.engine.includeLink(alltags[i]); \nif (!href)\ncontinue;\nvar newNode = this.addLink(alltags[i], href);\nthis.engine.addImage(newNode, this.clockUrl, false);\n}\nreturn (this.links ? this.links.length : false);\n};\n//////////////// SEARCH ////////////////\n//////////////// SEARCH ENGINE ////////////////\n// Interface for a SearchEngine object\nsearchshield.SearchEngine = function(search)\n{\nthis.search = search;\nthis.type = \'standard\';\nthis.processFrames = false;\nthis.new_links = true;\nthis.onlyPrimaries = true;\nthis.inline = {\nclockImage: \"linkscanner://clock12.png\",\nimage: [ \"linkscanner://safe12.png\",\n\"linkscanner://caution12.png\",\n\"linkscanner://warning12.png\",\n\"linkscanner://blocked12.png\"\n],\ncolor: {\nclassname: [\"green\",\"yellow\",\"orange\",\"red\"],\nborder: [\"#00A120\", \"#EAA500\", \"#F57301\", \"#D20003\"],\nbackground: [\"#C3E5CA\", \"#FEEFAE\", \"#FFD3B0\", \"#F5D4C1\"]\n}\n};\nthis.filter_urls = [\n\"ad.doubleclick.net\", \"ads1.revenue.net\", \"aslads.ask.com\",\n\"bluestreak.com\", \"clickbacktrack.net\", \"clickbank.net\",\n\"clickboothlnk.com\", \"clickmanager.com\", \"clickserve.cc-dt.com\",\n\"dartsearch.net\", \"clicktraxmedia.com\", \"clk.atdmt.com\",\n\"dpi-digialphoto.com\", \"feedpoint.net\", \"hypertracker.com\",\n\"jdoqocy.com\", \"kqzyfj.com\", \"m1428.ic-live.com\",\n\"mediaplex.com\", \"mr.mdmngr.com\", \"n339.asp-cc.com\",\n\"offeredby.net\", \"offerweb.com\", \"pinktrax.com\",\n\"pinktrax.com\", \"pixel1523.everesttech.net\", \"qckjmp.com\",\n\"r.rd06.com\", \"revenuewire.net\", \"s0b.bluestreak.com\",\n\"s2.srtk.net\", \"servedby.advertising.com\", \"store.yahoo.com\",\n\"tf8.cpcmanager.com\", \"thetoptracker.com\", \"track.searchignite.com\",\n\"tracking.searchmarketing.com\", \"www.dpbolvw.net\", \"www.rkdms.com\",\n\"www.yellowbookleads.com\"\n];\nthis.shortened_urls = [\n\"3.ly\", \"bit.ly\", \"is.gd\", \"tr.im\", \"short.to\", \"tiny.cc\", \"tinyurl.com\", \"lnk.ms\", \"msplinks.com\", \"t.co\", \"qr.net\"\n];\nthis.showCleanVerdicts = true;\nthis.showLowRiskVerdicts = true;\nthis.showMedRiskVerdicts = true;\nthis.VeriSignSplit = searchshield.VERISIGN_SPLIT_NOTEST;\n};\nsearchshield.SearchEngine.prototype.flyoverExists = function (doc)\n{\nreturn !!doc.getElementById(\"XPLSS_Flyover\");\n};\nsearchshield.SearchEngine.prototype.inlineExists = function (doc)\n{\nreturn !!doc.getElementById(\"XPLSS_InlineFlyover\");\n};\nsearchshield.SearchEngine.prototype.validSearch = function(href) { return false; };\nsearchshield.SearchEngine.prototype.includeLink = function(link) { return false; };\nsearchshield.SearchEngine.prototype.insertNodes = function(node, doc)\n{\nvar element = node.element;\nvar parentNode = node.element.parentNode;\nif (parentNode == null)\n{\n// try and find element again based on the hash\nelement = doc.getElementById(\"xplid_\" + node.hash);\nparentNode = !!element ? element.parentNode : null;\n}\nvar insertNode = !!element ? element.nextSibling : null;\nwhile ((insertNode != null) && \n(insertNode.tagName != null) && \n(insertNode.tagName == \"SPAN\"))\n{\ninsertNode = insertNode.nextSibling;\n}\nreturn [insertNode, parentNode];\n};\nsearchshield.SearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar element = node.element;\nvar hash = node.hash;\nvar score = node.score;\n// set verdict display configuration\nvar doc = element.ownerDocument;\nif (this.type != \'inline\' && !doc.getElementById(\'XPLSS_Flyover\'))\nsearchshield.initFlyover(doc, this);\n// get the proper insertion point for the image\nvar insertNodes = this.insertNodes(node, doc);\nvar insertNode = insertNodes[0];\nvar parentNode = insertNodes[1];\nif (!parentNode)\nreturn;\n// see if we already have an image\nif ((insertNode != null) && \n(insertNode.id != null) && \n(insertNode.id.indexOf(\"XPLSS_\") > -1))\n{\nreturn;\n}\n// mark search result anchor so it isn\'t processed repeatedly\nif (score == undefined)\nelement.setAttribute(\"avglschecked\", hash + \"S\" + this.VeriSignSplit);\n// create a new image\nvar img = doc.createElement(\'img\');\nimg.src = image;\nimg.id = \"XPLSS_\" + hash;\nimg.style.borderStyle = \"none\";\nimg.style.margin = \"0 3px\";\n// for IE, specify these style attributes to prevent inadvertent inheritance from parent\nif (img.width && img.height)\n{\nimg.style.width = img.width + \'px\';\nimg.style.height = img.height + \'px\';\n}\n// apply custom element styles\nthis.updateElementStyle(img, this.addImageStyle);\n// create the link element \nvar anchor = doc.createElement(\"A\");\nanchor.setAttribute(\"id\", \"LXPLSS_\" + hash);\nif ((hidden != null) && (hidden == true))\n{ // hiding the parent will also hide its child nodes\nanchor.style.display = \"none\";\n}\n// Default anchor styles\n//Over-ride possible border style with inline declaration\nanchor.style.borderStyle = \"none\";\n// apply custom element styles\nthis.updateElementStyle(anchor, this.addAnchorStyle);\nif (score == searchshield.SCORE_SS_VERISIGN)\n{\nanchor.style.textDecoration = \"none\";\nanchor.style.background = \"none repeat scroll 0 0 transparent\";\n}\n// append the image to the link\nanchor.appendChild(img);\n// insert the node as either a sibling or a child\nif (insertNode != null)\nparentNode.insertBefore(anchor, insertNode);\nelse\nparentNode.appendChild(anchor);\nreturn anchor;\n};\nsearchshield.SearchEngine.prototype.updateImage = function (hash, search, score, image, alt_image, flyover, click_thru, altClick_thru)\n{\nvar updated = false;\nvar frameDoc = this.search.doc;\nvar docFrames = frameDoc.frames;\nvar frameElem;\nif (docFrames && this.processFrames)\n{\nfor (var i=0; i &lt; docFrames.length; i++)\n{\ntry {\nif (docFrames[i].document.getElementById(hash))\n{\nframeElem = docFrames[i].frameElement;\nframeDoc = docFrames[i].document;\nbreak;\n}\n} \ncatch(err){}\n}\n}\nwhile ((element = frameDoc.getElementById(hash)) != null)\n{\n// check configuration to determine if verdict display property\nvar showVerdict = true; \nvar nSeverity = Number(score - 1);\nswitch (nSeverity)\n{\ncase searchshield.XPLCHECK_RESULT_SEV_LOW:\nshowVerdict = this.showLowRiskVerdicts;\nbreak;\ncase searchshield.XPLCHECK_RESULT_SEV_MED:\nshowVerdict = this.showMedRiskVerdicts;\nbreak;\ncase searchshield.XPLCHECK_RESULT_SEV_NONE:\nshowVerdict = this.showCleanVerdicts;\nbreak;\ndefault:\nif (score == searchshield.SCORE_SS_VERISIGN)\nshowVerdict = this.showCleanVerdicts;\nbreak;\n}\n// remove image if no url specified\nif ((!showVerdict) || (image == null) || (image.length &lt; 1))\n{\n// hide the parent anchor node\nelement.parentNode.style.display = \"none\";\n// mark the id as being hidden (element is the image)\nelement.id = element.id + \"H\";\nupdated = true;\n// if not a verisign score\nif (score != searchshield.SCORE_SS_VERISIGN)\ncontinue;\n}\n// cleanup flyover, replace any new lines or single quotes\nflyover = searchshield.CleanupHTML(flyover);\n// mark the id as having been updated\nelement.id = element.id + \"U\" + score;\nelement.src = image;\nelement.attachEvent(\"onmouseover\", function(e){avglsflyover.popup(e, hash, search, flyover)});\nelement.attachEvent(\"onmouseout\", function(e){avglsflyover.hide(e)});\n// check for attribute updates (elementAttribute is an associative array (i.e., object)\nif (this.elementAttribute)\n{\nfor (a in this.elementAttribute)\n{\nif(this.elementAttribute[a])\nelement.setAttribute(a, this.elementAttribute[a]);\n}\n}\n// To dynamically reduce verdict image size if it causes its container to scroll\n// when not showing alt images determine if the element containing\n// the verdict image is scrolling and decrease the image size by\n// the scroll amount (min size is 80% or original)\nvar reduceBy = 0.8;\nvar scrl = 0;\nif (!alt_image || this.omitAltImage || this.VeriSignSplit == searchshield.VERISIGN_SPLIT_TESTB)\n{\ntry{\nvar maxLoop = 5;\nvar cN = element.parentNode.parentNode; //image->anchor->containerNodes...\nwhile (cN && maxLoop--)\n{\nif (cN.tagName == \"DIV\" || cN.tagName == \"SPAN\")\n{\n// get object height depending on ie document mode\nvar clientHeight = (cN.clientHeight == 0 || \n(this.search.doc.documentMode && this.search.doc.documentMode &lt; 8)) ? \ncN.offsetHeight : \ncN.clientHeight;\nscrl = cN.scrollHeight - clientHeight;\nbreak;\n}\ncN = cN.parentNode;\n}\nif (0 &lt; scrl)\n{\nvar eH = (element.height - scrl)/element.height;\nif (reduceBy > eH)\neH = reduceBy;\nvar newDim = Math.ceil(eH*element.height);\nelement.height = newDim;\nelement.width = newDim;\nelement.style.height = newDim + \"px\";\nelement.style.width = newDim + \"px\";\n}\n}\ncatch(e){}\n}\n// set default style attributes\nelement.style.display = \"\";\n// if verisign icon showing move our icon up for better centering of the 2\n// except for IE7 browser - it does not like this style\ntry {\nvar ieVersion = parseFloat(navigator.appVersion.split(\"MSIE\")[1]);\nif (alt_image && (alt_image.length > 0) && ieVersion != 7)\nelement.style.verticalAlign = \"10%\";\n}\ncatch(err){};\n// apply custom element styles\nthis.updateElementStyle(element, this.updateImageStyle)\n// update the click thru\nvar link = this.search.doc.getElementById(\"L\" + hash);\nif (link)\n{\nlink.href = click_thru;\nlink.id = link.id + \"U\" + score;\n}\nupdated = true;\n// add the alternate image if supplied BUT not on avg yahoo\nif ((alt_image) && \n(alt_image.length > 0) && \n(!this.omitAltImage) &&\n(this.VeriSignSplit != searchshield.VERISIGN_SPLIT_TESTB))\n{\nvar vhash = hash.substring(hash.indexOf(\"_\")+1);\n// create a temporary link node\nvar tmp_node = {\nelement: element.parentNode,\nhref: altClick_thru,\nhash: vhash + \"VU\" + score,\nsearch: this.searchHash,\nscore: score\n};\nvar altAnchor = this.addImage(tmp_node, alt_image, false);\nif (altAnchor && altAnchor.firstChild)\n{\naltAnchor.firstChild.setAttribute(\"onmouseover\", \"\");\naltAnchor.href = altClick_thru;\n}\n}\n}\nif (updated != false)\n{\nthis.resizeFrame(frameElem);\nreturn true;\n}\nreturn false;\n};\nsearchshield.SearchEngine.prototype.updateElementStyle = function (element, elementStyle)\n{\nif (elementStyle)\n{ // a NULL attribte value will unset it\nfor(attr in elementStyle)\n{\ntry {\nif (element.style.setAttribute)\nelement.style.setAttribute(attr, elementStyle[attr]);\nelse\nelement.style[attr] = elementStyle[attr];\n} catch(err){}\n}\n}\n};\nsearchshield.SearchEngine.prototype.resizeFrame = function (frameElem)\n{ // resize frame to prevent unwanted scrolling after inserting verdicts\n// ignore inline and non-frame engines\nif ((this.type == \'inline\') || (!this.processFrames))\nreturn;\n// ensure all required elements are available\nif ((frameElem == null) || (frameElem.style == null) || (frameElem.contentWindow == null))\nreturn;\n// if frame is scrolling vertically then resize\nvar frameHeight = parseInt(frameElem.style.height, 10);\nif (!isNaN(frameHeight) && (frameHeight &lt; frameElem.contentWindow.document.body.scrollHeight))\nframeElem.style.height = frameElem.contentWindow.document.body.scrollHeight + \'px\';\nreturn;\n};\nsearchshield.SearchEngine.prototype.getImgElement = function (element)\n{ // return an xpl img element associated with a given element\nif (element == null)\nreturn null;\n// go up the parent tree looking for a header or div\nwhile ( (element.parentNode != null) && \n(element.tagName.charAt(0) != \"H\") && \n(element.tagName.charAt(0) != \"D\") &&\n(element.tagName.charAt(0) != \"T\") )\n{\nelement = element.parentNode;\n}\n// if all the way to the top, nothing\nif ((element.tagName == \"HTML\") || (element == null))\nreturn null;\n// get image tags, if none we are done\nvar imgTags = element.getElementsByTagName(\"IMG\");\nif ((imgTags == null) || (imgTags.Length &lt; 1))\nreturn null;\nfor (var i = 0; i &lt; imgTags.length; i++)\n{\nif ((imgTags[i].id == null) || (imgTags[i].id.indexOf(\"XPLSS_\") == -1))\ncontinue;\nreturn imgTags[i];\n}\n// else didn\'t find anything\nreturn null;\n};\nsearchshield.SearchEngine.prototype.setRatingsConfig = function (doc)\n{\n// get verdict configuration, need at least severity\nvar results = searchshield.avgCallFunc(doc, \'GetRatingsConfig\');\nvar parts = !!results ? results.split(\'::\') : null;\nif (parts != null && parts.length >= 5)\n{ //if set to default then get config value\nif (this.showCleanVerdicts === true)\nthis.showCleanVerdicts = (parseInt(parts[0]) == 1) ? true : false;\nif (this.showLowRiskVerdicts === true)\nthis.showLowRiskVerdicts = (parseInt(parts[1]) == 1) ? true : false;\nif (this.showMedRiskVerdicts === true)\nthis.showMedRiskVerdicts = (parseInt(parts[2]) == 1) ? true : false;\nthis.VeriSignSplit = (parseInt(parts[4]));\n}\nreturn true;\n};\nsearchshield.SearchEngine.prototype.init_inline_ratings = function (doc)\n{\nif ((doc == null) || (doc.getElementById(\"XPLSS_InlineFlyover\")))\nreturn;\nif (!searchshield.quirksMode)\n{\n// create style for inline flyovers\nvar styleTag = doc.createElement(\"style\");\nstyleTag.setAttribute(\"id\",\"avgILFOStyle\");\nvar headTag = doc.getElementsByTagName(\"head\")[0];\nheadTag.appendChild(styleTag);\nvar inline_style = styleTag.styleSheet;\n// stub in the base image name as the url\ninline_style.addRule(\".avgILFO\", \"background: url(linkscanner://default_inline_border_tl.png) no-repeat top left;\");\ninline_style.addRule(\".avgILFO\", \"width:0px; font-size:0px; z-index:9999; visibility:hidden; position:absolute; left:-5000px;\");\ninline_style.addRule(\".avgILFO_content\", \"background: url(linkscanner://default_inline_border_r.png) top right repeat-y;\");\ninline_style.addRule(\".avgILFO_content\",\"font-size:10px; color:black; padding:0px 10px; text-align:left; word-wrap:break-word; line-height:130%\");\ninline_style.addRule(\".avgILFO_head\", \"background: url(linkscanner://default_inline_border_tr.png) no-repeat top right;\");\ninline_style.addRule(\".avgILFO_head\", \"width:0px; height:5px;\");\ninline_style.addRule(\".avgILFO_head div\",\"height:5px;\");\ninline_style.addRule(\".avgILFO_foot\", \"background: url(linkscanner://default_inline_border_bl.png) no-repeat bottom left\");\ninline_style.addRule(\".avgILFO_foot\", \"height:5px;\");\ninline_style.addRule(\".avgILFO_foot div\", \"background: url(linkscanner://default_inline_border_br.png) no-repeat bottom right\");\ninline_style.addRule(\".avgILFO_foot div\", \"height:5px; width:0px;\");\n}\ntry { \n// create the popup box\nvar box = doc.createElement(\"DIV\");\nif (searchshield.quirksMode)\n{\nbox.style.visibility = \"hidden\";\nbox.style.position = \"absolute\";\nbox.style.left = \"-5000px\";\n}\nbox.setAttribute(\"id\", \"XPLSS_InlineFlyover\");\nbox.setAttribute(\"class\", \"avgILFO\");\ndoc.body.appendChild(box);\nbox = null;\n}\ncatch(boxErr){}\n};\nsearchshield.SearchEngine.prototype.show_inline_ratings = function (doc, node, image)\n{ \nvar href = node.href;\nvar anchor = node.element;\nif ((href == null) || (href.length &lt; 1))\nreturn;\nif (avglsinlineflyover.imageExists(anchor))\nreturn;\n// mark search result anchor so it isn\'t processed repeatedly\nanchor.setAttribute(\"avglschecked\", \"1\");\n// get verdict \nthis.display_inline(doc, anchor, href, node, false);\n};\nsearchshield.SearchEngine.prototype.display_inline = function (doc, anchor, href, node, update, min_severity)\n{\n// min_severity is the lowest severity to display, so setting it to\n// 1 would not display safe icons\nvar results = searchshield.avgCallFunc(doc, \'MalsiteCheck\', href);\nif (results == null)\nreturn;\nvar parts = results.split(\'::\');\n// need at least severity\nif (parts == null)\nreturn;\nvar nSeverity = parseInt(parts[0]);\nif (!update && nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE)\n{\nvar shortUrl = searchshield.FilterUrl(href, this.shortened_urls);\nif (shortUrl)\n{ // shortened url verdicts display later\nvar engine = this;\nanchor.attachEvent(\"onmouseover\", function(event){avglsinlineflyover.mouseOverHandler(event, doc, engine)});\nreturn;\n}\n}\n// severity -1 signifies sb.dat load failure\nif ( nSeverity == -1 )\nnSeverity = searchshield.XPLCHECK_RESULT_SEV_NONE;\n//blacklist url\nvar blShortUrl = false;\nif (nSeverity == searchshield.XPLCHECK_RESULT_SEV_BLOCK)\n{\nvar shortUrl = searchshield.FilterUrl(href, this.shortened_urls);\nif (shortUrl)\nblShortUrl = true;\n}\n// need xlated cat tag and category\nif (parts.length &lt; 3)\nreturn;\n// check the minimum to display\nif ((min_severity != null) && (nSeverity &lt; min_severity))\nreturn;\nif (nSeverity == searchshield.XPLCHECK_RESULT_SEV_LOW && !this.showLowRiskVerdicts)\n{\nif (update)\nthis.avg_ls_inline_hide_verdict(anchor);\nreturn;\n} \nif (nSeverity == searchshield.XPLCHECK_RESULT_SEV_MED && !this.showMedRiskVerdicts)\n{\nif (update)\nthis.avg_ls_inline_hide_verdict(anchor);\nreturn;\n}\nif (nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE && !this.showCleanVerdicts) \n{\nif (update)\nthis.avg_ls_inline_hide_verdict(anchor);\nreturn;\n}\nif (update)\nthis.update_inline_image(anchor, nSeverity, parts);\nelse\nthis.add_inline_image(doc, anchor, nSeverity, parts, blShortUrl);\n};\nsearchshield.SearchEngine.prototype.avg_ls_inline_hide_verdict = function (anchor)\n{\nvar image = avglsinlineflyover.getImage(anchor);\nif (image)\n{\nimage.style.display = \"none\";\nif (image.parentNode && image.parentNode.id == \"avg_ls_anch\")\nimage.parentNode.style.display = \"none\";\n}\n};\nsearchshield.SearchEngine.prototype.update_inline_image = function (anchor, nSeverity, aRisk)\n{\n// update the image already in the page\nif (anchor && anchor.firstChild)\n{\nvar html = \'\';\nvar image = \'\'; \nif (aRisk != null && nSeverity != null)\n{\nvar riskCategory = aRisk[1];\nvar riskName = aRisk[2];\nvar bgColor = this.inline.color.background[nSeverity];\nvar borderColor = this.inline.color.border[nSeverity];\nimage = this.inline.image[nSeverity];\nhtml = avglsinlineflyover.build(riskCategory, riskName, bgColor, borderColor);\n}\nvar imageElem = anchor.firstChild;\nimageElem.src = image;\nif ( html && html.length > 0 )\n{\nimageElem.setAttribute(\"title\", \"\");\nimageElem.attachEvent(\"onmouseover\", function(e){avglsinlineflyover.popup(e, html, nSeverity)});\nimageElem.attachEvent(\"onmouseout\", function(e){avglsinlineflyover.hide(e)});\n}\n}\n};\n// add the image to the page\nsearchshield.SearchEngine.prototype.add_inline_image = function (doc, anchor, nSeverity, aRisk, blShortUrl)\n{\nif (anchor == null || anchor.parentNode == null)\nreturn null;\n// get the proper insertion point for the image\nvar insertNode = anchor.nextSibling;\nwhile ((insertNode != null) && \n(insertNode.tagName != null) && \n(insertNode.tagName == \"SPAN\"))\n{\ninsertNode= insertNode.nextSibling;\n}\n// see if we already have an image anchor\nif ((insertNode != null) && \n(insertNode.id != null) && \n(insertNode.id == \"avg_ls_anch\"))\n{\nreturn null;\n}\nvar html = \'\';\nvar image = this.inline.clockImage; \nif (aRisk != null && nSeverity != null)\n{\nvar riskCategory = aRisk[1];\nvar riskName = aRisk[2];\nvar bgColor = this.inline.color.background[nSeverity];\nvar borderColor = this.inline.color.border[nSeverity];\nimage = this.inline.image[nSeverity];\nvar blUrl;\nif (blShortUrl)\n{\nvar aRiskName = riskName.split(\':\');\nvar sUrl = searchshield.checkUrl(aRiskName[1]);\nblUrl = {};\nblUrl.riskNameLabel = aRiskName[0] + \': \';\nblUrl.riskCategory = riskCategory;\nblUrl.bgColor = bgColor;\nblUrl.borderColor = borderColor;\nblUrl.sUrl = sUrl;\n}\nelse\n{\nhtml = avglsinlineflyover.build(riskCategory, riskName, bgColor, borderColor);\n}\n}\ndoc = anchor.ownerDocument;\nvar img = doc.createElement(\"img\");\nimg.src = image;\nimg.setAttribute(\"id\",\"avg_ls_image\");\nimg.style.width = \"12px\";\nimg.style.height = \"12px\";\nimg.style.border = \"none\";\nimg.style.padding = \"0 3px\";\nimg.style.margin = \"0\";\nif ((html && html.length > 0) || (blUrl != undefined))\n{\nimg.setAttribute(\"title\", \"\");\nimg.attachEvent(\"onmouseover\", function(e){avglsinlineflyover.popup(e, html, nSeverity, blUrl)});\nimg.attachEvent(\"onmouseout\", function(e){avglsinlineflyover.hide(e)});\n}\n// create the link element \nvar newAnchor = doc.createElement(\"A\");\nnewAnchor.setAttribute(\"id\", \"avg_ls_anch\");\nnewAnchor.style.display = \"inline-block\";\nnewAnchor.style.background = \"none repeat scroll 0 0 transparent\";\nnewAnchor.appendChild(img);\nimg = null;\n// insert the node as either a sibling or a child\nif (insertNode != null)\nanchor.parentNode.insertBefore(newAnchor, insertNode);\nelse\nanchor.parentNode.appendChild(newAnchor); \nreturn newAnchor; \n};\n//////////////// SEARCH ENGINE ////////////////\n/////////////// GOOGLE SEARCH ENGINE ///////////////\nsearchshield.GoogleSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.onlyPrimaries = false;\n};\nsearchshield.GoogleSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.GoogleSearchEngine.prototype.constructor = searchshield.GoogleSearchEngine;\nsearchshield.GoogleSearchEngine.prototype.name = \"google\"; // the name by which the search engine is known (always lowercase)\nsearchshield.GoogleSearchEngine.prototype.validSearch = function(href) {\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar hostMatch = false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\n// For Google the host must match:\n// .google.com OR\n// .google.com.XX OR\n// .google.co.XX OR\n// .google.XX where XX is a country code\n// one special case is <a href=\"http://www.googe.off.ai\" title=\"www.googe.off.ai\">www.googe.off.ai</a> (Anguilla)\n// Where any subdomain can come before the top level domain\nif ( /(\\.(?:google|mozilla)\\.(?:com|(?:co|off)\\.[a-z]{2}|[a-z]{2}))/i.test(domain) )\n{\n//check the path\nif ((path.indexOf(\"search?\") == 0) ||\n(path.indexOf(\"sponsoredlinks?\") == 0) ||\n(path.indexOf(\"webhp?\") == 0) ||\n(path.indexOf(\"webhp#\") == 0) ||\n(path.indexOf(\"#q=\") == 0) ||\n(path.indexOf(\"#hl=\") == 0) ||\n(path.indexOf(\"#sclient=\") == 0))\n{\nreturn true;\n}\n}\nreturn false;\n};\nsearchshield.GoogleSearchEngine.prototype.includeLink = function(tag)\n{\nvar href = \"\";\nvar outHref = false;\nvar findStr = \"\";\n// check for interstitials\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\n{\nfindStr = this.search.uri.host + \"/interstitial?\";\nif (tag.className == \"l\" && tag.href)\n{\nif (tag.href.indexOf(findStr) != -1)\n{\nfindStr = \"?url=\";\nvar pos = tag.href.indexOf(findStr);\nif (pos !== -1)\n{\npos += 5;\noutHref = tag.href.substring(pos);\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\n}\n}\nif (tag.className == \"sla\")\n{\nfindStr = \"/url?q=\";\nurlPos = tag.href.indexOf(findStr);\nif (urlPos != -1)\n{\nurlPos += 7;\noutHref = tag.href.substring(urlPos);\nreturn outHref;\n}\n}\n// if an ad id\nif ((tag.id.indexOf(\"pa\") == 0) || (tag.id.indexOf(\"an\") == 0) ||\n(tag.className == \"resultLink\"))\n{\nvar urlPos = -1; \n// ads now need unescaping\nhref = unescape(tag.href);\nfindStr= \"/url?sa=\";\nif (href.indexOf(findStr) != -1)\n{ // first kind, locate real url\nfindStr= \"&q=http\";\nurlPos = href.indexOf(findStr);\nif (urlPos != -1)\nurlPos += 3; // puts it on the http\n}\nif (urlPos == -1)\n{\nfindStr = \"/pagead/iclk?sa=\";\nif (href.indexOf(findStr) != -1)\n{ // second kind, locate real url\nfindStr = \"&adurl=http\";\nurlPos = href.indexOf(findStr);\nif (urlPos != -1)\nurlPos += 7; // puts it on the http\n}\n}\nif (urlPos == -1)\n{\nif (href.indexOf(\"/aclk?sa=\") != -1)\n{ // third kind\nurlPos = href.indexOf(\"&q=http\");\nif (urlPos != -1)\nurlPos += 3; // puts it on the http\nelse\n{\nurlPos = href.indexOf(\"&lp=http\");\nif (urlPos != -1)\nurlPos += 4;\nelse\n{\nfindStr = \"&adurl=http\";\nurlPos = href.indexOf(findStr);\nif (urlPos != -1)\nurlPos += 7; // puts it on the http\n}\n}\n}\n}\nif (urlPos == -1)\n{\nif (href.indexOf(\"/url?cad=\") != -1)\n{ // fourth kind\nurlPos = href.indexOf(\"&q=http\");\nif (urlPos != -1)\nurlPos += 3; // puts it on the http\n}\n}\nif (urlPos != -1)\n{\noutHref = href.substring(urlPos);\n// the destination url is in the href string of this redirector\nif (outHref.indexOf(\'xg4ken.com\') > -1)\n{\nurlPos = (unescape(outHref)).indexOf(\'url[]=\') + 6;\nvar destUrl = (unescape(outHref)).substring(urlPos);\nif (searchshield.FilterUrl(destUrl, this.filter_urls))\n{\nvar destUrl = searchshield.getHrefFromCiteElement(tag);\nif (destUrl)\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));\nreturn false;\n}\nreturn destUrl;\n}\n// filtered url but can get destination from href string\nif (outHref.indexOf(\'altfarm.mediaplex.com\') > -1)\n{\nvar tmpoh = unescape(outHref);\nvar destUrl = tmpoh.substring(tmpoh.indexOf(\'DURL=\')+5);\nif (destUrl != null)\n{\nvar destUrl = unescape(destUrl);\nreturn destUrl;\n}\n}\n// extract any fragment text, shouldn\'t be unescaped\nvar pound = outHref.indexOf(\"#\"); \nif (pound != -1)\n{\nvar fragment = outHref.substring(pound);\noutHref = outHref.substring(0, pound);\noutHref = unescape(outHref);\noutHref += fragment;\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\noutHref = unescape(outHref);\nif (outHref.indexOf(\"?\") == -1)\n{\nvar ampPos = outHref.indexOf(\"&\");\nif (ampPos != -1)\noutHref = outHref.substring(0, ampPos);\n}\nif (searchshield.FilterUrl(outHref, this.filter_urls))\n{\nvar destUrl = searchshield.getHrefFromCiteElement(tag);\nif (destUrl)\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));\nreturn false;\n}\nreturn outHref;\n}\n}\n// recommended link - use following to see one\n// <a href=\"http://www.google.cz/search?hl=cs&amp;q=warey&amp;btnG=Hledat&amp;lr=lang_cs\" title=\"http://www.google.cz/search?hl=cs&amp;q=warey&amp;btnG=Hledat&amp;lr=lang_cs\">http://www.google.cz/search?hl=cs&amp;q=warey&amp;btnG=Hledat&amp;lr=lang_cs</a>\n// elem parent class = r\n// href must contain - url? and q=http\nvar parentNode = tag.parentNode;\nif (parentNode && (parentNode.className.toLowerCase() == \"r\"))\n{\nhref = tag.href;\nif (href && (href.indexOf(\"/url?\") != -1))\n{\n// locate the real url\nvar urlPos = href.indexOf(\"q=http\");\nif (urlPos != -1)\n{\nurlPos += 2;\noutHref = href.substring(urlPos);\n// include entire param up to \'&\'\nvar ampPos = outHref.indexOf(\"&\");\nif (ampPos != -1)\noutHref = outHref.substring(0, ampPos);\nreturn outHref;\n}\n}\n}\n}\n// no link to self\nelse if (tag.className && (tag.className.charAt(0) == \"l\" || tag.className == \"sla\"))\n{\n// check for any images on the link\nif (0 === tag.getElementsByTagName(\"IMG\").length)\nreturn tag.href;\n}\n// special case for ie6 results\nelse if (searchshield.docMode == 6 || searchshield.docMode == 7)\n{\nvar parentNodeClass = tag.parentNode ? tag.parentNode.className : \'\';\nif ((tag.className == \'\') && (parentNodeClass == \'r\'))\n{\nreturn tag.href;\n}\n}\n// else nothing\nreturn false;\n};\n/////////////// GOOGLE ///////////////\n/////////////// AVG GOOGLE SEARCH ENGINE ///////////////\nsearchshield.AVGGoogleSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.onlyPrimaries = false;\n};\nsearchshield.AVGGoogleSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.AVGGoogleSearchEngine.prototype.constructor = searchshield.AVGGoogleSearchEngine;\nsearchshield.AVGGoogleSearchEngine.prototype.name = \"avggoogle\"; // the name by which the search engine is known (always lowercase)\nsearchshield.AVGGoogleSearchEngine.prototype.validSearch = function(href) {\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif (domain.indexOf(\"search.avg.com\") > -1)\n{ // ads link back to google\nreturn true;\n}\nreturn false;\n};\nsearchshield.AVGGoogleSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = false;\nvar findStr = \"\";\n// check for interstitials\nif (searchshield.DoesURLContain(tag.href, \"google.com\"))\n{\n// link back to self - DIV elem GrandParent class of res1 or res3 is Sponsored Link \nvar parentNode = tag.parentNode;\nif (parentNode)\n{\nvar grandParentNode = tag.parentNode.parentNode;\nif (grandParentNode)\n{\nif ((grandParentNode.tagName == \"DIV\") && \n((grandParentNode.className.toLowerCase() == \"res1\") ||\n(grandParentNode.className.toLowerCase() == \"res3\")))\n{\nvar urlPos = -1; \n// ads now need unescaping\nhref = unescape(tag.href);\nif (urlPos == -1)\n{\nif (href.indexOf(\"/aclk?sa=\") != -1)\n{ \nfindStr = \"&adurl=http\";\nurlPos = href.indexOf(findStr);\nif (urlPos != -1)\nurlPos += 7; // puts it on the http\n}\n}\nif (urlPos != -1)\n{\noutHref = href.substring(urlPos);\n// the destination url is in the href string of this redirector\nif (outHref.indexOf(\'xg4ken.com\') > -1)\n{\nurlPos = (unescape(outHref)).indexOf(\'url[]=\') + 6;\nvar destUrl = (unescape(outHref)).substring(urlPos);\nif (searchshield.FilterUrl(destUrl, this.filter_urls))\n{\nvar destUrl = searchshield.getHrefFromCiteElement(tag);\nif (destUrl)\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));\nreturn false;\n}\nreturn destUrl;\n}\n// filtered url but can get destination from href string\nif (outHref.indexOf(\'altfarm.mediaplex.com\') > -1)\n{\nvar tmpoh = unescape(outHref);\nvar destUrl = tmpoh.substring(tmpoh.indexOf(\'DURL=\')+5);\nif (destUrl != null)\n{\nvar destUrl = unescape(destUrl);\nreturn destUrl;\n}\n}\n// extract any fragment text, shouldn\'t be unescaped\nvar pound = outHref.indexOf(\"#\"); \nif (pound != -1)\n{\nvar fragment = outHref.substring(pound);\noutHref = outHref.substring(0, pound);\noutHref = unescape(outHref);\noutHref += fragment;\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\noutHref = unescape(outHref);\nif (outHref.indexOf(\"?\") == -1)\n{\nvar ampPos = outHref.indexOf(\"&\");\nif (ampPos != -1)\noutHref = outHref.substring(0, ampPos);\n}\nif (searchshield.FilterUrl(outHref, this.filter_urls))\n{\nvar destUrl = searchshield.getHrefFromCiteElement(tag);\nif (destUrl)\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));\nreturn false;\n}\nreturn outHref;\n}\n}\n}\n}\n} \n// no link to self\nelse\n{\nvar parentNode = tag.parentNode;\nif (parentNode)\n{\nvar grandParentNode = tag.parentNode.parentNode;\nif (grandParentNode)\n{\nif ((grandParentNode.tagName == \"DIV\") && \n(grandParentNode.className.toLowerCase() == \"res2\"))\n{\n// check for any images on the link\nif (0 === tag.getElementsByTagName(\"IMG\").length)\nreturn tag.href;\n}\n}\n}\n}\n// else nothing\nreturn false;\n}\n/////////////// AVG GOOGLE ///////////////\n/////////////// YAHOO SEARCH ENGINE ///////////////\nsearchshield.YahooSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.showCleanVerdicts = false;\n};\nsearchshield.YahooSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.YahooSearchEngine.prototype.constructor = searchshield.YahooSearchEngine;\nsearchshield.YahooSearchEngine.prototype.name = \"yahoo\";\nsearchshield.YahooSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\n// For Yahoo the host must match:\n// search.yahoo.com OR\n// xx.search.yahoo.com where xx is the country code OR\n// search.yahoo.co.jp OR\n// for Yahoo China: one.cn.yahoo.com, search.cn.yahoo.com or <a href=\"http://www.yahoo.cn\" title=\"www.yahoo.cn\">www.yahoo.cn</a>\nif ((domain.match(/search\\.yahoo\\.co(?:m|\\.jp)/i) ||\ndomain.match(/(?:search|one)\\.cn\\.yahoo\\.com/i) ||\ndomain.match(/www\\.yahoo\\.cn/i)) && \npath.match(/^(?:search[;?]|s\\?)/i))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.YahooSearchEngine.prototype.includeLink = function(tag)\n{\nvar href = \"\";\nvar outHref = \"\";\nvar findStr = \"\";\n// yahoo likes to encode the url\nhref = unescape(tag.href);\nif ((tag.className.indexOf(\"yschttl\") != -1) || \n(tag.className.indexOf(\"spt\") != -1))\n{\nvar da = href.indexOf(\"**\");\nvar ad = href.indexOf(\"*-\");\nif (da != -1)\noutHref = href.substring(da+2);\nelse if (ad != -1)\noutHref = href.substring(ad+2);\nelse\noutHref = href ;\nif (outHref.toLowerCase().indexOf(\"overture.\") !== -1)\nreturn false;\n}\nelse if ((tag.tagName) && \n(tag.tagName === \"A\") && \n(!tag.className))\n{\nvar tagParent = tag.parentNode;\n// if anchor without className then search parentNodes\nif ((tagParent) &&\n(tagParent.tagName !== \"EM\") &&\n(searchshield.getParentNodeByClassName(\"yst-web\", tag, 4)))\n{\n// China Yahoo support\noutHref = href;\n}\nelse if ((tagParent) &&\n(tagParent.tagName === \"H3\") &&\n(!!searchshield.getParentNodeById(\"WS2m\",tag, 5)))\n{\n// Japan Yahoo support\nvar da = href.indexOf(\"**\");\nif (da == -1)\noutHref = href;\nelse\noutHref = href.substring(da+2);\n}\nelse if ((tagParent) &&\n(tagParent.className !== \"c\") &&\n(tagParent.parentNode.id !== \"fpn\") &&\n(!!searchshield.getParentNodeByClassName(\"ymc\", tag, 7)))\n{\n// Korea Yahoo support - when not caught by yschttl\nvar da = href.indexOf(\"**\");\nif (da !== -1)\noutHref = href.substring(da+2);\n}\n}\nelse if (!this.onlyPrimaries)\n{\nfindStr = \"&yargs=\";\nvar yargs = href.indexOf(findStr);\nif (yargs != -1)\n{\noutHref = href.substring(yargs+findStr.length);\n// check for prefix\nif (outHref.indexOf(\"://\") == -1)\noutHref = \"http://\" + outHref;\n// if inside an <I>, probably a paypal link, don\'t include\nif (tag.parentNode && (tag.parentNode.tagName == \"I\"))\nreturn false;\n} \n}\n// filter domains\n// split the url based on \'/\'\nvar parts = !!outHref ? outHref.split(\'/\') : null;\n// Filter out domains that match any of the search engine\'s names\nif (!parts || !parts[2])\nreturn false;\nvar domain = parts[2];\nif ((domain.indexOf(\"rdrjp.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrkrs.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrtpe.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrird.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrhk2.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrsg1.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrin2.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdre1.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrw1.yahoo.com\") != -1) )\n{\nreturn false;\n}\n// set for yahoo to get parent node for image insertion\nvar hash = searchshield.avgCallFunc(this.doc, \'GetHash\', outHref);\ntag.setAttribute(\"id\", \"xplid_\" + hash);\nreturn outHref;\n};\n/////////////// YAHOO SEARCH ENGINE ///////////////\n/////////////// AVG YAHOO SEARCH ENGINE ///////////////\nsearchshield.AVGYahooSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.showCleanVerdicts = false;\nthis.omitAltImage = true;\nthis.updateImageStyle = {\nverticalAlign: null\n};\n};\nsearchshield.AVGYahooSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.AVGYahooSearchEngine.prototype.constructor = searchshield.AVGYahooSearchEngine;\nsearchshield.AVGYahooSearchEngine.prototype.name = \"avgyahoo\";\nsearchshield.AVGYahooSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n//path may be \'avg/search\' or \'search\'\nvar pathArray = uri.path.split(\"/\");\nvar avg = pathArray[0];\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1];\npath += uri.delimiter + uri.query;\n// For AVG Yahoo classic the host must match:\n// yhs.search.yahoo.com OR\n// .yhs.search.yahoo.com\nif (domain.indexOf(\"yhs.search.yahoo.co\") != -1)\n{\nif ((avg == \"avg\") &&\n((path.indexOf(\"search?\") == 0) ||\n(path.indexOf(\"search;\") == 0)))\n{\nreturn true;\n}\n}\n// also support new metro version which DOESN\'T \n// contain /avg so avg split part is path\n// valid domains are:\n// search.yahoo.com, \n// xx.search.yahoo.com and\n// search.yahoo.co.xx\nif (domain.indexOf(\"search.yahoo.co\") != -1) \n{\n// path (split avg) must start with search and\n// contain the avg toolbar parameter\nif (((path.indexOf(\"search?\") == 0) ||\n(path.indexOf(\"search;\") == 0)) &&\n(path.indexOf(\"fr=yhs-avg\") != -1))\n{\nreturn true;\n}\n}\nreturn false;\n};\nsearchshield.AVGYahooSearchEngine.prototype.includeLink = function(tag)\n{\nvar href = \"\";\nvar outHref = \"\";\nvar findStr = \"\";\nif (this.search.doc.body.className.toLowerCase() != \"standard\")\n{ // handle as std Yahoo results page\nreturn searchshield.YahooSearchEngine.prototype.includeLink(tag);\n} \n// yahoo likes to encode the url\nhref = unescape(tag.href);\nif (tag.target == \"_top\")\n{\nvar da = href.indexOf(\"**\");\nif (da != -1)\noutHref = href.substring(da+2);\nelse\noutHref = href ;\nif (outHref.toLowerCase().indexOf(\"overture.\") !== -1)\nreturn false;\n}\nelse if (!this.onlyPrimaries)\n{\nfindStr = \"&yargs=\";\nvar yargs = href.indexOf(findStr);\nif (yargs != -1)\n{\noutHref = href.substring(yargs+findStr.length);\n// check for prefix\nif (outHref.indexOf(\"://\") == -1)\noutHref = \"http://\" + outHref;\n// if inside an <I>, probably a paypal link, don\'t include\nif (tag.parentNode && (tag.parentNode.tagName == \"I\"))\nreturn false;\n} \n}\n// filter domains\n// split the url based on \'/\'\nvar parts = outHref.split(\'/\');\n// Filter out domains that match any of the search engine\'s names\nif (!parts[2])\nreturn false;\nvar domain = parts[2];\nif ((domain.indexOf(\"rdrjp.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrkrs.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrtpe.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrird.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrhk2.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrsg1.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrin2.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdre1.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrw1.yahoo.com\") != -1) )\n{\nreturn false;\n}\nreturn outHref;\n};\n/////////////// AVG YAHOO SEARCH ENGINE ///////////////\n/////////////// MSN SEARCH ENGINE ///////////////\nsearchshield.MSNSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.onlyPrimaries = false;\n};\nsearchshield.MSNSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.MSNSearchEngine.prototype.constructor = searchshield.MSNSearchEngine;\nsearchshield.MSNSearchEngine.prototype.name = \"msn\";\nsearchshield.MSNSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar hostMatch = false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\n// For MSN the host must match:\n// search.msn.com OR\n// search.live.com\nif (domain.indexOf(\"search.msn.co\") > -1)\n{\nif (domain.charAt(13) == \'m\')\nhostMatch = true;\nelse if ((domain.charAt(13) == \'.\') && (domain.length == 16))\nhostMatch = true;\n}\nelse if (domain.indexOf(\"search.live.co\") > -1)\n{\nif (domain.charAt(14) == \'m\')\nhostMatch = true;\nelse if ((domain.charAt(14) == \'.\') && (domain.length == 17))\nhostMatch = true;\n}\nif (hostMatch)\n{\nif (path.indexOf(\"results.aspx\") == 0)\nreturn true;\n}\nreturn false;\n};\nsearchshield.MSNSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = false;\n// these don\'t seem common from Firefox, but they are in IE\nif (searchshield.DoesURLContain(tag.href, \"g.msn.co\"))\n{\nvar qPos = tag.href.indexOf(\"?\");\nif (qPos != -1)\n{\nvar postPart = tag.href.substring(qPos+1);\nvar dblAmp = postPart.indexOf(\"&&\");\nif (dblAmp != -1)\n{\noutHref = postPart.substring(0, dblAmp);\nreturn outHref;\n}\n}\n}\nelse if (searchshield.DoesURLContain(tag.href, \"r.msn.co\"))\n{\nvar element = tag;\nvar parentNode = tag.parentNode;\n// top links - check for a CITE\nvar spanElements = element.getElementsByTagName(\"CITE\");\nif ((spanElements != null) && \n(spanElements.length > 0))\n{\noutHref = spanElements[0].innerHTML;\n// replace any nbsp\'s\noutHref = outHref.replace(\"&nbsp;\", \" \");\n// url is after the last space in the html, after the \'-\'\nvar space_pos = outHref.lastIndexOf(\" \");\nif (space_pos != -1)\noutHref = outHref.slice(space_pos + 1);\noutHref = searchshield.checkUrl(outHref);\nreturn outHref;\n}\n// side links \nif (element.lastChild != null)\n{\noutHref = element.lastChild.innerHTML;\nif ( outHref != null)\n{\noutHref = searchshield.checkUrl(outHref);\nreturn outHref;\n}\n}\n}\nelse if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||\nsearchshield.DoesURLContain(tag.href, \".live.com\") ||\nsearchshield.DoesURLContain(tag.href, \"msn.\") ||\nsearchshield.DoesURLContain(tag.href, \"msnscache.com\") ||\nsearchshield.DoesURLContain(tag.href, \"advertising.microsoft.co\") ||\nsearchshield.DoesURLContain(tag.href, \"javascript:\") ||\nsearchshield.DoesURLContain(tag.href, \"go.microsoft.co\") ||\nsearchshield.DoesURLContain(tag.href, \"hotmail.co\"))\n{\n// not a link\nreturn false;\n}\nelse if (tag.id.toLowerCase() == \"trademarks\")\n{\n// don\'t link the trademark at the bottom of the page\nreturn false;\n}\nelse\n{\n// include it\nreturn tag.href;\n}\n};\n/////////////// MSN SEARCH ENGINE ///////////////\n/////////////// BING SEARCH ENGINE ///////////////\nsearchshield.BingSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\n};\nsearchshield.BingSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.BingSearchEngine.prototype.constructor = searchshield.BingSearchEngine;\nsearchshield.BingSearchEngine.prototype.name = \"bing\";\nsearchshield.BingSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar hostMatch = false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\n// For bing the host must match:\n// <a href=\"http://www.bing.com\" title=\"www.bing.com\">www.bing.com</a> or <a href=\"http://www.bing.net\" title=\"www.bing.net\">www.bing.net</a>\n// xx.bing.com or xx.bing.net where xx is a country code\n// bing.com.xx where xx is a country code\n// bing.search.xxxx.net where xxxx may be something like daum\nif ((domain.indexOf(\"www.bing.com\") !== -1) ||\n(domain.indexOf(\"www.bing.net\") !== -1) ||\n(domain.indexOf(\"bing.net\") !== -1))\n{\nhostMatch = true;\n}\nelse if ((domain.indexOf(\"bing.search.\") !== -1) && \n(domain.indexOf(\".net\") === (domain.length-4))) \n{ //bing.search.xxxx.net\nhostMatch = true;\n}\nelse\n{ // xx.bing.com or bing.com.xx\nvar domainLen = domain.length;\nvar tldPos = domain.indexOf(\".bing.com\");\nif (tldPos > -1)\n{\nif ((domainLen - tldPos) == 9)\nhostMatch = true;\n} \n}\nif (hostMatch)\n{\nvar displayStyle = (domain == \'bing.search.daum.net\') ? \'inline-block\' : \'inline\';\nthis.addAnchorStyle = {\ndisplay: displayStyle\n};\nif (path.indexOf(\"search?\") == 0)\nreturn true;\n}\nreturn false;\n};\nsearchshield.BingSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = false;\nif (tag.tagName == \'IMG\')\n{ //no images \nreturn false;\n}\nif (tag.href.charAt(0) == \'/\')\n{ //no relative links\nreturn false;\n}\nif (/trademarks/i.test(tag.id))\n{\n// don\'t link the trademark at the bottom of the page\nreturn false;\n}\nif ((tag.parentNode) && (/sc_stc/i.test(tag.parentNode.id)))\n{ // don\'t verdict the social sites - our verdict doesn\'t fit\nreturn false;\n}\nelse if (!!searchshield.getParentNodeByClassName(\"sw_t\",tag,3))\n{ // no links in page header\nreturn false;\n}\nelse if (searchshield.DoesURLContain(tag.href, \"r.msn.co\") ||\nsearchshield.DoesURLContain(tag.href, \"overture.com\"))\n{ // france has r.msn.co and italy has overture.com sponsored links\n// with the link in CITE element\nvar spanElements = null;\n// top links - check for a CITE\nspanElements = tag.getElementsByTagName(\"CITE\");\nif ((spanElements == null) || (spanElements.length &lt;= 0))\n{\nif (tag.parentNode && tag.parentNode.parentNode)\nspanElements = tag.parentNode.parentNode.getElementsByTagName(\"CITE\");\n}\nif ((spanElements != null) && (spanElements.length > 0))\n{\noutHref = spanElements[0].innerHTML;\nif (outHref != null)\n{\n// replace any nbsp\'s\noutHref = outHref.replace(\"&nbsp;\", \" \");\n// url is after the last space in the html, after the \'-\'\nvar space_pos = outHref.lastIndexOf(\" \");\nif (space_pos != -1)\noutHref = outHref.slice(space_pos + 1);\noutHref = searchshield.checkUrl(outHref);\n// save the link\nreturn outHref;\n}\n}\n// side links \nif (tag.lastChild != null)\n{\noutHref = tag.lastChild.innerHTML;\nif (outHref != null)\n{\noutHref = searchshield.checkUrl(outHref);\n// save the link\nreturn outHref;\n}\n}\n}\n// no sponsored links for now \nelse if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||\nsearchshield.DoesURLContain(tag.href, \".live.com\") ||\nsearchshield.DoesURLContain(tag.href, \".bing.com\") ||\nsearchshield.DoesURLContain(tag.href, \".bing.net\") ||\nsearchshield.DoesURLContain(tag.href, \".daum.net\") ||\nsearchshield.DoesURLContain(tag.href, \".gmarket.co\") ||\nsearchshield.DoesURLContain(tag.href, \".multimap.com\") ||\nsearchshield.DoesURLContain(tag.href, \"msn.\") ||\nsearchshield.DoesURLContain(tag.href, \"ms.ciao.\") ||\nsearchshield.DoesURLContain(tag.href, \"ms.ciao-\") ||\nsearchshield.DoesURLContain(tag.href, \"advertising.microsoft.co\") ||\nsearchshield.DoesURLContain(tag.href, \"javascript:\") ||\nsearchshield.DoesURLContain(tag.href, \"go.microsoft.co\") ||\nsearchshield.DoesURLContain(tag.href, \"hotmail.co\") ||\nsearchshield.DoesURLContain(tag.href, \"cc.bingj.com\") ||\nsearchshield.DoesURLContain(tag.href, \"microsofttranslator.com\") ||\nsearchshield.DoesURLContain(tag.href, \".engkoo.com\") ||\nsearchshield.DoesURLContain(tag.href, \"sealinfo.verisign.com\") ||\nsearchshield.DoesURLContain(tag.href, \"explabs.com\") ||\nsearchshield.DoesURLContain(tag.href, \"onlinehelp.microsoft.com\") ||\nsearchshield.DoesURLContain(tag.href, \".myoverture\"))\n{\n// not a link\nreturn false;\n}\nelse\nreturn tag.href;\n};\nsearchshield.BingSearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar element = node.element;\nvar parentNode = node.element.parentNode;\nvar grandParentNode = !!parentNode ? parentNode.parentNode : null;\n// if there are redundant links in the same grandparent then skip them\nif (!!grandParentNode)\n{\ngpChildren = grandParentNode.childNodes;\nfor (var i=0; i &lt; gpChildren.length; i++)\n{\nif (!!element.href && gpChildren[i].tagName == \"A\" && gpChildren[i].href == element.href)\nreturn;\n}\n}\nvar parent = searchshield.SearchEngine.prototype.addImage;\nreturn parent.call(this, node, image, hidden);\n};\n/////////////// BING SEARCH ENGINE ///////////////\n/////////////// BAIDU SEARCH ENGINE ///////////////\nsearchshield.BaiduSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.updateImageStyle = {\nverticalAlign: null\n};\n};\nsearchshield.BaiduSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.BaiduSearchEngine.prototype.constructor = searchshield.BaiduSearchEngine;\nsearchshield.BaiduSearchEngine.prototype.name = \"baidu\";\nsearchshield.BaiduSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar hostMatch = false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif (domain == \"www.baidu.com\" || path.indexOf(\"testBaidu\") !== -1)\nhostMatch = true;\nif (hostMatch)\n{\nif (path.indexOf(\"s?\") == 0)\nreturn true;\n}\nreturn false;\n};\nsearchshield.BaiduSearchEngine.prototype.includeLink = function(tag)\n{ \nif (tag.className && tag.className == \"m\")\nreturn false;\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\nelse \n{\n// no link to self\nvar traverseElement = tag.parentNode;\nwhile ( traverseElement && traverseElement.className != \"tbody\")\n{\nif (traverseElement.className == \"f\")\nreturn tag.href;\ntraverseElement = traverseElement.parentNode;\n}\nreturn false;\n}\n};\n/////////////// BAIDU SEARCH ENGINE ///////////////\n/////////////// EARTHLINK SEARCH ENGINE ///////////////\nsearchshield.EarthlinkSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.onlyPrimaries = false;\nthis.addAnchorStyle = {\nposition: \"static\"\n};\n};\nsearchshield.EarthlinkSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.EarthlinkSearchEngine.prototype.constructor = searchshield.EarthlinkSearchEngine;\nsearchshield.EarthlinkSearchEngine.prototype.name = \"earthlink\";\nsearchshield.EarthlinkSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar hostMatch = false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\n// For EarthLink the host must match:\n// search.earthlink.net\nif ((\"search.earthlink.net\" == domain) &&\n(path.indexOf(\"search?\") == 0))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.EarthlinkSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = \"\";\nvar findStr = \"\";\n// check for an anchor\nif (tag.tagName == \"A\")\n{\n// check for sponsored\nif (tag.id.indexOf(\"a\") == 0)\n{\nvar q = tag.href.indexOf(\"&q=\");\nvar qlen = 3;\nif (q == -1)\n{\nq = tag.href.indexOf(\"&adurl=\");\nqlen = 7;\nif (q == -1)\nreturn false;\n}\n// find end of url\nvar end = tag.href.indexOf(\"&\", q+qlen);\nif (end &lt; 0)\nend = tag.href.length;\n// add the link\noutHref = tag.href.substring(q+qlen, end);\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\n// don\'t search url\'s to self\nif ((tag.href.indexOf(\"://\") == -1) || searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\n// if a normal web result add it\nif (tag.parentNode && (tag.parentNode.tagName == \"H3\") &&\ntag.parentNode.parentNode && (tag.parentNode.parentNode.tagName == \"LI\") &&\ntag.parentNode.parentNode.parentNode && (tag.parentNode.parentNode.parentNode.tagName == \"UL\"))\n{\nif (searchshield.FilterUrl(tag.href, this.filter_urls))\nreturn false;\nreturn tag.href;\n}\n}\nreturn false;\n};\n/////////////// EARTHLINK SEARCH ENGINE ///////////////\n/////////////// AOL SEARCH ENGINE ///////////////\nsearchshield.AOLSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.addImageStyle = {\ndisplay: \"inline\"\n};\nthis.addAnchorStyle = {\ndisplay: null\n};\nthis.updateImageStyle = {\nverticalAlign: null,\ndisplay: \"inline\"\n};\n};\nsearchshield.AOLSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.AOLSearchEngine.prototype.constructor = searchshield.AOLSearchEngine;\nsearchshield.AOLSearchEngine.prototype.name = \"aol\";\nsearchshield.AOLSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain = uri.host;\n//path may be \'aol/search\' or \'search\'\nvar pathArray = uri.path.split(\"/\");\nvar aol = pathArray[0];\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1];\npath += uri.delimiter + uri.query;\nif (/search\\.aol\\.com/.test(domain))\n{\nif ((aol == \"aol\") &&\n(path.indexOf(\"search?\") == 0))\n{\nreturn true;\n}\n}\nreturn false;\n};\nsearchshield.AOLSearchEngine.prototype.includeLink = function(tag)\n{\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\n// sponsored links - google\nif ((tag.className) && (tag.className.indexOf(\"slLink topAnchor\") != -1))\n{ //parse for embedded href\nif (tag.href.indexOf(\"/aclk?sa=\") == -1)\nreturn false;\nvar adurl = tag.href.indexOf(\"&adurl=http\");\n// if an adurl the destination href can be acquired from the onclick handler\nif (adurl != -1)\n{\nvar destUrl;\nvar clickHandler = tag.getAttribute(\'onclick\');\nif (clickHandler != null)\n{\n// the destination href is the 2nd parameter (zero-based array)\ndestUrl = searchshield.getClickHandlerParams(clickHandler)[1];\nif (destUrl != null)\n{\ndestUrl = searchshield.removeHtmlTags(destUrl.replace(/\'/g,\'\'));\nreturn searchshield.checkUrl(destUrl);\n}\n}\n}\nreturn false;\n}\nif (tag.className == \"find\")\nreturn tag.href;\nreturn false;\n};\nsearchshield.AOLSearchEngine.prototype.insertNodes = function(node, doc)\n{\nvar element = node.element;\nvar score = node.score;\nif (element && element.className && element.className.indexOf(\"slLink\") != -1)\n{ //sponsored links only\n// for alt image\nif (score == searchshield.SCORE_SS_VERISIGN)\nreturn [element.nextSibling, element.parentNode];\n// for verdict image\nvar cN = element.childNodes;\nvar cnLen = cN.length;\nfor (var i=0; i &lt; cnLen; i++)\n{\nif ((cN[i].nodeType == 1) && \n(cN[i].nodeName == \'SPAN\') && \n((cN[i].className == \'title\') || (cN[i].className == \'durl\')))\nreturn [cN[i].nextSibling, cN[i].parentNode];\n}\n}\nvar parent = searchshield.SearchEngine.prototype.insertNodes;\nreturn parent.call(this, node, doc);\n};\n/////////////// AOL SEARCH ENGINE ///////////////\n/////////////// ASK SEARCH ENGINE ///////////////\nsearchshield.AskSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\n};\nsearchshield.AskSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.AskSearchEngine.prototype.constructor = searchshield.AskSearchEngine;\nsearchshield.AskSearchEngine.prototype.name = \"ask\";\nsearchshield.AskSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif (\"www.ask.com\" == domain)\n{\nif (path.indexOf(\"web?\") == 0)\nreturn true;\n}\nreturn false;\n};\nsearchshield.AskSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = \"\";\nvar findStr = \"\";\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\nif ((tag.className) && (tag.className.indexOf(\"nu\") != -1) && (tag.className.indexOf(\"info\") == -1)) \n{\n// exclude green links\nif ((tag.firstChild) &&\n(tag.firstChild.className) &&\n(tag.firstChild.className.indexOf(\'attrib\') == 0))\n{\nreturn false;\n}\n// ads link to google with class nu\nfindStr = \"www.google.com\";\nif (tag.href.indexOf(findStr) != 0)\n{\nif (tag.href.indexOf(findStr + \"/aclk?sa=\") != -1)\n{ \nfindStr = \"&adurl=http\";\nvar pos = tag.href.indexOf(findStr);\nif (pos != -1)\n{\npos += 7;\noutHref = tag.href.substring(pos);\noutHref = unescape(outHref);\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\n}\n}\nelse\n{ // ad not to google just use href\noutHref = tag.href;\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\n}\n// primary results have class containing title or L2 ( Wikipedia links )\nelse if ((tag.className) && ((tag.className.indexOf(\"title\") != -1) || (tag.className.toLowerCase() == \"l2\")))\n{\noutHref = tag.href;\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\nreturn false;\n};\n/////////////// ASK SEARCH ENGINE ///////////////\n/////////////// ALTAVISTA SEARCH ENGINE ///////////////\nsearchshield.AltaVistaSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\n};\nsearchshield.AltaVistaSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.AltaVistaSearchEngine.prototype.constructor = searchshield.AltaVistaSearchEngine;\nsearchshield.AltaVistaSearchEngine.prototype.name = \"altavista\";\nsearchshield.AltaVistaSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\n// <a href=\"http://www.atlavista.com\" title=\"www.atlavista.com\">www.atlavista.com</a> ---> now <a href=\"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\" title=\"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\">http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista&amp;fr=altavista&amp;ita...</a>\n// xx.altavista.com where xx is a country code\nvar hostMatch = false;\nif (\"www.altavista.com\" == domain)\n{\nhostMatch = true;\n}\nelse\n{\n// xx.altavista.com\nvar pDest = domain.indexOf(\".altavista.com\");\nif ((pDest != -1 ) && ((domain.length - pDest) == 14))\n{\nhostMatch = true;\n}\nelse\n{\n// a reference to altavista must be present in yahoo search url\nvar pRef = (uri.qsArray.fr && uri.qsArray.fr == \'altavista\');\npDest = domain.indexOf(\"search.yahoo.com\");\nif (pDest != -1 && pRef)\nhostMatch = true;\n}\n}\nif (hostMatch)\n{\n//path must start with web/results?\nif ((path.indexOf(\"yhs/search?\") == 0) ||\n(path.indexOf(\"search;\") == 0) ||\n(path.indexOf(\"yhs/search;\") == 0) ||\n(path.indexOf(\"web/results?\") == 0)||\n(path.indexOf(\"fr=altavista\") != -1))\n{\nreturn true;\n}\n}\nreturn false;\n};\nsearchshield.AltaVistaSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = \"\";\nvar findStr = \"\";\n// initial checks\nif ((!tag.href) || \n(tag.href.charAt(0) == \'#\') ||\n(tag.href.indexOf(\"javascript:\") == 0))\n{\nreturn false;\n}\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\nvar spnsdLinks = searchshield.getParentNodeByTagName(\"DIV\", tag, \"className\");\nif ((spnsdLinks) &&\n(spnsdLinks.className.indexOf(\'ads\') > -1)) // sponsored links\n{\nif (!tag.parentNode)\nreturn false;\n// parse ads for em tag\nvar baseNode;\nif (spnsdLinks.className.indexOf(\'ads horiz\') > -1) // horizontal ads sections\nbaseNode = tag.parentNode.parentNode;\nelse\nbaseNode = tag.parentNode;\nif (!baseNode || !baseNode.lastChild || baseNode.lastChild.tagName != \'EM\')\nreturn false;\nvar outHref = searchshield.removeHtmlTags(baseNode.lastChild.innerHTML);\nreturn outHref;\n}\nif ((tag.className == \"spt\") || \n(tag.className == \"res\") ||\n(tag.className == \"yschttl spt\"))\n{\nfindStr = \"/**\";\nvar pos = tag.href.indexOf(findStr);\nif (pos != -1)\n{\npos += 3;\noutHref = tag.href.substring(pos);\noutHref = unescape(outHref);\n// no results for overture.com & no yahoo domains\nchkHref = outHref.toLowerCase();\nif (chkHref.indexOf(\"overture.\") != -1)\nreturn false;\n// split the url based on \'/\'\nvar parts = outHref.split(\'/\');\n// only need a domain\nif ((parts != null) && (parts[2] != null))\n{\nvar domain = parts[2];\nif ((domain.indexOf(\"rdrjp.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrkrs.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrtpe.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrird.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrhk2.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrsg1.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrin2.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdre1.yahoo.com\") != -1) ||\n(domain.indexOf(\"rdrw1.yahoo.com\") != -1) )\n{\nreturn false\n}\n}\nreturn outHref;\n}\nelse\n{\nreturn tag.href;\n}\n}\nreturn false;\n};\nsearchshield.AltaVistaSearchEngine.prototype.getImgElement = function (element)\n{\nwhile (element != null) \n{\nelement = element.nextSibling;\nif (element != null)\n{\nif ((element.id == null) || (element.id.indexOf(\"LXPLSS_\") == -1))\n{ // not our id but hit another anchor no verdict\nif (element.tagName == \"A\")\n{\nelement = null;\nbreak;\n}\n}\nelse if (element.tagName == \"A\")\nbreak;\n}\n}\nvar rtnElem = !!element ? element.firstChild : element;\nreturn rtnElem;\n};\n/////////////// ALTAVISTA SEARCH ENGINE ///////////////\n/////////////// YANDEX SEARCH ENGINE ///////////////\nsearchshield.YandexSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\n};\nsearchshield.YandexSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.YandexSearchEngine.prototype.constructor = searchshield.YandexSearchEngine;\nsearchshield.YandexSearchEngine.prototype.name = \"yandex\";\nsearchshield.YandexSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif ((domain.match(/yandex\\.com|by|kz|ru|ua/i)) &&\n(path.indexOf(\"yandsearch?\") == 0))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.YandexSearchEngine.prototype.includeLink = function(tag)\n{\nif (tag.href.indexOf(\"/search\") != -1)\n{\nreturn false;\n}\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||\nsearchshield.DoesURLContain(tag.href, \".yandex.net\") ||\nsearchshield.DoesURLContain(tag.href, \".yandex.ru\") ||\nsearchshield.DoesURLContain(tag.href, \"moikrug.ru\") ||\nsearchshield.DoesURLContain(tag.href, \"ya.ru\") ||\nsearchshield.DoesURLContain(tag.href, \".yandex.com\") ||\nsearchshield.DoesURLContain(tag.href, \"yandex.st\"))\n{\nreturn false;\n}\nparentNode = tag.parentNode;\nif ((tag.parentNode) && \n(tag.parentNode.parentNode) &&\n(tag.parentNode.parentNode.className.toLowerCase() == \"moreinfo\"))\n{\nreturn false;\n}\nreturn tag.href;\n};\nsearchshield.YandexSearchEngine.prototype.getImgElement = function (element)\n{\nwhile (element != null) \n{\nelement = element.nextSibling;\nif (element != null)\n{\nif ((element.id == null) || (element.id.indexOf(\"LXPLSS_\") == -1))\n{ // not our id but hit another anchor no verdict\nif (element.tagName == \"A\")\n{\nelement = null;\nbreak;\n}\n}\nelse if (element.tagName == \"A\")\nbreak;\n}\n}\nvar rtnElem = !!element ? element.firstChild : element;\nreturn rtnElem;\n};\n/////////////// YANDEX SEARCH ENGINE ///////////////\n/////////////// SEZNAM SEARCH ENGINE ///////////////\nsearchshield.SeznamSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.elementAttribute = {\nwidth: \"18\",\nheight: \"18\"\n};\nthis.updateImageStyle = {\nwidth: \"18px\",\nheight: \"18px\"\n};\n};\nsearchshield.SeznamSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.SeznamSearchEngine.prototype.constructor = searchshield.SeznamSearchEngine;\nsearchshield.SeznamSearchEngine.prototype.name = \"seznam\";\nsearchshield.SeznamSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif ((domain.indexOf(\"search.seznam.cz\") > -1) &&\n((path.indexOf(\"?\") == 0) || (path.indexOf(\"svet\") == 0)))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.SeznamSearchEngine.prototype.includeLink = function(tag)\n{\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\nvar parentNode = tag.parentNode;\nif (parentNode)\n{\nvar grandParentNode = tag.parentNode.parentNode;\nif ((parentNode.tagName == \"SPAN\") && \n((parentNode.className.toLowerCase() == \"sklik-url\") ||\n(parentNode.className.toLowerCase() == \"sklik-title\")))\n{ // locate the real url and unencode it\nvar urlPos = tag.href.indexOf(\"&url=http\");\nif (urlPos != -1)\n{\nurlPos += 5; \noutHref = tag.href.substring(urlPos);\noutHref = unescape(outHref);\nreturn outHref;\n}\n}\nelse if (grandParentNode) \n{\nvar greatGrandParentNode = tag.parentNode.parentNode.parentNode;\nif ((grandParentNode.tagName == \"DIV\") &&\n((grandParentNode.className.toLowerCase() == \"text\") || (grandParentNode.className.toLowerCase() == \"hlasky otz\")))\n{ // standard link\nreturn tag.href;\n}\nelse if (greatGrandParentNode && greatGrandParentNode.tagName == \"DIV\" &&\n(greatGrandParentNode.className.toLowerCase() == \"hotlinks\")) \n{ // hint link\nreturn tag.href;\n}\n}\n}\nreturn false;\n};\n/////////////// SEZNAM SEARCH ENGINE ///////////////\n/////////////// WEBHLEDANI SEARCH ENGINE ///////////////\nsearchshield.WebhledaniSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\n};\nsearchshield.WebhledaniSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.WebhledaniSearchEngine.prototype.constructor = searchshield.WebhledaniSearchEngine;\nsearchshield.WebhledaniSearchEngine.prototype.name = \"webhledani\";\nsearchshield.WebhledaniSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif ((domain.indexOf(\"webhledani.cz\") > -1) &&\n(path.indexOf(\"results.aspx?\") == 0))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.WebhledaniSearchEngine.prototype.includeLink = function(tag)\n{\nif (tag.href.indexOf(\"/redir.aspx?\") != -1)\n{\nvar ancestorNode;\n// sponsored link\nif ((ancestorNode = searchshield.getParentNodeByClassName(\"results sponsored\", tag, 3)) != null)\n{\nif ((ancestorNode = searchshield.getParentNodeByClassName(\"res1\", tag, 2)) != null)\n{\nvar spanSibling = ancestorNode.nextSibling;\nwhile (spanSibling.nodeName != \'SPAN\')\n{\nspanSibling = spanSibling.nextSibling;\nif (spanSibling.nodeName == \'DIV\' || spanSibling.className == \'res1\')\n{\nspanSibling = null;\nbreak;\n}\n}\nif (spanSibling)\noutHref = spanSibling.innerHTML;\n}\nif (outHref)\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(outHref)); \n}\nif ((ancestorNode = searchshield.getParentNodeByClassName(\"right-sponsored\", tag, 3)) != null)\n{\nvar outHref;\nif ((ancestorNode = searchshield.getParentNodeByClassName(\"res3\", tag, 2)) != null)\n{\nvar spanSibling = ancestorNode.nextSibling;\nwhile (spanSibling.nodeName != \'SPAN\')\n{\nspanSibling = spanSibling.nextSibling;\nif (spanSibling.nodeName == \'DIV\' || spanSibling.className == \'res3\')\n{\nspanSibling = null;\nbreak;\n}\n}\nif (spanSibling)\noutHref = spanSibling.innerHTML;\n}\nif (outHref)\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(outHref)); \n}\n// result link\nif (searchshield.getParentNodeByClassName(\"results\", tag, 3) != null)\n{\nif ((ancestorNode = searchshield.getParentNodeByClassName(\"res2\", tag, 2)) != null)\n{\nif (tag.parentNode && (tag.parentNode.nodeName != \'P\'))\nreturn getLinkHref(ancestorNode);\n}\n}\n}\nreturn false;\nfunction getLinkHref(aNode)\n{\nvar spanElems = aNode.getElementsByTagName(\'span\');\nfor (var i=0; i &lt; spanElems.length; i++)\n{\nif (spanElems[i].className != \'site\')\ncontinue;\nvar outAnchor = spanElems[i].getElementsByTagName(\'a\')[0];\nif (outAnchor == null)\noutAnchor = spanElems[i];\nreturn searchshield.checkUrl(searchshield.removeHtmlTags(outAnchor.innerHTML));\n}\nreturn false;\n}\n};\n/////////////// WEBHLEDANI SEARCH ENGINE ///////////////\n/////////////// EBAY SEARCH ENGINE ///////////////\nsearchshield.eBaySearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\n};\nsearchshield.eBaySearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.eBaySearchEngine.prototype.constructor = searchshield.eBaySearchEngine;\nsearchshield.eBaySearchEngine.prototype.name = \"ebay\";\nsearchshield.eBaySearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// shop.ebay.xx\n// shop.xxxx.ebay.xx like shop.benl.ebay.be\n// search.auction.co.kr \nvar path = uri.path + uri.delimiter + uri.query;\nif ((domain.indexOf(\"shop.ebay\") > -1) ||\n(domain.indexOf(\"shop.benl.ebay\") > -1))\n{\nif ((path.indexOf(\"?_from=\") == 0) ||\n(path.indexOf(\"i.html\") > -1))\n{\nreturn true;\n}\n}\n// ebay.se\nif ((domain.indexOf(\"search.eim.ebay\") > -1) &&\n((path.indexOf(\"?kw=\") > -1) || (path.indexOf(\"?ev=\") > -1)))\n{\nreturn true;\n}\nif ((domain.indexOf(\"search.auction.co.kr\") > -1 ) &&\n((path.indexOf(\"?keyword=\") > -1)))\n{\n// would normally set these properties in the constructor or in an\n// overriding function but they\'re only required for this domain\n// links are in iframes\nthis.processFrames = true;\n// must downsize verdicts for proper display\nthis.elementAttribute = {\nwidth: \"16\",\nheight: \"16\"\n};\nthis.updateImageStyle = {\nwidth: \"16px\",\nheight: \"16px\"\n};\nreturn true;\n}\n// latin america ebay\n// listado.mercadolibre.com.xx or listado.mercadolibre.co.xx\n// or listado.mercadolibre.xx or\n// category.mercadolibre.com.xx or listado.mercadolibre.xx/category\n// lista.mercadolivre.com.xx or lista.mercadolivre.com.xx/category\nif ((domain.indexOf(\"www.\") == -1) &&\n((domain.indexOf(\".mercadolibre.\") > -1 ) ||\n(domain.indexOf(\".mercadolivre.\") > -1 ))) \n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.eBaySearchEngine.prototype.includeLink = function(tag)\n{\nvar parentNode = null;\nvar outHref = false;\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\nif ( tag.href.indexOf(\".ebayrtm.com/clk?\") > -1 )\n{\nif ( tag.title == null || tag.title.length &lt; 0 )\nreturn false;\noutHref = searchshield.removeHtmlTags(tag.title);\nif (outHref.indexOf(\" \") == -1)\n{ // no spaces\nif (outHref.indexOf(\".\") > -1)\n{ // at least one dot \nif (outHref.indexOf(this.search.uri.host) == -1)\n{ // no host\nif (outHref.toLowerCase().indexOf(\"ebay.com\") == -1)\n{\nreturn outHref;\n}\n}\n}\n} \n}\n// ebay.se - Google ads\nparentNode = tag.parentNode;\nif (parentNode && (parentNode.className.toLowerCase() == \"google-ad-link\"))\n{\nif (tag.href.indexOf(\"/aclk?sa=\") != -1)\n{ \nfindStr = \"&adurl=http\";\nvar urlPos = tag.href.indexOf(findStr);\nif (urlPos != -1)\n{\nurlPos += 7; // puts it on the http\noutHref = tag.href.substring(urlPos);\n// extract any fragment text, shouldn\'t be unescaped\nvar pound = outHref.indexOf(\"#\"); \nif (pound != -1)\n{\nvar fragment = outHref.substring(pound);\noutHref = outHref.substring(0, pound);\noutHref = unescape(outHref);\noutHref += fragment;\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\noutHref = unescape(outHref);\nif (outHref.indexOf(\"?\") == -1)\n{\nvar ampPos = outHref.indexOf(\"&\");\nif (ampPos != -1)\noutHref = outHref.substring(0, ampPos);\n}\nif (searchshield.FilterUrl(outHref, this.filter_urls))\nreturn false;\nreturn outHref;\n}\n}\n}\n// auction.co.kr\nparentNode = tag.parentNode;\nif (parentNode && (parentNode.className.toLowerCase() == \"link\"))\n{\nif (tag.href.indexOf(\"adcr.naver.com\") > -1)\n{\noutHref = tag.innerText;\nif ((outHref == null) || (outHref.length &lt; 0))\nreturn false;\nreturn outHref;\n}\n}\n// latin america ebay\nif ( tag.href.toLowerCase().indexOf(\"clickcounter?\") > -1 )\n{\nvar spanElements = tag.getElementsByTagName(\"span\");\nif ((spanElements != null) && \n(spanElements.length > 0))\n{\nif ( spanElements[0].className.toLowerCase() == \"mclics-url\" )\n{\noutHref = spanElements[0].innerHTML;\nif ( outHref == null || outHref.length &lt; 0 )\nreturn false;\noutHref = searchshield.removeHtmlTags(outHref);\nif (outHref.indexOf(\" \") == -1)\n{ // no spaces\nif (outHref.indexOf(\".\") > -1)\n{ // at least one dot \nif ((outHref.toLowerCase().indexOf(\"mercadolibre\") == -1) && \n(outHref.toLowerCase().indexOf(\"mercadolivre\") == -1)) \n{\nreturn outHref;\n}\n}\n}\n}\n}\n}\nreturn false;\n};\n/////////////// EBAY SEARCH ENGINE ///////////////\n/////////////// DIGG SEARCH ENGINE ///////////////\nsearchshield.DiggSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.new_links = false;\n};\nsearchshield.DiggSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.DiggSearchEngine.prototype.constructor = searchshield.DiggSearchEngine;\nsearchshield.DiggSearchEngine.prototype.name = \"digg\";\nsearchshield.DiggSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif ((domain.indexOf(\"digg.com\") > -1) &&\n(path.indexOf(\"/ad\") == -1))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.DiggSearchEngine.prototype.includeLink = function(tag)\n{\nvar outHref = false;\nvar findStr = \"\";\nif ((tag.parentNode) &&\n(tag.parentNode.className.toLowerCase() == \"digg-count\"))\n{\nreturn false;\n}\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\n{\nif (tag.className && tag.className.indexOf(\'source\') != -1)\n{\nfindStr = \"/search?q=site:\";\nvar urlPos = tag.href.indexOf(findStr);\nif (urlPos != -1)\n{\nurlPos += 15;\noutHref = tag.href.substring(urlPos);\nreturn outHref;\n}\n}\n}\nreturn false;\n};\nsearchshield.DiggSearchEngine.prototype.addImage = function(node, image, hidden)\n{\n// remove style that is set when alt image is applied\nthis.addAnchorStyle = {\nbackground: \"none\"\n};\nvar parent = searchshield.SearchEngine.prototype.addImage;\nreturn parent.call(this, node, image, hidden);\n};\n/////////////// DIGG SEARCH ENGINE ///////////////\n/////////////// SLASHDOT SEARCH ENGINE ///////////////\nsearchshield.SlashdotSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.showCleanVerdicts = false;\nthis.new_links = false;\nthis.type = \'inline\';\n};\nsearchshield.SlashdotSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.SlashdotSearchEngine.prototype.constructor = searchshield.SlashdotSearchEngine;\nsearchshield.SlashdotSearchEngine.prototype.name = \"slashdot\";\nsearchshield.SlashdotSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\n// re stitch the uri path and query elements\n// to use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif (domain.indexOf(\"slashdot.org\") != -1)\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.SlashdotSearchEngine.prototype.includeLink = function(tag)\n{\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\nif ( tag.href.indexOf(\"mailto:\") != -1 )\nreturn false;\nif ( tag.href.indexOf(\"slashdot.org\") != -1 )\nreturn false;\nif (tag.parentNode && (tag.parentNode.tagName == \"DIV\"))\n{\nif (tag.parentNode.id.indexOf(\"text-\") != -1)\n{\nreturn tag.href;\n}\n}\nelse if ( tag.parentNode && tag.parentNode.parentNode && tag.parentNode.parentNode.tagName == \"DIV\" )\n{\nif ( tag.parentNode.parentNode.id.indexOf(\"text-\") != -1 )\n{\nreturn tag.href;\n}\n}\nreturn false;\n};\nsearchshield.SlashdotSearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar doc = this.search.doc;\nthis.init_inline_ratings(doc);\nthis.show_inline_ratings(doc, node, image);\n};\n/////////////// SLASHDOT SEARCH ENGINE ///////////////\n/////////////// TWITTER SEARCH ENGINE ///////////////\nsearchshield.TwitterSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.showCleanVerdicts = false;\nthis.new_links = false;\nthis.type = \'inline\';\n};\nsearchshield.TwitterSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.TwitterSearchEngine.prototype.constructor = searchshield.TwitterSearchEngine;\nsearchshield.TwitterSearchEngine.prototype.name = \"twitter\";\nsearchshield.TwitterSearchEngine.prototype.twitter_filter_urls = [\"twitpic.com\", \"twitterfeed.com\", \"twitter.peoplebrowsr.com\"];\nsearchshield.TwitterSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain= uri.host;\nif (domain.indexOf(\"twitter.com\") != -1)\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.TwitterSearchEngine.prototype.includeLink = function(tag)\n{\nif (tag.className == \'twitter-timeline-link\')\n{\n// can\'t pass the tag\'s href if domain is t.co cause then new posts\n// will not get an immediate verdict even if it has a dangerous link\nif (tag.href.indexOf(\'/t.co/\') != -1)\n{\n// the tag\'s inner text may be truncated and end in the \n// unicode suspension character (i.e., ...) and it cannot \n// be used.\nif (tag.innerText.charCodeAt(tag.innerText.length-1) == 8230)\n{\n// older posts may not always have data-expanded-url\nvar destUrl = tag.getAttribute(\'data-expanded-url\');\nif (!!destUrl)\nreturn destUrl;\nvar finalUrl = searchshield.avgCallFunc(document, \'GetFinalUrl\', tag.href);\nreturn finalUrl;\n}\nreturn searchshield.checkUrl(tag.innerText);\n}\nreturn tag.href;\n}\nreturn false;\n};\nsearchshield.TwitterSearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar doc = this.search.doc;\nthis.init_inline_ratings(doc);\nthis.show_inline_ratings(doc, node, image);\n};\n/////////////// TWITTER SEARCH ENGINE ///////////////\n/////////////// GMAIL SEARCH ENGINE ///////////////\nsearchshield.GMailSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.processFrames = true;\nthis.showCleanVerdicts = false;\nthis.type = \'inline\';\n};\nsearchshield.GMailSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.GMailSearchEngine.prototype.constructor = searchshield.GMailSearchEngine;\nsearchshield.GMailSearchEngine.prototype.name = \"gmail\"; // the name by which the search engine is known (always lowercase)\nsearchshield.GMailSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nvar domain = uri.host;\n// re stitch the uri path and query elements to\n// use existing logic\nvar path = uri.path + uri.delimiter + uri.query;\nif ((domain.indexOf(\"mail.google.\") != -1) || \n(domain.indexOf(\"gmail.\") != -1))\n{\nreturn true;\n}\nreturn false;\n};\nsearchshield.GMailSearchEngine.prototype.includeLink = function(tag)\n{\nif (searchshield.DoesURLContain(tag.href, this.search.uri.host))\nreturn false;\n// don\'t mark anything but http://\nif (tag.href.indexOf(\"mailto\") == 0)\nreturn false;\nvar parentDiv = searchshield.getParentNodeByTagName(\"DIV\", tag, \"className\");\nif ((parentDiv) &&\n((parentDiv.className == \"ii gt\") || // mail message body\n(parentDiv.className == \"mv\") || // top sponsored links\n(parentDiv.className == \"vb\") || // right sponsored links\n(parentDiv.className == \"im\") || // inside quotes\n(parentDiv.className == \"gmail_quote\") || // quote\n(parentDiv.className == \"msg\") // basic html mode\n)) // right ads\n{\n// parse for any ads\nvar newHref = this.parseAdUrl(tag.href);\nreturn newHref;\n}\nreturn false;\n};\nsearchshield.GMailSearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar doc = this.search.doc;\nthis.init_inline_ratings(doc);\nthis.show_inline_ratings(doc, node, image);\n};\nsearchshield.GMailSearchEngine.prototype.parseAdUrl = function(href)\n{\nif (!href)\nreturn href;\n// check for google ad\nvar regex = \"^http(s)?\\:\\/\\/([a-zA-Z0-9]+)\\.googlesyndication\\.com.+\\&adurl\\=(.+)\";\nvar re = new RegExp(regex);\nvar matches = href.match(re);\nif (matches && (matches.length >= 4))\n{\n// else we want the fourth value\nvar match = matches[3];\nif (match && (match.length > 0))\nreturn match\n}\nreturn href;\n};\n/////////////// GMAIL SEARCH ENGINE ///////////////\n/////////////// FACEBOOK SEARCH ENGINE ///////////////\nsearchshield.FacebookSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.showCleanVerdicts = false;\nthis.type = \'inline\';\n};\nsearchshield.FacebookSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.FacebookSearchEngine.prototype.constructor = searchshield.FacebookSearchEngine;\nsearchshield.FacebookSearchEngine.prototype.name = \"facebook\"; // the name by which the search engine is known (always lowercase)\nsearchshield.FacebookSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nif (uri.host.indexOf(\"www.facebook.com\") != -1) \nreturn true;\nreturn false;\n};\nsearchshield.FacebookSearchEngine.prototype.includeLink = function(tag)\n{\nif (!tag.href || (tag.href.indexOf(\'facebook.com\') > -1) || (tag.href.indexOf(\'ak.fbcdn.net\') > -1))\nreturn false;\nreturn tag.href\n};\nsearchshield.FacebookSearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar doc = this.search.doc;\nthis.init_inline_ratings(doc);\nthis.show_inline_ratings(doc, node, image);\n};\n/////////////// FACEBOOK SEARCH ENGINE ///////////////\n/////////////// MYSPACE SEARCH ENGINE ///////////////\nsearchshield.MySpaceSearchEngine = function(search)\n{\nsearchshield.SearchEngine.call(this, search);\nthis.showCleanVerdicts = false;\nthis.type = \'inline\';\n};\nsearchshield.MySpaceSearchEngine.prototype = new searchshield.SearchEngine();\nsearchshield.MySpaceSearchEngine.prototype.constructor = searchshield.MySpaceSearchEngine;\nsearchshield.MySpaceSearchEngine.prototype.name = \"myspace\"; // the name by which the search engine is known (always lowercase)\nsearchshield.MySpaceSearchEngine.prototype.validSearch = function(href)\n{\nvar uri;\nif (typeof(this.search) === \'undefined\' || null === this.search)\nuri = searchshield.parseLink(href);\nelse\nuri = this.search.uri;\nif(!uri || !uri.host)\nreturn false;\nif (uri.host.indexOf(\"www.myspace.com\") != -1) \nreturn true;\nreturn false;\n};\nsearchshield.MySpaceSearchEngine.prototype.includeLink = function(tag)\n{\n// related domains do not get verdicts\nif (/myspace/.test(tag.hostname) || /myspace/.test(tag.href))\nreturn false;\nif (/msplinks\\.com/i.test(tag.href))\nreturn searchshield.checkUrl(tag.innerText);\nreturn tag.href;\n};\nsearchshield.MySpaceSearchEngine.prototype.addImage = function(node, image, hidden)\n{\nvar doc = this.search.doc;\nthis.init_inline_ratings(doc);\nthis.show_inline_ratings(doc, node, image);\n};\n/////////////// MYSPACE SEARCH ENGINE ///////////////\n/////////////// AVG TOOLBAR REPORTING ///////////////\nvar avgreport = {\nBLOCK_SEVERITY: 3,\nscanResult: function (doc, url, foundUrl, ip) {\n// report scan end only if surf enabled\nif (\'1\' != searchshield.avgCallFunc(doc, \'GetSurfEnabled\'))\nreturn;\n// for now native is handling the interstitial \nvar results = searchshield.avgCallFunc(doc, \'MalsiteCheck\', url);\nif ( results == null )\nreturn;\nvar parts = results.split(\'::\');\n// need at least severity\nif (parts == null)\nreturn;\nif (!ip)\nip = \"\";\n// use a block severity if foundUrl is given\nvar severity = !!foundUrl ? avgreport.BLOCK_SEVERITY : parseInt(parts[0], 10);\nvar category = \"\";\nvar threat = \"\";\n// fill in the category and threat if something was found\nif (severity > 0)\n{\ncategory = parts[2];\nthreat = parts[4];\n}\n// else\n// return;\nvar scan_result = searchshield.avgCallFunc(doc, \'ReportScanResult\', url, url, threat, category, ip, severity);\nvar scan_end = avgreport.scanEnd(doc, url);\nreturn (scan_result && scan_end);\n},\nscanEnd: function (doc, url) {\nreturn searchshield.avgCallFunc(doc, \'ReportScanEnd\', url);\n},\nGetInterstitialIP: function (interstitial) {\n// simple regex to pull the IP address\nvar 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)/;\nvar match = regex.exec(interstitial);\nif (!match)\nreturn \'\';\nreturn match[0];\n}\n}\n/////////////// AVG TOOLBAR REPORTING ///////////////\n/////////////// FLYOVERS ///////////////\nvar avglsflyover = {\ncount: 0,\npoppedUp: false,\npoppedElement: null,\nreset: function () {\navglsflyover.count = 0;\navglsflyover.poppedUp = false;\navglsflyover.poppedElement = null;\n},\npopup: function (event, hash, search, flyover) {\nif (!event)\nevent = window.event;\nvar div = document.getElementById(\"XPLSS_Flyover\");\nif (div == null)\nreturn;\n// establish target element and get its containing document object\n// in case verdict is inside a frame\nvar eventTarget = event.srcElement;\nvar frameDoc = eventTarget.ownerDocument;\n// if the element is the clock, don\'t pop over it\nif ((eventTarget.src != null) && (eventTarget.src.indexOf(\"clock.gif\") != -1))\nreturn;\n// save the element we popped over\navglsflyover.poppedElement = eventTarget;\n// if no flyover get it\nif ((flyover == null) || (flyover == \"\"))\n{\nflyover = searchshield.avgCallFunc(frameDoc, \'BuildFlyover\', hash);\nif (!flyover)\nreturn;\n// cleanup flyover, replace any new lines\nflyover = flyover.replace(/\\r/g, \"\");\nflyover = flyover.replace(/\\n/g, \"\");\n// escape any single quotes\nflyover = flyover.replace(/\'/g, \"&#39;\");\n}\n// set the html in the layer\ndiv.innerHTML = flyover;\n// needed to prevent the flyover from hiding inadvertantly in IE7\nif (searchshield.docMode == 7) {\ndiv.style.backgroundColor = \"#fff\";\n}\n// there is an unwanted text node that causes vertical misalignment of flyover\nif (div.firstChild.nodeType == 3)\ndiv.removeChild(div.firstChild);\navglsflyover.poppedUp = true;\n// reset display count\navglsflyover.count = 0;\navglsflyover.position();\n},\nhide: function (event) {\nvar frameDoc = document || top.document;\nvar div = frameDoc.getElementById(\"XPLSS_Flyover\");\nif ((div == null) || (div.style == null) || (div.style.visibility == \"hidden\"))\nreturn;\nvar trans_div = frameDoc.getElementById(\"XPLSS_Trans\");\nif ((trans_div == null) || (trans_div.style == null) || (trans_div.style.visibility == \"hidden\"))\nreturn;\n// scroll and keydown events will pass a null event by design\n// toElement will be null when mousing out of frameelement containing a verdict\nif (event == null || event.toElement == null)\n{\nreturn;\n}\nif (trans_div.contains(event.toElement) || div.contains(event.toElement))\nreturn;\n// if the toElement is a cooresponding alt image then don\'t hide\n// use try/catch because toElement will be null when mousing out of frame\ntry {\nif (!!event.toElement.id && !!event.srcElement.id)\n{\nif (event.toElement.id.indexOf(event.srcElement.id.substring(0,event.srcElement.id.length-2)) == 0)\nreturn;\nif (event.srcElement.id == \'XPLSS_Trans\' && /XPLSS_\\d+VU\\d/.test(event.toElement.id))\nreturn;\n}\n}\ncatch(err){}\n// hide and move somewhere off screen (negative offsets)\ndiv.style.visibility = \"hidden\";\ndiv.style.left = \"-2100px\";\ndiv.style.top = \"-2100px\";\ntrans_div.style.visibility = \"hidden\";\ntrans_div.style.left = \"-2100px\";\ntrans_div.style.top = \"-2100px\";\nreturn true;\n},\nposition: function () {\nif (!avglsflyover.poppedUp || (avglsflyover.poppedElement == null))\nreturn;\nvar flyover = document.getElementById(\"XPLSS_Flyover\");\nif (flyover == null)\nreturn;\n// relative position of flyover in relation to icon\nvar locateX = 0; // 0=left, 1=right\nvar locateY = 0; // 0=above, 1=below, 2=beside icon\n// get window sizes\nvar winSize = searchshield.viewPortSize();\nvar windowX = winSize[0];\nvar windowY = winSize[1];\n// get the exact size of the flyover\nvar flyoverSize = searchshield.elementSize(flyover);\nvar flyoverX = flyoverSize[0];\nvar flyoverY = flyoverSize[1];\nvar verdictWidth = 0;\nif (avglsflyover.poppedElement && avglsflyover.poppedElement.width)\nverdictWidth = avglsflyover.poppedElement.width;\n// get the bounding rect for image(s)\nvar imgRect = searchshield.GetFullBoundingRect(avglsflyover.poppedElement);\n// half width/height of element bounding rect\nvar halfX = (imgRect.right - imgRect.left) / 2;\nvar halfY = (imgRect.bottom- imgRect.top) / 2;\n// element the mouse is over, get the center position\nvar posX = searchshield.offsetLeft(avglsflyover.poppedElement) + halfX;\nvar posY = searchshield.offsetTop(avglsflyover.poppedElement) + halfY;\n// if a verdict is inside a frame must get offsets for the frame element\nvar docFrames = document.frames;\nif (docFrames)\n{\nfor (var i=0; i &lt; docFrames.length; i++)\n{\ntry {\nvar frameElem = docFrames[i].frameElement;\nif (frameElem.contentWindow.document.getElementById(avglsflyover.poppedElement.id))\n{\nposX += searchshield.offsetLeft(frameElem);\nposY += searchshield.offsetTop(frameElem);\nbreak;\n}\n}\ncatch(frmErr){}\n}\n}\nvar transXOffset = 0;\nif (imgRect.mid == undefined)\ntransXOffset = -1 * halfX;\nelse\ntransXOffset = ((imgRect.right + imgRect.left) / 2) - imgRect.mid;\n// normalize pos to 0 -- get amount of scrolling in browser window\nvar scroll = searchshield.scrollSize();\nvar pageOffsetX = scroll[0];\nvar pageOffsetY = scroll[1];\nposX -= pageOffsetX;\nposY -= pageOffsetY;\n// setup the offsets\nvar offsetX = posX;\nvar offsetY = posY;\n// calc where to display on page\nif ((windowX - posX) > posX)\n{\n// right\noffsetX += halfX;\nlocateX = 1;\n}\nelse\n{\n//left\noffsetX -= (flyoverX + halfX);\n}\nif ((windowY - posY) > posY)\n{\n// below\nif (posY &lt; (windowY/4))\n{\noffsetY -= halfY;\nlocateY = 1;\n}\nelse\n{\noffsetY -= (flyoverY / 2);\nlocateY = 2;\n}\n}\nelse\n{\n// above\nif ((windowY - posY) &lt; (windowY/4))\n{\noffsetY -= (flyoverY - halfY);\n}\nelse\n{\noffsetY -= (flyoverY / 2);\nlocateY = 2;\n}\n}\n// make sure we aren\'t off the screen\nif (offsetY &lt; 0)\noffsetY = 0;\nif ((offsetY + flyoverY) > windowY)\noffsetY = windowY - flyoverY;\n// add page offsets back\noffsetX += pageOffsetX;\noffsetY += pageOffsetY;\nposX += pageOffsetX;\nposY += pageOffsetY;\nvar paddedOffsetX = 0; //provide space between icon and flyover\nvar padX = 3;\nif (locateX == 0)\npaddedOffsetX = offsetX - padX;\nelse\npaddedOffsetX = offsetX + padX;\n// set where to put the flyover\nflyover.style.top = offsetY + \"px\";\nflyover.style.left = paddedOffsetX + \"px\";\n// set where to put the transparent layer\nvar trans = document.getElementById(\"XPLSS_Trans\");\nif (trans != null)\n{\nvar trans_left = 0;\nvar trans_top = 0;\nvar trans_width= 0;\nvar trans_height = 0;\n// transparent layer should overlap verdict image\nif (locateX == 0)\ntrans_left = posX - flyoverX - halfX; // left \nelse\ntrans_left = posX - transXOffset - verdictWidth; // right\ntrans.style.left = trans_left + \"px\";\ntrans.style.top = offsetY + \"px\";\ntrans.style.width = flyoverX + verdictWidth + \"px\";\ntrans.style.height = flyoverY + \"px\";\n}\navglsflyover.display();\n},\ndisplay: function () {\navglsflyover.count++;\nif (avglsflyover.count == 1)\n{\nvar flyover = document.getElementById(\"XPLSS_Flyover\");\nif (flyover == null)\nreturn;\n// show the flyover, must use a little count to tell, crazy stuff\nflyover.style.visibility = \"visible\";\nflyover.onmouseout = function(){\navglsflyover.hide(event);\n};\n// show the transparent layer\nvar trans_div = document.getElementById(\"XPLSS_Trans\");\nif (trans_div == null)\nreturn;\ntrans_div.style.visibility = \"visible\";\ntrans_div.onmouseout = function(){\navglsflyover.hide(event);\n};\navglsflyover.poppedUp = false;\n}\n},\nshow: function () {\nvar div = document.getElementById(\"XPLSS_Flyover\");\nif (div == null)\nreturn;\ndiv.style.visibility = \"visible\";\nvar trans_div = document.getElementById(\"XPLSS_Trans\");\nif (trans_div == null)\nreturn;\ntrans_div.style.visible = \"visible\";\n}\n};\nvar avglsinlineflyover = {\nbuild: function (riskCategory, riskName, bgColor, borderColor) {\nvar html = \'\';\nhtml += \'\n<div class=\"avgILFO_head\">\n<div>\n</div>\n</div>\n<div class=\"avgILFO_content\">\n\';\nhtml += \'<img src=linkscanner://LS_Logo_Results.gif /><br />\n\';\nhtml += riskCategory + \'<br />\n\';\nhtml += riskName + \'<br />\n\';\nhtml += \'\n</div>\n<div class=\"avgILFO_foot\">\n<div>\n</div>\n</div>\n\';\nreturn html;\n},\npopup: function (event, flyover, nSeverity, blUrl) {\n//set verdict info\nvar div = document.getElementById(\'XPLSS_InlineFlyover\');\nif (div == null)\nreturn;\n// blUrl is an object for a blacklisted short url\n// when it is passed get the final url \nif (blUrl != undefined)\n{\nvar finalUrl = searchshield.avgCallFunc(document, \'GetFinalUrl\', blUrl.sUrl);\nvar riskUrl = blUrl.sUrl;\nif ((finalUrl) && (searchshield.FilterUrl(finalUrl, xplSearch.engine.shortened_urls)))\nfinalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl);\nvar riskName = blUrl.riskNameLabel + finalUrl;\nflyover = avglsinlineflyover.build(blUrl.riskCategory, riskName, blUrl.bgColor, blUrl.borderColor);\n}\ndiv.innerHTML = flyover;\ndiv.style.width = \"auto\"; //reset width\ndiv.style.position = \"absolute\";\nif (searchshield.quirksMode || searchshield.docMode &lt;= 7)\n{\nvar className = xplSearch.engine.inline.color.classname[nSeverity];\nvar imgBase = \"linkscanner://\" + className + \"_inline_border_\";\nvar divWidth = searchshield.elementSize(div)[0];\n//round up to nearest 10 to avoid intentional wrapping in div\nvar flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10))));\nvar ilfoDivs = div.getElementsByTagName(\"div\");\nif (ilfoDivs && ilfoDivs.length == 5)\n{\n//div.style.fontSize = \"10px\";\ndiv.style.backgroundImage = \"url(\" + imgBase + \"tl.png)\";\ndiv.style.backgroundPosition = \"0 0\";\ndiv.style.backgroundRepeat = \"no-repeat\";\ndiv.style.width = flyoverWidth + \"px\";\ndiv.style.zIndex = \"9999\";\n// avgILFO_head\nilfoDivs[0].style.backgroundImage = \"url(\" + imgBase + \"tr.png)\";\nilfoDivs[0].style.backgroundPosition = \"top right\";\nilfoDivs[0].style.backgroundRepeat = \"no-repeat\";\nilfoDivs[0].style.width = flyoverWidth + \"px\";\nilfoDivs[0].style.height = \"5px\";\n// avgILFO_head div\nilfoDivs[1].style.height = \"5px\";\n// avgILFO_content\nilfoDivs[2].style.backgroundImage = \"url(\" + imgBase + \"r.png)\";\nilfoDivs[2].style.backgroundPosition = \"top right\";\nilfoDivs[2].style.backgroundRepeat = \"repeat-y\";\nilfoDivs[2].style.fontSize = \"10px\";\nilfoDivs[2].style.color = \"black\";\nilfoDivs[2].style.padding = \"0px 10px\";\nilfoDivs[2].style.textAlign = \"left\";\nilfoDivs[2].style.wordWrap = \"break-word\";\nilfoDivs[2].style.lineHeight = \"130%\";\n// avgILFO_foot\nilfoDivs[3].style.backgroundImage = \"url(\" + imgBase + \"bl.png)\";\nilfoDivs[3].style.backgroundPosition = \"bottom left\";\nilfoDivs[3].style.backgroundRepeat = \"no-repeat\";\nilfoDivs[3].style.height = \"5px\";\n// avgILFO_foot div\nilfoDivs[4].style.backgroundImage = \"url(\" + imgBase + \"br.png)\";\nilfoDivs[4].style.backgroundPosition = \"bottom right\";\nilfoDivs[4].style.backgroundRepeat = \"no-repeat\";\nilfoDivs[4].style.width = flyoverWidth + \"px\";\nilfoDivs[4].style.height = \"5px\";\n}\nelse\n{\ndiv.style.fontSize = \"10px\";\ndiv.style.backgroundColor = xplSearch.engine.inline.color.background[nSeverity];\ndiv.style.border = xplSearch.engine.inline.color.border[nSeverity] + \" solid 3px\";\ndiv.style.padding = \"3px 8px\";\n}\n}\nelse\n{\n// apply updated styles for new flyover content\nvar sheets = document.styleSheets;\nfor (var i=0; i &lt; sheets.length; i++)\n{\nif (sheets[i].id && sheets[i].id == \"avgILFOStyle\")\n{\nvar avgILFOStyle = sheets[i];\nbreak;\n}\n}\nif (typeof(avgILFOStyle) !== \"undefined\")\n{\nvar className = xplSearch.engine.inline.color.classname[nSeverity];\nvar divWidth = searchshield.elementSize(div)[0];\n//round up to nearest 10 to avoid intentional wrapping in div\nvar flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10))));\nvar rules = avgILFOStyle.rules;\nfor (var i=0; i &lt; rules.length; i++)\n{\nvar bgImg = rules[i].style.backgroundImage;\nvar selText = rules[i].selectorText.toLowerCase();\nif (bgImg)\n{\nvar bgImgStyle = bgImg.replace(/default/, className);\nrules[i].style.backgroundImage = bgImgStyle;\n}\nif (((selText == \".avgilfo\") ||\n(selText == \".avgilfo_head\") ||\n(selText == \".avgilfo_foot div\")) &&\n(rules[i].style.width) && (rules[i].style.width == \"0px\"))\n{\nrules[i].style.width = (flyoverWidth) + \"px\";\n}\n}\n}\n}\nif (!event)\nevent = window.event;\nvar eventTarget = event.srcElement;\navglsinlineflyover.position(eventTarget);\n},\nhide: function (event) {\nif (!event)\nevent = window.event;\nvar div = document.getElementById(\"XPLSS_InlineFlyover\");\nif (div == null)\nreturn;\ndiv.style.visibility = \"hidden\"; //invisible\ndiv.style.left = \"-5000px\";\nif (!searchshield.quirksMode)\n{\n// reset flyover styles\nvar sheets = document.styleSheets;\nfor (var i=0; i &lt; sheets.length; i++)\n{\nif (sheets[i].id && sheets[i].id == \"avgILFOStyle\")\n{\nvar avgILFOStyle = sheets[i];\nbreak;\n}\n}\nif (typeof(avgILFOStyle) !== \"undefined\")\n{\nvar rules = avgILFOStyle.rules;\nfor (var i=0; i &lt; rules.length; i++)\n{\nvar bgImg = rules[i].style.backgroundImage;\nvar selText = rules[i].selectorText.toLowerCase();\nif (bgImg)\n{ \nvar bgImgStyle = bgImg.replace(/:\\/\\/([a-z]+)_/i, \'://default_\');\nrules[i].style.backgroundImage = bgImgStyle;\n}\nif (((selText == \".avgilfo\") ||\n(selText == \".avgilfo_head\") ||\n(selText == \".avgilfo_foot div\")) &&\n(rules[i].style.width))\n{\nrules[i].style.width = \"0px\";\n}\n}\n}\n}\n},\nposition: function (imageElem) {\nvar flyover = document.getElementById(\'XPLSS_InlineFlyover\');\nif (flyover == null)\nreturn;\n// relative position of flyover in relation to icon\nvar locateX = 0; // 0=left, 1=right\nvar locateY = 0; // 0=above, 1=below, 2=beside icon\n// get window sizes\nvar winSize = searchshield.viewPortSize();\nvar windowX = winSize[0];\nvar windowY = winSize[1];\n// Must know if there is a horizontal scroll bar for Firefox\n// for proper flyover positioning near bottom edge\nvar scrollYWidth = winSize[2];\nvar scrollBarX = winSize[2] > 0 ? true : false;\n// get the exact size of the flyover\nvar flyoverSize = searchshield.elementSize(flyover);\nvar flyoverX = flyoverSize[0];\nvar flyoverY = flyoverSize[1];\nflyover.style.width = flyoverX + \"px\";\n// get the bounding rect for image(s)\nvar imgRect = imageElem.getBoundingClientRect();\n// half width/height (center) of element bounding rect\nvar halfX = (imgRect.right - imgRect.left) / 2;\nvar halfY = (imgRect.bottom- imgRect.top) / 2;\n// element the mouse is over, get the center position\nvar posX = searchshield.offsetLeft(imageElem) + halfX;\nvar posY = searchshield.offsetTop(imageElem) + halfY;\nvar pageOffsetX = 0;\nvar pageOffsetY = 0;\nvar hasParentFrame = false;\n// normalize pos to 0 -- get amount of scrolling in browser window\nvar scroll = searchshield.scrollSize(imageElem);\npageOffsetX = scroll[0];\npageOffsetY = scroll[1];\nhasParentFrame = scroll[2];\nposX -= pageOffsetX;\nposY -= pageOffsetY;\n//compensate for Firefox 3\nif (posX &lt; imgRect.left)\nposX = imgRect.left+halfX;\n// setup the offsets\nvar offsetX = posX;\nvar offsetY = posY;\n// calc where to display on page\nif ((windowX - posX) > posX)\n{\n// right\n//offsetX += halfX;\noffsetX = imgRect.right + 3;\nlocateX = 1;\n}\nelse\n{\n//left\n//offsetX -= (flyoverX + halfX);\noffsetX = imgRect.left - flyoverX - 3;\n}\nif ((windowY - posY) > posY)\n{\n// below\nif (posY &lt; (windowY/4))\n{\noffsetY -= halfY;\nlocateY = 1;\n}\nelse\n{\noffsetY -= (flyoverY / 2) - halfY;\nlocateY = 2;\n}\n}\nelse\n{\n// above\nif ((windowY - posY) &lt; (windowY/4))\n{\noffsetY -= (flyoverY - halfY);\n}\nelse\n{\noffsetY -= (flyoverY / 2) + halfY;\nlocateY = 2;\n}\n}\n// make sure we aren\'t off the screen\nif (offsetY &lt; 0)\noffsetY = 0;\nif ((offsetY + flyoverY) > windowY)\n{\noffsetY = windowY - flyoverY;\n}\nelse if (scrollBarX && ((windowY - (posY + halfY)) &lt; scrollYWidth))\n{ //verdict overlaps the horizontal scrollbar\noffsetY = windowY - (flyoverY + scrollYWidth);\n}\n// add page offsets back - if not in frame\nif (!hasParentFrame)\n{\noffsetX += pageOffsetX;\noffsetY += pageOffsetY;\n}\n//posX += pageOffsetX;\n//posY += pageOffsetY;\n//var paddedOffsetX = 0; //provide space between icon and flyover\n//var padX = 3;\n//if (locateX == 0)\n// paddedOffsetX = offsetX - padX;\n//else\n// paddedOffsetX = offsetX + padX;\n// set where to put the flyover\nflyover.style.top = offsetY + \"px\";\nflyover.style.left = offsetX + \"px\";\navglsinlineflyover.display();\n},\ndisplay: function () {\nvar div = document.getElementById(\'XPLSS_InlineFlyover\');\nif (div == null)\nreturn;\n// show the flyover\ndiv.style.visibility = \"visible\";\n},\nimageExists: function(element) {\nif (element)\n{\n// check next siblings children\nvar sibling = element.nextSibling;\nif ((sibling == null) || (sibling.getElementsByTagName == null))\nreturn false;\nvar images = sibling.getElementsByTagName(\"IMG\");\nif (images == null)\nreturn false;\nfor (var i = 0; i &lt; images.length; i++)\n{\nif (images[i].id == \"avg_ls_image\")\nreturn true;\n}\n}\nreturn false;\n},\ngetImage: function (anchor) {\nif (anchor)\n{\nvar imageElem = null;\nvar images = anchor.getElementsByTagName(\"img\");\nif (images == null)\nreturn imageElem;\nfor (var i = 0; i &lt; images.length; i++)\n{\nif (images[i].id == \"avg_ls_image\")\n{\nimageElem = images[i];\nbreak; \n} \n}\nreturn imageElem;\n} \n},\ngetUrlFromQueryString: function (inUrl) {\nvar url = inUrl;\nvar uri = searchshield.parseLink(unescape(inUrl));\nif (uri.source != null)\n{ // regexp failed so used split to parse url\nvar qsUrl = uri.source.indexOf(\"?url=\");\nif (qsUrl != -1)\nurl = uri.source.substring(qsUrl + 5);\nelse\nurl = uri.source;\n}\nelse if ((uri.qsArray.url != null) && (uri.qsArray.url.length > 0))\n{\nurl = uri.qsArray.url;\n}\nreturn url;\n},\nmouseOverHandler: function (e, doc, engine) {\nif (e && e.srcElement && e.srcElement.href)\n{\n// need to keep a reference to the function registered \n// by the listener to be able to remove it.\nvar handlerFunc = arguments.callee;\nvar element = e.srcElement;\nvar href = e.srcElement.href;\n// need an engine \nif (!engine)\nreturn;\n// check if it has an image already\nif (avglsinlineflyover.imageExists(element))\nreturn;\n// add the image, returns the anchor not the image\nvar new_element = engine.add_inline_image(doc, element, null, null);\n// do the check and update in the background\nsetTimeout(function() {avglsinlineflyover.checkAndUpdate(doc, element, new_element, engine, handlerFunc)}, 1);\n}\n},\ncheckAndUpdate: function (doc, element, new_element, engine, handlerFunc) {\nif (!engine)\nreturn;\ntry {\n// remove the listener and get final url\nelement.detachEvent(\"onmouseover\", handlerFunc, false);\nvar finalUrl = searchshield.avgCallFunc(doc, \'GetFinalUrl\', element.href);\n}\ncatch(e) {}\nif ((typeof(finalUrl) != \'undefined\') && finalUrl)\n{\n// if still a tiny url check for final url embedded in querystring\nif (searchshield.FilterUrl(finalUrl, engine.shortened_urls) && \n(finalUrl.indexOf(\"?url=\") != -1))\n{\nfinalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl);\n}\n// update the verdict\nengine.display_inline(doc, new_element, finalUrl, null, true);\n}\nelse\n{\nengine.avg_ls_inline_hide_verdict(new_element);\n}\n}\n};\n/////////////// FLYOVERS ///////////////\n(function(){\nsetTimeout( function() {\ntry {\nif ((self == top) && top.document) {\nsearchshield.init(top.document, 1);\n}\n}\ncatch(e){return;}\n}, 1 );\nreturn;\n})();</i></i></script>', created = 1716068528, expire = 1716154928, headers = '', serialized = 0 WHERE cid = '3:60b4ce288cbf5492400fd2377cd019ac' in /home/tgv/htdocs/includes/cache.inc on line 112.

ชื่อออนไลน์ เรื่อง ระหายใจ

รูปภาพของ nws_walapob

  ระบบหายใจ
     มนุษย์ทุกคนต้องหายใจเพื่อมีชีวิตอยู่ การหายใจเข้า อากาศผ่านไปตามอวัยวะของระบบหายใจตามลำดับ ดังนี้
     1.จมูก (Nose)
     จมูกส่วนนอกเป็นส่วนที่ยื่นออกมาจากตรงกึ่งกลางของใบหน้า รูปร่างของจมูกมีลักษณะเป็นรูปสามเหลี่ยมพีระมิด ฐานของรูปสามเหลี่ยมวางปะ ติดกับหน้าผากระหว่างตาสองข้าง สันจมูกหรือดั้งจมูก มีรูปร่างและขนาดต่างๆกัน ยื่นตั้งแต่ฐานออกมาข้างนอกและลงข้างล่างมาสุดที่ปลายจมูก อีกด้านหนึ่งของรูปสามเหลี่ยมห้อยติดกับริมฝีปากบนรู จมูกเปิดออกสู่ภายนกทางด้านนี้ รูจมูกทำหน้าที่เป็นทางผ่านของอากาศที่หายใจเข้าไปยังช่องจมูกและกรองฝุ่นละอองด้วย
     2. หลอดคอ (Pharynx)
     เมื่ออากาศผ่านรูจมูกแล้วก็ผ่านเข้าสู่หลอดคอ ซึ่งเป็นหลอดตั้งตรงยาวประมาณยาวประมาณ 5 " หลอดคอติดต่อทั้งช่องปากและช่องจมูก จึงแบ่งเป็นหลอดคอส่วนจมูก กับ หลอดคอส่วนปาก โดยมีเพดานอ่อนเป็นตัวแยกสองส่วนนี้ออกจากกัน โครงของหลอดคอประกอบด้วยกระดูกอ่อน 9 ชิ้นด้วยกัน ชิ้นที่ใหญ่ทีสุด คือกระดูกธัยรอยด์ ที่เราเรียกว่า "ลูกกระเดือก" ในผู้ชายเห็นได้ชัดกว่าผู้หญิง
     3. หลอดเสียง (Larynx)
     เป็นหลอดยาวประมาณ 4.5 cm ในผู้ชาย และ 3.5 cm ในผู้หญิง หลอดเสียงเจริญเติยโตขึ้นมาเรื่อยๆ ตามอายุ ในวัยเริ่มเป็นหนุ่มสาว หลอดเสียงเจริญขึ้นอย่างรวดเร็ว โดยเฉพาะในผู้ชาย เนื่องจากสายเสียง (Vocal cord) ซึ่งอยู่ภายในหลอดเสียงนี้ยาวและหนาขึ้นอย่างรวดเร็วเกินไป จึงทำให้เสียงแตกพร่า การเปลี่ยนแปลงนี้เกิดจากฮอร์โมนของเพศชาย
     4. หลอดลม (Trachea)
     เป็นส่วนที่ต่ออกมาจากหลอดเสียง ยาวลงไปในทรวงอก ลักษณะรูปร่างของหลอดลมเป็นหลอดกลมๆ ประกอบด้วยกระดูกอ่อนรูปวงแหวน หรือรูปตัว U ซึ่งมีอยู่ 20 ชิ้น วางอยู่ทางด้านหลังของหลอดลม ช่องว่าง ระหว่างกระดูกอ่อนรูปตัว U ที่วางเรียงต่อกันมีเนื้อเยื่อและกล้ามเนื้อเรียบมายึดติดกัน การที่หลอดลมมีกระดูกอ่อนจึงทำให้เปิดอยู่ตลอดเวลา ไม่มีโอกาสที่จะแฟบเข้าหากันได้โดยแรงดันจากภายนอก จึงรับประกันได้ว่าอากาศเข้าได้ตลอดเวลา หลอดลม ส่วนที่ตรงกับกระดูกสันหลังช่วงอกแตกแขนงออกเป็นหลอดลมแขนงใหญ่ (Bronchi) ข้างซ้ายและขวา เมื่อเข้าสู่ปอดก็แตกแขนงเป็นหลอดลมเล็กในปอดหรือที่เรียกว่า หลอดลมฝอย (Bronchiole) และไปสุดที่ถุงลม (Aveolus) ซึ่งเป็นการที่อากาศอยู่ ใกล้กับเลือดในปอดมากที่สุด จึงเป็นบริเวณแลกเปลี่ยนก๊าซออกซิเจน กับคาร์บอนไดออกไซด์
     5. ปอด (Lung)
     ปอดมีอยู่สองข้าง วางอยู่ในทรวงอก มีรูปร่างคล้ายกรวย มีปลายหรือยอดชี้ขึ้นไปข้างบนและไปสวมพอดีกับช่องเปิดแคบๆของทรวงอก ซึ่งช่องเปิดแคบๆนี้ประกอบขึ้นด้วยซี่โครงบนของกระดูกสันอกและกระดูกสันหลัง ฐานของปอดแต่ละข้างจะใหญ่และวางแนบสนิทกับกระบังลม
     ระหว่างปอด 2 ข้าง จะพบว่ามีหัวใจอยู่ ปอดข้างขวาจะโตกว่าปอดข้างซ้ายเล็กน้อย และมีอยู่ 3 ก้อน ส่วนข้างซ้ายมี 2 ก้อน
     หน้าที่ของปอดคือ การนำก๊าซ CO2 ออกจากเลือด และนำออกซิเจนเข้าสู่เลือด ปอดจึงมีรูปร่างใหญ่ มีลักษณะยืดหยุ่นคล้ายฟองน้ำ
     6. เยื่อหุ้มปอด (Pleura)
     เป็นเยื่อที่บางและละเอียดอ่อน เปียกชื้น และเป็นมันลื่น หุ้มผิวภายนอกของปอด เยื่อหุ้มนี้ ไม่เพียงคลุมปอดเท่านั้น ยังไปบุผิวหนังด้านในของทรวงอกอีก หรือกล่าวได้อีกอย่างหนึ่งว่า เยื่อหุ้มปอดซึ่งมี 2 ชั้น ระหว่าง 2 ชั้นนี้มี ของเหลวอยู่นิดหน่อย เพื่อลดแรงเสียดสี ระหว่างเยื่อหุ้มมีโพรงว่าง เรียกว่าช่องระหว่างเยื่อหุ้มปอด



กระบวนการในการหายใจ
     ในการหายใจนั้นมีโครงกระดูกส่วนอกและ กล้ามเนื้อบริเวณอกเป็นตัวช่วยขณะหายใจเข้า กล้าม เนื้อหลายมัดหดตัวทำให้ทรวงอกขยายออกไปข้างหน้า และยกขึ้นบน ในเวลาเดียวกันกะบังลมจะลดต่ำลง การกระทำทั้งสองอย่างนี้ทำให้โพรงของทรวงอกขยาย ใหญ่มากขึ้น เมื่อกล้ามเนึ้อหยุดทำงานและหย่อนตัวลง ทรวงอกยุบลงและความดันในช่องท้องจะดันกะบังลม กลับขึ้นมาอยู่ในลักษณะเดิม กระบวนการเข่นนี้ทำให้ ความดันในปอดเพิ่มขึ้น เมื่อความดันในปอดเพิ่มขึ้นสูง กว่าความดันของบรรยากาศ อากาศจะถูกดันออกจาก ปอด ฉะนั้นจึงสรุปได้ว่า ปัจจัยประการแรกที่ทำให้ อากาศมีการเคลื่อนไหวเข้าออกจากปอดได้นั้น เกิด จากความดันที่แตกต่างกันนั่นเอง
การแลกเปลี่ยนก๊าซและการใช้ออกซิเจน
     เมื่อเราหายใจเข้า อากาศภายนอกเข้าสู่อวัยวะ ของระบบหายใจไปยังถุงลมในปอด ที่ผนังของถุงลมมีหลอดเลือดแดงฝอยติดอยู่ ดังนั้นอากาศจึงมีโอกาสใกล้ชิดกับเม็ดเลือดแดงมากออกชิเจนก็จะผ่านผนังนี้เข้าสู่เม็ดเลือดแดง และคาร์บอนไดออกไชด์ก็จะออกจากเม็ดเลือดผ่านผนังออกมาสู่ถุงลม ปกติในอากาศมีออกชิเจนร้อยละ 20 แต่อากาศที่เราหายใจมีออกขิเจนร้อยละ 13

Click for the full size image



มหาวิทยาลัยศรีปทุม ผู้ใหญ่ใจดี
 

 ช่วยด้วยครับ
นักเรียนที่สร้างบล็อก กรุณาอย่า
คัดลอกข้อมูลจากเว็บอื่นทั้งหมด
ควรนำมาจากหลายๆ เว็บ แล้ววิเคราะห์ สังเคราะห์ และเขียนขึ้นใหม่
หากคัดลอกทั้งหมด จะถูกดำเนินคดี
ตามกฎหมายจากเจ้าของลิขสิทธิ์
มีโทษทั้งจำคุกและปรับในอัตราสูง

ช่วยกันนะครับ 
ไทยกู๊ดวิวจะได้อยู่นานๆ 
ไม่ถูกปิดเสียก่อน

ขอขอบคุณในความร่วมมือครับ

อ่านรายละเอียด

ด่วน...... ขณะนี้
พระราชบัญญัติลิขสิทธิ์ (ฉบับที่ 2) พ.ศ. 2558 
มีผลบังคับใช้แล้ว 
ขอให้นักเรียนและคุณครูที่ใช้งาน
เว็บ thaigoodview ในการส่งการบ้าน
ระมัดระวังการละเมิดลิขสิทธิ์ด้วย
อ่านรายละเอียดที่นี่ครับ

 

สมาชิกที่ออนไลน์

ขณะนี้มี สมาชิก 0 คน และ ผู้เยี่ยมชม 245 คน กำลังออนไลน์