// $Id: header.js,v 1.18 2006/07/23 07:51:36 Sakaguchi Exp Sakaguchi $

// Site name
var SITE
SITE = location.protocol + "//" + location.hostname

// Default document name
var DOC
if (location.pathname.match(/(\w+)\.\w+$/)) {
  DOC = RegExp.$1
} else {
  DOC = "index"
}

// CGI document or not
var CGI
if (location.pathname.indexOf("/cgi-bin/") >= 0) {
  CGI = true
} else {
  CGI = false
}

// Base pathnames
var BASE = "/"
var EPI_BASE = BASE + "episodes/"
var SCR_BASE = BASE + "scripts/"
var PNG_BASE = BASE + "pngs/"
var CGI_BASE = BASE + "cgi-bin/"

// User Agent
var UA = navigator.userAgent

// Positive version number if Windows
// 1=Unknown
// 95/98=As is
// NT 4=104, 2000=105, XP=105.1
var WIN = 0

// Positive version number if MSIE
var IE = 0

// Positive version number if FF
var FF = 0

// Positive version number if NN
var NN = 0

// Body font-size (useful only on FF/NN 4+)
var PNGFontSize = 18

// Detecting browser version (MSIE)
if (navigator.appName == "Microsoft Internet Explorer") {
  var i = UA.indexOf("MSIE ")
  if (i >= 0) {
    IE = parseFloat(UA.substring(i + 5))
  } else {
    IE = parseFloat(navigator.appVersion)
  }
}

// Detecting browser version (NN)
if (navigator.appName == "Netscape") {
  var i = UA.indexOf("Netscape/")
  if (i >= 0) {
    NN = parseFloat(UA.substring(i + 9))
  } else {
    i = UA.indexOf("Firefox/")
    if (i >= 0) {
      FF = parseFloat(UA.substring(i + 8))
      NN = 6 + FF
    } else {
      NN = parseFloat(navigator.appVersion)
    }
  }
}

// Detecting OS
if (IE >= 4.0 || NN >= 4.0) {
  // Obtain it from UA (MSIE/FF/NN 4+)
  var i = UA.indexOf("Windows ")
  if (i >= 0) {
    var j = UA.indexOf("NT ", i + 8)
    if (j >= 0) {
      WIN = parseFloat(UA.substring(j + 3)) + 100
    } else {
      WIN = parseFloat(UA.substring(i + 8))
    }
  }
} else if (navigator.platform.indexOf("Win") == 0) {
  // Obtain it from platform ID
  WIN = 1
}

// Anti-spambot pseudo-encryption
function
antispam(escaped, title)
{
  var crypt = unescape(escaped)
  var mailto = ""
  var text, c, i

  for (i = 0; i < crypt.length; ++i) {
    c = crypt.charCodeAt(i) ^ (1 << (i % 7))
    mailto = mailto + String.fromCharCode(c & 0xff)
  }

  if (arguments.length > 2) {
    text = arguments[2]
  } else {
    text = mailto
  }

  document.write("<A HREF=\"mailto:" + mailto + "\" TITLE=\"" + title + "\">" + text + "</A>")
}

// Unicode surrogate-pair conversion
function
sur2pua(u1, u2)
{
  var u

  // Parse surrogate pair
  u = u1 & 0x3ff
  u <<= 10
  u |= u2 & 0x3ff
  u += 0x10000

  // Map to private-use-area
  if (u >= 0xf0000) {
    u -= 0xf0000
    u += 0xf800
  } else {
    u -= 0x20000
    u >>= 3
    u += 0xe000
  }

  return u
}

// Zoom in/out
var Zoom = 1.0
function
zoomin()
{
  // Useful only on MSIE 4.0+
  if (IE < 4.0) return

  // Zoom in by 10%
  Zoom += .1
  document.all.item("BODY").style.zoom = Zoom
}
function
zoomout()
{
  // Useful only on MSIE 4.0+
  if (IE < 4.0) return

  // Zoom out by 10%
  Zoom -= .1
  document.all.item("BODY").style.zoom = Zoom
}

