if (window.ENV) {
  window.Contents = ENV.contents;
  window.NavBarLength = ENV.navBarLength;
}

function createHttpRequest(){
  if (window.ActiveXObject){
    try {
      return new ActiveXObject("");
    } catch (e) {
      try {
        return new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
        return null;
      }
    }
  } else if(window.XMLHttpRequest){
    return new XMLHttpRequest();
  } else {
    return null;
  }
}
function requestFile(callback, data, method, fileName, async) {
  var httpRequest = createHttpRequest();
  if (httpRequest==null) return null;
  httpRequest.open(method, fileName, async);

  if (window.ActiveXObject)
    httpRequest.onreadystatechange = function () { 
      if (httpRequest.readyState==4) callback(httpRequest);
    };
  else
    httpRequest.onload = function () { callback(httpRequest); };

  httpRequest.send(data);
}
function getFile(fileName) {
  var httpRequest = createHttpRequest();
  if (httpRequest==null) return null;
  httpRequest.open('GET', fileName, false);
  if (httpRequest.constructor==XMLHttpRequest)
    httpRequest.overrideMimeType('text/plain');

  var res;
  if (window.ActiveXObject)
    httpRequest.onreadystatechange = function () { 
      if (httpRequest.readyState==4)
        res = httpRequest.responseText;
    };
  else
    httpRequest.onload = function () {
      res = httpRequest.responseText;
    };

  httpRequest.send('');
  return res;
}

/**********************************************************************/
function $E(jm) {
  switch (jm.constructor) {
  case Array:
    var e = document.createElement(jm.shift());
    if (jm.length>0 && jm[0].constructor==Object) {
      var al = jm.shift();
      for (var a in al) {
        if (a.match(/^on/) && al[a].constructor==Function) e[a] = al[a];
	else if (a=="style" && al[a].constructor==Object) {
	  for (var s in al[a]) e.style[s] = al[a][s];
	} else e.setAttribute(a, al[a]);
      }
    }
    while (jm.length > 0) {
      if (jm[0].constructor==Object || jm[0].constructor==NodeList) {
        for (var i=0; i<jm[0].length; i++) e.appendChild(jm[0][i].cloneNode(true));
        jm.shift();
      }
      else e.appendChild($E(jm.shift()));
    }
    return e;
  case String:
  case Number:
    return document.createTextNode(jm);
  default:
    return jm;
  }
}

var defaultOpts; (defaultOpts=function(){}).prototype
  = { resizable:1, scrollbars:1, menubar:1, toolbar:1, location:1, target:"_blank" };

function o2f(obj) {
  var f = [];
  for (var x in obj) if (obj[x]&&x!="target") f.push(x + "=" + obj[x]);
  return f.join(",");
}

function toggleFnBox(){
  var box = this.parentNode.nextSibling;
  with (box.style) {
    if (display == "block") display = "none";
    else {
      display = "block";
      left = Math.min(this.offsetLeft,
		      document.documentElement.clientWidth-box.offsetWidth)
	     + "px";
    }
  }
  return false;
}

