/*______________________________________

  mizuyari JavaScript Lib. #071029-3 (#071227)
  
  Copyright (C) 1999-2007 mizuyari All rights reserved.
  Script written by Mahiro Komura <mahirok@mizuyari.jp>
  http://mizuyari.jp/
______________________________________*/

var trace = (window.console) ? window.console.log : alert;

function MizuyariObject() { // MizuyariObject #070523
 var self = arguments.callee;
 var d  = document;
 var ua = navigator.userAgent;
 this.ua = {};
 this.ua.isMac     = ua.match(/Mac/);
 this.ua.isWin     = ua.match(/Win/);
 this.ua.isSafari  = ua.match(/AppleWebKit/);
 this.ua.isFirefox = ua.match(/Firefox\//);
 this.ua.isGecko   = ua.match(/Gecko\//);
 this.ua.isOpera   = window.opera;
 this.ua.isNN4     = d.layers;
 this.ua.isWinIE   = (this.ua.isWin && ua.match(/MSIE /) && !this.ua.isOpera);
 this.ua.isWinIE70 = (this.ua.isWinIE && ua.match(/MSIE 7\.0/));
 this.ua.isWinIE60 = (this.ua.isWinIE && ua.match(/MSIE 6\.0/));
 this.ua.isWinIE55 = (this.ua.isWinIE && ua.match(/MSIE 5\.5/));
 this.ua.isWinIE50 = (this.ua.isWinIE && ua.match(/MSIE 5\.0/));
 this.ua.isWinIE40 = (this.ua.isWinIE && ua.match(/MSIE 4\.0/));
 this.ua.isMacIE   = (this.ua.isMac && ua.match(/MSIE /) && !this.ua.isOpera);
 this.ua.isMacIE5  = (this.ua.isMacIE && ua.match(/MSIE 5\./));
 this.ua.isMacIE4  = (this.ua.isMacIE && ua.match(/MSIE 4\./));
 this.screen = new MizuyariObject_Screen();
 this.mouse = {};
 this.mouse.x = 0;
 this.mouse.y = 0;
 this.mouse.localX = 0;
 this.mouse.localY = 0;
 this.mouse.buttonDown = false;
 this.mouse.relatedObject = null;
 this.mizInitFlag  = false;
 if (self._instance == null) self._instance = this;
 return self._instance;
}

MizuyariObject.prototype = {

getMouseEvent : function(e) { // getMouseEvent #071010
 this.mouse.relatedObject = e.target;

 switch (e.type) {
  case "mousedown":
   this.mouse.buttonDown = true;
   break;

  case "mouseup":
   this.mouse.buttonDown = false;
   break;

  case "mousemove":
   this.mouse.x = getPageXOffset() + e.clientX;
   this.mouse.y = getPageYOffset() + e.clientY;   
   this.mouse.localX = e.target.offsetLeft;
   this.mouse.localY = e.target.offsetTop;
   break;

  default:

 }
},

getMouseCursorPosition : function(e) { // getMouseCursorPosition #071010
 var x = e.clientX;
 var y = e.clientY;
 this.mouse.x = x;
 this.mouse.y = y;
},

getFlashVersion : function (format) { // getFlashVersion #071003
 var pluginName;
 var mimeType = "application/x-shockwave-flash";
 var hasPlugin = (navigator.mimeTypes && navigator.mimeTypes[mimeType]) ? navigator.mimeTypes[mimeType].enabledPlugin : 0;
 var pluginVersion = -1;
 if (!format) format = 0; // 0: MajorVer (Default), 1: Array(MajorVer,MinorVer,Revision,Build);
 if (hasPlugin) {
  pluginName = (navigator.plugins["Shockwave Flash 2.0"]) ? "Shockwave Flash 2.0" : "Shockwave Flash";
  var descArray = navigator.plugins[pluginName].description.split(" ");
  var tempArray = descArray[2].split(".");
  var tempRevision = (descArray[3] != "") ? descArray[3].substring(1) : descArray[4].substring(1);
  tempArray[2] = (tempRevision > 0) ? tempRevision : 0;
  tempArray[3] = "0";
  return (format > 0) ? tempArray : tempArray[0];
 } else if (this.ua.isWinIE) {
  var controlVersion = this.getFlashControlVersion();
  if (controlVersion != -1) {
   var controlVersionArray = controlVersion.split(" ");
   var tempArray = controlVersionArray[1].split(",");
   return (format > 0) ? tempArray : tempArray[0];
  } else {
   return pluginVersion;
  }
 }
 return pluginVersion;
},

getFlashControlVersion : function() { // getFlashVersion #071003
 var version;
 var axo;
 var e;
 var appNamePrefix = "ShockwaveFlash.ShockwaveFlash";

 try { // for Flash Player 7.x or higher
  axo = new ActiveXObject(appNamePrefix + ".7");
  version = axo.GetVariable("$version");
 } catch (e) {
 }

 if (!version) { // for Flash Player 6.x
  try {
   axo = new ActiveXObject(appNamePrefix + ".6");
   version = "WIN 6,0,21,0";
   axo.AllowScriptAccess = "always";
   version = axo.GetVariable("$version");
  } catch (e) {
  }
 }

 if (!version) { // for Flash Player 5.x and 4.x
  try {
   axo = new ActiveXObject(appNamePrefix + ".3");
   version = axo.GetVariable("$version");
  } catch (e) {
  }
 }

 if (!version) { // for Flash Player 3.x
  try {
   axo = new ActiveXObject(appNamePrefix + ".3");
   version = "WIN 3,0,18,0";
  } catch (e) {
  }
 }

 if (!version) { // for Flash Player 2.x
  try {
   axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
   version = "WIN 2,0,0,11";
  } catch (e) {
   version = -1;
  }
 }
 
 return version;
},

addEvent : function (obj, type, event) {
 if(obj.addEventListener) {
  obj.addEventListener(type, event, false);
 } else if(obj.attachEvent) {
  obj.attachEvent('on'+type, event);
 } else {
  obj['on'+type] = event;
 }
},

addOnLoadEvent : function (event) {
 this.addEvent(window, "load", event);
},

addClass : function (obj, classes) { // addClass #071029
 var newClasses = "";
 var myClass = obj.className.split(/\s+/);
 if (typeof(classes) == 'string') classes = [classes];
 for(i=0; i<classes.length; i++) {
  if (!myClass.contains(classes[i])) myClass[myClass.length] = classes[i];
 }
 obj.className = myClass.join(' ');
},

removeClass : function (obj, classes) { // removeClass #071004
 var myClass = obj.className.split(/\s+/);
 obj.className = myClass.remove(classes, ' ');
},

getClasses : function (obj) { // getClasses #071004
 var myClass = obj.className.split(/\s+/);
 return myClass;
},

replaceClass : function (obj, className1, className2) { // replaceClass #071004
 var myClass = obj.className.split(/\s+/);
 if (myClass.contains(className1)) {
  this.removeClass(obj, className1);
  this.addClass(obj, className2);
 }
},

containsClass : function (obj, className) { // containsClass #071004
 var myClass = obj.className.split(/\s+/);
 return (myClass.contains(className));
},

addCSS : function (src) {
 if (!document.getElementsByTagName) return;
 var headElmt = document.getElementsByTagName('head')[0];
 var newLinkElmt = document.createElement('link');
 newLinkElmt.setAttribute("rel","stylesheet");
 newLinkElmt.setAttribute("type","text/css");
 newLinkElmt.type="text/css";
 newLinkElmt.href= src;
 headElmt.appendChild(newLinkElmt);
}

};


function MizuyariObject_Screen() {
}
MizuyariObject_Screen.prototype = {

getScreenWidth : function () { // getScreenWidth #060524
 if(window.innerWidth) {
  return window.innerWidth;
 } else if(document.compatMode == "CSS1Compat") {
  return document.body.parentNode.clientWidth;
 } else if (document.body.clientWidth) {
  return document.body.clientWidth;
 } else {
   return 0;
 }
},

getScreenHeight : function () { // getScreenHeight #060524
 if(window.innerHeight) {
  return window.innerHeight;
 } else if(document.compatMode == "CSS1Compat") {
  return document.body.parentNode.clientHeight;
 } else if (document.body.clientHeight) {
  return document.body.clientHeight;
 } else {
  return 0;
 }
}

}


function miz$(id) { // miz$ #070928
 if (!document.getElementById) return;
 if (typeof(id) == 'string') return document.getElementById(id);
 return;
}

function preloadImg(src) {
 if (document.images && src) (new Image()).src = src;
}

function preloadImgs(srcs) {
 if (document.images && srcs) {
  for (i=0; i<srcs.length; i++) preloadImg(srcs[i]);
 }
}

function openWindow(url,title,options) {
 var newWin;
 if (!!window && url) {
  if (!title) title = "_blank";
  if (!options) {
   options = "toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,favorites=yes";
  }
  newWin = window.open(url,title,options);
  if (!mizuyari.ua.isWinIE55) newWin.focus();
 }
}

function isEnableCloseThisWindow() { // isEnableCloseThisWindow #061015
 if (!(UA.indexOf("Gecko/") != -1) && !(UA.indexOf("Safari") != -1)) return true;
 if (!window.opener) return false;
 return true;
}

function win_closed(winVar) {
// ref. the original code: http://game.gr.jp/js-ml/samples/200102/openerTest.html
 var ua = navigator.userAgent
 if( !!winVar )
  if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 )
     && ua.indexOf('Win')!=-1 ) 
     return winVar.closed
  else return typeof winVar.document  != 'object'
 else return true
}

