import mx.controls.Alert;

/* *************************************************************************** *
 * Define parameters for the drop targets, and the items that will be dropped  *
 * onto them.                                                                  *
 * *************************************************************************** */
 
// TODO: Dynamic generation of DROP_ITEMS values -- Get from scenario init
 
// Specify the total number of drop targets on the screen, and then for each
// target (starting with 0), provide the X, Y, and TEXT that will be assigned
// to it

_parent.btnreset.onRelease = function () {
	trace("RESET ACTIVITY");
	reset();
}

	
var TOTAL_DROP_TARGETS = 0;
var DROP_TARGETS       = 0;

//attaching sounds

var attempted = false;

var gameStopped = false;


var client1Ctr = 0;
var client2Ctr = 0;
var client3Ctr = 0;
var client4Ctr = 0;

var clientArr = new Array();
clientArr[0] = 4;
clientArr[1] = 5;
clientArr[2] = 3;
clientArr[3] = 3;


function init_drop_targets(arr) {
	TOTAL_DROP_TARGETS = arr.length;
	DROP_TARGETS = new Array(TOTAL_DROP_TARGETS);
	for (var i = 0; i < arr.length; i++) {
		DROP_TARGETS[i] = arr[i];
	}
}

// Speicfy the total number of drop items on the screen, and then for each
// item (starting with 0), provide the X, Y, and TEXT that will be assigned
// to it
var TOTAL_DROP_ITEMS = 0;
var DROP_ITEMS = 0;
function init_drop_items(arr) {

	TOTAL_DROP_ITEMS = arr.length;
	DROP_ITEMS = new Array(arr.length);
	for (var i = 0; i < arr.length; i++) {
		DROP_ITEMS[i] = arr[i];
	}
}

// This is an index of 'correct' answers. This is specified by the index
// of the drop item. So if the first drop target, should have the 3rd drop item
// placed in it, you would specify index 2 (starts from 0);
var DROP_ANSWERS_CORRECT = 0;
function init_drop_answers(arr) {
	DROP_ANSWERS_CORRECT = new Array(arr.length);
	for (var i = 0; i < arr.length; i++) {
		DROP_ANSWERS_CORRECT[i] = arr[i];
	}
}

/* *************************************************************************** *
 *                        DO NOT EDIT BELOW THIS LINE                          *
 *                        DO NOT EDIT BELOW THIS LINE                          *
 * *************************************************************************** */

var ITEM_LEVEL = 0;

function init() {
        trace("im inside init");

	client1._visible = false;
	client2._visible = false;
	client3._visible = false;
	client4._visible = false;

	TargetOrigin._visible = false;
	//_parent.popupWin.close();

	for (var i = 0; i < TOTAL_DROP_TARGETS; i++) {
		var nItem = "_TargetItem" + i;
		duplicateMovieClip("TargetOrigin", nItem, ++ITEM_LEVEL);
		setProperty(nItem, _x, DROP_TARGETS[i][0]);
		setProperty(nItem, _y, DROP_TARGETS[i][1]);
		setProperty(nItem, _visible, true);	
		set(nItem + ".display", DROP_TARGETS[i][2]);
		set(nItem + ".index", i);
		set(nItem + ".item", -1);
		set(nItem + ".deviceId","Server " + (i + 1));
                


	}
	var k = 0;
	for (var i = 0; i < 4; i++) {

		var nSource = "client" +( i + 1);
		for(var j=0; j< clientArr[i]; j++)
		{
			var nItem = "_DropItem" +k;
			duplicateMovieClip(nSource, nItem, ++ITEM_LEVEL);

			setProperty(nItem, _x, DROP_ITEMS[k][0]);
			setProperty(nItem, _y, DROP_ITEMS[k][1]);
			setProperty(nItem, _visible, true);	
			set(nItem + ".display", DROP_ITEMS[k][2]);
			set(nItem + ".index", k);
			set(nItem + ".target", -1);
			//set(nItem + ".deviceId","Client " + (i + 1));
			set(nItem + ".depth", ITEM_LEVEL);
			k++;
		}
	}

	//duplicateMovieClip("_parent.popupWin", "popWin", ++ITEM_LEVEL);
	//popWin._visible = false;

}


