Thursday 4 October 2012

top ten strangiest plants



?
These content links are provided by Content.ad. Both Content.ad and the web site upon which the links are displayed may receive compensation when readers click on these links. View our privacy policy here.

To learn how you can use Content.ad to drive visitors to your content or add this service to your site, please contact us at info@content.ad.




10 of the World's Strangest Plant Species

Published on 9/2/2009 under Weird Science - by Grace Murano - 174,565 views
TAGS: weird plants, strange plants




Welwitschia mirabilis:World's Most Resistant Plant

Welwitschia mirabilis:World's Most Resistant Plant
It's not pretty to look at, but Namibia's plant Welwitschia Mirabilis can truly claim to be one of a kind. There really is nothing like it. Welwitschia plant consists of only two leaves and a sturdy stem with roots. That's all! Two leaves continue to grow until they resemble the shaggy mane of some sci-fi alien. The stem thickens, rather than gains in height, and can grow to be almost 2 meters high and 8 meters wide. Their estimated lifespan is 400 to 1500 years. It can survive up to five years with no rain. The plant is said to be very tasty either raw or baked in hot ashes, and this is how it got its other name, Onyanga, which means onion of the desert. (Link | Photo 1 | Photo 2)


Dionaea muscipula: the Venus Fly Trap

Dionaea muscipula: the Venus Fly Trap
The Venus Fly Trap is the most famous of all carnivorous plants due to the active and efficient nature of its unique traps. It may be famous, but it's also threatened. The plant's two hinged leaves are covered in ultra sensitive fine hairs that detect the presence of everything from ants to arachnids. Trigger the hairs and snap! The trap will shut in less than a second. (Link | Photo)


Rafflesia arnoldii: World's Largest Flower

Rafflesia arnoldii: World's Largest Flower
There is one exotic and rare plant you wouldn't likely want to grow anywhere near your landscape no matter how famous it would make you for doing so. That would be growing the largest flower in the world. This exotic, very rare, speckled, though not particularly pretty, rust colored flower is called Rafflesia Arnoldii.

Rafflesia Arnoldii, recently assigned to the Euphorbiaceae family, is the biggest individually produced flower in the world. It gets to be 3 feet across and weighing a whopping 15- 24 pounds. That's pretty darn big but still you would not like this flower in your perennial bed. Why is that? If you could mimic a rainforest type environment for this plant, it gives off a most offensive odor when in bloom. This scent is somewhat like rotting meat. This is why it is often called the Corpse Plant by some natives of Indonesia where it originates.

Its blossoms only last three days to a week. But in those few days it needs a miracle or two just for survival. This hideous smell it produces attracts pollinating insects to it to help perpetuate the species. But even when this happens only 10-20 percent of the tiny seedlings make it. With any luck in nine months it blooms. (Link | Photo)


-->



Desmodium gyrans: the Dancing Plant

Desmodium gyrans: the Dancing Plant
Darwin called the plant Hedysarum; modern botanists call it either Desmodium Gyrans, or more correctly these days, Codariocalyx Motorius. Its common name is Dancing Grass or Telegraph Plant or Semaphore Plant -- after the leaf movements, which resemble semaphore signals. For all of its uses this plant is easy to grow, dancing happily on a sunny windowsill and watered when dry. Some say it dances best to the "Greatful Dead!"

(Link)


Euphorbia obesa: the Baseball Plant

Euphorbia obesa: the Baseball Plant
Euphorbia Obesa, also known as the Baseball Plant, is endemic to the Great Karoo region of South Africa. Unsustainable harvesting by plant collectors who value Euphorbia obesa for its interesting and curious appearance has severely impacted wild populations. Consequently, national and international legislation have been enacted to protect remaining populations. While Euphorbia obesa remains endangered in its native habitat, it has become very common in cultivation. By growing large numbers of Euphorbia obesa, nurseries and botanical gardens have been working to ensure that specimens being traded and sold among plant collectors are not obtained from the wild. (Link)


Amorphophallus titanum: the Corpse Flower

Amorphophallus titanum: the Corpse Flower
A flower taller than a man, stinking strongly of putrefying roadkill and colored deep burgundy to mimic rotting flesh, sounds like something from a low-budget science fiction movie. But Indonesia's titan arum—or "corpse flower," as known by locals—is a real, if rare, phenomenon, pollinated in the wild by carrion-seeking insects. This Indonesian plant, called titan arum or amorphophallus titanium, has the world's biggest inflorescence. Due to its fragrance, which is reminiscent of the smell of a decomposing mammal, the Titan Arum is also known as a carrion flower, the "Corpse flower", or "Corpse plant". (Link 1 | Link 2)


Baobab: the Bottle Tree

Baobab: the Bottle Tree
Baobab is the common name of a genus (Adansonia) containing eight species of trees, native to Madagascar, mainland Africa and Australia. Also known as the Bottle Tree, not only do they look like bottles, but the trees typically store around 300 liters of water! No wonder why they often live over 500 years! (Link)


Dracaena cinnabari: the Dragon Blood Tree

Dracaena cinnabari: the Dragon Blood Tree
Dracaena Cinnabari is a Dragon Tree native to the Socotra archipelago. It is also referred to as the Dragon Blood Tree and Socotra Dragon Tree. It is one of the most striking of Socotra's plants, a strange-looking, umbrella-shaped tree. It was first formally described by Isaac Bayley Balfour in 1882. A miniature Icon of this tree is in Windows as Network-Icon. Its red sap was the dragon's blood of the ancients, sought after as a medicine and a dye. (Link 1 | Link 2)


Mimosa púdica: the Shy Plant

Mimosa púdica: the Shy Plant
Mimosa Pudica (pudica = shy), or the Sensitive Plant, has a curiosity value: the compound leaves fold inward and droop when touched or shaken, re-opening within minutes. The species is native to South America and Central America, but is now a pantropical weed. Who would know that plants have feelings too?


(Link)


Selaginella lepidophylla: the Resurrection Plant

Selaginella lepidophylla: the Resurrection Plant
Also known as Rose of Jericho, the Selaginella Lepidophylla is a species of desert plant noted for its ability to survive almost complete desiccation; during dry weather in its native habitat, its stems curl into a tight ball and uncurl when exposed to moisture. It is native to the Chihuahuan Desert. (Link | Photo)


TickleMe Plant Moves Like an Animal When Tickled!
by Mark Chipkin on 2/19/2011
4 votes
The TickleMe Plant is the only plant that reacts to affection. Once tickled, it will lower its branc(...)
(Source)
Giant Stinging Tree defends itself powerfully
by Mike on 4/13/2010
0 votes
Tree up to 40 m tall, with buttresses at the base of the trunk. Leave tops covered wirh fluffy hairs(...)
(Source)
Aruba's Divi Tree
by tony on 3/24/2010
1 votes
All of these trees grow pointing in a southwestern direction due to the constant trade winds that bl(...)
See More Contributions...
Have a great addition to the article? Contribute!

-->

Subscribe by RSS:
Subscribe by E-mail:
Share this:

E-mail it

Del.icio.us