// Context-dependent home navigation
function
homenavi()
{
  // Useless if using old browsers
  if (IE < 4.0 && NN < 4.0) return

  // Useless if already home
  if (DOC == "index") return

  // Insert an anchor
  var a = "<A HREF=\"" + BASE + "\" TITLE=\"&#x300A;&#x4E09;&#x570B;&#x6F14;&#x7FA9;&#x300B;&#x306E;&#x30DB;&#x30FC;&#x30E0;&#x306B;&#x623B;&#x308A;&#x307E;&#x3059;&#x3002;\">&#x300A;&#x4E09;&#x570B;&#x6F14;&#x7FA9;&#x300B;</A>"
  if (document.referrer.indexOf(SITE) == 0) {
    // on-site reference
    if (DOC != "toc") {
      a += " &#x3000; "
      a += "<NOBR><A HREF=\"" + BASE + "episodes/toc.html\" TITLE=\"&#x300A;&#x4E09;&#x570B;&#x6F14;&#x7FA9;&#x300B;&#x539F;&#x6587;&#x306E;&#x76EE;&#x6B21;&#x306B;&#x98DB;&#x3073;&#x307E;&#x3059;&#x3002;\" TARGET=\"RTK:Toc\">&#x25C6;&#x539F;&#x6587;&#x76EE;&#x6B21;</A></NOBR>"
    }
  } else {
    // off-site reference
    if (DOC != "readme") {
      a += " &#x3000; "
      a += "<NOBR><A HREF=\"" + BASE + "readme.html\" TITLE=\"&#x3053;&#x306E;&#x30DB;&#x30FC;&#x30E0;&#x30DA;&#x30FC;&#x30B8;&#x306E;&#x898B;&#x304B;&#x305F;&#x306B;&#x98DB;&#x3073;&#x307E;&#x3059;&#x3002;\">&#x25C6;&#x521D;&#x3081;&#x3066;&#x306E;&#x65B9;&#x3078;</A></NOBR>"
    }
  }
  document.write(a)
}

// Common header bar
function
header(navi)
{
  // Detect document charset
  var cs
  if (document.charset) {
    cs = document.charset
  } else {
    if (DOC == "index" || DOC == "readme") {
      cs = "shift_jis"
    } else {
      cs = "utf-8"
    }
  }

  document.write("<TABLE ID=\"Header\" NAME=\"Header\" CELLSPACING=0><TR>")
  document.write("<TD ID=\"Home\" NAME=\"Home\">")
  // Left: home navigation
  homenavi()
  document.write("</TD>")
  document.write("<TD ID=\"Author\" NAME=\"Author\">")
  // Center: document charset/language indicator
  switch (cs) {
  case "utf-8": document.write("* UTF-8 Japanese/Chinese *"); break
  case "shift_jis": document.write("* SJIS Japanese *"); break
  }
  document.write("</TD>")
  document.write("<TD ID=\"Navigator\" NAME=\"Navigator\">")
  // Right: as specified
  document.write(navi)
  document.write("</TD>")
  document.write("</TR></TABLE>")
}

// Whats-new blinker controls
var newcolor = "#FFFFAA"
var newchar = "&#x65B0;"
var fblinknews = true

// Whats-new blinker
function
blinknews()
{
  var e, i, n = 0

  if (document.getElementsByName) {
    // MSIE/Netscape
    e = document.getElementsByName("NEW_R")
    for (i = 0; i < e.length; ++i) {
      e[i].style.background = fblinknews ? newcolor : "";
      ++n
    }
    e = document.getElementsByName("NEW_C")
    for (i = 0; i < e.length; ++i) {
     e[i].innerHTML = fblinknews ? newchar : ""
      ++n
    }

  } else if (document.all) {
    // MSIE
    e = document.all.item("NEW_R")
    for (i = 0; i < e.length; ++i) {
      document.all.item("NEW_R", i).style.background = fblinknews ? "#FFFFAA" : "#FFFFEE";
      ++n
    }
    e = document.all.item("NEW_C")
    for (i = 0; i < e.length; ++i) {
      document.all.item("NEW_C", i).innerHTML = fblinknews ? "&#x65B0;" : "&#x3000;"
      ++n
    }

  }

  if (n > 0) {
    // Repeat only when something's new
    if (fblinknews) {
      fblinknews = false
      setTimeout("blinknews()", 800)
    } else {
      fblinknews = true
      setTimeout("blinknews()", 800)
    }
  }
}

// Embedded PNG image tag
function
PNGimage(u, px)
{
  var style = "width:" + px + "px; height:" + px + "px; vertical-align: -" + px/6 + "px;"
  var ucs = "U+" + u.toString(16).toUpperCase()
  var dir = ""
  if (arguments.length > 2) dir = arguments[2] + "/"
  return "<IMG SRC=\"" + PNG_BASE + dir + ucs + ".png\" ALT=\"" + ucs + "\" STYLE=\"" + style + "\">"
}

// SEO analysis
function
SEO(doc, ref)
{
  var seo = new Image(0, 0)
  seo.src = CGI_BASE + "seo.cgi?doc=" + escape(doc) + "&ref=" + escape(ref)
  return true
}
// Do it now
SEO(document.URL, document.referrer)

// Firefox/Netscape specific treatment
if (NN >= 4.0) {
  document.writeln("<STYLE TYPE=\"text/css\">")
  document.writeln("BODY { font-size: " + PNGFontSize + "px; }")
  document.writeln("HR { margin-top: 9pt; margin-bottom: 7pt; }")
  document.writeln("TR.TOC { line-height: 140%; }")
  document.writeln("</STYLE>")
}
