//
// 猫招きスクリプト
//

// ブラウザーを判別するための変数
if (ie4 == null) var ie4 = (document.all) ? true : false;
if (ie5 == null) var ie5 = ((ie4) && (document.body.setCapture)) ? true : false;
if (nn4 == null) var nn4 = (document.layers) ? true : false;
if (nn6 == null) var nn6 = ((! ie4) && (document.getElementById)) ? true : false;

function GA()
{
	this.guides = new Array();
	this.mode = 0;
	this.orgLoad = null;
	this.orgMousemove = null;
	this.mouseX = null;
	this.mouseY = null;
	this.speed = 3;
	this.offsetX = 8;
	this.offsetY = 8;
	this.timerID = null;
	this.t = 0;
	this.addGuide = addGuide;
}

function Guide(width, height, src, ox, oy)
{
	this.width = width;
	this.height = height;
	this.src = src;
	this.x = null;
	this.y = null;
	this.offsetX = ox;
	this.offsetY = oy;
}

function addGuide(w, h, s, x, y)
{
	var i = this.guides.length;
	this.guides[i] = new Guide(w, h, s, x, y);
}

var pGuide = new GA();

// 猫の顔と足跡のガイド
pGuide.addGuide(20, 20, 'neko.files/puni3w_h.gif', -3, 6);
pGuide.addGuide(20, 20, 'neko.files/puni3w_a.gif', -3, 6);
pGuide.addGuide(20, 20, 'neko.files/puni3w_b.gif', 6, -3);
pGuide.addGuide(20, 20, 'neko.files/puni3w_c.gif', -3, 6);
pGuide.addGuide(20, 20, 'neko.files/puni3w_e.gif', 6, -3);
pGuide.addGuide(20, 20, 'neko.files/puni3w_f.gif', -3, 6);
pGuide.addGuide(20, 20, 'neko.files/puni3w_g.gif', 6, -3);
pGuide.addGuide(20, 20, 'neko.files/puni3w_h.gif', -3, 6);
pGuide.addGuide(20, 20, 'neko.files/puni3w_a.gif', 6, -3);
pGuide.addGuide(20, 20, 'neko.files/puni3w_b.gif', -3, 6);

GA.MODE_IDOL = 0;
GA.MODE_STARTDRAG = 10;
GA.MODE_DRAG = 20;
GA.MODE_SHOWMENU = 30;

if (ie4 || nn6){
	var p = Math.floor(100 / pGuide.guides.length);
	
	for (var i=0; i<pGuide.guides.length; i++){
		var ob = pGuide.guides[i];
		document.write('<IMG ID="chaser' + i + '" WIDTH=' + ob.width + 'HEIGT=' + ob.height + ' SRC="' + ob.src + '" STYLE="position:absolute; left:0px; top:0px; visibility:hidden; z-index:' + (pGuide.guides.length - i) + '; filter:alpha(opacity=' + (100 - p * i) + ')">');
	}
}

