if (document.layers) {
	var Screen_x = document.innerWidth;
	var Screen_y = document.innerHeight;
} else if (document.all) {
	var Screen_x = document.clientWidth;
	var Screen_y = document.clientHeight;
} else if (document.getElementById) {
	var Screen_x = document.innerWidth;
	var Screen_y = document.innerHeight;
}
Screen_x = 1000;
Screen_y = 800;

var maxCal = Math.floor(Math.random() * 5) + 1;

var mode = 0;
var Count = 0;
var stopCount = 100;
var waitCount = 20;
var timeID;
var wait = 100;
var calWidth = 24;
var calHeight = 32;
var carsolWidth = 8;
var carsolHeight = 16;
var step_x = 4;
var step_y = 4;
var rep_x = 0;
var rep_y = 0;
var ptr_1 = 3;
var ptr_2 = 6;
var pType = new Array();
pType[0] = new Array("blue", 1);
pType[1] = new Array("purple", 50);
pType[2] = new Array("green", 200);
pType[3] = new Array("yellow", 200);
pType[4] = new Array("red", 200);
var ImgPtr = new Array();
var Carsol = new Carsol(-1, -1, -1, -1);
var pCal = new Array();
for (k = 0; k < pType.length; k++){
	ImgPtr[k] = new Array();
	for (j = 1; j <= 4; j++){
		ImgPtr[k][j] = new Array();
		for (i = 0; i < ptr_2; i++){
			ImgPtr[k][j][i] = new Image();
			ImgPtr[k][j][i].src = './img/' + pType[k][0] + '/gpl_' + j + i + '.gif';
		}
	}
}
function checkCal(index){
	pCal[index] = new Cal(0, 0, getPtr(), 1, 0, 0, 0);
	AddHTML('panda', '<img id="cal_' + index + '" src="./img/sp1.gif" width="24" height="32" border="0" class="cal0">');
}
function getPtr(){
	var type = Math.floor(Math.random() * pType.length);
	if (Math.floor(Math.random() * (pType[type][1])) == 0) {
		return type;
	} else {
		return 0;
	}
}