function setHRefTarget(url) { // setHRefTarget #061107
 var w = window;
 var wo = w.opener;
 if (win_closed(wo)) {
  location.href = url;
 } else {
  if (url != wo.location.href) wo.location.href = url;
  wo.focus();
 }
}

function mizSwapImgs() { // mizSwapImgs #071227
 if(!document.getElementById) return;
 if(!document.images) return;
 var tClassName = "swapImg";
 var clearImg = "/shared/styles/components/clear.gif";
 var preImgs = new Array();
 var imgElmt = document.getElementsByTagName("IMG");
 for (j=0; j<imgElmt.length; j++) {
  var strClassAttr = imgElmt[j].className.split(" ").toString();
  if (strClassAttr.indexOf(tClassName) != -1) {
   var tmpArr = preImgs;
   var tmpElmt = imgElmt[j];
   var defaultSrc = "" + tmpElmt.src;
   var appliedAlphaImageLoader = false;
   if (defaultSrc.indexOf(clearImg) != -1) {
    appliedAlphaImageLoader = true;
    if (tmpElmt.orgsrc) defaultSrc = tmpElmt.orgsrc;
   }
   var fileExt = defaultSrc.substring(defaultSrc.lastIndexOf('.'));
   var fileName = defaultSrc.substring(0,defaultSrc.length - fileExt.length);
   var idPrefix = "mizImg";
   if (!tmpElmt.id) tmpElmt.id = idPrefix + "_" + j;
   tmpElmt.stayFlag = (strClassAttr.indexOf("stay") != -1) ? true : false;
   tmpElmt.up = defaultSrc;
   tmpElmt.over = fileName + "_o" + fileExt;
   if (preImgs.toString().indexOf(tmpElmt.over) == -1) preImgs[preImgs.length] = tmpElmt.over;
   var parentElmt = tmpElmt.parentNode;
   // if (parentElmt.tagName=="A") {
    tmpElmt.targetId = tmpElmt.id;
    tmpElmt.focusImg = tmpElmt.over;
    tmpElmt.blurImg = (!tmpElmt.stayFlag) ? tmpElmt.up : tmpElmt.over;
    if (appliedAlphaImageLoader) {
     tmpElmt.onfocus = tmpElmt.onmouseover = function() {
      miz$(this.targetId).runtimeStyle.filter =
       'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + this.focusImg + '", sizingMethod=image)';
      miz$(this.targetId).src = clearImg;
     }
     tmpElmt.onblur = tmpElmt.onmouseout = function() {
      miz$(this.targetId).runtimeStyle.filter =
       'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + this.blurImg + '", sizingMethod=image)';
      miz$(this.targetId).src = clearImg;
     }
    } else {
     tmpElmt.onfocus = tmpElmt.onmouseover = function() {
      miz$(this.targetId).src = this.focusImg;
     }
     tmpElmt.onblur = tmpElmt.onmouseout = function() {
      miz$(this.targetId).src = this.blurImg;
     }
    }
   // }
  }
 }
 var inputElmt = document.getElementsByTagName("INPUT");
 for (j=0; j<inputElmt.length; j++) {
  if (inputElmt[j].type.toLowerCase() != "image") continue;
  var strClassAttr = inputElmt[j].className.split(" ").toString();
  if (strClassAttr.indexOf(tClassName) != -1) {
   var tmpArr = preImgs;
   var tmpElmt = inputElmt[j];
   var defaultSrc = "" + tmpElmt.src;
   var fileExt = defaultSrc.substring(defaultSrc.lastIndexOf('.'));
   var fileName = defaultSrc.substring(0,defaultSrc.length - fileExt.length);
   var idPrefix = "mizInput";
   if (!tmpElmt.id) tmpElmt.id = idPrefix + "_" + j;
   tmpElmt.stayFlag = (strClassAttr.indexOf("stay") != -1) ? true : false;
   tmpElmt.up = defaultSrc;
   tmpElmt.over = fileName + "_o" + fileExt;
   if (preImgs.toString().indexOf(tmpElmt.over) == -1) preImgs[preImgs.length] = tmpElmt.over;
    tmpElmt.targetId = tmpElmt.id;
    tmpElmt.focusImg = tmpElmt.over;
    tmpElmt.blurImg = (!tmpElmt.stayFlag) ? tmpElmt.up : tmpElmt.over;
    tmpElmt.onfocus = tmpElmt.onmouseover = function() { this.src = this.focusImg; }
    tmpElmt.onblur = tmpElmt.onmouseout = function() { this.src = this.blurImg; }
  }
 }
 preloadImgs(preImgs);
}