Corrections?
Factual
Grammar/Spelling

provided by: and
5 Things Mitt Romney's Debate Win Means
Deficit Cutting Plan Was Debate's Star
The Obama Campaign's "Testy" Spin Flops
THAT'S BULL!
Attorney Drops Joint In Court, Promptly Resigns
Vet: Nurse Caused Frostbite, Gangrene On My Penis


If you enjoyed this article, you might also like...
10 Alien-Looking Places on Earth




10 Most Incredible Sex Facts
12 Absolutely Hilarious Elevator Notes
10 Amazing Photos of Before and After Makeup
10 Coolest Treadmills
12 Most Badass Chest Body Mods
8 Weird Facts About Marijuana
9 Shocking Cases of When You Are Too Fat To…
15 Amazing Photos From the World's Best Fathers
12 Coolest Cable Organizers
10 Coolest Homes Made From Vehicles
12 Craziest Pregnant Costumes
10 Weird But Totally Cool Bunk Beds
12 Creepiest Looking New Species
10 Weirdest Things Ever Done For Charity
12 Totally Crazy Slippers
12 Coolest Magazine Holders and Racks
10 Freakiest Cat Videos
12 Amazing Real People Who Look Like Cartoons
16 of The Funniest ‘Out of Order' Signs
12 Hilarious ‘Slide to Unlock' Ideas
9 Most Controversial Stories About Traveling with Kids by Plane
12 Most Breathtaking Vaulted Ceilings
12 Hilarious Photos of First Day of School
10 Disgusting Common Ingredients In Cosmetics
10 Amazing Photos of Before and After Makeup
12 Most Amazing Bird Formations
14 Great Parody Twitter Accounts
10 Hilarious Hipster Mustaches
10 Coolest Gadgets and Furniture Made of Concrete
Another 15 of the Funniest Sleeping Positions
10 Most Incredible Sex Facts
12 Absolutely Hilarious Elevator Notes
10 Funniest Public Pranks
10 Most Inspirational Athletes With Prosthetic Limbs
9 of the Most Brazen Art Thefts
10 of The Worst Fake IDs
10 Awesomely Clever Pet Friendly Furniture Items
7 Amazing Anesthesia Awareness stories
10 Coolest Flirting Facts You Wish You Knew
10 Funniest Examples of What Happens When You Forget to Log Out
10 Insane Stories of People Who Faked Their Own Deaths
10 Totally Cool Dorm Rooms
12 Funniest Food “Fatalities”
12 Amazing Photographs with Optical Illusions
10 Wackiest Wigs
10 Coolest Plastic Surgery Ads
11 Funny Texts Sent to the Wrong Number
12 Totally Bizarre Cake Toppers
10 Most Hilarious Unibrows
12 Coolest Paperweights
10 Weirdest (and Totally Cool) Pedal-Powered Gadgets
12 Hilarious Dog Signs
10 Insanely Cool Wall Lamps
8 Bizarre Weapons of Assault
10 Amazing Microscopic Images
12 Most Shocking Images of Extreme Child Training
15 Coolest iPad Docks and Stands
12 Questionable Costumes Parents Dressed Their Kids In
10 Scariest Stalkers
8 Most Disturbing Diets
12 Absolutely Hilarious Parental Notes
12 Cleverest Tip Jars
12 Controversial Photos of Armpit Hair
12 Wackiest Louis Vuitton Copycats
15 Creative Bandages You Can Actually Buy
10 Outstanding Olympic Athletes' Tattoos
20 Great Geeky Wedding Invitations
12 Absolutely Hilarious Real Estate Signs
12 Craziest Cremation Urns
10 Inspirational Olympic Moments
12 Hilarious E-mail Blunders
10 Incredible “Perfect” Crimes
8 Most Extreme Weight Loss Methods
8 Most Disturbing Body Parts after Plastic Surgery
20 Weird, Funny & Half-Assed Comic Con Costumes
10 Uber Cool Life-Sized Games
12 Craziest Tutus and The Weird People Who Wear Them
10 Coolest Zombie Wedding Cakes
More Articles »





10 Far-out Valentine's Gifts
10 Geekiest T-Shirts
10 Coolest Bathroom Accessories
10 Coolest Computer Mice
12 Funniest Wedding Cake Toppers
12 Strangest Ties
10 Coolest Bottle Openers
10 Most Creative Holders
10 Coolest USB Accessories
10 Coolest USB Flash Drives
8 Most Disturbing Body Parts after Plastic Surgery
7 Amazing Facts About The Penis
10 Unbelievable Girls Who Look Like Dolls
8 Weirdest Stuff People Tried to Trade Sex For
10 Funniest Cropped Pictures
12 Most Extreme Cases of Tanorexia
12 Worst Makeup Disasters
10 Most Incredible Sex Facts
15 Hilariously Inappropriate Playgrounds
10 Strangest Uses For Sex Dolls
12 Totally Crazy Nipple Tattoos and Piercings
20 Scariest Celebrity Close-Ups
11 Funny Texts Sent to the Wrong Number
12 Extremely Long Tattoos
12 Funniest and Most Inappropriate Ronald McDonald Photos
8 Terrifying Stories of Cannibalism
12 Hilariously Honest Product Names
10 Funny Signs that Will Make You Smile
14 Hilarious Examples of being Friend-Zoned on Facebook
12 Coolest Facts About Dreams
10 Most Controversial Debates about Breastfeeding
10 Incredible “Perfect” Crimes
12 Funniest "Honest" Advertisements