function Cal(pos_x, pos_y, ptr, mode, count, move_x, move_y) {
	this.pos_x = pos_x;
	this.pos_y = pos_y;
	this.mode = mode;
	this.count = count;
	this.move_x = move_x;
	this.move_y = move_y;
	this.new_x = 0;
	this.new_y = 0;
	this.num = 0;
	this.ptr = ptr;
}
function Carsol(pos_x, pos_y, old_x, old_y) {
	this.pos_x = pos_x;
	this.pos_y = pos_y;
	this.old_x = old_x;
	this.old_y = old_y;
}
function pandastart(){
	var i;
	myGetBrowser();
	setKey();
	bown();
	timeID = setTimeout('Timer()', wait);
}
function bown(){
	var i;
	for (i = 0; i < maxCal; i++){
		checkCal(i);
	}
}
function Timer(){
	var i, j, k;
	for (i = 0; i < pCal.length; i++){
		if (pCal[i].num == -1){
			if ((pCal[i].pos_x < 0) && (pCal[i].pos_x < 0)){
				continue;
			} else if (++pCal[i].count > stopCount){
				pCal[i].num = 0;
				pCal[i].count = 0;
			} else {
				continue;
			}
		}
		if ((pCal[i].move_y > 0) && (pCal[i].pos_y > Screen_y - calHeight - step_y)){
			pCal[i].move_y = -1;
			pCal[i].mode = 3;
			pCal[i].new_y = pCal[i].pos_y;
		} else if ((pCal[i].move_y < 0) && (pCal[i].pos_y - carsolHeight - step_y < 0)){
			pCal[i].move_y = 1;
			pCal[i].mode = 1;
			pCal[i].new_y = pCal[i].pos_y;
		} else {
			pCal[i].new_y = pCal[i].pos_y + pCal[i].move_y * step_y;
		}
		if ((pCal[i].move_x > 0) && (pCal[i].pos_x > Screen_x - calWidth - step_x)){
			pCal[i].move_x = -1;
			pCal[i].mode = 2;
			pCal[i].new_x = pCal[i].pos_x;
		} else if ((pCal[i].move_x < 0) && (pCal[i].pos_x - carsolWidth - step_x < 0)){
			pCal[i].move_x = 1;
			pCal[i].mode = 4;
			pCal[i].new_x = pCal[i].pos_x;
		} else {
			pCal[i].new_x = pCal[i].pos_x + pCal[i].move_x * step_x;
		}
	}
	for (i = 0; i < pCal.length; i++){
		if (pCal[i].num == -1){continue;}
		pCal[i].mode = 0;
		for (j = i; j > 0; j--){
			if ((pCal[i].move_y > 0) && (pCal[i].new_y > pCal[j].new_y) && (pCal[i].new_y < pCal[j].new_y + calHeight)){
				if ((pCal[i].move_x > 0) && (pCal[i].new_x > pCal[j].new_x) && (pCal[i].new_x - calWidth < pCal[j].new_x)){
					if (pCal[i].move_y != pCal[j].move_y){
						pCal[i].move_y = 0;
						pCal[i].mode = 3;
						pCal[i].num = 3;
					}
				}
				if ((pCal[i].move_x < 0) && (pCal[i].new_x < pCal[j].new_x) && (pCal[i].new_x > pCal[j].new_x - calWidth)){
					if (pCal[i].move_y != pCal[j].move_y){
						pCal[i].move_y = 0;
						pCal[i].mode = 3;
						pCal[i].num = 3;
					}
				}
			}
			if ((pCal[i].move_y < 0) && (pCal[i].new_y < pCal[j].new_y) && (pCal[i].new_y > pCal[j].new_y - calHeight)){
				if ((pCal[i].move_x > 0) && (pCal[i].new_x > pCal[j].new_x) && (pCal[i].new_x - calWidth < pCal[j].new_x)){
					if (pCal[i].move_y != pCal[j].move_y){
						pCal[i].move_y = 0;
						pCal[i].mode = 1;
						pCal[i].num = 3;
					}
				}
				if ((pCal[i].move_x < 0) && (pCal[i].new_x < pCal[j].new_x) && (pCal[i].new_x > pCal[j].new_x - calWidth)){
					if (pCal[i].move_y != pCal[j].move_y){
						pCal[i].move_y = 0;
						pCal[i].mode = 1;
						pCal[i].num = 3;
					}
				}
			}
		}
		switch (mode){
			case 0:
				ptr01(i);
				break;
			case 1:
				ptr02(i);
				break;
		}
		if ((pCal[i].move_x == 0) && (pCal[i].move_y == 0)){
			if (++pCal[i].count > waitCount){
				mode = 1;
				pCal[i].count = 0;
			}
		}
		if (pCal[i].mode == 0){
			pCal[i].mode = 1;
		}
		pCal[i].pos_x += pCal[i].move_x * step_x;
		pCal[i].pos_y += pCal[i].move_y * step_y;
		if ((++pCal[i].num == ptr_1) || (pCal[i].num == ptr_2)){
			if ((pCal[i].num == ptr_1) && (Carsol.pos_x > pCal[i].pos_x) && (Carsol.pos_x < pCal[i].pos_x + calWidth) && (Carsol.pos_y > pCal[i].pos_y) && (Carsol.pos_y < pCal[i].pos_y + calHeight)){
				;
			} else {
				pCal[i].num = 0;
			}
		}
		document.getElementById('cal_' + i).src = ImgPtr[pCal[i].ptr][pCal[i].mode][pCal[i].num].src;
		document.getElementById('cal_' + i).style.left = pCal[i].pos_x;
		document.getElementById('cal_' + i).style.top = pCal[i].pos_y;
		document.getElementById('cal_' + i).style.zIndex = pCal[i].pos_y / step_y;
	}
	timeID = setTimeout('Timer()', wait);
}
function ptr01(i){
	if (pCal[i].pos_x < Carsol.pos_x){
		pCal[i].mode = 4;
		if (pCal[i].pos_x + calWidth + step_x > Carsol.pos_x){
			pCal[i].move_x = 0;
		} else {
			pCal[i].move_x = 1;
		}
	}
	if (pCal[i].pos_x > Carsol.pos_x){
		pCal[i].mode = 2;
		if (pCal[i].pos_x - carsolWidth - step_x < Carsol.pos_x){
			pCal[i].move_x = 0;
		} else {
			pCal[i].move_x = -1;
		}
	}
	if (pCal[i].pos_y < Carsol.pos_y){
		if (pCal[i].move_x == 0){
			pCal[i].mode = 1;
		}
		if (pCal[i].pos_y + calHeight + step_y > Carsol.pos_y){
			pCal[i].move_y = 0;
		} else {
			pCal[i].move_y = 1;
		}
	}
	if (pCal[i].pos_y > Carsol.pos_y){
		if (pCal[i].move_x == 0){
			pCal[i].mode = 3;
		}
		if (pCal[i].pos_y - carsolHeight - step_y < Carsol.pos_y){
			pCal[i].move_y = 0;
		} else {
			pCal[i].move_y = -1;
		}
	}
}
function ptr02(i){
	if (rep_y == 0){
		rep_y = Math.floor(Math.random() * 20) + 20;
	}
	if (rep_x == 0){
		rep_x = Math.floor(Math.random() * 20) + 20;
	}
	if (--rep_y == 0){
		if (pCal[i].move_y == 0){
			pCal[i].move_y = Math.floor(Math.random() * 2) * 2 - 1;
		} else {
			pCal[i].move_y = 0;
		}
	}
	if (pCal[i].move_y > 0){
		pCal[i].mode = 1;
	} else if (pCal[i].move_y < 0){
		pCal[i].mode = 3;
	}
	if (--rep_x == 0){
		if (pCal[i].move_x == 0){
			pCal[i].move_x = Math.floor(Math.random() * 2) * 2 - 1;
		} else {
			pCal[i].move_x = 0;
		}
	}
	if (pCal[i].move_x > 0){
		pCal[i].mode = 4;
	} else if (pCal[i].move_x < 0){
		pCal[i].mode = 2;
	}
}
//ブラウザによって表示方法の切り替え
function myGetBrowser(){            // ブラウザを判断する
   myOP = (navigator.userAgent.indexOf("Opera",0) != -1)?1:0; //OP
   myN6 = document.getElementById;  // N6 or IE
   myIE = document.all;             // IE
   myN4 = document.layers;          // N4

   if (myOP){                          // OP?
      document.onmousemove = myMoveOP;
      document.onclick = myClickOP;
      document.ondblclick = myDblClickOP;
   } else if (myIE){                    // IE?
      document.onmousemove = myMoveIE;
      document.onclick = myClickIE;
      document.ondblclick = myDblClickIE;
   } else if (myN6){                    // N6?
      window.addEventListener("mousemove",myMoveN6,true);
      window.addEventListener("click",myClickN6,true);
      window.addEventListener("dblclick",myDblClickN6,true);
   } else if (myN4){                    // N4?
      window.captureEvents(Event.MOUSEMOVE);
      window.onmousemove = myMoveN4;
      window.captureEvents(Event.CLICK);
      document.onclick = myClickN4;
      window.captureEvents(Event.DBLCLICK);
      document.ondblclick = myDblClickN4;
   }
}