var pageScrollTimer;
function pageScroll(id,toX,toY,frms,cuX,cuY) { // pageScroll #070202
 if (pageScrollTimer) clearTimeout(pageScrollTimer);
 if (!toX || toX < 0) toX = 0;
 if (!toY || toY < 0) toY = 0;
 if (!cuX) cuX = getPageXOffset();
 if (!cuY) cuY = getPageYOffset();
 if (!frms) frms = 6;
 cuX += (toX - getPageXOffset()) / frms; if (cuX < 0) cuX = 0;
 cuY += (toY - getPageYOffset()) / frms; if (cuY < 0) cuY = 0;
 var posX = Math.floor(cuX);
 var posY = Math.floor(cuY);
 window.scrollTo(posX, posY);
 if (posX != toX || posY != toY) {
  pageScrollTimer = setTimeout("pageScroll('"+id+"',"+toX+","+toY+","+frms+","+cuX+","+cuY+")",16);
 } else {
  if (!mizuyari.ua.isWinIE70) location.hash = id;
 }
}

function mizScrollApp(id) { // mizScrollApp #070202
 var toX, toY;
 toX = 0;
 if (!mizuyari.ua.isMacIE && !mizuyari.ua.isNN4 && window.scrollTo || mizuyari.ua.isNN475 && window.scrollTo) {
  toY = getElementOffsetTopById(id);
  var HTMLScrollHeight = getHTMLScrollHeight();
  var windowInnerHeight = getWindowInnerHeight();
  if (toY > (HTMLScrollHeight - windowInnerHeight)) {
   toY = HTMLScrollHeight - (windowInnerHeight);
  }
  if (toY == getPageYOffset() || HTMLScrollHeight == windowInnerHeight) return;
  pageScroll(id,toX,toY,6);
 } else {
  location.hash = id;
 }
}

