@refererdir = "#{@plugindir}/referer" unless @refererdir
@hide_dmain = 'localhost|192\.168|::1|2001:268:307:ff01:' unless @hide_dmain
@ann_dmain = 'a.hatena|antenna|bloglines|samidare|iraira' unless @ann_dmain

@search_dmain = [
  ['excite\.co\.jp', 'search'],
  ['google','q'],
  ['infoseek', 'qt'],
  ['search\.biglobe', 'q'],
  ['search\.goo','MT'],
  ['search\.jp\.aol','query'],
  ['search\.msn','q'],
  ['search\.nifty', 'Text'],
  ['search\.yahoo','p'],
  ['so-net\.excite\.co\.jp/search\.gw', 'search'],
]
@ref_store = []
@ann_store = Hash.new{0}
@skey_store = Hash.new{0}

def referer
  path = ""
  reg = Regexp.new("#{@datadir}/((.*/)?[^.]*)\.(.*)")
  @storys[0].sub(reg){ path = $1 }

  unless @cgi.referer.to_s.empty?
    unless /#{@hide_dmain}/ =~ @cgi.referer
      File.open("#{@refererdir}/#{CGI.escape(path)}".untaint, 'a'){|file|
        file.puts @cgi.referer
      }
    end
  #else
  # File.open("#{@refererdir}/#{CGI.escape(path)}".untaint, 'a'){|file|
  #   file.print "noreferer\n"
  # }
  end

  begin
    File.open("#{@refererdir}/#{CGI.escape(path)}", 'r'){|file|
      file.each_line do |line|
        rs = line.chomp
        if /#{@hide_dmain}/ =~ rs
        elsif /#{@ann_dmain}/ =~ rs
          @ann_store[rs] += 1
        else
          checkin_search(rs)
        end
      end
    }
  rescue
  end
end

def checkin_search(ref)
  @search_dmain.each do |map|
    if /#{map[0]}/ =~ ref
      if /.+\?(.+)/ =~ ref
        $1.split(/\&/).each do |q|
          que = q.split(/=/)
          if que[0] == map[1]
            @skey_store[que[1]] += 1
          end
        end
      end
      return false
    end
  end
  
  return true
end

def check_search(ref)
  @search_dmain.each do |map|
    if /#{map[0]}/ =~ ref
      return false
    end
  end
  
  return true
end

def referer_disp
  return '' if ENV['HTTP_USER_AGENT'] =~ /bot/i
  src = ''
  path = ""
  reg = Regexp.new("#{@datadir}/((.*/)?[^.]*)\.(.*)")
  @storys[0].sub(reg){ path = $1 }
  get_refs(path).to_a.sort{|a,b|
    b[1] <=> a[1]
  }.each do |label,point|
    if label != 'noreferer'
      src += "<li><a href=\"#{label}\">#{label}</a> × #{point}</li>\n"
    else
      src += "<!-- norefer : #{point} -->\n"
    end
  end

  return "<ul>\n#{src}</ul>\n" if src != ''
end

def referer_antena
  src = ''
  @ann_store.to_a.sort{|a,b|
    b[1] <=> a[1]
  }.each do |label,point|
    src += "<li><a href=\"#{label}\">#{label}</a> × #{point}</li>\n"
  end

  return "<ul>\n#{src}</ul>\n" if src != ''
end

def referer_searchkey
  src = ''
  @skey_store.to_a.sort{|a,b|
    b[1] <=> a[1]
  }.each do |label,point|
    src += "#{convert(CGI.unescape(label))}</a> × #{point} / "
  end

  return "<ul>\n<li>#{src}</li>\n</ul>\n" if src != ''
end

def referer_recent
  return '' if ENV['HTTP_USER_AGENT'] =~ /bot/i
  src = ''
  path = "#{@path}/#{@fn}".sub(/^\/+/, '')
  get_refs(path).to_a.sort{|a,b|
    b[1] <=> a[1]
  }.slice(0,20).each do |label,point|
    if label != 'noreferer'
      src += "|<a href=\"#{label}\">#{point}</a>"
    else
      src += "<!-- norefer : #{point} -->"
    end
  end

  return src + '|' if src != ''
end

def get_refs(path)
  refs = Hash.new{0}
  
  begin
    File.open("#{@refererdir}/#{CGI.escape(path)}", 'r'){|file|
      file.each_line do |line|
        ref = line.chomp
        if /^http:\/\// !~ ref
        elsif /#{@hide_dmain}/ =~ ref
        elsif /#{@ann_dmain}/ =~ ref
        elsif check_search(ref)
          refs[ref] += 1
        end
      end
    }
  rescue Exception
  end
  
  refs
end
