/* (C) kaizu. Ver.2008.7 */
/*@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.isGecko  = this.env.ua.match(/Gecko\//);
	this.env.isSafari = this.env.ua.match(/AppleWebKit/);
	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 = '_s';
	this.preloadImages = {};
	if (this.env.isIE6) {
		try {
			document.execCommand("BackgroundImageCache", false, true);
		} catch(err) {
		}
	}
}


SKSP.prototype = {
	
	addEvent : function (o, e, f, c) {
		if (o.addEventListener) {
			o.addEventListener(e, f, c);
		} else {
			o.attachEvent('on' + e, f);
		}
	},

	removeEvent : function (o, e, f, c) {
		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');
		if (!imgs) return;
		for (var i = 0, imgLength = imgs.length; i < imgLength; i++) {
			var img = imgs[i];
			if (img.parentNode.tagName.toLowerCase() == 'a') {
				var alphaImgLoader = (isOldIE && img.src.match(/.png/));
				img._alphaImgLoader = alphaImgLoader;
				img._originalSrc  = img.src;
				img._mouseoverSrc = img.src.replace(/(\.gif|\.jpg|\.png)/, S.conf.mouseOverSuffix + '$1');
				img._mousedownSrc = img.src.replace(/(\.gif|\.jpg|\.png)/, S.conf.mouseDownSuffix + '$1');
				S.addEvent(img, 'mouseover', S.swapOverImage);
				S.addEvent(img, 'mousedown', S.swapDownImage);
				S.addEvent(img, 'mouseout',  S.swapOriginalImage);
				S.preloadImage(img, 'mouseover');				
				S.preloadImage(img, 'mousedown');
				if (alphaImgLoader) S.replaceBackgroundImage(img);
			} else if (isOldIE && imgs[i].src.match(/.png/)) {
				S.replaceBackgroundImage(imgs[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 = 'http://www.med.niigata-u.ac.jp/obs/shared/img/png.gif';
		img.width = imageWidth;
		img.height = imageHeight;
		var src = (!type) ? (img._originalSrc ? img._originalSrc : imageHref) : (type == 'mouseover') ? img._mouseoverSrc : img._mousedownSrc;
		img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '", sizingMethod="scale")';
	},
	
	createObjectElement : function(src, width, height, param) {
		document.write('<object data="' + src + '" width="' + width + '" height="' + height + '" type="application/x-shockwave-flash">\n');
		document.write('<param name="movie" value="' + src + '" />\n');
		if (param) for (var key in param) document.write('<param name="' + key + '" value="' + param[key] + '" />\n');
		document.write('</object>\n');
	},
	
	createCookie : function(cookieName, value, days)
	{
		if (days) {
			var date = new Date();
			date.setTime(date.getTime() + (24 * 60 * 60 * 1000 * days));
			var expires = ';expires=' + date.toGMTString();
		} else {
			expires = '';
		}
		document.cookie = cookieName + '=' + value + expires + '; path=/';
	},
	
	readCookie : function(cookieName)
	{
		var c = document.cookie.split(';');
		for (var i = 0, cookieLength = c.length; i < cookieLength; i++) {
			if (c[i].indexOf(cookieName) > -1) {
				var v = c[i].split('=');
				return v[1];
			}
		}
		return null;
	}

}

var S = new SKSP();
S.addEvent(window, 'load', S.setupRollOverImage);

