
SINAP = {} // Based on sML JavaScript Library, customized for SINAP.jp (renewal 2008)

//========================================================================================================================

UA = {
	WK : ((navigator.userAgent.indexOf("AppleWebKit") > -1) ? 1 : 0),
	Ge : ((navigator.userAgent.indexOf("Gecko/") > -1)      ? 1 : 0),
	Op : ( window.opera                                     ? 1 : 0),
	IE : ((document.all && !this.Op)                        ? 1 : 0)
}

if(UA.WK) UA.WK = (navigator.userAgent.indexOf("AppleWebKit/5") > -1) ? 3 : ((navigator.userAgent.indexOf("AppleWebKit/4") > -1) ? 2 : 1);

// ------------------------------------------------------------------------------------------------------------------------

SINAP.onRead = {
	compatible : ((UA.Ge || (UA.WK > 2) || UA.Op) ? 1 : 0),
	eventListeners : new Array,
	executeAll : function() { for(var i = 0; i < this.eventListeners.length; i ++) this.eventListeners[i](); },
	addEventListener : ((UA.Ge || (UA.WK > 2) || UA.Op) ? function(F) { document.addEventListener('DOMContentLoaded', F, false); } : function(F) { this.eventListeners.push(F); })
}

window.onload = function() { if(!SINAP.onRead.compatible) SINAP.onRead.executeAll(); }

// ------------------------------------------------------------------------------------------------------------------------

if(!Array.prototype.push) {
	Array.prototype.push = function() {
		for(var i = 0; i < arguments.length; i ++) this[this.length] = arguments[i];
		return this.length;
	}
}

if(!Array.prototype.forEach) {
	Array.prototype.forEach = function(F, pThis) {
		if(typeof F != "function") throw new TypeError();
		for(var i = 0; i < this.length; i++) if(i in this) F.call(pThis, this[i], i, this);
	}
}

foreach = function(O, F, pThis) {
	if(O.length) for(var i = 0; i < O.length; i ++) F(O[i], i, pThis);
	else         for(var i in O) F(O[i], i, pThis);
}

toArray = function() {
	var A = new Array;
	foreach(arguments, function(i) { foreach(i, function(j) { A.push(j); }); });
	return A;
}

//========================================================================================================================

if(UA.IE) {
	SINAP.eOb = function(e) { this.target = e.srcElement; }
	SINAP.ELM = function(a) {
		if(a) return function(Ev, F) { this.attachEvent("on" + Ev, function() { return F(new SINAP.eOb(event)); }); }
		else  return function(Ev, F) { this.detachEvent("on" + Ev, F); }
	}
	window.addEventListener    = document.addEventListener    = SINAP.ELM(1);
	window.removeEventListener = document.removeEventListener = SINAP.ELM(0);
}

// ------------------------------------------------------------------------------------------------------------------------

allElements = new Array;

getElementsByClassName = function(Cs) {
	var Es = new Array();
	var aEs = this.getElementsByTagName("*") || allElements;
	Cs.split(",").forEach(function(C) {
		foreach(aEs, function(E) {
			var cNs = E.className.split(" ");
			if(C.indexOf(" ") > -1) {
				var cNsStr = " " + cNs.sort().join(" ") + " ";
				var argStr = " " + C.split(" ").sort().join(" ") + " ";
				if(cNsStr.indexOf(argStr) > -1) Es.push(E);
			} else for(var i = 0; i < cNs.length; i ++) if(cNs[i] == C) { Es.push(E); break; }
		});
	});
	return Es;
}

SINAP.extendElements = function(O) {
	if(!allElements.length) allElements = toArray(document.getElementsByTagName("*"));
	var Es = O ? [O].concat(toArray(O.getElementsByTagName("*"))) : [window, document].concat(allElements);
	Es.forEach(function(E) { E.getElementsByClassName = getElementsByClassName; });
	if(UA.IE) {
		Es.forEach(function(E) {
			if(!E.addEventListener) {
				E.addEventListener    = SINAP.ELM(1);
				E.removeEventListener = SINAP.ELM(0);
			}
		});
	}
}

// ------------------------------------------------------------------------------------------------------------------------

SINAP.onRead.addEventListener(function() { SINAP.extendElements(); });

//========================================================================================================================

SINAP.setButtonInteractions = function(C, Ts) {
	var As = new Array;
	var Is = new Array;
	var Cs = document.getElementsByClassName(C);
	Cs.forEach(function(i) {
		var Os = i.getElementsByTagName("a");
		foreach(Os, function(j) { As.push(j); });
	});
	As.forEach(function(i) {
		var Os = i.getElementsByTagName("img");
		foreach(Os, function(j) { Is.push(j); });
	});
	var fR = function(I, iS) { return function() { I.src = iS; }; }
	Is.forEach(function(i) {
		var h_src = new Image().src = i.src.replace(/(_selected)?(\.(png|gif|jpg|jpeg))$/, Ts[0] + "$2");
		i.addEventListener("mouseover", fR(i, h_src), false);
		i.addEventListener("mouseout",  fR(i, i.src), false);
	});
	if(Ts.length) Is.forEach(function(i) {
		var a_src = new Image().src = i.src.replace(/(_selected)?(\.(png|gif|jpg|jpeg))$/, Ts[1] + "$2");
		var h_src = new Image().src = i.src.replace(/(_selected)?(\.(png|gif|jpg|jpeg))$/, Ts[0] + "$2");
		i.addEventListener("mousedown", fR(i, a_src), false);
		i.addEventListener("mouseup",   fR(i, h_src), false);
		i.addEventListener("keydown",   fR(i, a_src), false);
		i.addEventListener("keyup",     fR(i, h_src), false);
	});
}

// ------------------------------------------------------------------------------------------------------------------------

//SINAP.onRead.addEventListener(function() { SINAP.setButtonInteractions("リンクを内包する親のclass", [":hoverのときの接尾辞", ":activeのときの接尾辞"]); });
SINAP.onRead.addEventListener(function() { SINAP.setButtonInteractions("rollover", ["_over", "_click"]); });
SINAP.onRead.addEventListener(function() { SINAP.setButtonInteractions("G_rollover", ["_over", ""]); });
SINAP.onRead.addEventListener(function() { SINAP.setButtonInteractions("S_rollover", ["_o", ""]); });
//========================================================================================================================