//
// Global bugDragDrop management -- BDD (Bugimus Drag Drop)
//

bugBase.prototype.attachBDD = function() {
	this.BDDnum = 0
	this.BDDobj = new Array()
	this.BDDselected = 0
	this.BDDzbias = 5000
}
bugBase.prototype.BDDreStackZ = function() {
//	alert("reStackZ: selected index = "+this.BDDselected)
	for(i=0; i<this.BDDnum; i++ ) {
		if( this.BDDobj[i].obj.getz() > this.BDDobj[this.BDDselected].obj.getz() ) {
			this.BDDobj[i].obj.setz( this.BDDobj[i].obj.getz()-1 )
		}
	}
	this.BDDobj[this.BDDselected].obj.setz(bugimus.BDDnum+bugimus.BDDzbias-1)
}
window.bugimus.attachBDD()

//
// Local bugDragDrop functionality
//

// Define main object
function dragMe(x,y,w,h,bgcolor) {
	this.objname = "window.bugimus.BDDobj[" + window.bugimus.BDDnum + "]"
	this.objnum = window.bugimus.BDDnum
	window.bugimus.BDDobj[window.bugimus.BDDnum++] = this

	document.body.appendChild(this.obj=document.createElement("DIV"))
	this.obj.dragObject = this
	with(this.obj.style) {
		position="absolute"
		width=w 
		height=h 
		zIndex=bugimus.BDDnum+bugimus.BDDzbias-1
		border="outset 2px #fff"
		backgroundColor=bgcolor
		clip="rect(0,"+(w+4)+","+(h+4)+",0)"
		overflow="hidden"
		padding="0px"
	}
	this.obj.getx = getoX
	this.obj.gety = getoY
	this.obj.setx = setoX
	this.obj.sety = setoY
	this.obj.getw = getoWidth
	this.obj.geth = getoHeight
	this.obj.setw = setoWidth
	this.obj.seth = setoHeight
	this.obj.getz = getoZindex
	this.obj.setz = setoZindex
	this.obj.clip = clipoDiv
	this.obj.getp = getoPadding
	this.obj.getb = getoBorderWidth
	this.obj.setp = setoPadding
	this.obj.setb = setoBorderWidth

	this.obj.setx(x)
	this.obj.sety(y)

	this.dragOffsetX = 0
	this.dragOffsetY = 0
	this.dragging = false

	this.obj.onmousedown = function(e) {
//alert(this.style.backgroundColor)
//alert(this.getb())
		var x = window.event.clientX + bugimus.BMIscrollX()
		var y = window.event.clientY + bugimus.BMIscrollY()
		var dx = this.getx()
		var dy = this.gety()
		var dw = this.getw() + 2*this.getb() + 2*this.getp()
		var dh = this.geth() + 2*this.getb() + 2*this.getp()
//		alert(this.dragObject.objname+" = "+x+" "+y+" "+dx+" "+dy+" "+dw+" "+dh+" ")
		if (x >= dx && x <= dx+dw && y >= dy && y <= dy+dh) {
			this.dragObject.dragOffsetX = x-dx
			this.dragObject.dragOffsetY = y-dy
//alert(this.dragObject.objname+" = x="+x+" y="+y+" dragX="+this.dragObject.dragOffsetX+" dragY"+this.dragObject.dragOffsetY)
			this.dragObject.dragging = true
			bugimus.BDDselected = this.dragObject.objnum
			bugimus.BDDreStackZ()
			return false
		}
		else return true
	}

	this.obj.handlemousemove = function() {
		if (this.dragObject.dragging == true) {
			var x = bugimus.BMImousex + bugimus.BMIscrollX()
			var y = bugimus.BMImousey + bugimus.BMIscrollY()
			this.dragObject.obj.setx(x-this.dragObject.dragOffsetX)
			this.dragObject.obj.sety(y-this.dragObject.dragOffsetY)
//if((x-this.dragObject.dragOffsetX) < 100) alert(this.dragObject.objname+" = BMImousex="+bugimus.BMImousex+" dragX="+this.dragObject.dragOffsetX)
			return false
		} else {
			return true
		}
	}

	this.obj.onmouseup = function() {
		this.dragObject.dragging = false
		return true
	}

}

// You have to redefine the global mousemove handler from BMI
bugBase.prototype.handlemousemove = function (e){
	if(bugimus.IE5) { 
		bugimus.BMImousex = event.clientX
		bugimus.BMImousey = event.clientY
	} else if(bugimus.NN4) {
		bugimus.BMImousex = e.pageX+2
		bugimus.BMImousey = e.pageY+2
	} else if(bugimus.NN6) {
		bugimus.BMImousex = e.pageX
		bugimus.BMImousey = e.pageY
	}
//	if(bugimus.BDCobj[0]) bugimus.BDCobj[bugimus.BDCselected].obj.handlemousemove()
//	if(bugimus.BDDobj[0]) bugimus.BDDobj[bugimus.BDDselected].obj.handlemousemove()
	if(bugimus.BDDobj && bugimus.BDDnum) bugimus.BDDobj[bugimus.BDDselected].obj.handlemousemove()
	if(bugimus.BDCobj && bugimus.BDCnum) bugimus.BDCobj[bugimus.BDCselected].dragObject.handlemousemove()

	// prevents selecting text on main page when cursor falls off edge... 
	//a global dragging flag might be a good way to have the cake and eat it too
	return false
}
window.bugimus.attachBMI()

