﻿/**

 * common.js

 * @version		2.1.5 - 12:05 2009/06/02

 */



var Kaas = {

	

	ver: '2.1.5',

	mainColomn: 'col-a',

	

	init: function() {

		

		this.ready(function() {

			

			Kaas.imageRollover.init();

			Kaas.externalLink();

			Kaas.even('li' , 'col-b');

			Kaas.trRows();

			

		});

		

	},

	

	imageRollover: {

		

		opacity: .6,

		

		init: function() {

			

			var imgs = document.getElementsByTagName('img');

			for (var i = 0, l = imgs.length; i < l; i++) this.set(imgs[i], i);

			

		},

		

		set: function(target) {

			

			var t = Kaas.$(target);

			var _src = t.getAttribute('src');

			t.index = (typeof arguments[1] == 'number')? arguments[1] : 0;

			

			// src="xxx_rollover.png"

			if (_src && _src.match(/_rollover\./)) this._hover(t, _src, 'rollover');

			// src="xxx_alpha.png"

			else if (_src && _src.match(/_alpha\./)) Kaas.setMouseEventAlpha(t, Kaas.imageRollover.opacity);

			// class="imgover"

			else if (_src && Kaas.hasClassName(t, 'imgover')) this._hover(t, _src);

			

		},

		

		/**

		 * @private

		 */

		_hover: function(target, src, type) {

			

			var t = target;

			t.offSrc = src;

			t.ext    = t.offSrc.substring(t.offSrc.lastIndexOf('.'), t.offSrc.length);

			t.onSrc  = type == 'rollover'

				? t.offSrc.replace('_rollover' + t.ext, t.ext)

				: t.offSrc.replace(t.ext, '_o' + t.ext);

			

			var preload = [];

			preload[t.index] = new Image();

			preload[t.index].setAttribute('src', t.onSrc);

			

			t.onmouseover = function() {

				this.setAttribute('src', this.onSrc);

			};

			t.onmouseout = t.onclick = function() {

				this.setAttribute('src', this.offSrc);

			};

			

		}

		

	},

	

	setMouseEventAlpha: function(target, op) {

		

		if (!target) return;

		

		var t = Kaas.$(target);

		

		t.onmouseover = function() {

			var _opacity = op;

			this.style.filter = 'alpha(opacity=' + (_opacity * 100) + ')';

			this.style.opacity = _opacity.toString();

			this.style.MozOpacity = _opacity.toString();

		};

		t.onmouseout = t.onclick = t.onmouseup = function() {

			this.setAttribute('style', '');

			this.removeAttribute('style');

		};

		

	},

	

	externalLink: function(container) {

		

		var t = Kaas.$(container);

		var e = t.getElementsByTagName('a');

		

		for (var i = 0, l = e.length; i < l; i++) {

			var a = e[i];

			if (a.getAttribute('rel') == 'external') {

				if (a.title) a.title += ' : 新しいウィンドウで開きます';

				a.onclick = function() {

					window.open(this.getAttribute('href'), '_blank');

					return false;

				}

			}

		}

		

	},

	

	/**

	 * 指定要素の偶数行にclass="even"を追加する

	 * @param	element:String - 要素名

	 * @param	container:* - id名 || ELEMENT_NODE || undefined

	 * @return	{Void}

	 */

	even: function(element, container) {

		if(!document.getElementById(container)){ return false};

		var t = Kaas.$(container);

		var e = t.getElementsByTagName(element);

		var flag = false;

		for (var i = 0, l = e.length; i < l; i++) {

			if (flag) this.addClass(e[i], 'even');

			flag = !flag;

		}

	},

	

	/**

	 * tr の偶数行にclass="trEven"を追加する

	 * thead, tfoot内のtrは無視する

	 * @param	container:* - id名 || ELEMENT_NODE || undefined

	 * @return	{Void}

	 */

	trRows: function(container) {

		var tr = Kaas.$(container).getElementsByTagName('tr');

		var flag = false;

		for (var i = 0, l = tr.length; i < l; i++) {

			var _parentNodeName = tr[i].parentNode.tagName.toLowerCase();

			if (flag && _parentNodeName != 'thead' && _parentNodeName != 'tfoot') this.addClass(tr[i], 'trEven');

			flag = !flag;

		}

	},

	

	// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Utilities

	

	/**

	 * @param	obj:* - id名 || ELEMENT_NODE || undefined

	 * @return	{Object}

	 */

	$: function(obj) {

		if (obj && typeof obj == 'string') {

			if (document.getElementById(obj)) {

				return document.getElementById(obj);

			} else {

				throw new Error('There is no "' + obj + '" ');

			}

		} else if (obj && obj.nodeType == 1) {

			return obj;

		} else {

			return document;

		}

	},

	

	/**

	 * @param	target:Object - ELEMENT_NODE

	 * @return {Boolean}

	 */

	hasClassName: function(target, value) {

		var c = target.className.split(' ');

		var i = c.length;

		while(i--) {

			if (c[i] == value) {

				return true;

				break;

			}

		}

	},

	

	/**

	 * @param	target:Object - ELEMENT_NODE

	 * @return	{Void}

	 */

	addClass: function(target, value) {

		if (this.hasClassName(target, value)) return false;

		if (!target.className) target.className = value;

		else target.className += ' ' + value;

	},

	

	/**

	 * @param	target:Object - ELEMENT_NODE

	 * @return	{Void}

	 */

	removeClass: function(target, value) {

		var c = target.className.split(' ');

		target.className = '';

		for (var i = 0, l = c.length; i < l; i++) {

			if (c[i] != value) target.className += (i != l - 1)? c[i] + ' ' : c[i];

		}

		if (target.className == '') (target.getAttribute('className'))? target.removeAttribute('className') : target.removeAttribute('class');

	},

	

	/**

	 * addElement

	 * @param	element:String - 要素名

	 * @param	attr:Object - 属性（オプション）

	 * @param	parentObject:Object - ELEMENT_NODE（オプション）

	 * @return	{Object}

	 */

	addElement: function(element, attr, parentObject) {

		var newElement = document.createElement(element);

		for (var i in attr) newElement.setAttribute(i, attr[i]);

		var _parent = (parentObject)? parentObject : document.body;

		return _parent.appendChild(newElement);

	},

	

	load: {

		/**

		 * js

		 * @return	{HTMLScriptElement}

		 */

		js: function(filename) {

			var attr = {

				'type': 'text/javascript',

				'src': Kaas.root() + filename

			};

			return Kaas.addElement('script', attr, document.getElementsByTagName('head')[0]);

		},

		

		/**

		 * css

		 * @return	{HTMLLinkElement}

		 */

		css: function(filename, media) {

			var attr = {

				'rel': 'stylesheet',

				'type': 'text/css',

				'href': Kaas.root() + filename,

				'media': (media)? media : 'screen, print'

			};

			return Kaas.addElement('link', attr, document.getElementsByTagName('head')[0]);

		}

	},

	

	/**

	 * browser

	 * Based on Prototype.js

	 * @see	http://www.prototypejs.org/

	 */

	browser: {

		IE:		!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1),

		Opera:	navigator.userAgent.indexOf('Opera') > -1,

		WebKit:	navigator.userAgent.indexOf('AppleWebKit/') > -1,

		Gecko:	navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') === -1,

		MobileSafari:	!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)

	},

	

	/**

	 * isIEVer

	 * @return	{Boolean}

	 */

	isIEVer: function(v) { return this.browser.IE && navigator.appVersion.indexOf('MSIE ' + v) > 0; },

	

	/**

	 * isFF2

	 * @return	{Boolean}

	 */

	isFF2: function() { return this.browser.Gecko && navigator.userAgent.toLowerCase().indexOf('firefox/2') != -1 },

	

	/**

	 * os (beta)

	 * @return	{Array}

	 */

	os: {

		WindowsME:    navigator.userAgent.match(/Win(dows)? (9x 4\.90|ME)/),

		Windows2000:  navigator.userAgent.match(/Win(dows)? (NT 5\.0|2000)/),

		WindowsXP:    navigator.userAgent.match(/Win(dows)? (NT 5\.1|XP)/),

		WindowsVista: navigator.userAgent.match(/Win(dows)?  NT 6\.0/)

	},

	

	/**

	 * currentPath

	 * @return	{String}

	 */

	currentPath: function() {

		var s = document.getElementsByTagName('script');

		for (var i = 0, l = s.length; i < l; i++) {

			if (s[i].src && s[i].src.match(/common\.js(\?.*)?$/)) {

				return s[i].src.replace(/common\.js(\?.*)?$/, '');

				break;

			}

		}

	},

	

	/**

	 * root

	 * @return	{String}

	 */

	root: function() { return this.currentPath() + '../'; },

	

	/**

	 * addEvent

	 * @return	{Void}

	 */

	addEvent: function(elm, listener, fn) {

		try {

			elm.addEventListener(listener, fn, false);

		} catch(e) {

			elm.attachEvent('on' + listener, fn);

		}

	},

	

	/**

	 * ready

	 * equal to Kaas.addEvent(window, 'load', myfunc);

	 * @return	{Void}

	 */

	ready: function(fn) { this.addEvent(window, 'load', fn); },

	

	/**

	 * alerts

	 * @return	{Function}

	 */

	alerts: function() {

		var str = '';

		for (var i = 0, l = arguments.length; i < l; i++) {

			str += (i != 0)? ', ' + arguments[i] : arguments[i];

		}

		return alert(str);

	},

	

	/**

	 * isVersion

	 * @return	{Boolean}

	 */

	isVersion: function(v) { return v === parseInt(this.ver.substring(0, 1)); },

	

	/**

	 * toString

	 * @return	{String}

	 */

	toString: function() { return '[object Kaas]'; }



};