function jumpToPageTop() { // jumpToPageTop #060817
 var id = "page-top"
 if (!mizuyari.ua.isMacIE4 && !mizuyari.ua.isNN4 && window.scrollTo || mizuyari.ua.isNN475 && window.scrollTo) {
  pageScroll(id,0,0,5);
 } else {
  location.hash = id;
 }
}

function getPageXOffset() { // getPageXOffset #060524
 if (window.pageXOffset) {
  return window.pageXOffset;
 } else if (document.compatMode == "CSS1Compat") {
  return document.documentElement.scrollLeft;
 } else if (document.body.scrollLeft) { // for IE
  return document.body.scrollLeft;
 } else {
  return 0;
 }
}

function getPageYOffset() { // getPageYOffset #060524
 if (window.pageYOffset) {
  return window.pageYOffset;
 } else if (document.compatMode == "CSS1Compat") {
  return parseInt(document.documentElement.scrollTop);
 } else if (document.body.scrollTop) { // for IE
  return parseInt(document.body.scrollTop);
 } else {
  return 0;
 }
}

function getElementOffsetTopById(id) { // getElementOffsetTopById #060524 (#071003)
 if (!mizInitFlag) return;
 id = String(id);
 var element = miz$(id);
 return getElementOffsetTop(element);
}

