/*
 * Social Limit - Only the social you care about.
 *
 * Enables your site to know which social bookmarking badges to display to your
 * visitors. It tells you all social sites the user has gone to, or you can 
 * query for a specific one.
 * 
 * For example:
 * 
 *    var sl = SocialHistory();
 *    alert( sl.doesVisit("Digg") ); // Returns true/false, -1 if unknown.
 *    var listOfVisitedSites = sl.visitedSites();
 *    var checkedSites = sl.checkedSites();
 *
 * If you want to add more sites to check, you can pass that in as a dictionary
 * to History:
 *
 *    var more = { "Humanized": "http://humanized.com",
 *                 "Azarask.in": ["http://azarask.in", "http://azarask.in/blog"]
 *               };
 *    var sl = SocialHistory(more);
 *    alert( sl.doesVisit("Humanized") );
 *
 * For a list of built-in sites, see the sites variable below.
 *
 * Copyright (c) 2008 Aza Raskin (http://azarask.in/blog)
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 */

var SocialHistory = function( moreSites ){

  var sites = {
  "Comp: Shaw Floors": ["http://www.shawfloors.com/"],
"Comp:Shaw Contract Group": ["http://www.shawcontractgroup.com/"],
"Comp:carpetbargains": ["http://www.carpetbargains.com/"],
"Comp:homedepot carpet section": ["http://www.homedepot.com/Flooring-Carpet-Tile/h_d1/N-5yc1vZ1xr5Zaptg/h_d2/Navigation?langId=-1&storeId=10051&catalogId=10053"],
"Comp:lowes carpet section": ["http://www.lowes.com/pl_Floor_4294856525+4294837247_4294937087_?Ns=p_product_quantity_sold|0&cm_cr=Tile+and+Stone-_-Web+Activity-_-Tile+and+Stone+Area1+5.5.10+Activity-_-SC_Tile+Stone++Accessories_Area1-_-31113_1"],
"Comp:focusfloors": ["http://www.focusfloors.com/"],
"Comp:Milliken Carpet": ["http://www.millikencarpet.com/americas/Pages/AmericasHome.aspx"],
"Comp:Mohawk Industries": ["http://www.mohawkind.com/"],
"Comp:Beaulieu of America": ["http://www.beaulieu-usa.com/"],
"Comp:Bigelow": ["http://www.bigelowcommercial.com/site/index.html"],
"Comp:DuPont Stainmaster": ["http://www.stainmaster.com/"],
"Comp:Camelot Carpet Mills": ["http://www.camelotcarpetmills.com/"],
"Comp:Colin Campbell": ["http://www.colcam.com/"],
"Comp:Tandus Flooring": ["http://www.tandus.com/"],
"Comp:Glen Eden Carpets": ["http://www.glen-eden.com/"],
"Comp:Gulistan Carpets": ["http://www.gulistan.com/"],
"Comp:JJ Industries": ["http://www.jjindustries.com/default.aspx"],
"Comp:Karastan Carpets": ["http://www.karastan.com/"],
"Comp:Karastan Contract": ["http://www.karastancontract.com/site/index.html"],
"Comp:Kraus Carpets": ["http://www.krauscarpet.com/"],
"Comp:Lano Carpets": ["http://www.lano.com/en/"],
"Comp:Lees Carpets": ["http://www.leescarpet.com/site/index.html"],
"Comp:Mannington Carpets": ["http://www.mannington.com/"],
"Comp:Mannington Commercial Carpets": ["http://www.mannington.com/commercial/"],
"Comp:Navan Carpets": ["http://www.navancarpets.com/"],
"Comp:Venture Carpets": ["http://www.venturecarpets.com/"],
"Comp:Victoria Carpets AU": ["http://www.victoriacarpets.com.au/"],
"Comp:Westwool Carpets AU": ["http://www2.westwools.com.au/"],
"Comp:Atlas Carpet Mills Inc": ["http://www.atlascarpetmills.com/"],
"Comp:Barrett Carpet Mills ": ["http://www.barrettcarpet.com/"],
"Comp:Bloomsburg Carpet Industries": ["http://www.bloomsburgcarpet.com/"],
"Comp:Blue Ridge Industries": ["http://www.blueridgecarpet.com/"],
"Comp:Burtco Enterprises": ["http://www.burtcocarpet.com/Home/tabid/76/Default.aspx"],
"Comp:Daltonian Flooring": ["http://www.daltonian.com/default.asp"],
"Comp:The Dixie Group": ["http://www.thedixiegroup.com/"],
"Comp:Fortune Commercial": ["http://www.fortunecarpet.com/"],
"Comp:Langhorne Carpet Company": ["http://www.langhornecarpets.com/"],
"Comp:Merida Meridian": ["http://www.meridameridian.com/"],
"Comp:Northwest Carpets": ["http://www.northwestcarpets.net/"],
"Comp:Royalty Carpet Mills": ["http://www.royaltycarpetmills.com/"],
"Comp:Tai Ping Carpets Americas": ["http://www.taipingcarpets.com/index.php"],
"Comp:Staticworx ESD Carpet Tile ": ["http://www.staticworx.com/esd-flooring/esd_carpet_info.php"],
"Media:Elledecor": ["http://www.elledecor.com/"],
"Media:Contractdesign": ["http://www.contractdesign.com/contract/index.shtml"],
"Media:Contractflooringmag": ["http://www.contractflooringmagazine.com/"],
"Media:Metropolismag": ["http://www.metropolismag.com/cda/"],
"Media:Arcspace": ["http://www.arcspace.com/index.shtml"],
"Media:Dwell": ["http://www.dwell.com/"],
"Media:Architectmag": ["http://www.architectmagazine.com/"],
"Media:Archis": ["http://archis.org/"],
"Media:Archpaper": ["http://www.archpaper.com/"],
"Media:Archnewsnow": ["http://www.archnewsnow.com/"],
"Media:Archidose": ["http://www.archidose.org/"],
"Media:Designarchitecture": ["http://www.designarchitecture.com/"],
"Media:Architectural Digest": ["http://www.architecturaldigest.com/"],
"Media:Aplust": ["http://www.aplust.net/index.php?idioma=en"],
"Media:Tropolism": ["http://www.tropolism.com/"],
"Media:Interior design": ["http://www.interiordesign.net/"],
"Media:Framemag": ["http://www.framemag.com/"],
"Media:Contact design": ["http://www.contractdesign.com/contract/index.shtml"],
"Media:Design Intuit": ["http://www.designintuit.com/dev/"],
"Media:Design Trade": ["http://www.designtrade.net/"],
"Media:Architect Magazine": ["http://www.architectmagazine.com/"],
"Media:Archrecord": ["http://archrecord.construction.com/"],
"Media:Architecture week": ["http://www.architectureweek.com/"],
"Media:Arcspace": ["http://www.arcspace.com/index.shtml"],
"Media:Azuremagazine": ["http://www.azuremagazine.com/"],
"Media:Designbuild Construction": ["http://designbuild.construction.com/"],
"Media:Designbuild Network": ["http://www.designbuild-network.com/"],
"Media:DI": ["http://www.di.net/"],
"Media:Edcmag": ["http://www.edcmag.com/"],
"Media:Interior design info": ["http://www.interiordesigninfo.com/"],
"Media:Ehow carpet tips": ["http://www.ehow.com/video_4427902_carpet-style-tips.html"],
"Arch:Csinet": ["http://www.csinet.org"],
"Arch:ASID": ["http://www.asid.org"],
"Arch:ASLA": ["http://www.asla.org"],
"Arch:Stantec": ["http://www.stantec.com/default.htm"],
"Arch:AIA": ["http://www.aia.org"],
"Arch:AIBD": ["http://www.aibd.org/"],
"Arch:Planning": ["http://www.planning.org/"],
"Arch:Nari": ["http://www.nari.org/"],
"Arch:Noma": ["http://www.noma.net/local/"],
"Arch:SARA": ["http://www.sara-national.org/"],
"Arch:Licensed architect": ["http://www.licensedarchitect.org/"],
"Arch:AWA-LA": ["http://www.awa-la.org/"],
"Arch:APLD": ["http://www.apld.com/"],
"Arch:Besttopdesign": ["http://besttopdesign.com/"],
"Arch:Contract design": ["http://www.contractdesign.com/contract/index.shtml"],
"Arch:Mosaictile": ["http://www.mosaictilesupplies.com/"],
"Arch:Home Edit": ["http://www.homedit.com/"],
"Arch:Home decorating reviews": ["http://www.home-decorating-reviews.com/"],
"Arch:Discount flooring": ["http://discountflooring.com/index.html"],
"Arch:Fopple": ["http://www.fopple.com/"],
"Arch:Nikio mahe": ["http://www.nikiomahe.com/"],
"Arch:Momoy": ["http://www.momoy.com/"],
"Arch:Floorplanner": ["http://floorplanner.com/"],
"Arch:Dezeen": ["http://www.dezeen.com/"],
"Arch:Yatzer": ["http://yatzer.com/"],
"Arch:Oldhouseweb": ["http://www.oldhouseweb.com/"],
"Arch:Homedesigning": ["http://www.home-designing.com/"],
"Arch:Decodir": ["http://www.decodir.com/"],
"Arch:Traditional building": ["http://traditional-building.com/"],
"Arch:Bobvila": ["http://www.bobvila.com/"],
"Arch:ABathroomguide": ["http://www.abathroomguide.com/"],
"Arch:Skyleture": ["http://www.styleture.com/"],
"Arch:Kabmurungraya": ["http://www.kabmurungraya.net/"],
"Arch:Designyourtrust": ["http://designyoutrust.com/"],
"Arch:Designtrade": ["http://designtrade.net/"],
"Arch:Homehousedesign": ["http://www.homehousedesign.com/"],
"Arch:Contemporist": ["http://www.contemporist.com/"],
"Arch:Houzz": ["http://www.houzz.com/"],
"Arch:Ceramictilefloor": ["http://www.ceramic-tile-floor.info/"],
"Arch:Dornob": ["http://dornob.com/"],
"Arch:Barefootfloor": ["http://www.barefootfloor.com/"],
"Arch:Designboom": ["http://designboom.com/eng/"],
"Arch:Hospitalitydesign": ["http://www.hospitalitydesign.com/hospitalitydesign/index.shtml"],
"Arch:Annsacks": ["http://annsacks.com/home.jsp"],
"Arch:Dreamhomedesignusa": ["http://dreamhomedesignusa.com/"],
"Arch:Newhouseofart": ["http://www.newhouseofart.com/"],
"Arch:Archinect": ["http://archinect.com/"],
"Arch:Ginsler": ["http://ginsler.com/"],
"Arch:Hok": ["http://www.hok.com/"],
"Arch:TVS": ["http://tvs-design.com/flash/flash.jsp"],
"Arch:McGrawhill commercial const": ["http://construction.com/network/"],
"Design:ASID": ["http://www.asid.org/"],
"Design:IIDA": ["http://www.iida.org/"],
"Design:Interiordesignsociety": ["http://www.interiordesignsociety.org/"],
"Design:Weredesign": ["http://www.weredesign.com/"],
"Design:Interiorrefiners": ["http://www.interiorrefiners.com/"],
"Design:IFDA": ["http://www.ifda.com/"],
"Design:IDEC": ["http://www.idec.org/"],
"Design:Besttopdesign": ["http://besttopdesign.com/"],
"Design:IDD": ["http://i-d-d.com/"],
"Design:Homegn": ["http://www.homeqn.com/"],
"Design:Homedesigninterior": ["http://homedesigninterior.com/"],
"Design:Designonline": ["http://designingonline.com/"],
"Design:Mosaictilesupplies": ["http://www.mosaictilesupplies.com/"],
"Design:Homeedit": ["http://www.homedit.com/"],
"Design:Homedecoratingreviews": ["http://www.home-decorating-reviews.com/"],
"Design:Discountflooring": ["http://discountflooring.com/index.html"],
"Design:Fopple": ["http://www.fopple.com/"],
"Design:Nikiomake": ["http://www.nikiomahe.com/"],
"Design:Thebudgetdecorator": ["http://thebudgetdecorator.com/"],
"Design:Momoy": ["http://www.momoy.com/"],
"Design:Floorplanner": ["http://floorplanner.com/"],
"Design:Dezeen": ["http://www.dezeen.com/"],
"Design:Getdecorating": ["http://getdecorating.com/"],
"Design:Addicted2decorating": ["http://www.addicted2decorating.com/"],
"Design:Yatzer": ["http://yatzer.com/"],
"Design:Oldhouseweb": ["http://www.oldhouseweb.com/"],
"Design:Homedesigning": ["http://www.home-designing.com/"],
"Design:Decodir": ["http://www.decodir.com/"],
"Design:Rentaldecorating": ["http://rentaldecorating.com/"],
"Design:Bobvila": ["http://www.bobvila.com/"],
"Design:Abathroomguide": ["http://www.abathroomguide.com/"],
"Design:Styleture": ["http://www.styleture.com/"],
"Design:Interiordesign": ["http://www.interiordesign.net/"],
"Design:Kabmurungraya": ["http://www.kabmurungraya.net/"],
"Design:Decorati": ["http://decorati.com/"],
"Design:Designtrade": ["http://designtrade.net/"],
"Design:Homedecoratingroombyroom": ["http://www.home-decorating-room-by-room.com/"],
"Design:Desginbiz": ["http://designbiz.com/"],
"Design:Homehousedesign": ["http://www.homehousedesign.com/"],
"Design:Contemporist": ["http://www.contemporist.com/"],
"Design:Cribcandy": ["http://cribcandy.com/"],
"Design:Houzz": ["http://www.houzz.com/"],
"Design:Ceramictileinfo": ["http://www.ceramic-tile-floor.info/"],
"Design:Dornob": ["http://dornob.com/"],
"Design:Interiordesignityoursellf": ["http://www.interior-design-it-yourself.com/"],
"Design:Barefootfloor": ["http://www.barefootfloor.com/"],
"Design:Greatinteriordesign": ["http://www.greatinteriordesign.com/"],
"Design:Designspongeonline": ["http://www.designspongeonline.com/"],
"Design:Materialgirlsblog": ["http://materialgirlsblog.com/"],
"Design:Thedesignblog": ["http://www.thedesignblog.org/"],
"Design:Designboom": ["http://designboom.com/"],
"Design:Myinteriordecorator": ["http://myinteriordecorator.com/"],
"Design:Hospitalitydesign": ["http://www.hospitalitydesign.com/hospitalitydesign/index.shtml"],
"Design:Annsacks": ["http://annsacks.com/home.jsp"],
"Design:Decoratingdiva": ["http://thedecoratingdiva.com/"],
"Design:Newhouseofart": ["http://www.newhouseofart.com/"],
"Design:Gomestic": ["http://gomestic.com/"],
"Design:Homestyler": ["http://www.homestyler.com/designer"],
"Corp:Facilitiesmidwestexpo": ["http://www.facilitiesmidwestexpo.com/"],
"Corp:Facilitiesnet": ["http://www.facilitiesnet.com/flooring/default.asp"],
"Corp:CFI": ["http://www.gocfi.com/index.htm"],
"Corp:Todaysfacilitymanager": ["http://todaysfacilitymanager.com/"],
"Corp:Carpet Rug Institute": ["http://www.carpet-rug.org/"],
"Corp:IFMA": ["http://www.ifma.org/index.cfm"],
"Corp:IFMA Foundation": ["http://www.ifmafoundation.org/index.cfm"],
"Corp:BOMA": ["http://www.boma.org/Pages/default.aspx"],
"Corp:IREM": ["http://www.irem.org/"],
"Corp:Realtor": ["http://www.realtor.org/"],
"Corp:NARPM": ["http://www.narpm.org/"],
"Corp:PMA-DC": ["http://www.pma-dc.org/"],
"Corp:IFMA Worldworkplace Conf": ["http://www.worldworkplace.org/"],
"Corp:IFMA Facility fusion Conf": ["http://www.ifmafacilityfusion.org/"],
"Corp:FMLink": ["http://www.fmlink.com/"],
"Corp:NFMT Conf": ["http://www.nfmt.com/"],
"Corp:Facility decisions conf": ["http://www.facilitydecisions.com/"],
"Corp:BOMA conf": ["http://www.bomaconvention.org/boma2010/custom/splash.html"],
"Corp:DOW Carpet": ["http://www.dow.com/carpet/corp/index.htm"],
"HigherEd:APPA": ["http://www.appa.org/"],
"HigherEd:IAAM": ["http://www.iaam.org/"],
"HigherEd:ERAPPA": ["http://www.erappa.org/"],
"HigherEd:CEFPI": ["http://www.cefpi.org/i4a/pages/index.cfm?pageid=1"],
"HigherEd:NCEF": ["http://www.ncef.org/"],
"HigherEd:Green Schools": ["http://www.greenschools.net/"],
"HigherEd:USCommunities": ["http://www.uscommunities.org/"],
"HigherEd:APPA": ["http://www.appa.org/index.cfm"],
"HigherEd:ASUmag": ["http://asumag.com/issue_20100201/"],
"HigherEd:PeterLi CPM": ["http://www.peterli.com/cpm/"],
"K12Ed:EandI": ["https://www.eandi.org/Default.aspx"],
"K12Ed:CleanLink": ["http://www.cleanlink.com/"],
"K12Ed:AEPA": ["www.aepacoop.org"],
"K12Ed:USCommunities": ["http://www.uscommunities.org/"],
"K12Ed:Todaysfacilitymanager": ["http://todaysfacilitymanager.com/"],
"K12Ed:Schoolfacilities": ["http://www.schoolfacilities.com/"],
"Govt:USGBC": ["http://www.usgbc.org/"],
"Govt:UScommunities": ["http://www.uscommunities.org/"],
"Govt:EPA": ["http://www.epa.gov/epp/pubs/carpets2.htm"],
"Govt:Inform": ["http://www.informinc.org/pages/index.php"],
"Govt:CarpetRecovery": ["http://www.carpetrecovery.org/index.php"],
"Govt:IGreenbuild": ["http://www.igreenbuild.com/"],
"Govt:ContinentalFlooring": ["http://www.continentalflooring.com/index.html"],
"Govt:Govpro": ["http://govpro.com/"],
"Govt:DowCarpet": ["http://www.dow.com/carpet/gov/index.htm"],
"Health:BOMA": ["http://www.boma.org/Pages/default.aspx"],
"Health:WID Health": ["http://healthcare.worldinteriordesignnetwork.com/"],
"Health:MCmorrowReport": ["http://www.mcmorrowreport.com/hfm/index.asp"],
"Health:Dow": ["http://www.dow.com/"],
"Health:CarpetRug": ["http://www.carpet-rug.org/"],
"Health:LongTermLiving": ["http://www.ltlmagazine.com/ME2/Default.asp"],
"Health:MohawkGroup": ["http://themohawkgroup.com/sitefiles/index.html"],
"Hospit:CVC": ["http://www.cvchospitality.com/construction.aspx"],
"Hospit:Dalton Carpet": ["http://www.daltonhospitalitycarpet.com/landing-page-1"],
"Hospit:LHOnline": ["http://lhonline.com/design/"],
"Hospit:Business Carpet Outlet": ["http://www.businesscarpetoutlet.com/"],
"Hospit:Hospitality Designs": ["http://www.hospitalitydesigns.com/"],
"Hospit:Hospitality Design Mag": ["http://www.hospitalitydesign.com/hospitalitydesign/index.shtml"],
"Hospit:Master Craft Carpets": ["http://www.mastercraftcarpets.com/services.php"],
"Hospit:DPLink": ["http://www.dplink.net/what-weve-done.php"],
"Hospit:Kinsley Carpets": ["http://www.kinsleycarpets.com/"],
"Hospit:Lots of Carpet": ["http://www.lotsofcarpet.com/"],
"Hospit:Advantage Carpet": ["http://www.aciwholesalecarpet.com/hospitality_carpet.htm"],
"Hospit:JAZDHotels": ["http://www.jazdhotels.com/hotelworldnetworkmarketplace/"],
"Hospit:Hotel Design magazine": ["http://www.hotelworldnetwork.com"],
"Hospit:Hospitality Industry Directory": ["http://www.hospitality-industry.com/index.php"],
"Hospit:Contract Commercial Carpet": ["http://www.contractcommercialcarpet.com"],
"Hospit:Hotel Business Design": ["http://www.hotelbusinessdesign.com/main.asp"],
"Hospit:Dow Technology": ["http://www.dow.com/carpet/hosp/index.htm"],
"Hospit:Bnet": ["http://www.bnet.com/"],
"Hospit:EDCmag": ["http://www.edcmag.com/"],
"Hospit:HDexpo": ["http://www.hdexpo.com/"],
"Retail:Business Carpet Outlet": ["http://www.businesscarpetoutlet.com/"],
"Retail:Carpet Buyers Handbook": ["http://www.carpetbuyershandbook.com/"],
"Retail:WFCA": ["http://www.wfca.org/"],
"Retail:iFloor": ["http://www.flooringguide.com/"],
"Retail:BuyerZone ": ["http://www.buyerzone.com/"],
"Retail:VMSD Magazine": ["http://vmsd.com/"],
"Retail:Hospitality Style Magazine": ["http://hospitalitystyle.com/"],
"Retail:Restaurant Facility Management Assn.": ["http://www.rfmaonline.com/"],
"Retail:Global Department Store Summit": ["http://www.dssummit2010.org"],
"Retail:International Retail Design Conference": ["http://2010.irdconline.com/"],
"Retail:Dow Technology": ["http://www.dow.com/carpet/retail/index.htm"],
    "LinkedIn": ["http://www.linkedin.com/nhome/"],
    "Facebook": ["http://facebook.com/home.php", "http://facebook.com", "https://login.facebook.com/login.php"],
    "MySpace": ["http://www.myspace.com/"],
    "Twitter": ["http://twitter.com/"]
  };
  
  for( var site in moreSites ) {
    // If we don't have the site, create the URL list.
    if( typeof( sites[site] ) == "undefined" ) sites[site] = [];
    
    // If the value is string, just push that onto the URL list.
    if( typeof( moreSites[site] ) == "string" )
      sites[site].push( moreSites[site] );
    else
      sites[site] = sites[site].concat( moreSites[site] );
  }
  
  var visited = {};

  function getStyle(el, scopeDoc,styleProp) {
    if (el.currentStyle)
      var y = el.currentStyle[styleProp];
    else if (window.getComputedStyle)
      var y = scopeDoc.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
    return y;
  }
  
  function remove( el ) {
    el.parentNode.removeChild( el );
  }
  
  // Code inspired by:
  // bindzus.wordpress.com/2007/12/24/adding-dynamic-contents-to-iframes
  function createIframe() {
    var iframe = document.createElement("iframe");
    iframe.style.position = "absolute";
    iframe.style.visibility = "hidden";

    document.body.appendChild(iframe);

    // Firefox, Opera
    if(iframe.contentDocument) iframe.doc = iframe.contentDocument;
    // Internet Explorer
    else if(iframe.contentWindow) iframe.doc = iframe.contentWindow.document;

    // Magic: Force creation of the body (which is null by default in IE).
    // Also force the styles of visited/not-visted links.
    iframe.doc.open();
  	iframe.doc.write('<style>');
  	iframe.doc.write("a{color: #000000; display:none;}");  	
  	iframe.doc.write("a:visited {color: #FF0000; display:inline;}");  	
  	iframe.doc.write('</style>');
    iframe.doc.close();
    
    // Return the iframe: iframe.doc contains the iframe.
    return iframe;
  }  

  var iframe = createIframe();
  
  function embedLinkInIframe( href, text ) {
    var a = iframe.doc.createElement("a");
    a.href = href;
    a.innerHTML = site;
    iframe.doc.body.appendChild( a );
  }
  
  for( var site in sites ) {
    var urls = sites[site];
    for( var i=0; i<urls.length; i++ ) {
      // You have to create elements in the scope of the iframe for IE.
      embedLinkInIframe( urls[i], site );
      
      // Automatically try variations of the URLS with and without the "www"
      if( urls[i].match(/www\./) ){
        var sansWWW = urls[i].replace(/www\./, "");
        embedLinkInIframe( sansWWW, site );
      } else {
        // 2 = 1 for length of string + 1 for slice offset
        var httpLen = urls[i].indexOf("//") + 2;
        var withWWW = urls[i].substring(0, httpLen ) + "www." + urls[i].substring( httpLen );
        embedLinkInIframe( withWWW, site );
      }
      
    }
  }
    
  var links = iframe.doc.body.childNodes;
  for( var i=0; i<links.length; i++) {
    // Handle both Firefox/Safari, and IE (respectively)
    var displayValue = getStyle(links[i], iframe.doc, "display");
    var didVisit = displayValue != "none";
      
    if( didVisit ){
      visited[ links[i].innerHTML ] = true;
    }
  }
  
  remove( iframe );
  
  return new (function(){
    var usedSites = [];
    for( var site in visited ){
      usedSites.push( site );
    }
    
    // Return an array of visited sites.
    this.visitedSites = function() {
      return usedSites;
    }
    
    // Return true/false. If we didn't check the site, return -1.
    this.doesVisit = function( site ) {
      if( typeof( sites[site] ) == "undefined" )
        return -1;
      return typeof( visited[site] ) != "undefined";
    }
    
    var checkedSites = [];
    for( var site in sites ){
      checkedSites.push( site );
    }
    // Return a list of the sites checked.
    this.checkedSites = function(){
      return checkedSites;
    }
  })();
}