// Triggers voor het drag en droppen.

var lastPosX = 0;
var lastPosY = 0;

function OnBeforeActivateHandler() {
  try {
    var args = arguments;
    var obj = args[0][1];
    if (sliders[obj.id].Status == 'start')
      SetText(getElt("defaulttext"), getElt('showtext'));
    else
      SetText(getElt(obj.id+"_text2"), getElt('showtext'));
    lastPosX = parse2Int(obj.style.left);
    lastPosY = parse2Int(obj.style.top); 
  }
  catch (e) {
    //status = "OnBeforeActivateHandler: " + e.message;
  }
}

function OnDroppedHandler() {
  try {
    var args = arguments;
    var obj = args[0][1];

    switch (IsSliderInRightPosition(obj)) {
      case "no hit":
        AddAttempt();
        sliders[obj.id].Status = 'attempted';
        SetText(getElt(obj.id+"_text2"), getElt('showtext')); 
        obj.style.left = lastPosX + "px";
        obj.style.top = lastPosY + "px";
        break;  
      case "hit":
        sliders[obj.id].Status = 'done';
        AddAttempt();
        AddClass(obj, "hidden");
        var newImage = getElt(obj.id+"_image"); 
        DeleteClass(newImage, "hidden");
        AddClass(newImage, "startPosition");
        newImage.style.left = (sliders["MainImage"].Position.X + sliders[obj.id].RelativeX) + "px";
        newImage.style.top = (sliders["MainImage"].Position.Y + sliders[obj.id].RelativeY) + "px";
        SetText(getElt(obj.id+"_text1"), getElt('showtext'));
        if (CheckDone()) {
          SetText(getElt("donetext"), getElt('showtext'));
          for (var i = 0; i < sliders.Results.length; i++) {
            if (sliders.Attempts.Count >= sliders.Results[i].From && sliders.Attempts.Count <= sliders.Results[i].Until)  {
              SetText(getElt(sliders.Results[i].Name), getElt("resulttext"));
            }
          }
          SetText(getElt('result'), getElt("resulttext"));
        }
        break;  
      case "outside hitarea":
        obj.style.left = lastPosX + "px";
        obj.style.top = lastPosY + "px";
        break;  
    }
  }
  catch (e) {
    // status = "OnDroppedHandler: " + e.message;
  }
  //dragMe = null;
}

function CheckDone() {
  for (var i = 0; i < sliders.Names.length; i++) 
    if (sliders[sliders.Names[i]].Status != "done")
    {
      status = "Nog niet klaar ("+sliders.Names[i]+")";
      return false;  
    }

  status = "Klaar";
  return true;
}

function AddClass(elt, classname) {
  if (elt.className.indexOf(classname) != 0 && elt.className.indexOf(' '+classname) == -1)
    elt.className += (elt.className?' ':'') + classname;
}

function DeleteClass(elt, classname) {
  var regex = new RegExp(" ?"+classname);
  elt.className = elt.className.replace(regex,'');
}

function AddAttempt() {
  try {
    sliders["Attempts"].Count++;
    var attemptsDiv = getElt(sliders["Attempts"].Name);

    if (attemptsDiv) {
      attemptsDiv.innerHTML = sliders["Attempts"].Count;
      if (sliders["Attempts"].Count == 10) 
        attemptsDiv.style.left = (parse2Int(attemptsDiv.style.left) - 8) + "px";     
    }
    else {
      status = "Aantal pogingen: " + sliders["Attempts"].Count;
    }
  }
  catch (e) {
    //status = "AddAttempts: " + e.message;
  }
}

function SetText(objSource, objDestination) {
  if (objSource && objDestination) 
    objDestination.innerHTML = objSource.innerHTML;  
}

var sliders = new Object(); 

function OnInitHandler() {
  try {
    if (sliders["MainImage"] != null) {
      var mainImage = getElt(sliders["MainImage"].Name);
      sliders["MainImage"].Position = GetRealPos(mainImage); 
      sliders["MainImage"].Width = mainImage.width;
      sliders["MainImage"].Height = mainImage.height;
      for (var i = 0; i < sliders.Names.length; i++) {
        var image = getElt(sliders.Names[i]);
        if (image != null) {
          var center = new Object();
          center.X = Math.round((image.width / 2) -0.1);
          center.Y = Math.round((image.height / 2) -0.1);
          sliders[sliders.Names[i]].CenterPosition = center;
        }
      }
    } 
    if (sliders["Attempts"] != null)  {
      var attemptsDiv = getElt(sliders["Attempts"].Name);
      var image = getElt("pogingenafbeelding");
      if (image != null && attemptsDiv != null) {
        var position = GetRealPos(image);
        attemptsDiv.style.left = position.X + 55;     
        attemptsDiv.style.top = position.Y + 33;     
        attemptsDiv.innerHTML = "0";
      }
    } 
  }
  catch (e) {
    //status = "OnInitHandler: " + e.message;
  }
}

