//dragObject contains data for currently dragged element
//this version is modified to suit my needs
var dragObject = {
	selectedObject : null,
	offsetX : 0,
	offsetY : 0,
	//invoked onmousedown
	engageDrag : function(evt) {
	    evt = (evt) ? evt : window.event;
		dragObject.selectedObject = (evt.target) ? evt.target : evt.srcElement;
		var target = (evt.target) ? evt.target : evt.srcElement;
		var dragContainer = target;
		//in case event target is nested in draggable container
		while (target.className != "draggable" && target.parentNode) {
			  target = dragContainer = target.parentNode;
		}  //end while loop
		if (dragContainer) {
		   dragObject.selectedObject = dragContainer;
		   DHTMLAPI.setZIndex(dragContainer, 100);
		   dragObject.setOffsets(evt, dragContainer);
		   dragObject.setDragEvents();
		   evt.cancelBubble = true;
		   evt.returnValue = false;
		   if (evt.stopPropagation) {
		   	  evt.stopPropagation();
			  evt.preventDefault();
		   }  //end inner if loop
		}  //end outer if loop
		return false;
	},  //end engageDrag function
	
	//calculate offset of mousedown within draggable element
	setOffsets : function (evt, dragContainer) {
	    if (evt.pageX) {
		    dragObject.offsetX = evt.pageX - ((dragContainer.offsetLeft) ? dragContainer.offsetLeft : dragContainer.left);
			dragObject.offsetY = evt.pageY - ((dragContainer.offsetTop) ? dragContainer.offsetTop : dragContainer.top);
		} else if (evt.offsetX || evt.offsetY) {
		    dragObject.offsetX = evt.offsetX - ((evt.offsetX < -2) ? 0 : document.body.scrollLeft);
			dragObject.offsetY = evt.offsetY - ((evt.offsetY < -2) ? 0 : document.body.scrollTop);
		}  //end if/else statement
	}, //end setOffsets function
	
    //invoked onmousemove
	dragIt : function (evt) {
	    evt = (evt) ? evt : window.event;
		var obj = dragObject;
		if (evt.pageX) {
		     DHTMLAPI.moveTo(obj.selectedObject, (evt.pageX - obj.offsetX), (evt.pageY - obj.offsetY));
		} else if (evt.clientX || evt.clientY) {
		     DHTMLAPI.moveTo(obj.selectedObject, (evt.clientX - obj.offsetX), (evt.clientY - obj.offsetY));
		}  //end if/else statement
		evt.cancelBubble = true;
		evt.returnValue = false;
	},  //end dragIt function
	
	//invoked onmouseup
	//function called onTarget, called by this function causes object to snap to acceptable position
	releaseDrag : function(evt) {
	    DHTMLAPI.setZIndex(dragObject.selectedObject, 0);
		dragObject.onTarget();
		dragObject.clearDragEvents();
		dragObject.selectedObject = null;		
	},  //end releaseDrag function
	
	//this function helps figure out if a dragged object is being dropped
	//in a legal place.  If the place is legal, then the object is snapped
	//into position over an answerBox
	//The "grading" also happens here, with the correct/incorrect information
	//stored in variables that are finally used when the student pushes the "grade" button
	onTarget : function(evt) {
	    evt = (evt) ? evt: window.event;
		var objX, objY, result;
		var x0 = DHTMLAPI.getElementLeft("answerBox0");
		var x1 = DHTMLAPI.getElementLeft("answerBox1");
		var x2 = DHTMLAPI.getElementLeft("answerBox2");
		var x3 = DHTMLAPI.getElementLeft("answerBox3");
		var x4 = DHTMLAPI.getElementLeft("answerBox4");
		var x5 = DHTMLAPI.getElementLeft("answerBox5");
		var x6 = DHTMLAPI.getElementLeft("answerBox6");
		var y0 = DHTMLAPI.getElementTop("answerBox0");
		var y1 = DHTMLAPI.getElementTop("answerBox1");
		var y2 = DHTMLAPI.getElementTop("answerBox2");
		var y3 = DHTMLAPI.getElementTop("answerBox3");
		var y4 = DHTMLAPI.getElementTop("answerBox4");
		var y5 = DHTMLAPI.getElementTop("answerBox5");
		var y6 = DHTMLAPI.getElementTop("answerBox6");
		var pattern = /\d+\s\d+/;
		if (dragObject.selectedObject.pageX) {
		   objX = dragObject.selectedObject.pageX;
		   objY = dragObject.selectedObject.pageY;
		} else if (dragObject.selectedObject.style) {
		    objX = parseInt(dragObject.selectedObject.style.left);
			objY = parseInt(dragObject.selectedObject.style.top);
		}  //end if/else loop
		if ((objX >= x0-10 && objX <= x0+40) && (objY >= y0-10 && objY <= y0+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x0+2, y0+2);
			result = pattern.exec(reactionQuestion[0]);
			reactionQuestion[0] = result[0];
			reactionQuestion[0] = reactionQuestion[0] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[0]==reactionList[j]){
				    answerBox0value = correct;
					//changeText("answerBox0", reactionQuestion[0]);
					break;
				} else {
				    answerBox0value = incorrect;
					//changeText("answerBox0", reactionQuestion[0]);
				}  //end if/else loop
			}  //end for loop
		} else if ((objX >= x1-10 && objX <= x1+40) && (objY >= y1-10 && objY <= y1+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x1+2, y1+2);
			result = pattern.exec(reactionQuestion[1]);
			reactionQuestion[1] = result[0];
			reactionQuestion[1] = reactionQuestion[1] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[1]==reactionList[j]){
				    answerBox1value = correct;
					//changeText("answerBox1", reactionQuestion[1]);
					break;
				} else {
				    answerBox1value = incorrect;
					//changeText("answerBox1", reactionQuestion[1]);
				}  //end if/else loop
			}  //end for loop
		} else if ((objX >= x2-10 && objX <= x2+40) && (objY >= y2-10 && objY <= y2+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x2+2, y2+2);
			result = pattern.exec(reactionQuestion[2]);
			reactionQuestion[2] = result[0];
			reactionQuestion[2] = reactionQuestion[2] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[2]==reactionList[j]){
				    answerBox2value = correct;
					//changeText("answerBox2", reactionQuestion[2]);
					break;
				} else {
				    answerBox2value = incorrect;
					//changeText("answerBox2", reactionQuestion[2]);
				}  //end if/else loop
			}  //end for loop
		} else if ((objX >= x3-10 && objX <= x3+40) && (objY >= y3-10 && objY <= y3+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x3+2, y3+2);
			result = pattern.exec(reactionQuestion[3]);
			reactionQuestion[3] = result[0];
			reactionQuestion[3] = reactionQuestion[3] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[3]==reactionList[j]){
				    answerBox3value = correct;
					//changeText("answerBox3", reactionQuestion[3]);
					break;
				} else {
				    answerBox3value = incorrect;
					//changeText("answerBox3", reactionQuestion[3]);
				}  //end if/else loop
			}  //end for loop
		} else if ((objX >= x4-10 && objX <= x4+40) && (objY >= y4-10 && objY <= y4+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x4+2, y4+2);
			result = pattern.exec(reactionQuestion[4]);
			reactionQuestion[4] = result[0];
			reactionQuestion[4] = reactionQuestion[4] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[4]==reactionList[j]){
				    answerBox4value = correct;
					//changeText("answerBox4", reactionQuestion[4]);
					break;
				} else {
				    answerBox4value = incorrect;
					//changeText("answerBox4", reactionQuestion[4]);
				}  //end if/else loop
			}  //end for loop
		} else if ((objX >= x5-10 && objX <= x5+40) && (objY >= y5-10 && objY <= y5+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x5+2, y5+2);
			result = pattern.exec(reactionQuestion[5]);
			reactionQuestion[5] = result[0];
			reactionQuestion[5] = reactionQuestion[5] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[5]==reactionList[j]){
				    answerBox5value = correct;
					//changeText("answerBox5", reactionQuestion[5]);
					break;
				} else {
				    answerBox5value = incorrect;
					changeText("answerBox5", reactionQuestion[5]);
				}  //end if/else loop
			}  //end for loop
		} else if ((objX >= x6-10 && objX <= x6+40) && (objY >= y6-10 && objY <= y6+40)) {
			DHTMLAPI.moveTo(dragObject.selectedObject, x6+2, y6+2);
			result = pattern.exec(reactionQuestion[6]);
			reactionQuestion[6] = result[0];
			reactionQuestion[6] = reactionQuestion[6] + " " + dragObject.selectedObject.name;
			for (var j=0; j<reactionList.length; j++) {
			    if (reactionQuestion[6]==reactionList[j]){
				    answerBox6value = correct;
					//changeText("answerBox6", reactionQuestion[6]);
					break;
				} else {
				    answerBox6value = incorrect;
					//changeText("answerBox6", reactionQuestion[6]);
				}  //end if/else loop
			}  //end for loop
		} //end outer if/else loop
	},  //end onTarget function
	
	//set temporary events
	setDragEvents : function() {
	    addEvent(document, "mousemove", dragObject.dragIt, false);
		addEvent(document, "mouseup", dragObject.releaseDrag, false);
	},  //end setDragEvents function
	
	//remove temporary events
	clearDragEvents : function () {
	    removeEvent(document, "mousemove", dragObject.dragIt, false);
		removeEvent(document, "mouseup", dragObject.releaseDrag, false);
	},  //end clearDragEvents function
	
	//initialize, assigining mousedown events to all
	//elements with class = "draggable" attributes
	init : function () {
	    var elems = [];
		if (document.all) {
		    //IE 5 & 5.5 don't know wildcard for getElementsByTagName
			//so use document.body.all, which lets IE4 work OK
			elems = document.body.all;
		} else if (document.body && document.body.getElementsByTagName) {
		    elems = document.body.getElementsByTagName("*");
		}  //end if/else statement
		for (var i = 0; i < elems.length; i++) {
		    if (elems[i].className.match(/draggable/)) {
			    addEvent(elems[i], "mousedown", dragObject.engageDrag, false);
			}  //end if loop
		}  // end for loop
	}  //end init function
};  //end dragObject definition

//set onload event via eventsManager.js
addOnLoadEvent(dragObject.init);

