/////////////////////////////////////////////////////////
//initialize javascript
/////////////////////////////////////////////////////////

/*
Index
	
	- $(ID);
	
	- dom.event.addEventListener(elm, type, func,capture);
	- dom.event.removeListener(elm, type, func,capture);
	- dom.event.preventDefault(eventObj);
	- dom.event.target(eventObj);
	- dom.event.stopPropagation(eventObj);
	- dom.event.rollOverImage();

	- dom.core.getElementsByClass(Class, node, tag);
	- dom.core.getTextContent(node);
	- dom.core.childNodes(node);
	- dom.core.removeChildNodes(node);
	- dom.core.backGroundCache();

	- dom.misc.popUp(url, width, height, name);
	- dom.misc.getElementsAbsPos(elm);
	- dom.misc.getWindowSize(elm);
	- dom.misc.getCookie(name);
	- dom.misc.setCookie( name, value, expires, path, domain, secure );
	- dom.misc.deleteCookie( name, path, domain );
//
*/

//create init Object

var dom = new Object();
dom.event = new Object();
dom.core = new Object();
dom.misc = new Object();


/*///簡略化関係///*/

//$ ID取得の簡略化 ※$(ID)でアクセス
var $ = function(ID) {
	return document.getElementById(ID);
}

/*///event関係///*/

//addEventListener

dom.event.addEventListener = function(elm, type, func, capture) {
	if(! elm) { return false; }
	if(! capture) {
		capture = false;
	}
	if(elm.addEventListener) {
		elm.addEventListener(type, func, false);
	} else if(elm.attachEvent) {
		elm.attachEvent('on'+type, func);
	} else {
		return false;
	}
	return true;
};

//removeListener ※引数はaddEventListenerと同じものを入れる。

dom.event.removeListener = function(elm, type, func, capture) {
	if(! elm) { return false; }
	if(! capture) {
		capture = false;
	}
	if(elm.removeListener) {
		elm.removeListener(type, func, false);
	} else if(elm.detachEvent) {
		elm.detachEvent('on' + type, func);
	} else {
		return false;
	}
	return true;
};

//preventDefault デフォルトアクションの抑止

dom.event.preventDefault = function(eventObj) {
	if(eventObj && eventObj.preventDefault) {
		eventObj.preventDefault();
		eventObj.currentTarget['on'+eventObj.type] = function() { return false; };
	} else if(window.event) {
		window.event.returnValue = false;
	}
}

//eventTarget evtObjにセットされているイベント・ターゲットの特定

dom.event.target = function(eventObj) {
	if(eventObj && eventObj.target) {
		if(eventObj.target.nodeType == 3) {
			return eventObj.target.parentNode;
		} else {
			return eventObj.target;
		}
	} else if(window.event && window.event.srcElement) {
		return window.event.srcElement;
	} else {
		return null;
	}
};

//stopPropagation イベントの伝播を抑止

dom.event.stopPropagation = function(eventObj) {
	if(eventObj && eventObj.stopPropagation) {
		eventObj.stopPropagation();
	} else if(window.event) {
		window.event.cancelBubble = true;
	}
};

//rollOverImage ロールオーバーでイメージ置換

dom.event.rollOverImage = function()
{
	if(!document.getElementsByTagName('IMG')) return
	
	var PreLoad = new Array();
	var templateSrc;
	var overImage = document.getElementsByTagName('IMG');
	
	for(var i = 0; i < overImage.length; i++)
	{
		if(overImage.item(i).className == 'over')
		{
			var src = overImage.item(i).getAttribute('src');
			var imageType = src.substring(src.lastIndexOf('.'), src.length);
			var hoverSrc = src.replace(imageType, '_on' + imageType);
			
			overImage.item(i).setAttribute('hoverSrc', hoverSrc);
			
			PreLoad[i] = new Image();
			PreLoad[i].src = hoverSrc;
			
			
			//オーバー
			overImage.item(i).onmouseover = function(){
				templateSrc = this.getAttribute('src');
				this.setAttribute('src', this.getAttribute('hoverSrc'));
			}//end func
			
			//アウト
			overImage.item(i).onmouseout = function() {
				if(!templateSrc) {
					templateSrc = this.getAttribute('src').replace('_on' + imageType, imageType);
				}
					this.setAttribute('src', templateSrc);
			}//end func
			
		}//end if
	}//end for
	
}


/*///core関係///*/

