var RollOver = new Object();
RollOver.setup = {
	'button' : {
		'hover' : {
			'className'   : 'over',
			'addition'    : 'o'
		},
		'stay' : {
			'stayIdClass'    : 'imggnav',
			'stayIdClass_s'  : 'imgstay',
			'stayClClass'    : 'imglnav',
			'stayClClass_s'  : 'imgstay',
			'addition'       : 's'
		},
		/* stay bodyID */
		'stayId' : {
			'top'     : '0',
			'risk'    : '1',
			'feature' : '2'
		},
		/* stay bodyClass */
		'stayClass' : {
			'snavi01' : '0',
			'snavi02' : '1',
			'snavi03' : '2',
			'snavi04' : '3',
			'snavi05' : '4',
			'snavi06' : '5',
			'snavi07' : '6',
			'snavi08' : '7',
			'snavi09' : '8',
			'snavi10' : '9'
		}
	}
};

/*****************************************
	Event Listener
	- RollOver.event.addEventListener(elm, type, func, useCapture)
	- RollOver.event.removeEventListener(elm, type, func, useCapture)
	- RollOver.event.target(evt)
	- RollOver.event.targetTag(tagName, evt)
	- RollOver.event.preventDefault(evt)
	- RollOver.event.stopPropagation(evt)
*****************************************/
RollOver.event = new Object();
RollOver.event.addEventListener = function(elm, type, func, useCapture) {
	if(! elm) { return false; }
	if(! useCapture) { useCapture = false; }
	if(elm.addEventListener) {
		elm.addEventListener(type, func, useCapture);
	} else if(elm.attachEvent) {
		elm.attachEvent('on'+type, func);
	} else {
		return false;
	}
	return true;
};
RollOver.event.removeEventListener = function(elm, type, func, useCapture) {
	if(! elm) { return false; }
	if(! useCapture) { useCapture = false; }
	if(elm.removeEventListener) {
		elm.removeEventListener(type, func, useCapture);
	} else if(elm.detachEvent) {
		elm.detachEvent('on'+type, func);
	} else {
		return false;
	}
	return true;
};
RollOver.event.target = function(evt) {
	if(evt && evt.target) {
		if(evt.target.nodeType == 3) {
			return evt.target.parentNode;
		} else {
			return evt.target;
		}
	} else if (window.event && window.event.srcElement) {
		return window.event.srcElement;
	} else {
		return null;
	}
};
RollOver.event.targetTag = function(tagName, evt) {
	var elm = RollOver.event.target(evt);
	while(elm.nodeName.toLowerCase() != 'html') {
		if(elm.nodeName.toLowerCase() == tagName) {
			return elm;
		} else {
			elm = elm.parentNode;
		}
	}
	return null;
};
RollOver.event.preventDefault = function(evt) {
	if(evt && evt.preventDefault) {
		evt.preventDefault();
		evt.currentTarget['on'+evt.type] = function() { return false; };
	} else if(window.event) {
		window.event.returnValue = false;
	}
};
RollOver.event.stopPropagation = function(evt) {
	if(evt && evt.stopPropagation) {
		evt.stopPropagation();
	} else if(window.event) {
		window.event.cancelBubble = true;
	}
};