function getElementOffsetTop(element) { // getElementOffsetTop #070201
 if (!mizInitFlag) return;
 var _tempElement = element;
 var _tempOffsetTop = null;
 this._totalOffsetTop = 0;
 this._log = '';
 this._debug = false;
 this._bench = undefined;
 if (this._debug) { this._bench = new mizFuncBench; this._bench.begin(); }
 while (_tempElement.offsetParent != undefined) {
  _tempOffsetTop = !isNaN(_tempElement.offsetTop) ? parseInt(_tempElement.offsetTop) : 0;
  if (this._debug) this._log = "/" + _tempElement.tagName + '#' + _tempElement.id + '(' + _tempOffsetTop + ')' + this._log;
  this._totalOffsetTop += _tempOffsetTop;
  // if (Win && IE) break;
  _tempElement = _tempElement.offsetParent;
 }
 if (this._debug) this._log = this._log + '(total:' + this._totalOffsetTop + ',' + this._bench.finish() + 'ms)';
 return this._totalOffsetTop;
 // return this._log;
}

function setElementDisplay(element, status) { // setElementDisplay #070427 (#071003)
 var tElement;
 if (!document.getElementById) return;
 tElement = miz$(element);
 miz$(element).style.display = status;
}

function toggleDisplay(element) { // toggleDisplay #070427 (#071003)
 var tElement;
 if (!document.getElementById) return;
 tElement = miz$(element);
 if (tElement.style.display == "") {
  tElement.style.display = "block";
 } else if (tElement.style.display != "none") {
  tElement.style.display = "none";
 } else {
  tElement.style.display = "block";
 }
}


function getWindowInnerWidth() { // getWindowInnerWidth #061107
 if(window.innerWidth) {
  return window.innerWidth;
 } else if(document.compatMode == "CSS1Compat") {
  return document.body.parentNode.clientWidth;
 } else if (document.body.clientWidth) {
  return document.body.clientWidth;
 } else {
  return 0;
 }
}