function snapItems(item) {
	

	var center_x = item._x;  // + Math.round(item._width / 2);
	var center_y = item._y;  // + Math.round(item._height / 2);

	for (var i = 0; i < TOTAL_DROP_TARGETS; i++) {
		var target = eval("_TargetItem" + i);
		if (center_x >= target._x && center_x <= (target._x + target._width) &&
			center_y >= target._y && center_y <= (target._y + target._height) &&
			(target.item == -1 || target.item == item.index)) 
			{
				// Remove the old match if there was one
				/*if (item.target != -1) {
					var oldTarget = eval("_TargetItem" + item.target);
					oldTarget.item = -1;
					item.target = -1;
				}
				*/

				// Position matched, and target not used already
				item._x = target._x + ((target._width - item._width)   +5);      // / 2); // + 40;
				item._y = target._y + ((target._height - item._height) +(target._height/2)-5);  // / 2) + 10; // //-20;
					//target.item = item.index;
				//item.target = target.index;
				//check for the scoring
				if (droppedCorrect(item.index,target.index))
				{
					showCorrect(item.index,target.index);
				}
				else
				{
					resetItem(item.index);
				}
				return;
		}
	}


	
	// No targets match
	item._x = DROP_ITEMS[item.index][0];
	item._y = DROP_ITEMS[item.index][1];
	// Answer was picked up from a bin, reset the answer
	if (item.target != -1) {
		var target = eval("_TargetItem" + item.target);
		target.item = -1;
		item.target = -1;
	}
}

function getAnswer(index) {
	var target = eval("_TargetItem" + index);
	if (target.item == -1) return "&lt;unassigned&gt;"
	var item = eval("_DropItem" + target.item);
	return item.display;
}

function getIndex(index) {
	var target = eval("_TargetItem" + index);
	return target.item;
}



function droppedCorrect(itmNum,targetNum)
{
	//check if they are in the same subnet
	
	 var itemptr = eval("_DropItem" + itmNum);
	 var targptr = eval("_TargetItem" + targetNum);
	 var droppedItem = String(itemptr.deviceId);
	 var targetItem = String(targptr.deviceId);

	//check the answer to see if it matches
	var arrtarget = targetItem.split(" ");
	var arrItem = droppedItem.split(" ");

	var targetCorrectAns = DROP_ANSWERS_CORRECT[arrtarget[1] - 1].split(",");


	for (var i=0; i < targetCorrectAns.length; i++)
	{
		if ( targetCorrectAns[i] == arrItem[1])
		{
			//they match now check if it is already dropped on to this server
			var found = false;


			for (var j=0; j < targptr.arrDroppedItems.length; j++)
			{
				if (targptr.arrDroppedItems[j] == arrItem[1])
				{
					found = true;
					break;
				}

			}

			if (found == false)
			{
				targptr.arrDroppedItems.push(arrItem[1]);
				increaseCtr(arrItem[1]);
				return true;
			}
			
			
		}
	}
	 
	//_root.deebug.text = itemptr.IpAddress.text + ";" + tmpString;
	return false;

}

function showCorrect(iIndex,tIndex)
{
	 var ptr = eval("_DropItem" + iIndex);
	 var targptr = eval("_TargetItem" + tIndex);
	 var txtItem = String(ptr.deviceName);

	targptr.DroppedItems.text += txtItem + "\n";

	ptr.fadeOut (.7, "linear"); 

	
	//check if the client is placed on all the servers correctly, if so disable the dragging
	//Client 1 complete



	if (client1Ctr == 3)
	{
		var nItem = eval("_DropItem" +0);
		nItem.draggable = false;
		HighlightClient1._visible = false;
		nItem._alpha = 50;

	}
	if (client2Ctr == 4)
	{
		var nItem = eval("_DropItem" +4);
		nItem.draggable = false;
		HighlightClient2._visible = false;
		nItem._alpha = 50;


	}
	if (client3Ctr == 2)
	{
		var nItem = eval("_DropItem" + 9);
		nItem.draggable = false;
		HighlightClient3._visible = false;
		nItem._alpha = 50;

	}

	if (client4Ctr == 2)
	{
		var nItem = eval("_DropItem" + 12);
		nItem.draggable = false;
		HighlightClient4._visible = false;
		nItem._alpha = 50;
	}

	//chk if they have completed the task if so show the message
	
	if ( (client1Ctr  == 3) && (client2Ctr  == 4) && (client3Ctr  == 2) && (client4Ctr  == 2) )
	{
		ShowTaskCompleted("You have successfully matched all clients to the appropriate servers.");
	}

	ptr.deviceName ="";
}