function chasePointer()
{
	if (pGuide.mouseX == null || pGuide.mouseY == null){
		pGuide.timerID = window.setTimeout('chasePointer()', 100);
		return;
	}
	var dstX = pGuide.mouseX + pGuide.offsetX;
	var dstY = pGuide.mouseY + pGuide.offsetY;
	if (pGuide.guides[0].x == null){
		var dX = dstX;
		var dY = dstY;
		pGuide.guides[0].x = dstX;
		pGuide.guides[0].y = dstY;
	}else{
		var dX = Math.floor((dstX - pGuide.guides[0].x) / pGuide.speed);
		var dY = Math.floor((dstY - pGuide.guides[0].y) / pGuide.speed);
	}
	var d = new Date(); d = d.getTime(); d = d - pGuide.t;

	if (ie4){
		var newX = chaser0.style.pixelLeft + dX;
		var newY = chaser0.style.pixelTop + dY;
		chaser0.style.pixelLeft = (newX + pGuide.guides[0].offsetX);
		chaser0.style.pixelTop = (newY + pGuide.guides[0].offsetY);
		if (chaser0.style.visibility == 'hidden')chaser0.style.visibility = 'visible';
	}else if (nn6){
		var newX = parseInt(document.getElementById('chaser0').style.left)+dX; 
		var newY = parseInt(document.getElementById('chaser0').style.top)+dY; 
		document.getElementById('chaser0').style.left = (newX + pGuide.guides[0].offsetX) + 'px';
		document.getElementById('chaser0').style.top = (newY + pGuide.guides[0].offsetY) + 'px';
		if (document.getElementById('chaser0').style.visibility == 'hidden')document.getElementById('chaser0').style.visibility = 'visible';
	}
	var tmpX = pGuide.guides[0].x;
	var tmpY = pGuide.guides[0].y;
	pGuide.guides[0].x = newX;
	pGuide.guides[0].y = newY;

	for (var i=1;  i < pGuide.guides.length; i++){
		var ob = pGuide.guides[i];

		newX = tmpX + Math.floor((pGuide.guides[i - 1].width - pGuide.guides[i].width) / 2);
		newY = tmpY + Math.floor((pGuide.guides[i - 1].height - pGuide.guides[i].height) / 2);
		if (ob.x == null){
			tmpX = newX;
			tmpY = newY;
		}else{
			tmpX = ob.x;
			tmpY = ob.y;
		}
		ob.x = newX;
		ob.y = newY;		
		if (ie4){
			document.all.item('chaser' + i).style.visibility = (newX == tmpX && newY == tmpY) ? 'hidden' : 'visible';
			document.all.item('chaser' + i).style.pixelLeft = ob.x + pGuide.guides[i].offsetX;
			document.all.item('chaser' + i).style.pixelTop = ob.y + pGuide.guides[i].offsetY;
		}else if (nn6){
			document.getElementById('chaser' + i).style.visibility = (newX == tmpX && newY == tmpY) ? 'hidden' : 'visible';
			document.getElementById('chaser' + i).style.left = (ob.x + pGuide.guides[0].offsetX) + 'px'; 
			document.getElementById('chaser' + i).style.top = (ob.y + pGuide.guides[0].offsetY) + 'px'; 
		}
	}
	pGuide.timerID = window.setTimeout('chasePointer()', 100);

}

function getMousePosition(e)
{
	if (ie4){
		var dstX = event.clientX;
		var dstY = event.clientY;
		if (dstX < 10) dstX = 10;
		if (dstX > document.body.clientWidth - 80) dstX = document.body.clientWidth - 80;
		dstX += document.body.scrollLeft;
		if (dstY < 10) dstY = 10;
		if (dstY > document.body.clientHeight - 80) dstY = document.body.clientHeight - 80;
		dstY += document.body.scrollTop;
	}else if (nn6){
		var dstX = e.pageX;
		var dstY = e.pageY;
		if (dstX < window.pageXOffset + 10 || dstX > window.pageXOffset + window.innerWidth - 80){
			dstX = pGuide.mouseX;
		}
		if (dstY < window.pageYOffset + 10 || dstY > window.pageYOffset + window.innerHeight - 80){
			dstY = pGuide.mouseY;
		}
	}

	var length = Math.sqrt(Math.floor(Math.pow(dstX - pGuide.guides[0].x, 2) + Math.pow(dstY - pGuide.guides[0].y, 2)));

	if (length > 60){
		pGuide.mouseX = dstX;
		pGuide.mouseY = dstY;
	}

	if (ie4){
		if (pGuide.orgMousemove){
			pGuide.orgMousemove(e);
		}
	}
}

function initGuide()
{
	var d = new Date();
	if (pGuide.orgLoad){
		var f = pGuide.orgLoad;
		f();
	}
	pGuide.t = d.getTime();
	pGuide.timerID = window.setTimeout('chasePointer()', 100);
}
if (ie4){
	if (document.body.onload){
		pGuide.orgLoad = document.body.onload;
	}
	document.body.onload = initGuide;
	if (document.body.onmousemove){
		pGuide.orgMousemove = document.body.onmousemove;
	}
	document.body.onmousemove = getMousePosition;
}else if (nn6){
	if (window.onload){
		pGuide.orgLoad = window.onload;
	}
	window.onload = initGuide;
	document.addEventListener('mousemove', getMousePosition, 0);
}