Kaas.init();



// console.log()



/*--------------ページトップへスクロール--------------------*/
var play_cnt = 0;

function get_obj_y(target){

  $gosa = 0; //微調整の値px

  var pos = bytefx.$position(document.getElementById(target));
  return pos.y + $gosa;
}

function softScrollBack(top) {

  play_cnt++;
  softScrollBackExec(top, play_cnt, 0);
}

function softScrollBackExec(top, play_no, scrj) {

  if(play_cnt > play_no){
    //### console.log("play_cnt="+ play_cnt +" : play_no="+ play_no);
    return false;
  }

  if(navigator.appName == "Microsoft Internet Explorer" && document.compatMode == "CSS1Compat") {
    var scdist = document.body.parentNode.scrollTop;
  } else if(navigator.appName == "Opera") {
    var scdist = document.body.parentNode.scrollTop;
  } else if(navigator.appName == "Netscape" && navigator.userAgent.indexOf("Safari") != -1) {
    var scdist = document.body.scrollTop;
  } else if(navigator.appName == "Netscape" && document.compatMode == "CSS1Compat") {
    var scdist = document.body.parentNode.scrollTop;
  } else {
    var scdist = document.body.scrollTop;
  }


  if(scdist >= top){
    scdist = scdist - top;
    flag = -1;
    point = 0.2;
  } else{
    scdist = top - scdist;
    flag =  1;
    point = 0.2;
  }

  if(scrj<50 && scdist>0){
     scdist = (scdist>2) ? Math.ceil(scdist*point) : 1;
     scrj++;
     scrollBy(0,flag * scdist);
     //### console.log((flag * scdist));
     //### console.log("play_cnt="+ play_cnt +" : play_no="+ play_no);
     var timerID = setTimeout("softScrollBackExec(" + top +","+ play_no +","+ scrj +")", 20);
  }
  
function handle(delta) {
        if (delta < 0)
                // 下方向にまわした場合の処理
               clearTimeout(timerID);
        else
                // 上方向にまわした場合の処理
                clearTimeout(timerID);
}


function wheel(event){
        var delta = 0;
        if (!event) /* For IE. */
                event = window.event;
        if (event.wheelDelta) { /* IE/Opera. */
                delta = event.wheelDelta/120;
                if (window.opera)
                        delta = -delta;
        } else if (event.detail) { /** Mozilla case. */
                delta = -event.detail/3;
        }

        if (delta)
                handle(delta);
}

	if (window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false);
	window.onmousewheel = document.onmousewheel = wheel;

}

/*--------------ページトップへスクロール微調整--------------------*/

function get_obj_y2(target){

  var gosa = -30; //微調整の値px

  var pos = bytefx.$position(document.getElementById(target));
  return pos.y + gosa;
}
