/** * @name Rollover * @created 2008-05-06 * @modified 2008-05-06 * @version 0.0.1 */var rollover = new Rollover();rollover.addEvent(window, 'load', function() { rollover.setToggle('.rollover', '_ov'); }, false);function Rollover() {	// トグル	this.setToggle = function(target, hover, active, focus) {		var self = this;		target = this.collect(target);		if (target) {			for (var i = 0, l = target.length; i < l; i++) {				new function() {					var elm = target[i];					var isActive = active && elm.src.match(active + '(\.gif|\.jpg|\.png)([\?].*|$)');					if (isActive && !focus) return;					elm.src.match('(\.gif|\.jpg|\.png)([\?].*|$)');					var ext = RegExp.$1;					var search = (isActive && focus) ? active + ext : ext;					var replace = (isActive && focus) ? focus + ext : hover + ext;					var out = elm.src;					var over = elm.src.replace(search, replace);					// プレロード					new Image().src = over;					// スワップ					self.addEvent(elm, 'mouseover', function() { elm.src = over; }, false);					// レストア					self.addEvent(elm, 'mouseout', function() { elm.src = out; }, false);				}			}		}	}	// 要素を取得	this.collect = function(selector) {		return (typeof selector == 'object') ? selector			: (selector.match('^#(.+)')) ? document.getElementById(RegExp.$1)			: (selector.match('^[\.](.+)')) ? this.getElementsByClassName(RegExp.$1)			: document.getElementsByTagName(selector);	}	// クラス名をもとに要素を取得	this.getElementsByClassName = function(className, parent, tagName) {		parent = (typeof parent == 'object') ? parent			: (typeof parent == 'string') ? document.getElementById(parent)			: document;		if (!tagName) tagName = '*';		var elms = [];		var collection = parent.getElementsByTagName(tagName);		if (tagName == '*' && !collection.length && parent.all) collection = parent.all;// Win IE 5.x		for (var i = 0, l = collection.length; i < l; i++) {			if (collection[i].className.match('(^|\\s)' + className + '(\\s|$)')) {//				elms.push(collection[i]);				elms[elms.length] = collection[i];// Win IE 5.x			}		}		return (elms.length == 0) ? null : elms;	}	// イベントを追加	this.addEvent = function(elm, ev, fn, capt) {		if (elm.addEventListener) {// Fx, Sf, Op, Ns			elm.addEventListener(ev, fn, capt);			return true;		} else if (elm.attachEvent) {// Win IE			return elm.attachEvent('on' + ev, fn);		} else {// Mac IE			var temp = elm['on' + ev];			if (typeof elm['on' + ev] != 'function') {				elm['on' + ev] = function(e) { fn(e); }			} else {				elm['on' + ev] = function(e) {					temp(e);					fn(e);				}			}		}	}}