<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Neko" height="212" width="210" author="Juanma Orta i Pau Ferrer" author_email="juanma.orta@gmail.com" author_location="Barcelona, Spain" category="funandgames" description="__MSG_description__" thumbnail="http://www.oozyte.com/gadgets/neko/thumbnail.png" screenshot="http://www.oozyte.com/gadgets/neko/screenshot.png">
	<Locale messages="http://www.oozyte.com/gadgets/neko/neko_content/en_ALL.xml"/>
	<Locale lang="es" messages="http://www.oozyte.com/gadgets/neko/neko_content/es_ALL.xml"/>
	<Locale lang="ca" messages="http://www.oozyte.com/gadgets/neko/neko_content/ca_ALL.xml"/>
	<Locale lang="en" messages="http://www.oozyte.com/gadgets/neko/neko_content/en_ALL.xml"/>
</ModulePrefs>
 <UserPref name="character" display_name="__MSG_character__" default_value="neko" datatype="enum">
    <EnumValue value="neko" display_value="Neko"/>
    <EnumValue value="dog" display_value="Dog"/>
    <EnumValue value="sakura" display_value="Sakura"/>
    <EnumValue value="tomoyo" display_value="Tomoyo"/>
    <EnumValue value="tora" display_value="Tora"/>
  </UserPref>
<Content type="html"><![CDATA[

<style type="text/css">
#container {
	border: solid 1px #000;
	width: 100%;
	height: 200px;
	cursor: pointer;
	background-color: white;
}
#neko {
	position: relative;
	top: 5px;
	left: 5px;
}
#wrapper {
	background-color: pink; padding: 5px;
}
</style>
<div id="wrapper">
<div id="container">
<img src="http://www.oozyte.com/gadgets/neko/neko/stop1.png" id="neko" />
</div>
</div>
<script language="Javascript" type="text/javascript">
var imgext = ".png";
var img_dir = "neko/";
var url = "http://www.oozyte.com/gadgets/neko/";
var imgext = ".png";

