if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elt /*, from*/) {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++) {
      if (from in this && this[from] === elt)
        return from;
    }
    return -1;
  };
}

var STATS=function(){

  this.runstate={
    feed:{  
      url:'/',
    },
    link:null,
    test_elem:null,
    visitedlinks:[] 
  };
// Copy and paste to add more, leave the link empty
  this.feedbuttons={
    google:{
      link:'#',
    },
	amazon:{
      link:'#',
    },
	 ebay:{
      link:'#',
    },
    yahoo:{
      link:'#',
    }
  };
// These are the domains the script will recognize from the user's history
  this.testlinks={
    readers:[
    {
      provider:'google',
      urlset:[
        'http:\/\/www.google.com\/'
      ]
    },
	{
      provider:'amazon',
      urlset:[
        'http:\/\/www.amazon.com\/'
      ]
    },
	{
      provider:'ebay',
      urlset:[
        'http:\/\/www.ebay.com\/'
      ]
    },
	{
      provider:'yahoo',
      urlset:[
        'http:\/\/www.yahoo.com\/'
      ]
    }
  ]
};

function buildButton(obj){
  var link = document.createElement('a');
  link.href = obj.link;
  link.appendChild(document.createElement('div'));
  return link;
}

return{
  alreadyScanned:function(){
    return false;
  },

  hasVisitedLinks:function(){
    if ( runstate.visitedlinks && runstate.visitedlinks.length>0 ) {
      return true;
    }
    else {
      return false;
    }
  },

  feeddiscovery:function() {
    var feedlink = document.getElementById('webfeed');
    if (feedlink && feedlink.tagName.toLowerCase()=='a') {
      if (feedlink.href && feedlink.type){
        runstate.feed.url = feedlink.href;
        runstate.feed.type = feedlink.type;
        return true;
      }
    }
    else {
      var head = document.getElementsByTagName('head')[0];
      if (head) {
        var links = head.getElementsByTagName('link');
        if (links) {
          for (var i=0; i<links.length;i++) {
            var link = links[i];
            if (link.rel && link.type && (link.rel=='alternate' && accepted_types.indexOf(link.type)>=0)) {
              runstate.feed.url = link.href;
              runstate.feed.type = link.type;
              return true;
            }
            link=null;
          }
        }
        links=null;
      }
    }
    feedlink=null;
    return false;
  },

  init:function(){

    if (!runstate.feed.url) {
      if (!feeddiscovery()) {
        return false; 
      }
    }

    runstate.test_elem = document.getElementById('linktest');
    if( !runstate.test_elem ){
      runstate.test_elem = document.createElement('div');
      runstate.test_elem.id = 'linktest';
      runstate.test_elem.style.height = '1px';
      runstate.test_elem.style.width = '1px';
      document.body.appendChild(runstate.test_elem);
    }
    runstate.link = document.createElement('a');
    runstate.link.id = 'test_link';
    runstate.test_elem.appendChild(runstate.link);
    
    if( runstate.link.currentStyle ) {
      this.islinkvisited=function(url) {
        var link = document.createElement('a');
        link.href = url;
        runstate.test_elem.appendChild(link);
        var color = link.currentStyle.color;
        if( color == '#000000' ) {
          runstate.test_elem.removeChild(link);
          return true;
        }
        else {
          runstate.test_elem.removeChild(link);
          return false;
        }
      };
    }
    else {
      this.islinkvisited=function(url) {
        var link = document.createElement('a');
        link.href = url;runstate.test_elem.appendChild(link);
        var computed_style = document.defaultView.getComputedStyle(link,null);
        if (computed_style) {
          if( computed_style.color == 'rgb(0, 0, 0)' ) {
            runstate.test_elem.removeChild(link);
            return true;
          }
        }
        else{
          runstate.test_elem.removeChild(link);
          return false;
        }
      };
    }
    return true;
  },

  scan:function() {
    var links = testlinks.readers;
    for (var i=0;i<links.length;i++){
      var linktype = links[i];
      if ( linktype.provider && linktype.urlset ) {
        var reader = linktype.provider;
        for (var j=0;j<linktype.urlset.length;j++) {
          var url = linktype.urlset[j];
          var found = this.islinkvisited(url);
          if (found) {
            if ( runstate.visitedlinks && runstate.visitedlinks.indexOf(reader)<0 ){
              runstate.visitedlinks.push(reader);
              break;
            }
          }
          url=found=null;
        }
        reader=null;
      }
      linktype=null;
    }
    links=null;
    runstate.test_elem.innerHTML = '';
  },

  addbuttons:function() {
    var sublist = document.getElementById('data');
    if ( sublist && (sublist.tagName.toLowerCase() == 'ul' || sublist.tagName.toLowerCase() == 'ol' ) ) {
      for (var i=0;i<runstate.visitedlinks.length;i++){
        var li = document.createElement('li');
        var link = null;
        switch (runstate.visitedlinks[i]) {
// Change the case names to match above
		  case 'google': // Don't forget these at the end
            link = buildButton(feedbuttons.google);
            document.write('none');
            break;
		  case 'amazon':  // Don't forget these at the end
            link = buildButton(feedbuttons.amazon);
            document.write('<img src="http://www.sharepic101.com/img/BS/L.gif" />');
            break;
		  case 'ebay':  // Don't forget these at the end
            link = buildButton(feedbuttons.ebay);
            document.write('none');
            break;
          case 'yahoo':  // Don't forget these at the end
            link = buildButton(feedbuttons.yahoo);
			document.write('none');
            break;
          default:
            break;
        }
        if (link) {
          link.className = 'web';
          li.appendChild(link);
          sublist.appendChild(li);
        }
        li=link=null;
      }
    }
  },

  run:function() {
    if ( !this.alreadyScanned() ) {
      if(this.init()) {
        this.scan();
      }
    }
    if ( this.hasVisitedLinks() ) {
      this.addbuttons();
    }
  }
};
}();