var movingBallotId;
var shredded = false;

function get_random()
{
    var ranNum = Math.floor(Math.random()*100);
    return ranNum;
}



function setOpacity(node,val) {
	if (node.filters) {
		try {
			node.filters["alpha"].opacity = val*100;
		} catch (e) { }
	} else if (node.style.opacity) {
		node.style.opacity = val;
	}
}

function getX(node) {
	return parseInt(node.style.left);
}

function getY(node) {
	return parseInt(node.style.top);
}

function getWidth(node) {
	return parseInt(node.style.width);
}

function getHeight(node) {
	return parseInt(node.style.height);
}

function setX(node,x) {
	node.style.left = x + "px";
}

function setY(node,y) {
	node.style.top = y + "px";
}

function Evt(evt) {
	this.evt = evt ? evt : window.event; 
	this.source = evt.target ? evt.target : evt.srcElement;
	this.x = evt.pageX ? evt.pageX : evt.clientX;
	this.y = evt.pageY ? evt.pageY : evt.clientY;
}

Evt.prototype.toString = function () {
	return "Evt [ x = " + this.x + ", y = " + this.y + " ]";
};

Evt.prototype.consume = function () {
	if (this.evt.stopPropagation) {
		this.evt.stopPropagation();
		this.evt.preventDefault();
	} else if (this.evt.cancelBubble) {
		this.evt.cancelBubble = true;
		this.evt.returnValue  = false;
	}
};

Evt.addEventListener = function (target,type,func,bubbles) {
	if (document.addEventListener) {
		target.addEventListener(type,func,bubbles);
	} else if (document.attachEvent) {
		target.attachEvent("on"+type,func,bubbles);
	} else {
		target["on"+type] = func;
	}
};

Evt.removeEventListener = function (target,type,func,bubbles) {
	if (document.removeEventListener) {
		target.removeEventListener(type,func,bubbles);
	} else if (document.detachEvent) {
		target.detachEvent("on"+type,func,bubbles);
	} else {
		target["on"+type] = null;
	}
};

function dragPress(evt, id_name) 
{
	// hack for IE
	if (overBallot && id_name == "popup")
		return;

	evt = new Evt(evt);

	box = document.getElementById(id_name);
	movingBallotId = id_name;

	deltaX = evt.x - getX(box);
	deltaY = evt.y - getY(box);
	Evt.addEventListener(document,"mousemove",dragMove,false);
	Evt.addEventListener(document,"mouseup",dragRelease,false);

	evt.consume();
}

function dragMove(evt) {
	evt = new Evt(evt);
	setX(box,evt.x - deltaX);
	setY(box,evt.y - deltaY);

	
	if (movingBallotId != "popup" && droppedOnImage(evt) && (current_step == STEP_4 || current_step == STEP_1))
	{
		box.style.border = "blue 3px solid";
	}
	else
	{
		box.style.border = "black 1px solid";
	}

	evt.consume();
}

function dragRelease(evt) {
	evt = new Evt(evt);

	//setOpacity(box,1);
	Evt.removeEventListener(document,"mousemove",dragMove,false);
	Evt.removeEventListener(document,"mouseup",dragRelease,false);

	if (movingBallotId != "popup")
	{
		if (droppedOnBallot(evt) && pTable[currentBallotNumber].voteSide == NO_VOTE) {
			under = document.getElementById("ballotUnderVote");
			over = document.getElementById("ballotOverVote");
			over.style.top = under.style.top;
			over.style.left = under.style.left;

			overlayed = true;
		}
		else // they are not overlayed anymore, but could be dropped on shredder
		{
			overlayed = false;


			if (!shredded && droppedOnImage(evt) && pTable[currentBallotNumber].voteSide != NO_VOTE)
			{
				document.getElementById(movingBallotId).style.visibility = "hidden";
				document.getElementById(movingBallotId).style.left = "0px";

				if (movingBallotId == "ballotOverVote")
					pTable[currentBallotNumber].exposedSheet = BOTTOM_SHEET;
				else
					pTable[currentBallotNumber].exposedSheet = TOP_SHEET;

				shredded = true;
				
				loadPage("scanner.html", "imageDiv");
			}
			else if (shredded && droppedOnImage(evt))
			{
				if (current_step == STEP_1)
				{
					votingWindowOpen = false;
					drawTable();
					highlightedRow = showLinkedRowsFromP(currentBallotNumber);
				}
				else if (current_step == STEP_4)
				{
					votingWindowOpen = false;
					drawTable();
				}
			}
		}
	}		

	evt.consume();
}


function droppedOnBallot(evt) {
	var ballot_under = document.getElementById("ballotUnderVote");
	var ballot_over = document.getElementById("ballotOverVote");
	var x = getX(ballot_under);
	var y = getY(ballot_under);
	var x1 = getX(ballot_over);
	var y1 = getY(ballot_over);

	var diff_x = (x > x1 ? x - x1 : x1 - x);
	var diff_y = (y > y1 ? y - y1 : y1 - y);
	
	return diff_x < 50 &&
		   diff_y < 50;
}


function movedOffBallot(evt) {
	var ballot_under = document.getElementById("ballotUnderVote");
	var ballot_over = document.getElementById("ballotOverVote");
	var x = getX(ballot_under);
	var y = getY(ballot_under);
	var x1 = getX(ballot_over);
	var y1 = getY(ballot_over);
	
	return x != x1 || y != y1;
}



function droppedOnImage(evt) {
	var image = document.getElementById("imageDiv");
	var x = getX(image);
	var y = getY(image);
	var x1 = getX(box);
	var y1 = getY(box);

	var diff_x = (x > x1 ? x - x1 : x1 - x);
	var diff_y = (y > y1 ? y - y1 : y1 - y);

	return diff_x < 100 &&
		   diff_y < 100;
}