Neko={
	allimages:["awake1","dw1","dw2","dwleft1","dwleft2","dwright1","dwright2","left1","left2","right1","right2","sleep1","sleep2","stop1","up1","up2","upleft1","upleft2","upright1","upright2","yawn1","scratch1","scratch2","utogi1","utogi2","dtogi1","dtogi2","rtogi1","rtogi2","ltogi1","ltogi2"],
	currentscratch:0,
	currentimg:1,
	currenttogi:0,
	timer:null,
	status:null,
	container:null,
	step:5,
	olddist:0,
	_xmouse:15,
	_ymouse:15,
	tan22:0.414,
	tan67:2.414,
	character:"neko",
	img_dir:"./",
	//characters:["dog","neko","sakura","tomoyo","tora"],
	init:function() {
		Neko.container = document.getElementById("container");
		
		Neko.image = document.getElementById("neko");
		Neko.image.onclick = Neko.scratch;
		
		var prefs = new _IG_Prefs(__MODULE_ID__);
   		var mychar = prefs.getString("character");
		
		Neko.character = mychar;
		
		// img_dir = url+Neko.character;
		Neko.img_dir = url+Neko.character+"/";
		
		Neko.image.src = Neko.img_dir + "stop1"+imgext;	
		var wrapper = document.getElementById("wrapper");
	
		for (j=0; j < Neko.allimages.length; j++) {
			var cache = document.createElement("IMG");
			cache.src = Neko.img_dir + Neko.allimages[j] + imgext;
			cache.style.display = "none";
			wrapper.appendChild(cache);	
		}
		Neko.animate("stop",1);
		Neko.timer = setTimeout("Neko.move()",100);
	},
	goSleep:function() {
		if (Neko.status != "wait") {
			Neko.status = "wait";
			Neko.timer = setTimeout("Neko.yawn()",3000);
		}
	},
	yawn:function() {
		window.clearTimeout(Neko.timer);
		Neko.animate("yawn",1);
		Neko.timer = setTimeout("Neko.sleep()",1000);
	},
	sleep:function() {
		Neko.animate("sleep",2);
		Neko.timer = setTimeout("Neko.sleep()",1000);
	},
	wakeup:function(evt) {
		if (evt) {
			Neko._xmouse = parseInt(evt.clientX);
			Neko._ymouse = parseInt(evt.clientY);
		}
		if (Neko.status == "sleep" || Neko.status == "yawn") {
			window.clearTimeout(Neko.timer);
			Neko.animate("awake",1);
			Neko.timer = setTimeout("Neko.move()",500);
		}
		else if(Neko.status == "wait"){
			 Neko.move();
		}
	},
	scratch:function() {
		if (Neko.currentscratch < 7) {
			window.clearTimeout(Neko.timer);
			Neko.animate("scratch",2);
			Neko.currentscratch++;
			Neko.timer = setTimeout("Neko.scratch()",200);
		}
		else {
			Neko.animate("stop",1);
			Neko.currentscratch = 1;
			Neko.timer = setTimeout("Neko.move()",200);
		}
	},
	togi:function(direction) {
		if (Neko.currenttogi < 7) {
			window.clearTimeout(Neko.timer);
			Neko.animate(direction+"togi",2);
			Neko.currenttogi++;
			Neko.timer = setTimeout("Neko.togi(\""+direction+"\")",200);
		}
		else {
			Neko.animate("stop",1);
			Neko.currenttogi = 1;
			Neko.timer = setTimeout("Neko.move()",200);
		}
	},
	run:function(tangente, lado, hemisferio){
		var direction;

		if(tangente < Neko.tan22){
			direction = lado;
		}
		else if(tangente < Neko.tan67){
			direction = hemisferio+lado;
		}
		else{
			direction = hemisferio;	
		}
		Neko.animate(direction,2);	
	},
	move:function() {;
		window.clearTimeout(Neko.timer);

		var x = Neko.getXPos();
		var y = Neko.getYPos();
		var diffx = Math.abs(x - Neko._xmouse);
		var diffy = Math.abs(y - Neko._ymouse);
		
		var distancia = parseInt(Math.sqrt(Math.pow((diffx),2)+Math.pow((diffy),2)));
		if (Neko.olddist != distancia && distancia > 16) {
			Neko.olddist = distancia;
			if(diffx < Neko.step){
				paso = diffx;
			}	
			else{
				paso = Neko.step;	
			}
			if (x < Neko._xmouse) {
				var nux = x + paso;
				var lado = "right";
			} else {
				var nux = x - paso;
				var lado = "left";
			}
			if(diffy < Neko.step){
				paso = diffy;
			}	
			else{
				paso = Neko.step;	
			}
			if (y < Neko._ymouse) {
				var hemisferio = "dw";
				var nuy = y + paso;
			} else {
				var hemisferio = "up";
				var nuy = y - paso;
			}
			
			var tangente = (diffy/diffx);
			
			Neko.setPos(nux, nuy);
			Neko.run(tangente, lado, hemisferio);
			Neko.timer = setTimeout("Neko.move()", 100);
		} else {
			Neko.animate("stop",1);
			Neko.goSleep();
		}
	},
	animate:function(action,mov){
		
		if(Neko.status != action){
			Neko.currentimg = 1;
			Neko.status = action;
			Neko.image.src = Neko.img_dir + action + Neko.currentimg + imgext;
		}
		else{
			if(mov != 1){
				Neko.image.src = Neko.img_dir + action + Neko.currentimg + imgext;
				Neko.currentimg = (Neko.currentimg % mov) + 1;
			}
		}
			
	},
	setPos:function(xpos, ypos) {
		var xcoord = (xpos - Neko.image.width/2);
		var ycoord = (ypos - Neko.image.height/2);
		

		var xmax = Neko.container.style.left + Neko.container.offsetWidth - Neko.image.width -3;
		var ymax = Neko.container.style.top + Neko.container.offsetHeight - Neko.image.height -3;
		var xmin = Neko.container.style.left;
		var ymin = Neko.container.style.top;
		
		
		if (xcoord <= xmax && xcoord >= xmin) {
			Neko.image.style.left = xcoord;
		}
		else if(xcoord > xmax){
			Neko.image.style.left = xmax;
		}
		else {
			Neko.image.style.left = xmin;
		}
		
		if (ycoord <= ymax && ycoord >= ymin) {;
			Neko.image.style.top = ycoord;
		}
		else if(ycoord > ymax){
			Neko.image.style.top = ymax;
		}
		else {
			Neko.image.style.top = ymin;
		}
		if(ycoord > ymax){
			Neko.timer = setTimeout("Neko.togi(\"d\")",3000);//derecha
		}
		else if(ycoord < ymin){
			Neko.timer = setTimeout("Neko.togi(\"u\")",3000);//izda
		}
		else if(xcoord > xmax){
			Neko.timer = setTimeout("Neko.togi(\"r\")",3000);//abajo
		}
		else if(xcoord < xmin){
			Neko.timer = setTimeout("Neko.togi(\"l\")",3000);//arriba
		}
	
	},
	getXPos:function() {
		var pos = parseInt(Neko.image.style.left);
		if (!pos) {
			pos = 0;
		}
		return pos + Neko.image.width/2;
	},
	getYPos:function() {
		var pos = parseInt(Neko.image.style.top);
		if (!pos) {
			pos = 0;
		}
		return pos + Neko.image.height/2;
	}
}

function init() {
	Neko.init();
	_IG_AddDOMEventHandler(document, "mousemove", Neko.wakeup);
	Neko.init();
}

_IG_RegisterOnloadHandler(init);

</script>

]]>
</Content>
</Module>