function getWindowInnerHeight() { // getWindowInnerHeight #060524
 if(window.innerHeight) {
  return window.innerHeight;
 } else if(document.compatMode == "CSS1Compat") {
  return document.body.parentNode.clientHeight;
 } else if (document.body.clientHeight) {
  return document.body.clientHeight;
 } else {
  return 0;
 }
}

function getHTMLScrollWidth() { // getHTMLScrollHeight #070202
 return document.getElementsByTagName('html')[0].scrollWidth;
}
function getHTMLScrollHeight() { // getHTMLScrollHeight #070131
 return document.getElementsByTagName('html')[0].scrollHeight;
}

// ========== debug ==========

function mizFuncBench() { // mizFuncBench #071004
 this._start  = null;
 this._end    = null;
 this.begin();
}
mizFuncBench.prototype.begin = function () {
 this._start = (new Date()).getTime();
}
mizFuncBench.prototype.finish = function () {
 if (this._start == null) return false;
 this._end = (new Date()).getTime();
 return eval((this._end - this._start));
}

// ========== extend: Date Object ==========

Date.prototype.isLeapYear = function() {
 var year = this.getFullYear();
 return ((year%4 == 0) && (year%100 != 0) || (year%400 == 0)) ? true : false;
}

Date.prototype.getMonthDays = function() {
 var monthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
 if (this.isLeapYear()) monthDays[1] = 29;
 return monthDays[this.getMonth()];
}

// http://text.readalittle.net/article.php?id=135
Array.prototype.contains = function(value) {
 for (var i in this) {
  if (this.hasOwnProperty(i) && this[i] === value) {
   return true;
  }
 }
 return false;
}

// ref. the Original Code: http://youmos.com/reference/array_remove_js
Array.prototype.indexOf = function(value){
 var i = this.length;
 while(i){
  if(this[--i] == value) return i;
 }
 return -1;
};
Array.prototype.remove = function(value, cap){
 var i = this.length; var a;
 while(i--) {
  if(value.indexOf(a = this.pop()) == -1) this.unshift(a);
 }
 return (cap)? this.join(cap) : this;
};

// ref. the Original Code: http://www.tagindex.com/kakolog/q4bbs/201/422.html

// Function#apply
if ('undefined' == typeof Function.prototype.apply)
 Function.prototype.apply = function (thisObj, argArray) {
 var result;
 var tmpObj = (null == thisObj) ? window : thisObj;
 var tmpArg = Array.prototype.slice (arguments, 0).toString ();
        
 tmpObj._$method = this;
 result = eval ('tmpObj._$method (' + tmpArg + ')');
 delete tmpObj._$method;
        
 return result;
}
// Function#call
if ('undefined' == typeof Function.prototype.call)
 Function.prototype.call = function (thisObj) {
 return Function.prototype.apply (thisObj, Array.prototype.slice (arguments, 1));
}

// ========== global ==========

function mizGlobal_init() { // mizInit #071004
 if (mizInitFlag) return;
 mizSwapImgs();
 mizInitFlag = true;
}

function mizGlobal_onError(e) { // mizGlobal_onError #071010
 return e;
}
function mizGlobal_mouseEvent(e) { // mizGlobal_onMouseDown #071010
 mizuyari.getMouseEvent.apply(mizuyari, arguments);
}

var mizuyari = new MizuyariObject();
var mizInitFlag = mizuyari.mizInitFlag;
mizuyari.addEvent(window, "mousedown", mizGlobal_mouseEvent);
mizuyari.addEvent(window, "mouseup", mizGlobal_mouseEvent);
mizuyari.addEvent(window, "mousemove", mizGlobal_mouseEvent);

mizuyari.addEvent(window, "error", mizGlobal_onError);
mizuyari.addOnLoadEvent(mizGlobal_init);

// We are going to be doing "mizuyari" today again.
