/**
 * sisso.js - 質素なWeb制作のためのJS
 *
 * Copyright (C) KAYAC Inc. | http://www.kayac.com/
 * Dual licensed under the MIT <http://www.opensource.org/licenses/mit-license.php>
 * and GPL <http://www.opensource.org/licenses/gpl-license.php> licenses.
 * Date: 2009-02-23
 * @author kyo_ago <http://tech.kayac.com/archive/iepngfix-library-sisso-js.html>
 * @version 1.0.8
 *
 * thanks from
 *   http://www.isella.com/aod2/js/iepngfix.js
 *   http://jquery.com/
 *   http://kyosuke.jp/portfolio/javascript/yuga.html
 *   http://webtech-walker.com/archive/2008/11/02151611.html
 *   http://code.google.com/p/uupaa-js/source/browse/trunk/src/ieboost.js
 */
;new function () {
	var name_space = 'Sisso';
	var self = window[name_space] || {};
	window[name_space] = self;

	var Event, $ = window.jQuery;
	if (!window.jQuery) {
		load_lib();
		$ = function () {};
		$.data = function () {};
		$.removeData = function () {};
		self.Event = Event;
	};

	var $d = document;

	new function () {
		var scp = $d.getElementsByTagName('script');
		var reg = new RegExp(name_space + '\\.js');
		var i = scp.length;
		while (i--) {
			if (!reg.test(scp[i].src.toLowerCase())) continue;
			var sp = scp[i].src.split('#');
			if (sp.length === 1) return;
			var pair = sp.pop().split(/[&;]+/);
			var j = pair.length;
			while (j--) {
				var k_v = pair[j].split('=');
				self[k_v[0]] = k_v[1];
			}
			return;
		}
	};

	self.blankUrl = self.blankUrl || 'blank.gif';
	self.overClass = self.overClass || 'rollover';
	self.blankClass = self.blankClass || 'blank';
	self.breakAllClass = self.breakAllClass || 'wordBreak';
	self.noRoll = self.noRoll || false;
	self.noFix = self.noFix || false;
	self.noblank = self.noblank || false;
	self.noBreakAll = self.noBreakAll || false;

	self.get_elems = (function () {
		if ($d.getElementsByClassName) return function (cname) {
			return $d.getElementsByClassName(cname);
		}
		if ($d.querySelectorAll) return function (cname) {
			return $d.querySelectorAll('*.' + cname);
		}
		if ($d.evaluate) return function (cname) {
			var elems = $d.evaluate("descendant::*[@class=" + cname + " or contains(concat(' ', @class, ' '), ' " + cname + " ')]", $d, null, 7, null);
			var result = [];
			for (var i = 0, l = elems.snapshotLength; i < l; result.push(elems.snapshotItem(i++)));
			return result;
		}
		return function (cname) {
			var reg = new RegExp('(?:^|[ \\n\\r\\t])' + cname + '(?:[ \\n\\r\\t]|$)');
			var elems = $d.body.getElementsByTagName('*');
			var result = [];
			for (var i = 0, l = elems.length; i < l; ++i) {
				var elem = elems[i];
				if (elem.className.indexOf(cname) === -1) continue;
				if (!reg.test(elem.className)) continue;
				result.push(elem);
			}
			return result;
		};
	})();

	self.get_src = function (elem) {
		if (elem.src) return elem.src;
		src = (elem.currentStyle || $d.defaultView.getComputedStyle(elem, '')).backgroundImage;
		return (src.match(/^url\((["']?)(.*\.png)\1\)$/i) || [undefined]).pop();
	};

	self.hover = function (elem) {
		var src = self.get_src(elem);
		var over = self.replace_over(src);
		return elem.src ? self.add_src_over(elem, src, over) : self.add_bg_over(elem, src, over);
	};

	self.replace_over = function (src) {
		return src.replace(/(?:_o)?(\.\w+)$/, '_o$1');
	};

	new function () {
		self.bind = window.jQuery ? _jq : window.addEventListener ? _add : _on;

		function _jq (target, type, listener) {
			$(target).bind(type + '.' + name_space, listener);
		};
		function _add (target, type, listener) {
			target.addEventListener(type, listener, false);
		};
		function _on (target, type, listener) {
			target.attachEvent('on' + type, listener);
		};
	};

	self.add_src_over = function (elem, src, over) {
		var img = new Image();
		img.src = over;
		self.bind(elem, 'mouseover', (function (target) {
			return function () {
				target.src = over;
			};
		})(elem));
		self.bind(elem, 'mouseout', (function (target) {
			return function () {
				target.src = src;
			};
		})(elem));
	};

	self.add_bg_over = function (elem, src, over) {
		(new Image()).src = over;
		self.bind(elem, 'mouseover', (function (target) {
				return function () {
				target.style.backgroundImage = 'url(' + over + ')';
			};
		})(elem));
		self.bind(elem, 'mouseout', (function (target) {
			return function () {
				target.style.backgroundImage = 'url(' + src + ')';
			};
		})(elem));
	};

	self.exec_hover = function () {
		self.bind(window, 'load', function () {
			var elems = self.get_elems(self.overClass);
			for (var i = 0, l = elems.length; i < l; self.hover(elems[i++]));
		});
	};

	self.exec_blank = function () {
		self.bind(window, 'load', function () {
			var elems = self.get_elems(self.blankClass);
			for (var i = 0, l = elems.length; i < l; elems[i++].target = '_blank');
		});
	};

	self.exec_break_all = function () {
		var userAgent = navigator.userAgent;
		var splitter = userAgent.indexOf(' Gecko/') !== -1 && userAgent.indexOf('; rv:1.8.1') !== -1 ? '<wbr/>' : String.fromCharCode(8203);
		var split_text_node = function (elem) {
			var elems = elem.childNodes;
			var child = [];
			var i = 0;
			var len = elems.length;
			while (i < len) {
				child[i] = elems[i++];
			}
			for (i = 0, len = child.length; i < len; ++i) {
				var self = child[i];
				if (self.nodeType === 1) {
					if (self.childNodes && self.childNodes.length) arguments.callee(self);
					continue;
				}
				var val = self.nodeValue;
				if (!val || /^[ \n\r\t]*$/.test(val)) continue;
				var div = $d.createElement('div');
				div.innerHTML = val.split('').join(splitter);
				var parent = self.parentNode;
				while (div.firstChild) parent.insertBefore(div.removeChild(div.firstChild), self);
				parent.removeChild(self);
			}
		};
		if (userAgent.indexOf('Mozilla/4.0 (compatible; MSIE ') === 0 && userAgent.toLowerCase().indexOf('opera') === -1) {
			split_text_node = function (elem) {
				elem.style.wordBreak = 'break-all';
			};
		}

		var exec = function () {
			var elems = self.get_elems(self.breakAllClass);
			for (var i = 0, l = elems.length; i < l; split_text_node(elems[i++]));
		};
		window.jQuery ? $(exec) : Event.domReady.add(exec);
	};

	if (!self.noblank) self.exec_blank();
	if (!self.noBreakAll) self.exec_break_all();

	if (!/^Mozilla\/4\.0 \(compatible; MSIE (?:5\.5|[67]\.)/.test(navigator.userAgent)) {
		if (!self.noRoll) self.exec_hover();
		return;
	}

//-----------------------------------
// for old IE only
//-----------------------------------

	self.eid = '_' + name_space + '_src';

	self.store = function (elem, val) {
		return val ? elem[self.eid] = val : elem[self.eid];
	};

	self.hover = function (elem) {
		var src = elem[self.eid] || (elem[self.eid] = self.get_src(elem));
		var over = self.replace_over(src);
		return elem.src ? self.add_src_over(elem, src, over) : self.add_bg_over(elem, src, over);
	};

	self.set_width = function (elem) {
		var cur = elem.currentStyle;
		if (cur.width !== 'auto' || cur.height !== 'auto') return;
		elem.style.width = elem.offsetWidth + 'px';
	};

	self.fix = function (elem) {
		elem.runtimeStyle.behavior = 'none';
		var src = elem[self.eid] || (elem[self.eid] = self.get_src(elem));
		if (!src) src = elem.src;
		if (!src || !/\.png$/.test(src.toLowerCase())) return;
		self.set_width(elem);
		if (elem.src) elem.src = self.blankUrl;
		if (!elem.style.zoom && elem.style.zoom !== '0') elem.style.zoom = 1;
		self.swap(elem, src);
		if (!elem.src) self.fix_bg_elem(elem);
		self.bind(elem, 'propertychange', function () {
			propertychange.apply(this, arguments);
		});

		function propertychange () {
			var env = window.event;
			var target = env.srcElement;
			if (window.jQuery) target = this;
			var tmp = propertychange;
			propertychange = function () {};
			new function () {
				if (target.src) {
					if (target.src === self.blankUrl) return;
					self.swap(target, target.src);
					target[self.eid] = target.src;
					target.src = self.blankUrl;
					return;
				}
				var src = self.get_src(target);
				if (!src) return;
				self.swap(target, src);
				target.style.backgroundImage = 'none';
				target[self.eid] = src;
			};
			propertychange = tmp;
		};
	};

	self.fix_bg_elem = function (elem) {
		elem.style.backgroundImage = 'none';
		self.set_pos(elem);
		(elem.tagName.toUpperCase() === 'A') && (elem.style.cursor = elem.style.cursor || 'pointer');
	};

	self.set_pos = function (elem) {
		var tags = ['input', 'textarea', 'select'];
		var set = function (nodes, cursor) {
			for (var i = nodes.length, node; node = nodes[--i];) {
				var style = node.style;
				!style.position && (style.position = 'relative');
				if (!cursor) continue;
				!style.cursor && (style.cursor = cursor);
			}
		};
		while (tags.length) set(elem.getElementsByTagName(tags.pop()));
		set(elem.getElementsByTagName('a'), 'pointer');
	};

	self.swap = function (elem, src) {
		if (src === self.blankUrl) return;
		var sizing = (elem.currentStyle.backgroundRepeat === 'no-repeat') ? 'crop' : 'scale';
		var al = 'DXImageTransform.Microsoft.AlphaImageLoader';
		if (elem.filters.length && al in elem.filters) {
			elem.filters[al].enabled = 1;
			elem.filters[al].src = src;
			return;
		}
		elem.style.filter = 'progid:' + al + '(src="' + src + '",sizingMethod="' + sizing + '");';
	};

	self.exec_pngfix = function () {
		var exp = 'expression(' + name_space + '.fix(this));';
		var div = $d.createElement('div');
		div.innerHTML = ([
			'div<div><style type="text/css">',
				'img, input { behavior : ' + exp + ' };',
				'.bgpng { behavior : ' + exp + ' };',
			'</style></div>'
		]).join('');
		$d.getElementsByTagName('head')[0].appendChild(div.getElementsByTagName('style')[0]);
	};

	if (!self.noRoll) self.exec_hover();
	if (!self.noFix) self.exec_pngfix();

	function load_lib () {
		/**
		 * domready.js
		 * 
		 * Copyright (c) 2007 Takanori Ishikawa.
		 * License: MIT-style license.
		 * 
		 * MooTools Copyright:
		 * copyright (c) 2007 Valerio Proietti, <http://mad4milk.net>
		 * http://www.metareal.org/2007/07/10/domready-js-cross-browser-ondomcontentloaded/
		 * http://snipplr.com/view/6029/domreadyjs/
		 */
		if(typeof Event=="undefined"){Event=new Object()}Event.domReady={add:function(b){if(Event.domReady.loaded){return b()}var e=Event.domReady.observers;if(!e){e=Event.domReady.observers=[]}e[e.length]=b;if(Event.domReady.callback){return}Event.domReady.callback=function(){if(Event.domReady.loaded){return}Event.domReady.loaded=true;if(Event.domReady.timer){clearInterval(Event.domReady.timer);Event.domReady.timer=null}var j=Event.domReady.observers;for(var f=0,h=j.length;f<h;f++){var g=j[f];j[f]=null;g()}Event.domReady.callback=Event.domReady.observers=null};var d=!!(window.attachEvent&&!window.opera);var a=navigator.userAgent.indexOf("AppleWebKit/")>-1;if(document.readyState&&a){Event.domReady.timer=setInterval(function(){var f=document.readyState;if(f=="loaded"||f=="complete"){Event.domReady.callback()}},50)}else{if(document.readyState&&d){var c=(window.location.protocol=="https:")?"://0":"javascript:void(0)";document.write('<script type="text/javascript" defer="defer" src="'+c+'" onreadystatechange="if (this.readyState == \'complete\') '+name_space+'.Event.domReady.callback();"><\/script>')}else{if(window.addEventListener){document.addEventListener("DOMContentLoaded",Event.domReady.callback,false);window.addEventListener("load",Event.domReady.callback,false)}else{if(window.attachEvent){window.attachEvent("onload",Event.domReady.callback)}else{var b=window.onload;window.onload=function(){Event.domReady.callback();if(b){b()}}}}}}}};
	};
};


// UTF-8
/**
 * scrollsmoothly.js
 * Copyright (c) 2008 KAZUMiX
 * http://d.hatena.ne.jp/KAZUMiX/20080418/scrollsmoothly
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
*/

(function(){
   var easing = 0.25;
   var interval = 20;
   var d = document;
   var targetX = 0;
   var targetY = 0;
   var targetHash = '';
   var scrolling = false;
   var splitHref = location.href.split('#');
   var currentHref_WOHash = splitHref[0];
   var incomingHash = splitHref[1];
   var prevX = null;
   var prevY = null;

   // ドキュメント読み込み完了時にinit()を実行する
   addEvent(window, 'load', init);

   // ドキュメント読み込み完了時の処理
   function init(){
     // ページ内リンクにイベントを設定する
     setOnClickHandler();
     // 外部からページ内リンク付きで呼び出された場合
     if(incomingHash){
       if(window.attachEvent && !window.opera){
         // IEの場合はちょっと待ってからスクロール
         setTimeout(function(){scrollTo(0,0);setScroll('#'+incomingHash);},50);
       }else{
         // IE以外はそのままGO
         scrollTo(0, 0);
         setScroll('#'+incomingHash);
       }
     }
   }

   // イベントを追加する関数
   function addEvent(eventTarget, eventName, func){
     if(eventTarget.addEventListener){
       // モダンブラウザ
       eventTarget.addEventListener(eventName, func, false);
     }else if(window.attachEvent){
       // IE
       eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);});
     }
   }
   
   function setOnClickHandler(){
     var links = d.links;
     for(var i=0; i<links.length; i++){
       // ページ内リンクならスクロールさせる
       var link = links[i];
       var splitLinkHref = link.href.split('#');
       if(currentHref_WOHash == splitLinkHref[0] && d.getElementById(splitLinkHref[1])){
         addEvent(link, 'click', startScroll);
       }
     }
   }

   function startScroll(event){
     // リンクのデフォルト動作を殺す
     if(event){ // モダンブラウザ
       event.preventDefault();
       //alert('modern');
     }else if(window.event){ // IE
       window.event.returnValue = false;
       //alert('ie');
     }
     // thisは呼び出し元になってる
     setScroll(this.hash);
   }

   function setScroll(hash){
     // ハッシュからターゲット要素の座標をゲットする
     var targetEle = d.getElementById(hash.substr(1));
     if(!targetEle)return;
     //alert(scrollSize.height);
     // スクロール先座標をセットする
     var ele = targetEle;
     var x = 0;
     var y = 0;
     while(ele){
       x += ele.offsetLeft;
       y += ele.offsetTop;
       ele = ele.offsetParent;
     }
     var maxScroll = getScrollMaxXY();
     targetX = Math.min(x, maxScroll.x);
     targetY = Math.min(y, maxScroll.y);
     targetHash = hash;
     // スクロール停止中ならスクロール開始
     if(!scrolling){
       scrolling = true;
       scroll();
     }
   }

   function scroll(){
     var currentX = d.documentElement.scrollLeft||d.body.scrollLeft;
     var currentY = d.documentElement.scrollTop||d.body.scrollTop;
     var vx = (targetX - currentX) * easing;
     var vy = (targetY - currentY) * easing;
     var nextX = currentX + vx;
     var nextY = currentY + vy;
     if((Math.abs(vx) < 1 && Math.abs(vy) < 1)
       || (prevX === currentX && prevY === currentY)){
       // 目標座標付近に到達していたら終了
       scrollTo(targetX, targetY);
       scrolling = false;
       location.hash = targetHash;
       prevX = prevY = null;
       return;
     }else{
       // 繰り返し
       scrollTo(parseInt(nextX), parseInt(nextY));
       prevX = currentX;
       prevY = currentY;
       setTimeout(function(){scroll()},interval);
     }
   }
   
   function getDocumentSize(){
     return {width:Math.max(document.body.scrollWidth, document.documentElement.scrollWidth), height:Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)};
   }

   function getWindowSize(){
     var result = {};
     if(window.innerWidth){
       var box = d.createElement('div');
       with(box.style){
         position = 'absolute';
         top = '0px';
         left = '0px';
         width = '100%';
         height = '100%';
         margin = '0px';
         padding = '0px';
         border = 'none';
         visibility = 'hidden';
       }
       d.body.appendChild(box);
       var width = box.offsetWidth;
       var height = box.offsetHeight;
       d.body.removeChild(box);
       result = {width:width, height:height};
     }else{
       result = {width:d.documentElement.clientWidth || d.body.clientWidth, height:d.documentElement.clientHeight || d.body.clientHeight};
     }
     return result;
   }
   
   function getScrollMaxXY() {
     if(window.scrollMaxX && window.scrollMaxY){
       return {x:window.scrollMaxX, y:window.scrollMaxY};
     }
     var documentSize = getDocumentSize();
     var windowSize = getWindowSize();
     return {x:documentSize.width - windowSize.width, y:documentSize.height - windowSize.height};
   }
   
 }());

//ポップアップウィンドウ
window.onload = function (){
	var node_a = document.getElementsByTagName('a');
		for (var i in node_a) {
			if(node_a[i].className == 'popup'){
				node_a[i].onclick = function() {
					return winOpen(this.href, this.rel)
				};
			}
		}
} ;

function winOpen(url, rel) {
	var split = rel.split(',') ;
	window.open(
	url,'popup',
	'width='+ split[0] +',height='+ split[1] +',toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes');

	return false;
};


//アクティブコンテンツ表示用
//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

