/* for PROCON 2008 | (C)S.KAIZU */
/*@cc_on _d=document;eval('var document=_d')@*/


function SKSP()
{
	this.env = {};
	this.env.ua       = navigator.userAgent;
	this.env.isMac    = this.env.ua.match(/Mac/);
	this.env.isWin    = this.env.ua.match(/Win/);
	this.env.isNN     = document.layers;
	this.env.isGecko  = this.env.ua.match(/Gecko\//);
	this.env.isSafari = this.env.ua.match(/AppleWebKit/);
	this.env.isTouch  = (this.env.isSafari && this.env.ua.match(/Mobile/));
	this.env.isOpera  = window.opera;
	this.env.isIE     = (document.all && !this.env.isOpera);
	this.env.isIE4    = this.env.ua.match(/MSIE 4\./);
	this.env.isIE5    = this.env.ua.match(/MSIE 5\./);
	this.env.isIE6    = this.env.ua.match(/MSIE 6\.0/);
	this.env.isMacIE  = (this.env.isMac && this.env.isIE);
	this.env.isOldIE  = (this.env.isIE4 || this.env.isIE5 || this.env.isIE6 || this.env.isMacIE);
	this.env.DOMok    = (document.documentElement && document.getElementsByTagName);
	this.conf = {};
	this.conf.mouseOverSuffix = '_o';
	this.conf.mouseDownSuffix = '_d';
	this.preloadImages = {};
}


SKSP.prototype = {
	
	addEvent : function (o, e, f, c) {
		if (!o) return false;
		if (o.addEventListener) {
			o.addEventListener(e, f, c);
		} else {
			o.attachEvent('on' + e, f);
		}
	},

	removeEvent : function (o, e, f, c) {
		if (!o) return false;
		if (o.removeEventListener) {
			o.removeEventListener(e, f, c);
		} else {
			o.detachEvent('on' + e, f);
		}
	},

	getElementsByClassName : function(tagName, className)
	{
		var results  = new Array();
		var elements = document.getElementsByTagName(tagName);
		for (var i = 0, elmLength = elements.length; i < elmLength; i++) {
			if (!elements[i].className) continue;
			var classes = elements[i].className.split(' ');
			for (var j = 0, clsLength = classes.length; j < clsLength; j++) {
				if (classes[j] == className) {
					results[results.length] = elements[i];
					break;
				}
			}
		}
		return results;
	},

setupRollOverImage : function() {	
		var isOldIE = S.env.isOldIE;
		var imgs = document.getElementsByTagName('img');
		var buttons = S.getElementsByClassName('input', 'button');
		var targets = new Array();
		for (var i = 0; i < imgs.length; i++) targets.push(imgs[i]);
		for (var i = 0; i < buttons.length; i++) targets.push(buttons[i]);
		if (!targets) return;
		for (var i = 0, targetLength = targets.length; i < targetLength; i++) {
			var target = targets[i];
			if (target.parentNode.tagName.toLowerCase() == 'a' || target.className == 'button') {			
				var alphaImgLoader = (isOldIE && target.src.match(/.png/));
				target.enabled = true;
				target._alphaImgLoader = alphaImgLoader;
				target._originalSrc  = target.src;
				target._mouseoverSrc = target._originalSrc.replace(/(\.gif|\.jpg|\.png)/, S.conf.mouseOverSuffix + '$1');
				target._mousedownSrc = target._originalSrc.replace(/(\.gif|\.jpg|\.png)/, S.conf.mouseDownSuffix + '$1');
				S.addEvent(target, 'mouseover', S.swapOverImage);
				S.addEvent(target, 'mousedown', S.swapDownImage);
				S.addEvent(target, 'mouseout',  S.swapOriginalImage);
				S.preloadImage(target, 'mouseover');				
				S.preloadImage(target, 'mousedown');
				if (alphaImgLoader) S.replaceBackgroundImage(target);
			} else if (isOldIE && targets[i].src.match(/.png/)) {
				S.replaceBackgroundImage(targets[i]);
			}
		}
	},
	
	swapOverImage : function(e) {
		var o = (document.addEventListener) ? this : e.srcElement;
		if (o._alphaImgLoader) {
			S.replaceBackgroundImage(o, 'mouseover');
		} else {
			o.src = o._mouseoverSrc;
		}
	},
	
	swapDownImage : function(e) {
		var o = (document.addEventListener) ? this : e.srcElement;
		if (o._alphaImgLoader) {
			S.replaceBackgroundImage(o, 'mousedown');
		} else {
			o.src = o._mousedownSrc;
		}
	},
	
	swapOriginalImage : function(e) {
		var o = (document.addEventListener) ? this : e.srcElement;
		if (o._alphaImgLoader) {
			S.replaceBackgroundImage(o);
		} else {
			o.src = o._originalSrc;
		}
	},	
		
	preloadImage : function(img, type) {
		var i = S.preloadImages.length;
		S.preloadImages[i] = new Image();
		var g = S.preloadImages[i];
		var handler = (type == 'mouseover') ? S.swapOverImage : S.swapDownImage;
		var preloadSrc = (type == 'mouseover') ? img._mouseoverSrc : img._mousedownSrc;
		g.onerror = function() {
			S.removeEvent(img, type, handler);
		};
		g.src = preloadSrc;
	},

	replaceBackgroundImage : function(img, type)
	{
		var imageHref = img.href;
		if (!imageHref) return;
		var imageWidth = img.width;
		var imageHeight = img.height;
		img.src  = '/procon/common/png.gif';
		img.width = imageWidth;
		img.height = imageHeight;
		var src = (!type) ? (img._originalSrc ? img._originalSrc : imageHref) : (type == 'mouseover') ? img._mouseoverSrc : (type == 'mousedown') ? img._mousedownSrc : img._disabledSrc;
		img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '", sizingMethod="scale")';
	}

}

var S = new SKSP();
S.addEvent(window, 'load', S.setupRollOverImage);