/*****************************************
	Utilities
	- RollOver.util.findClass(className, targetClass);
	- RollOver.util.getElementsByTagClassName(tagName, className);
	- RollOver.util.wrapTag(tagName, targetNode);
	- RollOver.util.getElementPos(elm);
	- RollOver.util.getScrollPos();
	- RollOver.util.getDocumentSize();
	- RollOver.util.getInnerSize();
*****************************************/
RollOver.util = new Object();
RollOver.util.findClass = function(className, targetClass) {
	var classList;
	if(className) {
		classList = className.split(' ');
		for(var i=0; i<classList.length; i++) {
			if(classList[i] == targetClass) { return true; }
		} return false;
	} else { return false; }
};
RollOver.util.getElementsByTagClassName = function(tagName, targetClass) {
	var tags = document.getElementsByTagName(tagName);
	var flag;
	var elms = new Array();
	if(tags.length != 0) {		
		for(var i=0; i<tags.length; i++) {
			flag = RollOver.util.findClass(tags.item(i).className, targetClass);
			if(flag) { elms.push(tags.item(i)); }
		}
		if(elms.length != 0) { return elms; }
	} else {
		return null;
	}
};
/*****************************************
	Button Images Roll Over
	- RollOver.button.hover()
	- RollOver.button.stayId()
	- RollOver.button.stayClass()
*****************************************/
RollOver.button = new Object();
/* Hover */
RollOver.button.hover = function() {
	var obj = RollOver.setup.button;
	var elms = RollOver.util.getElementsByTagClassName('img', obj.hover.className);
	var inputs = RollOver.util.getElementsByTagClassName('input', obj.hover.className);
	if(inputs) {
		var elms = elms.concat(inputs);
	}
	if(elms) {
		for(var i=0; i<elms.length; i++) {
			new Image().src = RollOver.button.replacePath(elms[i], obj.hover.addtion);
			RollOver.event.addEventListener(elms[i], 'mouseover', RollOver.button.switchImg);
			RollOver.event.addEventListener(elms[i], 'mouseout', RollOver.button.switchImg);
		}
	}
};
/* Stay By BodyID */
RollOver.button.stayId = function() {
	var obj = RollOver.setup.button;
	var bodyId = document.getElementsByTagName('body')[0].id;
	var elms = RollOver.util.getElementsByTagClassName('img', obj.stay.stayIdClass);
	if(elms) {
		for(var i=0; i<elms.length; i++) {
			if(i == obj.stayId[bodyId]) {
				new Image().src = RollOver.button.replacePath(elms[i], obj.stay.addtion);
				elms[i].setAttribute('src', RollOver.button.replacePath(elms[i], obj.stay.addition));
			} else {
				new Image().src = RollOver.button.replacePath(elms[i], obj.hover.addtion);
				RollOver.event.addEventListener(elms[i], 'mouseover', RollOver.button.switchImg);
				RollOver.event.addEventListener(elms[i], 'mouseout', RollOver.button.switchImg);
			}
		}
	} else {
		elms = RollOver.util.getElementsByTagClassName('a', obj.stay.stayIdClass);
		if(elms && obj.stayId[bodyId]) {
			var stayNode = elms[obj.stayId[bodyId]];
			var stayClassName = stayNode.className.replace(obj.stay.stayIdClass, obj.stay.stayIdClass_s);
			stayNode.setAttribute('class', stayClassName);
			stayNode.setAttribute('className', stayClassName);
		}
	}
};
/* Stay By BodyClass */
RollOver.button.stayClass = function() {
	var obj = RollOver.setup.button;
	var bodyClass = document.getElementsByTagName('body')[0].className;
	var flag;
	for(targetClass in obj.stayClass) {
		flag = RollOver.util.findClass(bodyClass, targetClass);
		if(flag) { bodyClass = targetClass; break; }
	}
	var elms = RollOver.util.getElementsByTagClassName('img', obj.stay.stayClClass);
	if(elms) {
		for(var i=0; i<elms.length; i++) {
			if(i == obj.stayClass[bodyClass]) {
				new Image().src = RollOver.button.replacePath(elms[i], obj.stay.addtion);
				elms[i].setAttribute('src', RollOver.button.replacePath(elms[i], obj.stay.addition));
			} else {
				new Image().src = RollOver.button.replacePath(elms[i], obj.hover.addtion);
				RollOver.event.addEventListener(elms[i], 'mouseover', RollOver.button.switchImg);
				RollOver.event.addEventListener(elms[i], 'mouseout', RollOver.button.switchImg);
			}
		}
	} else {
		elms = RollOver.util.getElementsByTagClassName('a', obj.stay.stayClClass);
		if(elms && obj.stayClass[bodyClass]) {
			var stayNode = elms[obj.stayClass[bodyClass]];
			var stayClassName = stayNode.className.replace(obj.stay.stayClClass, obj.stay.stayClClass_s);
			stayNode.setAttribute('class', stayClassName);
			stayNode.setAttribute('className', stayClassName);
		}
	}
};

/* RollOver.button Utilities */
RollOver.button.switchImg = function(evt) {
	RollOver.event.target(evt).setAttribute('src', RollOver.button.replacePath(RollOver.event.target(evt), RollOver.setup.button.hover.addition));
};
RollOver.button.replacePath = function(obj, additon) {
	var src = obj.getAttribute('src');
	var ftype = src.substring(src.lastIndexOf('.'), src.length);
	if(src.lastIndexOf('_'+additon+ftype) != -1) {
		var _ftype = src.substring(src.lastIndexOf('_'), src.length);
		return src.replace(_ftype, ftype);
	} else {
		return src.replace(ftype, '_'+additon+ftype);
	}
};

RollOver.event.addEventListener(window, 'load', RollOver.button.hover);
RollOver.event.addEventListener(window, 'load', RollOver.button.stayId);
RollOver.event.addEventListener(window, 'load', RollOver.button.stayClass);