function GetRealPos(obj) {
  var position = new Object();
  position.X = GetRealPosX(obj);  
  position.Y = GetRealPosY(obj);  
  return position;
}

function GetRealPosX(obj) {
  var offSet = obj.offsetLeft;  
  if (obj.offsetParent != null) {
    return offSet + GetRealPosX(obj.offsetParent);  
  }
  else
  {
    return offSet;  
  }
}

function GetRealPosY(obj) {
  var offSet = obj.offsetTop;  
  if (obj.offsetParent != null) {
    return offSet + GetRealPosY(obj.offsetParent);  
  }
  else
  {
    return offSet;  
  }
}

var isMainImageSet = false;
function AddSliderImageId(name) {
  if (!isMainImageSet) {
    sliders["MainImage"] = new Object();
    sliders["MainImage"].Name = name;  
    isMainImageSet = true;
  }
  else {
    alert("Er is maar 1 hoofdimage mogelijk.");  
  }

}

var isAttemptsSet = false;
function AddAttemptsId(name) {
  if (!isAttemptsSet) {
    sliders["Attempts"] = new Object();
    sliders["Attempts"].Name = name;  
    sliders["Attempts"].Count = 0;  
  }
  else {
    alert("Er is maar 1 mogelijkheid tot het plaatsen van het aantal pogingen.");  
  }

}

function AddSliderObject(name, type, coords, relativeX, relativeY) {
  sliders[name] = new Object();
  sliders[name].Type = type;
  sliders[name].Coords = coords.split(",");
  sliders[name].RelativeX = relativeX;
  sliders[name].RelativeY = relativeY;
  sliders[name].Status = 'start';
  if (!sliders.Names) sliders.Names = new Array();
  sliders.Names[sliders.Names.length] = name;
}

function AddResultObject(name, from, until) {
  if (!sliders.Results) sliders.Results = new Array();
  sliders.Results[sliders.Results.length] = new Object;
  sliders.Results[sliders.Results.length - 1].Name = name;
  sliders.Results[sliders.Results.length - 1].From = from;
  sliders.Results[sliders.Results.length - 1].Until = until;
}

function IsSliderInRightPosition(obj) {
  var xcenter = sliders[obj.id].CenterPosition.X + parse2Int(obj.style.left);
  var ycenter = sliders[obj.id].CenterPosition.Y + parse2Int(obj.style.top);
  
  if (xcenter > sliders["MainImage"].Position.X && xcenter < (sliders["MainImage"].Position.X + sliders["MainImage"].Width) && 
       ycenter > sliders["MainImage"].Position.Y && ycenter < (sliders["MainImage"].Position.Y + sliders["MainImage"].Height)) { 
    var x1 = sliders["MainImage"].Position.X + parse2Int(sliders[obj.id].Coords[0]);
    var y1 = sliders["MainImage"].Position.Y + parse2Int(sliders[obj.id].Coords[1]);
    switch (sliders[obj.id].Type.toUpperCase()) {
      case "RECT":
        var x2 = sliders["MainImage"].Position.X + parse2Int(sliders[obj.id].Coords[2]);
        var y2 = sliders["MainImage"].Position.Y + parse2Int(sliders[obj.id].Coords[3]);
        if (xcenter > x1 && xcenter < x2 && ycenter > y1 && ycenter < y2) 
          return "hit";
        else
          return "no hit";
        break;  
      case "CIRCLE":
        var radius1 = parse2Int(sliders[obj.id].Coords[2]);
        var xradius = Math.pow(xcenter - x1, 2);
        var yradius = Math.pow(ycenter - y1, 2);
        var radius2 = Math.sqrt(xradius + yradius);
        if (radius2 < radius1) 
          return "hit";
        else
          return "no hit";
        break;  
    }
  }
  return "outside hitarea";
}

function parse2Int(inp)
{
  if (inp.length > 0 && !isNaN(inp)) return parseInt(inp);

  if (inp.indexOf("px") == -1) return 0;

  return parseInt(inp.substring(0, inp.length - 2));
}



// Onderstaande script wordt gebruikt om het selecteren van content te disablen.

/***********************************************
* Disable select-text script- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/

//form tags to omit in NS6+:
var omitformtags=["body"];

omitformtags=omitformtags.join("|");

function disableselect(e){
  if (omitformtags.indexOf(e.target.tagName.toLowerCase())==-1)
    return false;
}

function reEnable(){
  return true;
}

if (typeof document.onselectstart!="undefined") 
    document.onselectstart=new Function ("return false;");
  else {
    document.onmousedown=disableselect;
    document.onmouseup=reEnable;
  }