function part(n) {
  return 'part' + (n<10 ? "0" + n : n) + '.html'
}
function navBar(m){
  with (document.URL) {
    //var f = substring(1 + lastIndexOf('/')) || 'index.html';
    var f = match(/[\/\\]([0-9A-Za-z_]+.html)(#|$)/)[1] || 'index.html'; 
    var n = f.match(/^part(\d\d).html/) ? RegExp.$1 - 0 : (f == 'index.html') ? 0 : -1;
  }
  var pi = [];
  for (var i=1; i<=m; i++) {
    pi.push("\u00A0");
    pi.push(i==n ? ["b",i] : ["a",{href:part(i)},i]);
  }
  return $E(
    ["div",{"class":"NavBar"},
      ["table",
	["tr",
	  ["td",{"class":"nb1"},
	    f=='index.html' ? ["b","表紙"] : ["a",{href:"index.html"},"表紙"]
	  ],
	  ["td",{"class":"nb1"},["a",{href:"index.html#contents"},"目次"]],
	  ["td"],
	  ["td",{"class":"nb2"}, n>1 ? ["a",{href:part(n-1)},"<前<"] : "<前<"],
	  ["td",{"class":"nb2"}].concat(pi),
	  ["td",{"class":"nb2"}, 0<=n && n<m ? ["a",{href:part(n+1)},">次>"] : ">次>"],
	  ["td"],
	  ["td",{"class":"nb1"},["a",{href:"../enshu.html"},"演習ホーム"]],
	  ["td"],
	  ["td",{"class":"nb3"},["a",{href:"http://find.kobe-c.ac.jp/"},"検索"]]
	]
      ]
    ]
  );
}

function myInit(e) {

  // NavBar inserting 
  if (window["NavBarLength"]) {
    var h = document.getElementById("header");
    if (h) h.parentNode.insertBefore(navBar(NavBarLength), h.nextSibling);
    var f = document.getElementById("footer");
    if (f) f.parentNode.insertBefore(navBar(NavBarLength), f.nextSibling);
  }

  // footnote
  with (document) {
    var spans = getElementsByTagName("span"), fns = [];
    for (i = 0; i < spans.length; i++) if (spans[i].className == "footnote") fns.push(spans[i]);
    if (fns.length > 0) {
      var fn = getElementById("footer"), dl = $E(["dl",{id:"fnlist"}])
      for (i = 0; i<fns.length; i++) {
        fns[i].className = "fnitem";
        fns[i].parentNode.insertBefore(
          $E(["span", {"class":"fn", "id":"fnn"+(i+1)},
               ["a", {href:"#fn"+(i+1), onclick:toggleFnBox}, "["+(i+1)+"]"]
          ]),fns[i]);
        fns[i].parentNode.insertBefore(
          $E(["span", {"class":"fnbox",onclick:function(e){this.style.display="none";}},
               fns[i].cloneNode(true)
             ]),fns[i]);
        //dl.appendChild($E(["dt",{id:"fn"+(i+1),"class":"fnitem"},"["+(i+1)+"]"]));
        dl.appendChild($E(["dt",{id:"fn"+(i+1),"class":"fnitem"},
                                ["a", {"href":"#fnn"+(i+1)}, "["+(i+1)+"]"]]));
        dl.appendChild($E(["dd",fns[i]]));
      }
      fn.parentNode.insertBefore($E(["div",{id:"footnote"},["h2","脚注"]].concat(dl)),fn);
    }
  }

  // newWin linking
  // USAGE: class="newWin"
  //        class="newWin(800x600)"
  //        class="newWin(targetName)"
  //        class="newWin(resizable=0,menubar=0, ...)"
  //        class="newWin(800x600,targetNmae,-resizable,menubar=0, ...)"
  var i, ln=document.getElementsByTagName("a");
  for (i=0; i<ln.length; i++) if (ln[i].className.match(/\bnewWin(\(([^)]*)\))?/)) {
    var args = RegExp.$2.split(",");
    ln[i].opts = new defaultOpts;
    for (var j=0; j<args.length; j++) {
      if (args[j].match(/(.+)=(.+)/)) ln[i].opts[RegExp.$1] = RegExp.$2;
      else if (args[j].match(/([-+])bars/))
        ln[i].opts.toolbar = ln[i].opts.menubar = RegExp.$1=="+" ? 1 : 0;
      else if (args[j].match(/([-+])(.+)/))
        ln[i].opts[RegExp.$2] = RegExp.$1=="+" ? 1 : 0;
      else if (args[j].match(/(\d+)x(\d+)/)) {
        ln[i].opts.width  = RegExp.$1;
        ln[i].opts.height = RegExp.$2;
      } else if (args[j].match(/(.+)/)) ln[i].opts.target = RegExp.$1;
    }
    //console.log(ln[i].opts.target+":"+o2f(ln[i].opts));
    ln[i].onclick = function (e) {
      window.open(this.href, this.opts.target, o2f(this.opts)).focus();
      return false;
    }; 
  }

  // JSON including
  var inc = document.getElementsByTagName("div");
  for (i=0; i<inc.length; i++) if (inc[i].className=="includeJsonML" && inc[i].id) {
    inc[i].appendChild($E(eval(getFile(inc[i].id))));
  }
  // contents inserting
  switch (window["Contents"]) {
  case "normal":
    var anchors = document.body.childNodes;
        root = $E(['div',{"class":"contents"},["h2","目次："],["ul"]]);
    with (root.lastChild) {
      for (var i=0; i<anchors.length; i++)
        if (/h./i.test(anchors[i].tagName) && anchors[i].id && !anchors[i].className.match(/\bignore\b/)) {
          appendChild($E(["li",{"class":anchors[i].tagName.toLowerCase()},
                           ["a",{href:"#"+anchors[i].id},anchors[i].firstChild.cloneNode(true)]
                         ]));

      }
    }
    root.appendChild($E(["hr"])); root.appendChild($E(["ul"]));
    with (root.lastChild) {
      for (var i=0; i<anchors.length; i++)
        if (/div/i.test(anchors[i].tagName) && anchors[i].className.match(/\bcolumn\b/)) {
          appendChild($E(["li",{"class":"column"},
                           ["a",{href:"#"+anchors[i].children[0].id},anchors[i].children[0].firstChild.cloneNode(true)]
                         ]));
      }
      if (childNodes.length==0) {
        root.removeChild(root.lastChild);
        root.removeChild(root.lastChild);
      }
    }
    var h1 = document.getElementsByTagName('h1')[0];
    h1.parentNode.insertBefore(root, h1.nextSibling);
    break;
/*
  case "dropdown":
    var anchors = document.getElementsByTagName('a'),
        root = document.createElement('select');
    break;
*/
  }
}
if (window.addEventListener){
  window.addEventListener('load', myInit, false);
} else if (window.attachEvent){
  window.attachEvent('onload', myInit);
}

/**********************************************************************/
function GoBack() {
  document.write(history.length > 1
    ? '<a href="javascript:history.back();" target="_self">戻る</a>'
    : '<a href="javascript:window.close();" target="_self">閉じる</a>'
  );
}
function LastModified() {
  with (document) {
    var d = new Date(lastModified);
    var yy = d.getYear(); if (yy < 2000) { yy += 1900; }
    var mm = d.getMonth() + 1; if (mm < 10) { mm = "0" + mm; }
    var dd = d.getDate(); if (dd < 10) { dd = "0" + dd; }
    var h = d.getHours(); if (h < 10) { h = "0" + h; }
    var m = d.getMinutes(); if (m < 10) { m = "0" + m; }
    var s = d.getSeconds(); if (s < 10) { s = "0" + s; }
    write(yy + "/" + mm + "/" + dd + " " + h + ":" + m + ":" +s);
  }
}
function PWProtect(pw) {
  if (pw != prompt("パスワードを入力してください．"))
	document.write('<meta http-equiv="Refresh" content="0;URL=../unauthorized.html;">');
}