function myMoveOP(){ // OPでマウスが動いた
	setCarsol(window.event.clientX, window.event.clientY);
}
function myClickOP(){ // OPでマウスをクリック
	clickCarsol(window.event.clientX, window.event.clientY);
}
function myDblClickOP(){ // OPでマウスをダブルクリック
	dblclickCarsol(window.event.clientX, window.event.clientY);
}
function myMoveN6(myEvent){  // N6でマウスが動いた
	setCarsol(myEvent.clientX + window.pageXOffset, myEvent.clientY + window.pageYOffset);
}
function myClickN6(myEvent){ // N6でマウスをクリック
	clickCarsol(myEvent.pageX, myEvent.pageY);
}
function myDblClickN6(myEvent){ // N6でマウスをダブルクリック
	dblclickCarsol(myEvent.pageX, myEvent.pageY);
}
function myMoveIE(){ // IEでマウスが動いた
	setCarsol(window.event.clientX + document.body.scrollLeft, window.event.clientY + document.body.scrollTop);
}
function myClickIE(){ // IEでマウスをクリック
	clickCarsol(window.event.clientX + document.body.scrollLeft, window.event.clientY + document.body.scrollTop);
}
function myDblClickIE(){ // IEでマウスをダブルクリック
	dblclickCarsol(window.event.clientX + document.body.scrollLeft, window.event.clientY + document.body.scrollTop);
}
function myMoveN4(myEvent){ // N4でマウスが動いた
	setCarsol(myEvent.x, myEvent.y);
}
function myClickN4(myEvent){ // N4でマウスをクリック
	clickCarsol(myEvent.x, myEvent.y);
}
function myDblClickN4(myEvent){ // N4でマウスをダブルクリック
	dblclickCarsol(myEvent.x, myEvent.y);
}
function setCarsol(pos_x, pos_y){ // マウスが動いた
	Carsol.old_x = Carsol.pos_x;
	Carsol.old_y = Carsol.pos_y;
  Carsol.pos_x = pos_x;
  Carsol.pos_y = pos_y
	mode = 0;
}
function clickCarsol(pos_x, pos_y){ // マウスをクリック
	var i;
	for (i = 0; i < pCal.length; i++){
		if ((pos_x > pCal[i].pos_x) && (pos_x < pCal[i].pos_x + calWidth) && (pos_y > pCal[i].pos_y) && (pos_y < pCal[i].pos_y + calHeight)){
			if (pCal[i].num == -1){
				pCal[i].num = 0;
				pCal[i].count = 0;
			} else {
				pCal[i].num = -1;
				pCal[i].count = 0;
			}
		}
	}
}
function dblclickCarsol(pos_x, pos_y){ // マウスをダブルクリック
	var i;
	for (i = 0; i < pCal.length; i++){
		if ((pos_x > pCal[i].pos_x) && (pos_x < pCal[i].pos_x + calWidth) && (pos_y > pCal[i].pos_y) && (pos_y < pCal[i].pos_y + calHeight)){
			document.getElementById('cal_' + i).src = "./img/sp1.gif";
			pCal[i].num = -1;
			pCal[i].pos_x = -1;
			pCal[i].pos_y = -1;
		}
	}
}

function setKey(){
	window.document.onkeydown = function(evt){
		if (evt){
			var kc = evt.keyCode;
		} else {
			var kc = event.keyCode;
		}
		switch (kc) {
			case 109://-
			case 46://DEL
				if (maxCal > 0){
					maxCal--;
					pCal.length--;
					document.getElementById('cal_' + pCal.length).src = "./img/sp1.gif";
				}
				break;
			case 107://+
			case 45://INS
				checkCal(maxCal++);
		    break;
			default:
    		break;
		}
	}
}

