﻿/**
 * common.js
 * @version		2.1.0.0 - 12:15 2009/03/04
 */

var Kaas = {
	
	ver: '2.1.0.0',
	mainColomn: 'col-a',
	
	init: function() {
		
		this.addEvent(window, 'load', function() {
			// if (Kaas.$(Kaas.mainColomn)) Kaas.stripeTable(Kaas.mainColomn);
			// Kaas.regInt('li', 3);
			Kaas.formAdjuster(Kaas.mainColomn);
			Kaas.initRollovers();
			Kaas.createExternalLink('container');
		});
		
	},
	
	regInt: function(element, interval) {
		
		var e = document.getElementsByTagName('*');
		var t = document.getElementsByTagName(element);
		
		for (var i = 0, l = e.length; i < l; i++) {
			if (this.hasClassName(e[i], 'regInt')) {
				for (var j = 0, k = t.length; j < k; j++) {
					if (j % interval == interval - 1) this.addClass(t[j], 'regInt' + interval);
				}
			}
		}
		
	},
	
	even: function(element, container) {
		
		var t = (container)? this.$(container) : document;
		var e = t.getElementsByTagName(element);
		
		for (var i = 0, l = e.length; i < l; i++) {
			if (i % 2) this.addClass(e[i], 'even');
		}
		
	},
	
	stripeTable: function(container) {
		
		var t = (container)? this.$(container) : document;
		var tr = t.getElementsByTagName('tr');
		
		for (var i = 0, l = tr.length; i < l; i++) {
			if (i % 2) this.addClass(tr[i], 'stripeEven');
		}
		
	},
	
	initRollovers: function() {
		
		var _opacity = .6;
		
		var imgs = document.getElementsByTagName('img');
		for (var i = 0, l = imgs.length; i < l; i++) setRollover(imgs[i]);
		
		if (this.$('qSend')) setRollover(this.$('qSend'));
		
		
		function setRollover(t) {
			
			var getSrc = t.getAttribute('src');
			
			if (getSrc && getSrc.match(/_rollover\./)) {
			
				t.offSrc = getSrc;
				t.ext    = t.offSrc.substring(t.offSrc.lastIndexOf('.'), t.offSrc.length);
				t.onSrc  = t.offSrc.replace('_rollover' + t.ext, t.ext);
				
				var preload = new Array();
				preload[i] = new Image();
				preload[i].setAttribute('src', t.onSrc);
				
				t.onmouseover = function() {
					this.setAttribute('src', this.onSrc);
				};
				t.onmouseout = t.onclick = function() {
					this.setAttribute('src', this.offSrc);
				};
				
			} else if (getSrc && getSrc.match(/_alpha\./)) {
				
				t.onmouseover = function() {
					this.style.filter = 'alpha(opacity=' + (_opacity * 100) + ')';
					this.style.opacity = _opacity.toString();
					this.style.MozOpacity = _opacity.toString();
				};
				t.onmouseout = t.onclick = function() {
					this.setAttribute('style', '');
					this.removeAttribute('style');
				};
				
			}
		}
		
	},
	
	createExternalLink: function() {
		
		var t = (arguments[0] && typeof arguments[0] == 'string')? document.getElementById(arguments[0]) : document;
		var externalLink = t.getElementsByTagName('a');
		
		for (var i = 0, l = externalLink.length; i < l; i++) {
			var a = externalLink[i];
			if (a.getAttribute('rel') == 'external') {
				if (a.title) a.title += ' : 新しいウィンドウで開きます';
				a.onclick = function() {
					window.open(this.getAttribute('href'), '_blank');
					return false;
				}
			}
		}
		
	},
	
	formAdjuster: function() {
		
		var t = (arguments[0] && typeof arguments[0] == 'string')? document.getElementById(arguments[0]) : document;
		var inputs = t.getElementsByTagName('input');
		
		for (var i = 0, l = inputs.length; i < l; i++) {
			var input = inputs[i];
			if (input.getAttribute('type') == 'text' && input.size) {
				var inputSize = input.size;
				if (0 < inputSize && inputSize <= 5) this.addClass(input, 'level1 typeText');
				else if (inputSize <= 20) this.addClass(input, 'level2 typeText');
				else if (inputSize <= 40) this.addClass(input, 'level3 typeText');
				else this.addClass(input, 'level4 typeText');
			}
		}
		
	},
	
	// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Utilities
	
	/**
	 * $
	 * @notes	shirtcut of "document.getElementById()"
	 * @return	{Object}
	 */
	$: function(id) {
		
		if (document.getElementById(id)) return document.getElementById(id);
		
	},
	
	/**
	 * hasClassName
	 * @return {Boolean}
	 */
	hasClassName: function(element, value) {
	
		var c = element.className.split(' ');
		var i = c.length;
		while(i--) {
			if (c[i] == value) {
				return true;
				break;
			}
		}
		
	},
	
	/**
	 * addClass
	 * @return	{Void}
	 */
	addClass: function(element, value) {
		
		if (!element.className) element.className = value;
		else element.className += ' ' + value;
		
	},
	
	/**
	 * removeClass
	 * @return	{Void}
	 */
	removeClass: function(element, value) {
		
		var c = element.className.split(' ');
		element.className = '';
		
		for (var i = 0, l = c.length; i < l; i++) {
			if (c[i] != value) element.className += (i != l - 1)? c[i] + ' ' : c[i];
		}
		
		if (element.className == '') (element.getAttribute('className'))? element.removeAttribute('className') : element.removeAttribute('class');
		
	},
	
	/**
	 * addElement
	 * @return	{Object}
	 */
	addElement: function(element, attr, parent) {
		
		var newElement = document.createElement(element);
		for (var i in attr) newElement.setAttribute(i, attr[i]);
		var _parent = (parent)? parent : document.body;
		
		return _parent.appendChild(newElement);
		
	},
	
	/**
	 * loadJavaScript
	 * @return	{HTMLScriptElement}
	 */
	loadJavaScript: function(filename) {
		
		var attr = {
			'type': 'text/javascript',
			'src': this.currentPath() + filename + '.js'
		};
		return this.addElement('script', attr, document.getElementsByTagName('head')[0]);
		
	},
	
	/**
	 * loadStyleSheet
	 * @return	{HTMLLinkElement}
	 */
	loadStyleSheet: function(filename, media) {
		
		var attr = {
			'rel': 'stylesheet',
			'type': 'text/css',
			'href': this.currentPath() + '../css/' + filename + '.css',
			'media': (media)? media : 'screen, print'
		};
		return this.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 },
	
	/**
	 * 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;
			}
		}
		
	},
	
	/**
	 * addEvent
	 * @return	{Void}
	 */
	addEvent: function(elm, listener, fn) {
		
		try {
			elm.addEventListener(listener, fn, false);
		} catch(e) {
			elm.attachEvent('on' + listener, fn);
		}
		
	},
	
	/**
	 * trace
	 * @return	{Function}
	 */
	trace: 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()