function HideHost(iIndex)
{
//	_root.deebug.text = "i am called" + iIndex;
	var ptr = eval("_DropItem" + iIndex);
	 ptr._visible = false;
}

function resetItem(iIndex)
{
	var ptr = eval("_DropItem" + iIndex);
	//ptr._x = DROP_ITEMS[iIndex][0];
	//ptr._y = DROP_ITEMS[iIndex][1];

	//ptr.tween( {start_x:"-100", start_y:"-100", ease:"easeInOutBack", time:1.5});
	//ZigoEngine.doTween({ target:ptr, scale:200, ease:Strong.easeIn, time:"00:50", startAt:"01:50" });
	ptr.slideTo(DROP_ITEMS[iIndex][0],DROP_ITEMS[iIndex][1],.3);


}

function increaseCtr(idx)
{

	if (idx == 1)
	{
		client1Ctr  = client1Ctr  + 1;
	} else if (idx == 2)
	{
		client2Ctr  = client2Ctr  + 1;
	} else if (idx == 3)
	{
		client3Ctr  = client3Ctr  + 1;
	}else if (idx == 4)
	{
		client4Ctr  = client4Ctr  + 1;
	}
	
}

function doScore()
{

	var errorMsg:String;

	if  ( (client1Ctr == 3) && (client2Ctr == 4) && (client3Ctr == 2) && (client4Ctr == 2) )
	{
		errorMsg = "You have successfully matched all clients to the appropriate servers.";

	}
	else
	{
		errorMsg  = "Task Not Completed";
	}

	ShowTaskCompleted(errorMsg);


//myAlert = Alert.show(errorMsg, "Message", Alert.OK, parent, AlertHndlr, "Stop", Alert.OK);
//myAlert._width  += 200;
//myAlert._height += 10;
//myAlert.depthChild0._height+= 20;
//myAlert.button_mc._y -= 10;

//myAlert.themeColor = "haloOrange";
//myAlert.backgroundColor = "0xE5E5E5";

}

function reset()
{
trace("reset");
 client1Ctr = 0;
 client2Ctr = 0;
 client3Ctr = 0;
client4Ctr = 0;
clientArr = new Array();
clientArr[0] = 4;
clientArr[1] = 5;
clientArr[2] = 3;
clientArr[3] = 3;


TOTAL_DROP_TARGETS = 0;
DROP_TARGETS       = 0;
TOTAL_DROP_ITEMS = 0;
DROP_ITEMS = 0;
DROP_ANSWERS_CORRECT = 0;
ITEM_LEVEL = 0;
HighlightClient1._visible = true;
HighlightClient2._visible = true;
HighlightClient3._visible = true;
HighlightClient4._visible = true;

_parent.startItem();


}
function ShowTaskCompleted(errMsg)
{
	_parent.popWin.open();
	//_parent.popWin.fadeIn(.3,"linear");
	//popWin.msg.text = errMsg;
	//make all the client un-draggable
	var nItem = "";
	for (var i = 0; i < 15; i++) {
		nItem = eval("_DropItem" + i);
		nItem.draggable = false;
	}

}

function closePopup()
{
	popWin.fadeOut(.5);
	//make the client draggable now
	//make all the client draggable
	var nItem = "";
	for (var i = 0; i < 15; i++) {
		nItem = eval("_DropItem" + i);
		nItem.draggable = true;
	}	

	//set those clients to undraggable stage as it was earlier
	if (client1Ctr == 3)
	{
		var nItem = eval("_DropItem" +0);
		nItem.draggable = false;
	}
	if (client2Ctr == 4)
	{
		var nItem = eval("_DropItem" +4);
		nItem.draggable = false;
	}
	if (client3Ctr == 2)
	{
		var nItem = eval("_DropItem" + 9);
		nItem.draggable = false;
	}

	if (client4Ctr == 2)
	{
		var nItem = eval("_DropItem" + 12);
		nItem.draggable = false;
	}

	

}