var IST = new Object();
IST.setup = {
	'button' : {
		'hover' : {
			'className'   : 'imgover',
			'addition'    : 'o'
		},
		'stay' : {
			'stayIdClass'    : 'imggnav',
			'stayIdClass_s'  : 'imgstay',
			'stayClClass'    : 'imgSubNav',
			'stayClClass_s'  : 'imgSubNavStay',
			'addition'       : 'o'
		},
		/* stay bodyID */
		/*'stayId' : {
			'top'       : '0',
			'product'   : '1',
			'cm'        : '2',
			'downloads' : '3'
		},*/
		/* stay bodyClass */
		'stayClass' : {
			'subNav01' : '0',
			'subNav02' : '1',
			'subNav03' : '2',
			'subNav04' : '3',
			'subNav05' : '4',
			'subNav06' : '5'
		}
	}
};

/*****************************************
	Event Listener
	- IST.event.addEventListener(elm, type, func, useCapture)
	- IST.event.removeEventListener(elm, type, func, useCapture)
	- IST.event.target(evt)
	- IST.event.targetTag(tagName, evt)
	- IST.event.preventDefault(evt)
	- IST.event.stopPropagation(evt)
*****************************************/
IST.event = new Object();
IST.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;
};
IST.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;
};
IST.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;
	}
};
IST.event.targetTag = function(tagName, evt) {
	var elm = IST.event.target(evt);
	while(elm.nodeName.toLowerCase() != 'html') {
		if(elm.nodeName.toLowerCase() == tagName) {
			return elm;
		} else {
			elm = elm.parentNode;
		}
	}
	return null;
};
IST.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;
	}
};
IST.event.stopPropagation = function(evt) {
	if(evt && evt.stopPropagation) {
		evt.stopPropagation();
	} else if(window.event) {
		window.event.cancelBubble = true;
	}
};

/*****************************************
	Utilities
	- IST.util.findClass(className, targetClass);
	- IST.util.getElementsByTagClassName(tagName, className);
*****************************************/
IST.util = new Object();
IST.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; }
};
IST.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 = IST.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
	- IST.button.hover()
	- IST.button.stayId()
	- IST.button.stayClass()
*****************************************/
IST.button = new Object();
/* Hover */
IST.button.hover = function() {
	var obj = IST.setup.button;
	var elms = IST.util.getElementsByTagClassName('img', obj.hover.className);
	var inputs = IST.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 = IST.button.replacePath(elms[i], obj.hover.addtion);
			IST.event.addEventListener(elms[i], 'mouseover', IST.button.switchImg);
			IST.event.addEventListener(elms[i], 'mouseout', IST.button.switchImg);
		}
	}
};
/* Stay By BodyID */
IST.button.stayId = function() {
	var obj = IST.setup.button;
	var bodyId = document.getElementsByTagName('body')[0].id;
	var elms = IST.util.getElementsByTagClassName('img', obj.stay.stayIdClass);
	if(elms) {
		for(var i=0; i<elms.length; i++) {
			if(i == obj.stayId[bodyId]) {
				new Image().src = IST.button.replacePath(elms[i], obj.stay.addtion);
				elms[i].setAttribute('src', IST.button.replacePath(elms[i], obj.stay.addition));
			} else {
				new Image().src = IST.button.replacePath(elms[i], obj.hover.addtion);
				IST.event.addEventListener(elms[i], 'mouseover', IST.button.switchImg);
				IST.event.addEventListener(elms[i], 'mouseout', IST.button.switchImg);
			}
		}
	} else {
		elms = IST.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 */
IST.button.stayClass = function() {
	var obj = IST.setup.button;
	var bodyClass = document.getElementsByTagName('body')[0].className;
	var flag;
	for(targetClass in obj.stayClass) {
		flag = IST.util.findClass(bodyClass, targetClass);
		if(flag) { bodyClass = targetClass; break; }
	}
	var elms = IST.util.getElementsByTagClassName('img', obj.stay.stayClClass);
	if(elms) {
		for(var i=0; i<elms.length; i++) {
			if(i == obj.stayClass[bodyClass]) {
				new Image().src = IST.button.replacePath(elms[i], obj.stay.addtion);
				elms[i].setAttribute('src', IST.button.replacePath(elms[i], obj.stay.addition));
			} else {
				new Image().src = IST.button.replacePath(elms[i], obj.hover.addtion);
				IST.event.addEventListener(elms[i], 'mouseover', IST.button.switchImg);
				IST.event.addEventListener(elms[i], 'mouseout', IST.button.switchImg);
			}
		}
	} else {
		elms = IST.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);
		}
	}
};

/* IST.button Utilities */
IST.button.switchImg = function(evt) {
	IST.event.target(evt).setAttribute('src', IST.button.replacePath(IST.event.target(evt), IST.setup.button.hover.addition));
};
IST.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);
	}
};

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