// click.js - Make dynamic layers mouse aware

// startup flag
var gMod_Click = true;

// prerequisites
var gMod_Mouse;
if (!gMod_Mouse){alert("You must load mouse.js before click.js");}
var gMod_Layer;
if (!gMod_Layer){alert("You must load layer.js before click.js");}

/////////////////////////////////////////////////////////////////////////////////////////////

var gNextClickID = 1;

function Click(name) {

	this.name = name;
	this.clickid = gNextClickID++;
	this.obj = null;
	this.array = new Array();
	this.active = false;
	this.offsetX = 0;
	this.offsetY = 0;
	this.zIndex = 0;
	this.resort = true;
	this.add = ClickAdd;
	this.remove = ClickRemove;
	this.setGrab = ClickSetGrab;
	this.mouseDown = ClickMouseDown;
	this.mouseMove = ClickMouseMove;
	this.mouseUp = ClickMouseUp;
	this.onMouseDown = new Function();
	this.onMouseMove = new Function();
	this.onMouseUp = new Function();

	if (name){
		mouse.addDown(name+".mouseDown");
		mouse.addMove(name+".mouseMove");
		mouse.addUp(name+".mouseUp");
	}
}

function ClickAdd() {
	for (var i=0; i<arguments.length; i++) {
		var l = this.array.length;
		this.array[l] = arguments[i];
		this.array[l].clickGrab[this.clickid] = new Array(0,this.array[l].w,this.array[l].h,0);
		this.zIndex += 1;
	}
}
function ClickSetGrab(dynlayer,top,right,bottom,left){
	dynlayer.clickGrab[this.clickid] = new Array(top,right,bottom,left);
}
function ClickRemove() {
	for (var i=0; i<arguments.length; i++) {
		for (var j=0; j<this.array.length; j++) {
			if (this.array[j]==arguments[i]) {
				for (var k=j;k<=this.array.length-2;k++) this.array[k] = this.array[k+1]
				this.array[this.array.length-1] = null
				this.array.length -= 1
				break
			}
		}
	}
}
function ClickMouseDown(x,y) {
	for (var i=this.array.length-1;i>=0;i--) {
		var lyr = this.array[i]
		if (ClickcheckWithinLayer(x,y,lyr,this.clickid)) {
			return this.onMouseDown(x-lyr.getAbsX(),y-lyr.getAbsY(),lyr.id);
			break;
		}
	}
}

function ClickMouseMove(x,y) {
	for (var i=this.array.length-1;i>=0;i--) {
		var lyr = this.array[i]
		if (ClickcheckWithinLayer(x,y,lyr,this.clickid)) {
			return this.onMouseMove(x-lyr.getAbsX(),y-lyr.getAbsY(),lyr.id);
			break;
		}
	}
}
function ClickMouseUp(x,y) {
	for (var i=this.array.length-1;i>=0;i--) {
		var lyr = this.array[i]
		if (ClickcheckWithinLayer(x,y,lyr,this.clickid)) {
			return this.onMouseUp(x-lyr.getAbsX(),y-lyr.getAbsY(),lyr.id);
			break;
		}
	}
}

function ClickcheckWithin(x,y,left,right,top,bottom) {
	if (x>=left && x<right && y>=top && y<bottom) return true
	else return false
}
function ClickcheckWithinLayer(x,y,lyr,dragid) {
	if (checkWithin(x,y,lyr.getAbsX()+lyr.clickGrab[dragid][3],lyr.getAbsX()+lyr.clickGrab[dragid][1],lyr.getAbsY()+lyr.clickGrab[dragid][0],lyr.getAbsY()+lyr.clickGrab[dragid][2])) return true
	else return false
}

click = new Click("click");

/////////////////////////////////////////////////////////////////////////////////////////////
