/* -----------------------------------------------------------------------*/
// prepareLinks
/* -----------------------------------------------------------------------*/
function prepareLinks() {
	if(!document.getElementsByTagName) return false;
	
	var excepturi = new RegExp(/^http(s)?:\/\/+([\w-]+\.)?(io3000\.com)+(\/)?/);
	var newwin  = new RegExp(/^(.+\s)?(openwin)(\s.+)?$/);
	
	var links = document.getElementsByTagName('a');
	
	for (var i=0; i<links.length; i++) {
		if(links[i].getAttribute('href', 2).match(excepturi)) {
			continue;
		} else if(links[i].getAttribute('href', 2).match(/^http(s)?:\/\//i) || links[i].className.match(newwin)) {
			links[i].onclick = function() {
				openWin(this.getAttribute('href'));
				return false;
			}
		}
	}
}

function openWin(winURL) {
	var target = window.open(winURL,'','');
}


/* -----------------------------------------------------------------------*/
// rollover
/* -----------------------------------------------------------------------*/
function rollover() {
	if(!document.getElementsByTagName) return false;

	var over = new RegExp(/^(.+\s)?(over)(\s.+)?$/);
	var addOver = '_o';

	var imgs = document.getElementsByTagName('img');
	var preload = new Array();
	var tempSrc;

	for(var i=0; i<imgs.length; i++) {
		if(imgs[i].className.match(over)) {
			var src = imgs[i].getAttribute('src');
			var ext = src.substring(src.lastIndexOf('.'), src.length);
			var osrc = src.replace(ext, addOver + ext);
			
			imgs[i].setAttribute('osrc', osrc);
			
			preload[i] = new Image();
			preload[i].src = osrc;
			
			imgs[i].onmouseover = function() {
				tempSrc = this.getAttribute('src');
				var osrc = this.getAttribute('osrc');
				this.setAttribute('src', osrc);
			}
			imgs[i].onmouseout = function() {
				if(!tempSrc) {
					tempSrc = this.getAttribute('src').replace(addOver + ext, ext);
				} else {
					this.setAttribute('src', tempSrc);
				}
			}
		}
	}
}


/* -----------------------------------------------------------------------*/
// smoothScroll
/* -----------------------------------------------------------------------*/

// SETUP ///////////////////////////////////////////////

var scroll = function() {};

/* 速度 */
scroll.velocity = 12;

/* 実行の間隔 */
scroll.interval = 12;

var tempUri;

////////////////////////////////////////////////////////

function smoothScroll() {
	if(!document.getElementsByTagName) return false;
	
	var links = document.getElementsByTagName('a');

	for (var i=0; i<links.length; i++) {
		links[i].onclick = function() {
			var ref = this.getAttribute('href');
			tempUri = ref;
			if(!ref.match(/#/)) return;
			
			var xpos = document.body.scrollLeft || document.documentElement.scrollLeft;
			var ypos = document.body.scrollTop || document.documentElement.scrollTop;
			
			if(ref.split('#')[0] == '' || ref.split('#')[0] == location.href.split('#')[0]) {
				var ids = ref.substr(ref.lastIndexOf('#'), ref.length);
				var final_x
				var final_y;
				
				if(ids == '#') {
					final_x = 0;
					final_y = 0;
				}
				else {
					ids = ids.slice(1);
					if(!document.getElementById(ids)) return true;
					var dst = document.getElementById(ids);
					final_x = dst.offsetLeft;
					final_y = dst.offsetTop;
				}
				moveScroll(xpos, ypos, final_x, final_y);
				return false;
			}
		}
	}
}


/* -----------------------------------------------------------------------*/
// moveScroll
/* -----------------------------------------------------------------------*/
function moveScroll(xpos, ypos, final_x, final_y) {

	if(xpos == final_x && ypos == final_y) {
		clearTimeout(smoothing);
		return location.replace(tempUri);
	}

	if(xpos < final_x) {
		var dist = Math.ceil((final_x - xpos) / scroll.velocity);
		xpos = xpos + dist;
		window.scrollBy(dist, 0);
	}
	
	if(xpos > final_x) {
		var dist = Math.ceil((xpos - final_x) / scroll.velocity);
		xpos = xpos - dist;
		window.scrollBy(-dist, 0);
	}

	if(ypos < final_y) {
		var dist = Math.ceil((final_y - ypos) / scroll.velocity);
		ypos = ypos + dist;
		window.scrollBy(0, dist);
	}
	
	if(ypos > final_y) {
		var dist = Math.ceil((ypos - final_y) / scroll.velocity);
		ypos = ypos - dist;
		window.scrollBy(0, -dist);
	}
	
	var repeat = "moveScroll("+xpos+", "+ypos+", "+final_x+", "+final_y+")";
	var smoothing = setTimeout(repeat, scroll.interval);
	
	function cancel(event) {
		clearTimeout(smoothing);
		return;
	}
	if (window.addEventListener) {
		window.addEventListener('DOMMouseScroll', cancel, false);
	}
	window.onmousewheel = document.onmousewheel = cancel;
}


/* -----------------------------------------------------------------------*/
// addLoadEvent
/* -----------------------------------------------------------------------*/
function addLoadEvent(func) {
	var oldonload = window.onload;
	if(typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

addLoadEvent(smoothScroll);
addLoadEvent(prepareLinks);
addLoadEvent(rollover);
