﻿/**
 * common.js F
 * @version		2.2.1 - 16:30 2010/08/04
 */

var Kaas = {
	
	ver: '2.2.1',
	srcRex: /common\.js(\?.*)?$/,
	mainColomn: 'col-a',
	
	init: function() {
		this.ready(function() {
			Kaas.imageRollover.init();
		});
	},
	
	imageRollover: {
		opacity: .6,
		_rolloverRex: /_rollover\./,
		_alphaRex: /_alpha\./,
		
		init: function() {
			var imgs = document.getElementsByTagName('img');
			for (var i = 0, l = imgs.length; i < l; i++) this.set(imgs[i]);
		},
		
		set: function(target) {
			var t = Kaas.$(target);
			var src = t.getAttribute('src');
			var rolloverRex = this._rolloverRex;
			var alphaRex = this._alphaRex;
			// src="xxx_rollover.png"
			if (src && src.match(rolloverRex)) this._hover(t, src, 'rollover');
			// src="xxx_alpha.png"
			else if (src && src.match(alphaRex)) Kaas.mouseEvent.opacity(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 = new Image();
			preload.setAttribute('src', t.onSrc);
			
			t.onmouseover = function() {
				this.setAttribute('src', this.onSrc);
			};
			t.onmouseout = t.onclick = function() {
				this.setAttribute('src', this.offSrc);
			};
		}
	},
	
	mouseEvent: {
		opacity: 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.onmousedown = function() {
				var _opacity = op - .1;
				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 (Kaas.hasRel(a, '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) {
		var t = Kaas.$(container);
		var e = t.getElementsByTagName(element);
		for (var i = 0, l = e.length; i < l; i++) {
			if (i % 2) this.addClass(e[i], 'even');
		}
	},
	
	/**
	 * tr の偶数行にclass="trEven"を追加する
	 * thead, tfoot内のtrは無視する
	 * @param	container:* - id名 || ELEMENT_NODE || undefined
	 * @return	{Void}
	 */
	trRows: function(container) {
		var tr = Kaas.$(container).getElementsByTagName('tr');
		for (var i = 0, l = tr.length; i < l; i++) {
			var t = tr[i];
			var _parentNodeName = t.parentNode.tagName.toLowerCase();
			var isEven = i % 2 == 0;
			if (isEven && _parentNodeName != 'thead' || isEven && _parentNodeName != 'tfoot') this.addClass(t, 'trEven');
		}
	},
	
	// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Utilities
	
	/**
	 * @param	obj:* - id名 || ELEMENT_NODE || undefined
	 * @return	{Object}
	 */
	$: function(obj) {
		var doc = document;
		if (obj && typeof obj == 'string') {
			if (doc.getElementById(obj)) {
				return doc.getElementById(obj);
			} else {
				throw new Error('There is no "' + obj + '" ');
			}
		} else if (obj && obj.nodeType == 1) {
			return obj;
		} else {
			return doc;
		}
	},
	
	/**
	 * @param	target:Object - ELEMENT_NODE
	 * @param	value:String
	 * @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
	 * @param	value:String
	 * @return	{Boolean}
	 */
	hasRel: function(target, value) {
		if (!target.getAttribute('rel')) return false;
		var c = target.getAttribute('rel').split(' ');
		var i = c.length;
		while(i--) {
			if (c[i] == value) {
				return true;
				break;
			}
		}
	},
	
	/**
	 * @param	target:Object - ELEMENT_NODE
	 * @param	value:String - クラス名
	 * @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
	 * @param	value:String - クラス名
	 * @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');
		var rex = this.srcRex;
		for (var i = 0, l = s.length; i < l; i++) {
			if (s[i].src && s[i].src.match(rex)) {
				return s[i].src.replace(rex, '');
				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);
	},
	
	ie6BackgroundImageCache: function() {
		try {
			document.execCommand('BackgroundImageCache', false, true);
		} catch(e) {}
	},
	
	/**
	 * addIndexHTML
	 */
	addIndexHTML: {
		init: function() {
			var loc = location.href;
			if (loc.indexOf('http') == 0 || loc.indexOf('ftp') == 0) return false;
			
			var a = document.getElementsByTagName('a');
			var lastS = /\/$/;
			var i, l = a.length;
			if (window.addEventListener) {
				for (i = 0; i < l; i++) {
					a[i].addEventListener('click', function(e) {
						Kaas.addIndexHTML.onClick(this, lastS);
					}, false);
				}
			} else {
				for (i = 0; i < l; i++) {
					a[i].attachEvent('onclick', function(e) {
						var t = e.srcElement.tagName == 'IMG' ? e.srcElement.parentNode : e.srcElement;
						Kaas.addIndexHTML.onClick(t, lastS);
					});
				}
			}
		},
		onClick: function(t, regex) {
			var h = t.getAttribute('href');
			var ex = h.indexOf('http') != 0;
			var ref = h.split('#');
			var len = ref.length;
			if (ex && h.match(regex)) t.href += 'index.html';
			else if (ex && len > 1 && ref[0].match(regex)) t.href = ref[0] + 'index.html#' + ref[1];
			// Kaas.alerts(ex, e, t, t.tagName, t.href);
		}
	},
	
	/**
	 * isVersion
	 * @return	{Boolean}
	 */
	isVersion: function(v) { return v === parseInt(this.ver.substring(0, 1)); },
	
	/**
	 * toString
	 * @return	{String}
	 */
	toString: function() { return '[object Kaas]'; }

};

Kaas.init();

