/////////////////////////////////////////////////////////
//initialize javascript
/////////////////////////////////////////////////////////

/*
Index
	
	- util.$(ID), util.$Tag(tag,w);
	- createElm(elm, id ,p), deleteElm(e), clearElm(e), createText(e,t)
	- setW(e, s), setH(e, s), setX(e, s), setY(e, s), getW(e), getH(e), getX(e), getY(e), 
	
	- 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.event.rollOverFadeImage();	

	- 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();

var util = new Object();

/*///簡略化関係///*/

//$ ID取得の簡略化 ※$(ID)でアクセス
util.$ = function(ID, w) {
	if(w == null) w = self;
	if(typeof ID == "string") { elm = w.document.getElementById(ID); } else { elm = ID; }
	if(elm == null || typeof elm != "object") throw Error("エレメント "+ID+" の型が一致しません。型は "+typeof elm + "です。");
	return elm;
}

//$Tag Tag取得の簡略化 ※$Tag(tag)でアクセス
util.$Tag = function(tag, w) {
	if(w == null) w = document;
	if(typeof tag == "string") { elm = w.getElementsByTagName(tag); } else { elm = tag; }
	if(elm == null || typeof elm != "object") throw Error("エレメント "+tag+" の型が一致しません。型は "+typeof elm + "です。");
	return elm;
}

//Element create delete clear
function createElm(elm, id ,p) {
	if(p == null) p = document.body;
	p = util.$(p);
	var Element = document.createElement(elm);
	if(id != null && id != "") {
		Element.id = id;
	}
	p.appendChild(Element);
	return Element;
}

function deleteElm(e) {
	e = util.$(e);
	e.parentNode.removeChild(e);
}

function clearElm(e) {
	e = util.$(e);
	while(e.hasChildNodes()) {
		e.removeChild(e.lastChild)
	};
}

function createText(e,t) {
	e = util.$(e);
	if( t == null) t = " ";
	var TextNode = document.createTextNode(t);
	e.appendChild(TextNode);
}

function setW(e, s) { if(s == null) s = 0; e = util.$(e); e.style.width = s + "px"; }
function setH(e, s) { if(s == null) s = 0; e = util.$(e); e.style.height = s + "px"; }
function setX(e, s) { if(!s) s = 0; e = util.$(e); e.style.position = "absolute"; e.style.left = s + "px"; }
function setX2(e, s) { if(!s) s = 0; e = util.$(e); e.style.position = "absolute"; e.style.right = s + "px"; }
function setY(e, s) { if(!s) s = 0; e = util.$(e); e.style.position = "absolute"; e.style.top = s + "px"; }

function getW(e) { e = util.$(e); return parseInt(e.style.width); }
function getH(e) { e = util.$(e); return parseInt(e.style.height); }
function getX(e) { e = util.$(e); return parseInt(e.style.left); }
function getY(e) { e = util.$(e); return parseInt(e.style.top); }


/*///event関係///*/

//addEventListener

dom.event.addEventListener = function(elm, evType, fn, useCapture) {
	if(! elm) { return false; }
	if(! useCapture) {
		useCapture = false;
	}
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.attachEvent) {
		var IEfn = function(e){
		if(!e) e = window.event;
		e.currentTarget = elm;
		if(Function.prototype.call)
			fn.call(elm,e)
		else{
			elm._currentHandler = fn;
			elm._currentHandler(e);
			elm._currentHandler = null;
		}
	}
	var r = elm.attachEvent('on' + evType, IEfn);
	return r;
	}
	else {
	elm['on' + evType] = fn;
	}
};

dom.event.addEvent = function(elm, type, func, useCapture) {
  if(! elm) { return false; }
  if(! useCapture) {
    useCapture = 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.removeEventListener = function(elm, type, func, capture) {
	if(! elm) { return false; }
	if(! capture) {
		capture = false;
	}
	if(elm.removeEventListener) {
		elm.removeEventListener(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
	
}

//rollOverFadeImage ロールオーバーでフェーディングイメージ置換

dom.event.rollOverFadeImage = function ()
{
		if(!document.getElementsByTagName('IMG')){ return; }
		
		var overImg = document.getElementsByTagName('IMG');
		var insertion = [];
		
		for(var i=0;i<overImg.length;i++) {
			
				if(overImg[i].className=='fadeover') {
			
					var src = overImg.item(i).getAttribute('src');
					
					var imageType = src.substring(src.lastIndexOf('.'), src.length);
					var hoverSrc = src.replace(imageType, '_on' + imageType);
			
					overImg.item(i).setAttribute('hoverSrc', hoverSrc);
					
					hoverImage = document.createElement('IMG');
					hoverImage.src = hoverSrc;
					
					var minAlpha = 0;
					hoverImage.currentAlpha = minAlpha;
					hoverImage.style.opacity = minAlpha/100;
					hoverImage.style.filter = 'alpha(opacity='+minAlpha+')';
					hoverImage.style.position = 'absolute';

					dom.event.addEventListener(hoverImage,'mouseover',function(){ Fader(this,100); });
					dom.event.addEventListener(hoverImage,'mouseout',function(){ Fader(this,0); });
					insertion[insertion.length] = {position:overImg[i],element:hoverImage};
				}
		}
		for(var i=0;i<insertion.length;i++){
				var parent = insertion[i].position.parentNode;
				parent.insertBefore(insertion[i].element,insertion[i].position);
		}
}

function Fader(targetObj,targetAlpha){
		targetObj.targetAlpha = targetAlpha;
		if(targetObj.currentAlpha==undefined){
				targetObj.currentAlpha = 100;
		}
		if(targetObj.currentAlpha==targetObj.targetAlpha){
				return;
		}
		if(!targetObj.fading){
				if(!targetObj.fader){
						targetObj.alphaEvent = alphaEvent;
				}
				targetObj.fading = true;
				targetObj.alphaEvent();
		}
}

function alphaEvent(){
		this.currentAlpha += (this.targetAlpha - this.currentAlpha)*0.22;
		if(Math.abs(this.currentAlpha-this.targetAlpha)<1){
				this.currentAlpha = this.targetAlpha;
				this.fading = false;
		}
		var alpha = parseInt(this.currentAlpha);
		this.style.opacity = alpha/100;
		this.style.filter = 'alpha(opacity='+alpha+')';
		if(this.fading){
				var scope = this;
				setTimeout(function(){alphaEvent.apply(scope)},30);
		}
}

/*///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,scrollbar, resizeble) {
	if(scrollbar == null) scrollbar = "no";
	if(resizeble == null) resizeble = "no";
	var centerWidth = screen.availWidth/2;
	var centerHeight = screen.availHeight/2;
	var wOption = "scrollbars="+scrollbar+",resizable="+resizeble+",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();
	dom.event.rollOverFadeImage();
}