//getElementsByCalss classを取得

dom.core.getElementsByClass = function(Class, node, tag) {
	var classArray = new Array();
	if(node == null) { node = document; }
	if(tag == null) { tag = '*'; }
	var tagElements = node.getElementsByTagName(tag);
	var tagList = tagElements.length;
	var pattern = new RegExp('(^|\\s)' + Class + '(\\s|$)');
	var j = 0;
	for(var i = 0;  i < tagList; i++) {
		if( pattern.test(tagElement[i].className)) {
			classArray[j] = tagElements[i];
			j++;
		}
	}
	return classArray;
}

//テキストノードを取得

dom.core.getTextContent = function(node) {
	var text = "";
	if(! node) { return text; }
	if(typeof node.textContent != "undefined") {
		text = node.textContent;
	} else if(typeof node.innerText != "undefined") {
		text = node.innerText;
	} else if(node.hasChildNodes()) {
		for(var i = node.childNodes.length; i--;) {
			var nodeList = node.childNodes.item(i);
			if(nodeList.nodeType == 3) {
				text = nodeList.nodeValue + text;
			} else {
				text = dom.core.getTextContent(nodeList) + text;
			}
		}
	}
	return text;
}

//childNodes ホワイトスペースノードの除外

dom.core.childNodes = function(node) {
	var array = new Array();
	if(! node) { return array; }
	if(! node.hasChildNodes()) { return array; }
	var children = node.childNodes;
	for(var i = 0; i < children.length; i++) {
		var obj = children.item(i);
		if(obj.nodeType == 3) {
			var text = obj.nodeValue;
			if( ! text.match("/[^\s\t\n\r/]/") ) {
				continue;
			}
		}
		array.push(obj);
	}
	array.item = function(n) {
		if(array[n]) {
			return array[n];
		} else {
			return null;
		}
	}
	return array;
}

//removeChildNodes 要素以下を削除

dom.core.removeChildNodes = function(node) {
	while(node.hasChildNodes()) {
		node.removeChild(node.lastChild);
	}
}

//backGroundCache IE6の背景画像置換の際のちらつきを無くす

dom.core.backGroundCache = function() {
	try {
		document.execCommand('BackgroundImageCache', false, true);
	} catch(e) {
	}
}


/*///misc関係///*/

//popUp ポップアップウィンドウを表示  ※使用する際はすべて 'String' で囲む

dom.misc.popUp = function(url, width, height, name) {
	var centerWidth = screen.availWidth/2;
	var centerHeight = screen.availHeight/2;
	var wOption = "scrollbars=no,resizable=no,width="+width+",height="+height+",left="+(centerWidth-(width/2))+",top="+(centerHeight-(height/2));
	
	var newWindow = window.open(url, name, wOption);
	newWindow.focus();
};

//getElementsAbsPos ウィンドウサイズからの位置を取得

dom.misc.getElementsAbsPos = function(elm) {
	var obj = new Object();
	obj.x = elm.offsetLeft;
	obj.y = elm.offsetTop;
	while(elm.offsetParent) {
		elm = elm.offsetParent;
		obj.x += elm.offsetLeft;
		obj.y += elm.offsetTop;
	}
	return obj;
}

//getWindowSize ウィンドウサイズを取得

dom.misc.getWindowSize = function() {
	var obj = new Object();
	if(document.uniqueID) {
		obj.width = document.documentElement.clientWidth;
		obj.height = document.documentElement.clientHeight;
	} else {
		obj.width = window.innerWidth;
		obj.height = window.innerHeight;
	}
	return obj;
}

/* ------------------------------------------
 * getCookie(), setCookie(), deleteCookie()
/* ------------------------------------------ */

dom.misc.getCookie = function(name) {
	var start = document.cookie.indexOf(name + "=");
	var length = start + name.length + 1;
	if( (! start) && (name != document.cookie.substring(0, name.length) )) {
		return null;
	}
	if( start == -1) return null;
	var end = document.cookie.indexOf(';', length);
	if(end == -1) {
		end = document.cookie.length;
	}
	return decodeURIComponent(document.cookie.substring(length, end));
}

dom.misc.setCookie = function( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+encodeURIComponent( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}

dom.misc.deleteCookie = function( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

//initialize

dom.event.addEventListener(window, 'load', initialize);

function initialize() {
	dom.event.rollOverImage();
	dom.core.backGroundCache();
}
