var keyControls = {
	registerEvents : function(){
		document.addEventListener("keydown", this.onKeyDown, false);
		document.addEventListener("keyup", this.onKeyUp, false);
	},
	onKeyDown : function( e ){ 
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		changeKey( code, 1 ); 
	},
	onKeyUp : function( e ){ 
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		changeKey( code, 0 ); 
	}	
};

function changeKey(which, to){
	switch (which){
		/*case 65:*/ case 37: key[ KEY.left ] = to; break; // left
		case 87: case 38: key[ KEY.up ] = to; break; // up
		case 68: case 39: key[ KEY.right ] = to; break; // right
		case 83: case 40: key[ KEY.down ] = to; break;// down
		case 32: key[ KEY.jump ] = to; break; // space bar;
		case 17: key[ KEY.unused ] = to; break; // ctrl
	}
}

// iPhone controls

var scr = {
	width : 320,
	fireZone : 240,
	rightZone : 150,
	leftZone : 75
};

var iPhoneControls = {
	
	active: false,

	registerEvents : function(){
		this.active = true;
		this.onEvent("touchstart", this.onTouchStart);
		this.onEvent("touchmove", this.onTouchMove);
		this.onEvent("touchend", this.onTouchEnd);

		this.onEvent("gesturechanged", this.noHandle);
		this.onEvent("mousedown", this.noHandle );
		this.onEvent("mousemove", this.noHandle );
		this.onEvent("mouseup", this.noHandle );
	},
	
	onEvent : function(event, handler) {
		document.body.addEventListener(event, handler, false);
	},
	
	noHandle : function( event ){
		event.preventDefault();
	},
	
	onTouchStart : function( event ){
		event.preventDefault();

		var touches = event.changedTouches;
		for(var i = 0; i < touches.length; i++ ){
			var touch = touches[ i ];

			if(touch.pageX > scr.fireZone){
				// it's a jump
				key[ KEY.jump ] = 1;
				updateOrientation();
			}

			//if( touch < scr.rightZone ){
				// it's a left/right
			//}
		}
	},
	
	onTouchMove : function(event) {
		event.preventDefault();

		var touches = event.changedTouches;
		for(var i = 0; i < touches.length; i++ ){

			if(touches[i].pageX < scr.rightZone ){
				var x = touches[i].pageX;
				var y = touches[i].pageY;

				if( x < scr.leftZone ){
					//log("left");
					key[ KEY.left ] = 1;
					key[ KEY.right ] = 0;
				}
				else{
					//log("right");
					key[ KEY.left ] = 0;
					key[ KEY.right ] = 1;
				}
			}
		}
	},

	onTouchEnd : function(event) {
		event.preventDefault();

		var touches = event.changedTouches;

		for(var i = 0; i < touches.length; i++ ){
			if( touches[ i ].pageX > scr.fireZone ){
				key[ KEY.jump ] = 0;
				return;
			}
			key[ KEY.right ] = 0;
			key[ KEY.left ] = 0;
		}
	},
	
	drawDPads : function( el ){
		var width = 60;
		var dpadLeft = makeDiv( "dpadLeft", scr.leftZone - (width/2), 250, width, width, true );
		dpadLeft.className = "dpad";
		
		var dpadRight = makeDiv( "dpadRight", 370, 250, width, width, true );
		dpadRight.className = "dpad";
		el.appendChild( dpadLeft );
		el.appendChild( dpadRight );
	}
};