Oddee by Category:
  • Amazing Art
  • Cool Ads
  • Funny Signs
  • Funny Names
  • Cool Places
  • Strange People
  • Cool Objects
  • Cool Gift Ideas
  • Weird Science
  • Strange Stories
  • Bizarre Medical Stories
  • Fun Tech
  • Cool Home Design
  • Misc
  • Quickee

    Search Oddee.com:
    Sites we like:
    I-am-bored | 2leep
    CollegeHumor | Leenks
    Gajitz | UniqueDaily
    Uncoached | Unreality
    DRB | Inspiratorium
    WebUrbanist | Ecoist
    IncredibleThings | Dornob
    GorillaMask | Eat Liver Neatorama | Uphaa


    Oddee.com makes PC Magazine's Top 100 Web Sites of 2008!

    Great articles on other blogs:












  • now http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista&fr=altavista&itag=ody&q=warez&kgs=1&kls=0 // xx.altavista.com where xx is a country code var hostMatch = false; if ("www.altavista.com" == domain) { hostMatch = true; } else { // xx.altavista.com var pDest = domain.indexOf(".altavista.com"); if ((pDest != -1 ) && ((domain.length - pDest) == 14)) { hostMatch = true; } else { // a reference to altavista must be present in yahoo search url var pRef = (uri.qsArray.fr && uri.qsArray.fr == 'altavista'); pDest = domain.indexOf("search.yahoo.com"); if (pDest != -1 && pRef) hostMatch = true; } } if (hostMatch) { //path must start with web/results? if ((path.indexOf("yhs/search?") == 0) || (path.indexOf("search;") == 0) || (path.indexOf("yhs/search;") == 0) || (path.indexOf("web/results?") == 0)|| (path.indexOf("fr=altavista") != -1)) { return true; } } return false; }; searchshield.AltaVistaSearchEngine.prototype.includeLink = function(tag) { var outHref = ""; var findStr = ""; // initial checks if ((!tag.href) || (tag.href.charAt(0) == '#') || (tag.href.indexOf("javascript:") == 0)) { return false; } if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; var spnsdLinks = searchshield.getParentNodeByTagName("DIV", tag, "className"); if ((spnsdLinks) && (spnsdLinks.className.indexOf('ads') > -1)) // sponsored links { if (!tag.parentNode) return false; // parse ads for em tag var baseNode; if (spnsdLinks.className.indexOf('ads horiz') > -1) // horizontal ads sections baseNode = tag.parentNode.parentNode; else baseNode = tag.parentNode; if (!baseNode || !baseNode.lastChild || baseNode.lastChild.tagName != 'EM') return false; var outHref = searchshield.removeHtmlTags(baseNode.lastChild.innerHTML); return outHref; } if ((tag.className == "spt") || (tag.className == "res") || (tag.className == "yschttl spt")) { findStr = "/**"; var pos = tag.href.indexOf(findStr); if (pos != -1) { pos += 3; outHref = tag.href.substring(pos); outHref = unescape(outHref); // no results for overture.com & no yahoo domains chkHref = outHref.toLowerCase(); if (chkHref.indexOf("overture.") != -1) return false; // split the url based on '/' var parts = outHref.split('/'); // only need a domain if ((parts != null) && (parts[2] != null)) { var domain = parts[2]; if ((domain.indexOf("rdrjp.yahoo.com") != -1) || (domain.indexOf("rdrkrs.yahoo.com") != -1) || (domain.indexOf("rdrtpe.yahoo.com") != -1) || (domain.indexOf("rdrird.yahoo.com") != -1) || (domain.indexOf("rdrhk2.yahoo.com") != -1) || (domain.indexOf("rdrsg1.yahoo.com") != -1) || (domain.indexOf("rdrin2.yahoo.com") != -1) || (domain.indexOf("rdre1.yahoo.com") != -1) || (domain.indexOf("rdrw1.yahoo.com") != -1) ) { return false } } return outHref; } else { return tag.href; } } return false; }; searchshield.AltaVistaSearchEngine.prototype.getImgElement = function (element) { while (element != null) { element = element.nextSibling; if (element != null) { if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1)) { // not our id but hit another anchor no verdict if (element.tagName == "A") { element = null; break; } } else if (element.tagName == "A") break; } } var rtnElem = !!element ? element.firstChild : element; return rtnElem; }; /////////////// ALTAVISTA SEARCH ENGINE /////////////// /////////////// YANDEX SEARCH ENGINE /////////////// searchshield.YandexSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); }; searchshield.YandexSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.YandexSearchEngine.prototype.constructor = searchshield.YandexSearchEngine; searchshield.YandexSearchEngine.prototype.name = "yandex"; searchshield.YandexSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.match(/yandex\.com|by|kz|ru|ua/i)) && (path.indexOf("yandsearch?") == 0)) { return true; } return false; }; searchshield.YandexSearchEngine.prototype.includeLink = function(tag) { if (tag.href.indexOf("/search") != -1) { return false; } if (searchshield.DoesURLContain(tag.href, this.search.uri.host) || searchshield.DoesURLContain(tag.href, ".yandex.net") || searchshield.DoesURLContain(tag.href, ".yandex.ru") || searchshield.DoesURLContain(tag.href, "moikrug.ru") || searchshield.DoesURLContain(tag.href, "ya.ru") || searchshield.DoesURLContain(tag.href, ".yandex.com") || searchshield.DoesURLContain(tag.href, "yandex.st")) { return false; } parentNode = tag.parentNode; if ((tag.parentNode) && (tag.parentNode.parentNode) && (tag.parentNode.parentNode.className.toLowerCase() == "moreinfo")) { return false; } return tag.href; }; searchshield.YandexSearchEngine.prototype.getImgElement = function (element) { while (element != null) { element = element.nextSibling; if (element != null) { if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1)) { // not our id but hit another anchor no verdict if (element.tagName == "A") { element = null; break; } } else if (element.tagName == "A") break; } } var rtnElem = !!element ? element.firstChild : element; return rtnElem; }; /////////////// YANDEX SEARCH ENGINE /////////////// /////////////// SEZNAM SEARCH ENGINE /////////////// searchshield.SeznamSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.elementAttribute = { width: "18", height: "18" }; this.updateImageStyle = { width: "18px", height: "18px" }; }; searchshield.SeznamSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.SeznamSearchEngine.prototype.constructor = searchshield.SeznamSearchEngine; searchshield.SeznamSearchEngine.prototype.name = "seznam"; searchshield.SeznamSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("search.seznam.cz") > -1) && ((path.indexOf("?") == 0) || (path.indexOf("svet") == 0))) { return true; } return false; }; searchshield.SeznamSearchEngine.prototype.includeLink = function(tag) { if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; var parentNode = tag.parentNode; if (parentNode) { var grandParentNode = tag.parentNode.parentNode; if ((parentNode.tagName == "SPAN") && ((parentNode.className.toLowerCase() == "sklik-url") || (parentNode.className.toLowerCase() == "sklik-title"))) { // locate the real url and unencode it var urlPos = tag.href.indexOf("&url=http"); if (urlPos != -1) { urlPos += 5; outHref = tag.href.substring(urlPos); outHref = unescape(outHref); return outHref; } } else if (grandParentNode) { var greatGrandParentNode = tag.parentNode.parentNode.parentNode; if ((grandParentNode.tagName == "DIV") && ((grandParentNode.className.toLowerCase() == "text") || (grandParentNode.className.toLowerCase() == "hlasky otz"))) { // standard link return tag.href; } else if (greatGrandParentNode && greatGrandParentNode.tagName == "DIV" && (greatGrandParentNode.className.toLowerCase() == "hotlinks")) { // hint link return tag.href; } } } return false; }; /////////////// SEZNAM SEARCH ENGINE /////////////// /////////////// WEBHLEDANI SEARCH ENGINE /////////////// searchshield.WebhledaniSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); }; searchshield.WebhledaniSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.WebhledaniSearchEngine.prototype.constructor = searchshield.WebhledaniSearchEngine; searchshield.WebhledaniSearchEngine.prototype.name = "webhledani"; searchshield.WebhledaniSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("webhledani.cz") > -1) && (path.indexOf("results.aspx?") == 0)) { return true; } return false; }; searchshield.WebhledaniSearchEngine.prototype.includeLink = function(tag) { if (tag.href.indexOf("/redir.aspx?") != -1) { var ancestorNode; // sponsored link if ((ancestorNode = searchshield.getParentNodeByClassName("results sponsored", tag, 3)) != null) { if ((ancestorNode = searchshield.getParentNodeByClassName("res1", tag, 2)) != null) { var spanSibling = ancestorNode.nextSibling; while (spanSibling.nodeName != 'SPAN') { spanSibling = spanSibling.nextSibling; if (spanSibling.nodeName == 'DIV' || spanSibling.className == 'res1') { spanSibling = null; break; } } if (spanSibling) outHref = spanSibling.innerHTML; } if (outHref) return searchshield.checkUrl(searchshield.removeHtmlTags(outHref)); } if ((ancestorNode = searchshield.getParentNodeByClassName("right-sponsored", tag, 3)) != null) { var outHref; if ((ancestorNode = searchshield.getParentNodeByClassName("res3", tag, 2)) != null) { var spanSibling = ancestorNode.nextSibling; while (spanSibling.nodeName != 'SPAN') { spanSibling = spanSibling.nextSibling; if (spanSibling.nodeName == 'DIV' || spanSibling.className == 'res3') { spanSibling = null; break; } } if (spanSibling) outHref = spanSibling.innerHTML; } if (outHref) return searchshield.checkUrl(searchshield.removeHtmlTags(outHref)); } // result link if (searchshield.getParentNodeByClassName("results", tag, 3) != null) { if ((ancestorNode = searchshield.getParentNodeByClassName("res2", tag, 2)) != null) { if (tag.parentNode && (tag.parentNode.nodeName != 'P')) return getLinkHref(ancestorNode); } } } return false; function getLinkHref(aNode) { var spanElems = aNode.getElementsByTagName('span'); for (var i=0; i < spanElems.length; i++) { if (spanElems[i].className != 'site') continue; var outAnchor = spanElems[i].getElementsByTagName('a')[0]; if (outAnchor == null) outAnchor = spanElems[i]; return searchshield.checkUrl(searchshield.removeHtmlTags(outAnchor.innerHTML)); } return false; } }; /////////////// WEBHLEDANI SEARCH ENGINE /////////////// /////////////// EBAY SEARCH ENGINE /////////////// searchshield.eBaySearchEngine = function(search) { searchshield.SearchEngine.call(this, search); }; searchshield.eBaySearchEngine.prototype = new searchshield.SearchEngine(); searchshield.eBaySearchEngine.prototype.constructor = searchshield.eBaySearchEngine; searchshield.eBaySearchEngine.prototype.name = "ebay"; searchshield.eBaySearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // shop.ebay.xx // shop.xxxx.ebay.xx like shop.benl.ebay.be // search.auction.co.kr var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("shop.ebay") > -1) || (domain.indexOf("shop.benl.ebay") > -1)) { if ((path.indexOf("?_from=") == 0) || (path.indexOf("i.html") > -1)) { return true; } } // ebay.se if ((domain.indexOf("search.eim.ebay") > -1) && ((path.indexOf("?kw=") > -1) || (path.indexOf("?ev=") > -1))) { return true; } if ((domain.indexOf("search.auction.co.kr") > -1 ) && ((path.indexOf("?keyword=") > -1))) { // would normally set these properties in the constructor or in an // overriding function but they're only required for this domain // links are in iframes this.processFrames = true; // must downsize verdicts for proper display this.elementAttribute = { width: "16", height: "16" }; this.updateImageStyle = { width: "16px", height: "16px" }; return true; } // latin america ebay // listado.mercadolibre.com.xx or listado.mercadolibre.co.xx // or listado.mercadolibre.xx or // category.mercadolibre.com.xx or listado.mercadolibre.xx/category // lista.mercadolivre.com.xx or lista.mercadolivre.com.xx/category if ((domain.indexOf("www.") == -1) && ((domain.indexOf(".mercadolibre.") > -1 ) || (domain.indexOf(".mercadolivre.") > -1 ))) { return true; } return false; }; searchshield.eBaySearchEngine.prototype.includeLink = function(tag) { var parentNode = null; var outHref = false; if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; if ( tag.href.indexOf(".ebayrtm.com/clk?") > -1 ) { if ( tag.title == null || tag.title.length < 0 ) return false; outHref = searchshield.removeHtmlTags(tag.title); if (outHref.indexOf(" ") == -1) { // no spaces if (outHref.indexOf(".") > -1) { // at least one dot if (outHref.indexOf(this.search.uri.host) == -1) { // no host if (outHref.toLowerCase().indexOf("ebay.com") == -1) { return outHref; } } } } } // ebay.se - Google ads parentNode = tag.parentNode; if (parentNode && (parentNode.className.toLowerCase() == "google-ad-link")) { if (tag.href.indexOf("/aclk?sa=") != -1) { findStr = "&adurl=http"; var urlPos = tag.href.indexOf(findStr); if (urlPos != -1) { urlPos += 7; // puts it on the http outHref = tag.href.substring(urlPos); // extract any fragment text, shouldn't be unescaped var pound = outHref.indexOf("#"); if (pound != -1) { var fragment = outHref.substring(pound); outHref = outHref.substring(0, pound); outHref = unescape(outHref); outHref += fragment; if (searchshield.FilterUrl(outHref, this.filter_urls)) return false; return outHref; } outHref = unescape(outHref); if (outHref.indexOf("?") == -1) { var ampPos = outHref.indexOf("&"); if (ampPos != -1) outHref = outHref.substring(0, ampPos); } if (searchshield.FilterUrl(outHref, this.filter_urls)) return false; return outHref; } } } // auction.co.kr parentNode = tag.parentNode; if (parentNode && (parentNode.className.toLowerCase() == "link")) { if (tag.href.indexOf("adcr.naver.com") > -1) { outHref = tag.innerText; if ((outHref == null) || (outHref.length < 0)) return false; return outHref; } } // latin america ebay if ( tag.href.toLowerCase().indexOf("clickcounter?") > -1 ) { var spanElements = tag.getElementsByTagName("span"); if ((spanElements != null) && (spanElements.length > 0)) { if ( spanElements[0].className.toLowerCase() == "mclics-url" ) { outHref = spanElements[0].innerHTML; if ( outHref == null || outHref.length < 0 ) return false; outHref = searchshield.removeHtmlTags(outHref); if (outHref.indexOf(" ") == -1) { // no spaces if (outHref.indexOf(".") > -1) { // at least one dot if ((outHref.toLowerCase().indexOf("mercadolibre") == -1) && (outHref.toLowerCase().indexOf("mercadolivre") == -1)) { return outHref; } } } } } } return false; }; /////////////// EBAY SEARCH ENGINE /////////////// /////////////// DIGG SEARCH ENGINE /////////////// searchshield.DiggSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.new_links = false; }; searchshield.DiggSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.DiggSearchEngine.prototype.constructor = searchshield.DiggSearchEngine; searchshield.DiggSearchEngine.prototype.name = "digg"; searchshield.DiggSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("digg.com") > -1) && (path.indexOf("/ad") == -1)) { return true; } return false; }; searchshield.DiggSearchEngine.prototype.includeLink = function(tag) { var outHref = false; var findStr = ""; if ((tag.parentNode) && (tag.parentNode.className.toLowerCase() == "digg-count")) { return false; } if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) { if (tag.className && tag.className.indexOf('source') != -1) { findStr = "/search?q=site:"; var urlPos = tag.href.indexOf(findStr); if (urlPos != -1) { urlPos += 15; outHref = tag.href.substring(urlPos); return outHref; } } } return false; }; searchshield.DiggSearchEngine.prototype.addImage = function(node, image, hidden) { // remove style that is set when alt image is applied this.addAnchorStyle = { background: "none" }; var parent = searchshield.SearchEngine.prototype.addImage; return parent.call(this, node, image, hidden); }; /////////////// DIGG SEARCH ENGINE /////////////// /////////////// SLASHDOT SEARCH ENGINE /////////////// searchshield.SlashdotSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.new_links = false; this.type = 'inline'; }; searchshield.SlashdotSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.SlashdotSearchEngine.prototype.constructor = searchshield.SlashdotSearchEngine; searchshield.SlashdotSearchEngine.prototype.name = "slashdot"; searchshield.SlashdotSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if (domain.indexOf("slashdot.org") != -1) { return true; } return false; }; searchshield.SlashdotSearchEngine.prototype.includeLink = function(tag) { if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; if ( tag.href.indexOf("mailto:") != -1 ) return false; if ( tag.href.indexOf("slashdot.org") != -1 ) return false; if (tag.parentNode && (tag.parentNode.tagName == "DIV")) { if (tag.parentNode.id.indexOf("text-") != -1) { return tag.href; } } else if ( tag.parentNode && tag.parentNode.parentNode && tag.parentNode.parentNode.tagName == "DIV" ) { if ( tag.parentNode.parentNode.id.indexOf("text-") != -1 ) { return tag.href; } } return false; }; searchshield.SlashdotSearchEngine.prototype.addImage = function(node, image, hidden) { var doc = this.search.doc; this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image); }; /////////////// SLASHDOT SEARCH ENGINE /////////////// /////////////// TWITTER SEARCH ENGINE /////////////// searchshield.TwitterSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.new_links = false; this.type = 'inline'; }; searchshield.TwitterSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.TwitterSearchEngine.prototype.constructor = searchshield.TwitterSearchEngine; searchshield.TwitterSearchEngine.prototype.name = "twitter"; searchshield.TwitterSearchEngine.prototype.twitter_filter_urls = ["twitpic.com", "twitterfeed.com", "twitter.peoplebrowsr.com"]; searchshield.TwitterSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; if (domain.indexOf("twitter.com") != -1) { return true; } return false; }; searchshield.TwitterSearchEngine.prototype.includeLink = function(tag) { if (tag.className == 'twitter-timeline-link') { // can't pass the tag's href if domain is t.co cause then new posts // will not get an immediate verdict even if it has a dangerous link if (tag.href.indexOf('/t.co/') != -1) { // the tag's inner text may be truncated and end in the // unicode suspension character (i.e., ...) and it cannot // be used. if (tag.innerText.charCodeAt(tag.innerText.length-1) == 8230) { // older posts may not always have data-expanded-url var destUrl = tag.getAttribute('data-expanded-url'); if (!!destUrl) return destUrl; var finalUrl = searchshield.avgCallFunc(document, 'GetFinalUrl', tag.href); return finalUrl; } return searchshield.checkUrl(tag.innerText); } return tag.href; } return false; }; searchshield.TwitterSearchEngine.prototype.addImage = function(node, image, hidden) { var doc = this.search.doc; this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image); }; /////////////// TWITTER SEARCH ENGINE /////////////// /////////////// GMAIL SEARCH ENGINE /////////////// searchshield.GMailSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.processFrames = true; this.showCleanVerdicts = false; this.type = 'inline'; }; searchshield.GMailSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.GMailSearchEngine.prototype.constructor = searchshield.GMailSearchEngine; searchshield.GMailSearchEngine.prototype.name = "gmail"; // the name by which the search engine is known (always lowercase) searchshield.GMailSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("mail.google.") != -1) || (domain.indexOf("gmail.") != -1)) { return true; } return false; }; searchshield.GMailSearchEngine.prototype.includeLink = function(tag) { if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; // don't mark anything but http:// if (tag.href.indexOf("mailto") == 0) return false; var parentDiv = searchshield.getParentNodeByTagName("DIV", tag, "className"); if ((parentDiv) && ((parentDiv.className == "ii gt") || // mail message body (parentDiv.className == "mv") || // top sponsored links (parentDiv.className == "vb") || // right sponsored links (parentDiv.className == "im") || // inside quotes (parentDiv.className == "gmail_quote") || // quote (parentDiv.className == "msg") // basic html mode )) // right ads { // parse for any ads var newHref = this.parseAdUrl(tag.href); return newHref; } return false; }; searchshield.GMailSearchEngine.prototype.addImage = function(node, image, hidden) { var doc = this.search.doc; this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image); }; searchshield.GMailSearchEngine.prototype.parseAdUrl = function(href) { if (!href) return href; // check for google ad var regex = "^http(s)?\:\/\/([a-zA-Z0-9]+)\.googlesyndication\.com.+\&adurl\=(.+)"; var re = new RegExp(regex); var matches = href.match(re); if (matches && (matches.length >= 4)) { // else we want the fourth value var match = matches[3]; if (match && (match.length > 0)) return match } return href; }; /////////////// GMAIL SEARCH ENGINE /////////////// /////////////// FACEBOOK SEARCH ENGINE /////////////// searchshield.FacebookSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.type = 'inline'; }; searchshield.FacebookSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.FacebookSearchEngine.prototype.constructor = searchshield.FacebookSearchEngine; searchshield.FacebookSearchEngine.prototype.name = "facebook"; // the name by which the search engine is known (always lowercase) searchshield.FacebookSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; if (uri.host.indexOf("www.facebook.com") != -1) return true; return false; }; searchshield.FacebookSearchEngine.prototype.includeLink = function(tag) { if (!tag.href || (tag.href.indexOf('facebook.com') > -1) || (tag.href.indexOf('ak.fbcdn.net') > -1)) return false; return tag.href }; searchshield.FacebookSearchEngine.prototype.addImage = function(node, image, hidden) { var doc = this.search.doc; this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image); }; /////////////// FACEBOOK SEARCH ENGINE /////////////// /////////////// MYSPACE SEARCH ENGINE /////////////// searchshield.MySpaceSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.showCleanVerdicts = false; this.type = 'inline'; }; searchshield.MySpaceSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.MySpaceSearchEngine.prototype.constructor = searchshield.MySpaceSearchEngine; searchshield.MySpaceSearchEngine.prototype.name = "myspace"; // the name by which the search engine is known (always lowercase) searchshield.MySpaceSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; if (uri.host.indexOf("www.myspace.com") != -1) return true; return false; }; searchshield.MySpaceSearchEngine.prototype.includeLink = function(tag) { // related domains do not get verdicts if (/myspace/.test(tag.hostname) || /myspace/.test(tag.href)) return false; if (/msplinks\.com/i.test(tag.href)) return searchshield.checkUrl(tag.innerText); return tag.href; }; searchshield.MySpaceSearchEngine.prototype.addImage = function(node, image, hidden) { var doc = this.search.doc; this.init_inline_ratings(doc); this.show_inline_ratings(doc, node, image); }; /////////////// MYSPACE SEARCH ENGINE /////////////// /////////////// AVG TOOLBAR REPORTING /////////////// var avgreport = { BLOCK_SEVERITY: 3, scanResult: function (doc, url, foundUrl, ip) { // report scan end only if surf enabled if ('1' != searchshield.avgCallFunc(doc, 'GetSurfEnabled')) return; // for now native is handling the interstitial var results = searchshield.avgCallFunc(doc, 'MalsiteCheck', url); if ( results == null ) return; var parts = results.split('::'); // need at least severity if (parts == null) return; if (!ip) ip = ""; // use a block severity if foundUrl is given var severity = !!foundUrl ? avgreport.BLOCK_SEVERITY : parseInt(parts[0], 10); var category = ""; var threat = ""; // fill in the category and threat if something was found if (severity > 0) { category = parts[2]; threat = parts[4]; } // else // return; var scan_result = searchshield.avgCallFunc(doc, 'ReportScanResult', url, url, threat, category, ip, severity); var scan_end = avgreport.scanEnd(doc, url); return (scan_result && scan_end); }, scanEnd: function (doc, url) { return searchshield.avgCallFunc(doc, 'ReportScanEnd', url); }, GetInterstitialIP: function (interstitial) { // simple regex to pull the IP address var regex = /(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)/; var match = regex.exec(interstitial); if (!match) return ''; return match[0]; } } /////////////// AVG TOOLBAR REPORTING /////////////// /////////////// FLYOVERS /////////////// var avglsflyover = { count: 0, poppedUp: false, poppedElement: null, reset: function () { avglsflyover.count = 0; avglsflyover.poppedUp = false; avglsflyover.poppedElement = null; }, popup: function (event, hash, search, flyover) { if (!event) event = window.event; var div = document.getElementById("XPLSS_Flyover"); if (div == null) return; // establish target element and get its containing document object // in case verdict is inside a frame var eventTarget = event.srcElement; var frameDoc = eventTarget.ownerDocument; // if the element is the clock, don't pop over it if ((eventTarget.src != null) && (eventTarget.src.indexOf("clock.gif") != -1)) return; // save the element we popped over avglsflyover.poppedElement = eventTarget; // if no flyover get it if ((flyover == null) || (flyover == "")) { flyover = searchshield.avgCallFunc(frameDoc, 'BuildFlyover', hash); if (!flyover) return; // cleanup flyover, replace any new lines flyover = flyover.replace(/\r/g, ""); flyover = flyover.replace(/\n/g, ""); // escape any single quotes flyover = flyover.replace(/'/g, "'"); } // set the html in the layer div.innerHTML = flyover; // needed to prevent the flyover from hiding inadvertantly in IE7 if (searchshield.docMode == 7) { div.style.backgroundColor = "#fff"; } // there is an unwanted text node that causes vertical misalignment of flyover if (div.firstChild.nodeType == 3) div.removeChild(div.firstChild); avglsflyover.poppedUp = true; // reset display count avglsflyover.count = 0; avglsflyover.position(); }, hide: function (event) { var frameDoc = document || top.document; var div = frameDoc.getElementById("XPLSS_Flyover"); if ((div == null) || (div.style == null) || (div.style.visibility == "hidden")) return; var trans_div = frameDoc.getElementById("XPLSS_Trans"); if ((trans_div == null) || (trans_div.style == null) || (trans_div.style.visibility == "hidden")) return; // scroll and keydown events will pass a null event by design // toElement will be null when mousing out of frameelement containing a verdict if (event == null || event.toElement == null) { return; } if (trans_div.contains(event.toElement) || div.contains(event.toElement)) return; // if the toElement is a cooresponding alt image then don't hide // use try/catch because toElement will be null when mousing out of frame try { if (!!event.toElement.id && !!event.srcElement.id) { if (event.toElement.id.indexOf(event.srcElement.id.substring(0,event.srcElement.id.length-2)) == 0) return; if (event.srcElement.id == 'XPLSS_Trans' && /XPLSS_\d+VU\d/.test(event.toElement.id)) return; } } catch(err){} // hide and move somewhere off screen (negative offsets) div.style.visibility = "hidden"; div.style.left = "-2100px"; div.style.top = "-2100px"; trans_div.style.visibility = "hidden"; trans_div.style.left = "-2100px"; trans_div.style.top = "-2100px"; return true; }, position: function () { if (!avglsflyover.poppedUp || (avglsflyover.poppedElement == null)) return; var flyover = document.getElementById("XPLSS_Flyover"); if (flyover == null) return; // relative position of flyover in relation to icon var locateX = 0; // 0=left, 1=right var locateY = 0; // 0=above, 1=below, 2=beside icon // get window sizes var winSize = searchshield.viewPortSize(); var windowX = winSize[0]; var windowY = winSize[1]; // get the exact size of the flyover var flyoverSize = searchshield.elementSize(flyover); var flyoverX = flyoverSize[0]; var flyoverY = flyoverSize[1]; var verdictWidth = 0; if (avglsflyover.poppedElement && avglsflyover.poppedElement.width) verdictWidth = avglsflyover.poppedElement.width; // get the bounding rect for image(s) var imgRect = searchshield.GetFullBoundingRect(avglsflyover.poppedElement); // half width/height of element bounding rect var halfX = (imgRect.right - imgRect.left) / 2; var halfY = (imgRect.bottom- imgRect.top) / 2; // element the mouse is over, get the center position var posX = searchshield.offsetLeft(avglsflyover.poppedElement) + halfX; var posY = searchshield.offsetTop(avglsflyover.poppedElement) + halfY; // if a verdict is inside a frame must get offsets for the frame element var docFrames = document.frames; if (docFrames) { for (var i=0; i < docFrames.length; i++) { try { var frameElem = docFrames[i].frameElement; if (frameElem.contentWindow.document.getElementById(avglsflyover.poppedElement.id)) { posX += searchshield.offsetLeft(frameElem); posY += searchshield.offsetTop(frameElem); break; } } catch(frmErr){} } } var transXOffset = 0; if (imgRect.mid == undefined) transXOffset = -1 * halfX; else transXOffset = ((imgRect.right + imgRect.left) / 2) - imgRect.mid; // normalize pos to 0 -- get amount of scrolling in browser window var scroll = searchshield.scrollSize(); var pageOffsetX = scroll[0]; var pageOffsetY = scroll[1]; posX -= pageOffsetX; posY -= pageOffsetY; // setup the offsets var offsetX = posX; var offsetY = posY; // calc where to display on page if ((windowX - posX) > posX) { // right offsetX += halfX; locateX = 1; } else { //left offsetX -= (flyoverX + halfX); } if ((windowY - posY) > posY) { // below if (posY < (windowY/4)) { offsetY -= halfY; locateY = 1; } else { offsetY -= (flyoverY / 2); locateY = 2; } } else { // above if ((windowY - posY) < (windowY/4)) { offsetY -= (flyoverY - halfY); } else { offsetY -= (flyoverY / 2); locateY = 2; } } // make sure we aren't off the screen if (offsetY < 0) offsetY = 0; if ((offsetY + flyoverY) > windowY) offsetY = windowY - flyoverY; // add page offsets back offsetX += pageOffsetX; offsetY += pageOffsetY; posX += pageOffsetX; posY += pageOffsetY; var paddedOffsetX = 0; //provide space between icon and flyover var padX = 3; if (locateX == 0) paddedOffsetX = offsetX - padX; else paddedOffsetX = offsetX + padX; // set where to put the flyover flyover.style.top = offsetY + "px"; flyover.style.left = paddedOffsetX + "px"; // set where to put the transparent layer var trans = document.getElementById("XPLSS_Trans"); if (trans != null) { var trans_left = 0; var trans_top = 0; var trans_width= 0; var trans_height = 0; // transparent layer should overlap verdict image if (locateX == 0) trans_left = posX - flyoverX - halfX; // left else trans_left = posX - transXOffset - verdictWidth; // right trans.style.left = trans_left + "px"; trans.style.top = offsetY + "px"; trans.style.width = flyoverX + verdictWidth + "px"; trans.style.height = flyoverY + "px"; } avglsflyover.display(); }, display: function () { avglsflyover.count++; if (avglsflyover.count == 1) { var flyover = document.getElementById("XPLSS_Flyover"); if (flyover == null) return; // show the flyover, must use a little count to tell, crazy stuff flyover.style.visibility = "visible"; flyover.onmouseout = function(){ avglsflyover.hide(event); }; // show the transparent layer var trans_div = document.getElementById("XPLSS_Trans"); if (trans_div == null) return; trans_div.style.visibility = "visible"; trans_div.onmouseout = function(){ avglsflyover.hide(event); }; avglsflyover.poppedUp = false; } }, show: function () { var div = document.getElementById("XPLSS_Flyover"); if (div == null) return; div.style.visibility = "visible"; var trans_div = document.getElementById("XPLSS_Trans"); if (trans_div == null) return; trans_div.style.visible = "visible"; } }; var avglsinlineflyover = { build: function (riskCategory, riskName, bgColor, borderColor) { var html = ''; html += '
    '; html += '
    '; html += riskCategory + '
    '; html += riskName + '
    '; html += '
    '; return html; }, popup: function (event, flyover, nSeverity, blUrl) { //set verdict info var div = document.getElementById('XPLSS_InlineFlyover'); if (div == null) return; // blUrl is an object for a blacklisted short url // when it is passed get the final url if (blUrl != undefined) { var finalUrl = searchshield.avgCallFunc(document, 'GetFinalUrl', blUrl.sUrl); var riskUrl = blUrl.sUrl; if ((finalUrl) && (searchshield.FilterUrl(finalUrl, xplSearch.engine.shortened_urls))) finalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl); var riskName = blUrl.riskNameLabel + finalUrl; flyover = avglsinlineflyover.build(blUrl.riskCategory, riskName, blUrl.bgColor, blUrl.borderColor); } div.innerHTML = flyover; div.style.width = "auto"; //reset width div.style.position = "absolute"; if (searchshield.quirksMode || searchshield.docMode <= 7) { var className = xplSearch.engine.inline.color.classname[nSeverity]; var imgBase = "linkscanner://" + className + "_inline_border_"; var divWidth = searchshield.elementSize(div)[0]; //round up to nearest 10 to avoid intentional wrapping in div var flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10)))); var ilfoDivs = div.getElementsByTagName("div"); if (ilfoDivs && ilfoDivs.length == 5) { //div.style.fontSize = "10px"; div.style.backgroundImage = "url(" + imgBase + "tl.png)"; div.style.backgroundPosition = "0 0"; div.style.backgroundRepeat = "no-repeat"; div.style.width = flyoverWidth + "px"; div.style.zIndex = "9999"; // avgILFO_head ilfoDivs[0].style.backgroundImage = "url(" + imgBase + "tr.png)"; ilfoDivs[0].style.backgroundPosition = "top right"; ilfoDivs[0].style.backgroundRepeat = "no-repeat"; ilfoDivs[0].style.width = flyoverWidth + "px"; ilfoDivs[0].style.height = "5px"; // avgILFO_head div ilfoDivs[1].style.height = "5px"; // avgILFO_content ilfoDivs[2].style.backgroundImage = "url(" + imgBase + "r.png)"; ilfoDivs[2].style.backgroundPosition = "top right"; ilfoDivs[2].style.backgroundRepeat = "repeat-y"; ilfoDivs[2].style.fontSize = "10px"; ilfoDivs[2].style.color = "black"; ilfoDivs[2].style.padding = "0px 10px"; ilfoDivs[2].style.textAlign = "left"; ilfoDivs[2].style.wordWrap = "break-word"; ilfoDivs[2].style.lineHeight = "130%"; // avgILFO_foot ilfoDivs[3].style.backgroundImage = "url(" + imgBase + "bl.png)"; ilfoDivs[3].style.backgroundPosition = "bottom left"; ilfoDivs[3].style.backgroundRepeat = "no-repeat"; ilfoDivs[3].style.height = "5px"; // avgILFO_foot div ilfoDivs[4].style.backgroundImage = "url(" + imgBase + "br.png)"; ilfoDivs[4].style.backgroundPosition = "bottom right"; ilfoDivs[4].style.backgroundRepeat = "no-repeat"; ilfoDivs[4].style.width = flyoverWidth + "px"; ilfoDivs[4].style.height = "5px"; } else { div.style.fontSize = "10px"; div.style.backgroundColor = xplSearch.engine.inline.color.background[nSeverity]; div.style.border = xplSearch.engine.inline.color.border[nSeverity] + " solid 3px"; div.style.padding = "3px 8px"; } } else { // apply updated styles for new flyover content var sheets = document.styleSheets; for (var i=0; i < sheets.length; i++) { if (sheets[i].id && sheets[i].id == "avgILFOStyle") { var avgILFOStyle = sheets[i]; break; } } if (typeof(avgILFOStyle) !== "undefined") { var className = xplSearch.engine.inline.color.classname[nSeverity]; var divWidth = searchshield.elementSize(div)[0]; //round up to nearest 10 to avoid intentional wrapping in div var flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10)))); var rules = avgILFOStyle.rules; for (var i=0; i < rules.length; i++) { var bgImg = rules[i].style.backgroundImage; var selText = rules[i].selectorText.toLowerCase(); if (bgImg) { var bgImgStyle = bgImg.replace(/default/, className); rules[i].style.backgroundImage = bgImgStyle; } if (((selText == ".avgilfo") || (selText == ".avgilfo_head") || (selText == ".avgilfo_foot div")) && (rules[i].style.width) && (rules[i].style.width == "0px")) { rules[i].style.width = (flyoverWidth) + "px"; } } } } if (!event) event = window.event; var eventTarget = event.srcElement; avglsinlineflyover.position(eventTarget); }, hide: function (event) { if (!event) event = window.event; var div = document.getElementById("XPLSS_InlineFlyover"); if (div == null) return; div.style.visibility = "hidden"; //invisible div.style.left = "-5000px"; if (!searchshield.quirksMode) { // reset flyover styles var sheets = document.styleSheets; for (var i=0; i < sheets.length; i++) { if (sheets[i].id && sheets[i].id == "avgILFOStyle") { var avgILFOStyle = sheets[i]; break; } } if (typeof(avgILFOStyle) !== "undefined") { var rules = avgILFOStyle.rules; for (var i=0; i < rules.length; i++) { var bgImg = rules[i].style.backgroundImage; var selText = rules[i].selectorText.toLowerCase(); if (bgImg) { var bgImgStyle = bgImg.replace(/:\/\/([a-z]+)_/i, '://default_'); rules[i].style.backgroundImage = bgImgStyle; } if (((selText == ".avgilfo") || (selText == ".avgilfo_head") || (selText == ".avgilfo_foot div")) && (rules[i].style.width)) { rules[i].style.width = "0px"; } } } } }, position: function (imageElem) { var flyover = document.getElementById('XPLSS_InlineFlyover'); if (flyover == null) return; // relative position of flyover in relation to icon var locateX = 0; // 0=left, 1=right var locateY = 0; // 0=above, 1=below, 2=beside icon // get window sizes var winSize = searchshield.viewPortSize(); var windowX = winSize[0]; var windowY = winSize[1]; // Must know if there is a horizontal scroll bar for Firefox // for proper flyover positioning near bottom edge var scrollYWidth = winSize[2]; var scrollBarX = winSize[2] > 0 ? true : false; // get the exact size of the flyover var flyoverSize = searchshield.elementSize(flyover); var flyoverX = flyoverSize[0]; var flyoverY = flyoverSize[1]; flyover.style.width = flyoverX + "px"; // get the bounding rect for image(s) var imgRect = imageElem.getBoundingClientRect(); // half width/height (center) of element bounding rect var halfX = (imgRect.right - imgRect.left) / 2; var halfY = (imgRect.bottom- imgRect.top) / 2; // element the mouse is over, get the center position var posX = searchshield.offsetLeft(imageElem) + halfX; var posY = searchshield.offsetTop(imageElem) + halfY; var pageOffsetX = 0; var pageOffsetY = 0; var hasParentFrame = false; // normalize pos to 0 -- get amount of scrolling in browser window var scroll = searchshield.scrollSize(imageElem); pageOffsetX = scroll[0]; pageOffsetY = scroll[1]; hasParentFrame = scroll[2]; posX -= pageOffsetX; posY -= pageOffsetY; //compensate for Firefox 3 if (posX < imgRect.left) posX = imgRect.left+halfX; // setup the offsets var offsetX = posX; var offsetY = posY; // calc where to display on page if ((windowX - posX) > posX) { // right //offsetX += halfX; offsetX = imgRect.right + 3; locateX = 1; } else { //left //offsetX -= (flyoverX + halfX); offsetX = imgRect.left - flyoverX - 3; } if ((windowY - posY) > posY) { // below if (posY < (windowY/4)) { offsetY -= halfY; locateY = 1; } else { offsetY -= (flyoverY / 2) - halfY; locateY = 2; } } else { // above if ((windowY - posY) < (windowY/4)) { offsetY -= (flyoverY - halfY); } else { offsetY -= (flyoverY / 2) + halfY; locateY = 2; } } // make sure we aren't off the screen if (offsetY < 0) offsetY = 0; if ((offsetY + flyoverY) > windowY) { offsetY = windowY - flyoverY; } else if (scrollBarX && ((windowY - (posY + halfY)) < scrollYWidth)) { //verdict overlaps the horizontal scrollbar offsetY = windowY - (flyoverY + scrollYWidth); } // add page offsets back - if not in frame if (!hasParentFrame) { offsetX += pageOffsetX; offsetY += pageOffsetY; } //posX += pageOffsetX; //posY += pageOffsetY; //var paddedOffsetX = 0; //provide space between icon and flyover //var padX = 3; //if (locateX == 0) // paddedOffsetX = offsetX - padX; //else // paddedOffsetX = offsetX + padX; // set where to put the flyover flyover.style.top = offsetY + "px"; flyover.style.left = offsetX + "px"; avglsinlineflyover.display(); }, display: function () { var div = document.getElementById('XPLSS_InlineFlyover'); if (div == null) return; // show the flyover div.style.visibility = "visible"; }, imageExists: function(element) { if (element) { // check next siblings children var sibling = element.nextSibling; if ((sibling == null) || (sibling.getElementsByTagName == null)) return false; var images = sibling.getElementsByTagName("IMG"); if (images == null) return false; for (var i = 0; i < images.length; i++) { if (images[i].id == "avg_ls_image") return true; } } return false; }, getImage: function (anchor) { if (anchor) { var imageElem = null; var images = anchor.getElementsByTagName("img"); if (images == null) return imageElem; for (var i = 0; i < images.length; i++) { if (images[i].id == "avg_ls_image") { imageElem = images[i]; break; } } return imageElem; } }, getUrlFromQueryString: function (inUrl) { var url = inUrl; var uri = searchshield.parseLink(unescape(inUrl)); if (uri.source != null) { // regexp failed so used split to parse url var qsUrl = uri.source.indexOf("?url="); if (qsUrl != -1) url = uri.source.substring(qsUrl + 5); else url = uri.source; } else if ((uri.qsArray.url != null) && (uri.qsArray.url.length > 0)) { url = uri.qsArray.url; } return url; }, mouseOverHandler: function (e, doc, engine) { if (e && e.srcElement && e.srcElement.href) { // need to keep a reference to the function registered // by the listener to be able to remove it. var handlerFunc = arguments.callee; var element = e.srcElement; var href = e.srcElement.href; // need an engine if (!engine) return; // check if it has an image already if (avglsinlineflyover.imageExists(element)) return; // add the image, returns the anchor not the image var new_element = engine.add_inline_image(doc, element, null, null); // do the check and update in the background setTimeout(function() {avglsinlineflyover.checkAndUpdate(doc, element, new_element, engine, handlerFunc)}, 1); } }, checkAndUpdate: function (doc, element, new_element, engine, handlerFunc) { if (!engine) return; try { // remove the listener and get final url element.detachEvent("onmouseover", handlerFunc, false); var finalUrl = searchshield.avgCallFunc(doc, 'GetFinalUrl', element.href); } catch(e) {} if ((typeof(finalUrl) != 'undefined') && finalUrl) { // if still a tiny url check for final url embedded in querystring if (searchshield.FilterUrl(finalUrl, engine.shortened_urls) && (finalUrl.indexOf("?url=") != -1)) { finalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl); } // update the verdict engine.display_inline(doc, new_element, finalUrl, null, true); } else { engine.avg_ls_inline_hide_verdict(new_element); } } }; /////////////// FLYOVERS /////////////// (function(){ setTimeout( function() { try { if ((self == top) && top.document) { searchshield.init(top.document, 1); } } catch(e){return;} }, 1 ); return; })(); -->

    No comments:

    Post a Comment