//Das Objekt, das gerade bewegt wird.
var dragobjekt = null;

// Position, an der das Objekt angeklickt wurde.
var dragx = 0;
var dragy = 0;

// Mausposition
var posx = 0;
var posy = 0;
var relstartX=0;
var relstartY=0;
var currentElementId="";
var currentVar="";
var compName="";
var dragStartLeft=0;
var dragStartTop=0;
var limitError="";

function draginit(error, cname) {
  limitError=error;
  compName=cname;
}




function getPos(comp, compCont) {
  //alert(itemName+"_parent");
  itemName=comp.name.substring(4);
  compName=document.getElementById(itemName+"_parent").value;
  p1x=document.getElementById(compName+"_origin").offsetLeft;
  p1y=document.getElementById(compName+"_origin").offsetTop;
  p2x=comp.x;
  p2y=comp.y;
  offX=p2x-p1x;
  offY=p2y-p1y;
  checkDrop(comp, compCont, offX, offY, compName, itemName);
  //alert(comp.name+": "+p1x+"_"+p1y+"_"+p2x+"_"+p2y+"_"+offX+"_"+offY);
}


function checkDrop(comp, compCont, posX, posY, cName, itemName) {
	// init values
	boxFull=false;
	outOfBox=false;
	boxWidth=document.getElementById("width_"+cName).value;
	cellHeight=document.getElementById("cellheight_"+cName).value;
	cellWidth=document.getElementById("cellwidth_"+cName).value;
	rowCnt=document.getElementById("rows_"+cName).value;
	colCnt=document.getElementById("cols_"+cName).value;
	boxLimit=document.getElementById("boxlimit_"+cName).value;
	row=Math.floor(posY/cellHeight);
  col=Math.floor(posX/(boxWidth/colCnt))+1;
  srcVal=0;
  // check outOfBox
  srcY=document.getElementById(cName+"_comp_origin").offsetTop-document.getElementById(cName+"_origin").offsetTop;
  if (posX<0 || posX>boxWidth || posY<srcY || posY>(cellHeight*rowCnt)) outOfBox=true;
  
  // get dest box
  box=col+(row*colCnt);
  if (box<0) box=0;
  srcBox=parseInt(document.getElementById(itemName).value);
  // handle # of items in src and dest
  srcVal=0;
  destVal=0;
  if (srcBox>0 && !outOfBox) {
  	srcVal=document.getElementById(cName+"_"+srcBox+"_cnt").value;
    if (srcBox!=box) srcVal--;
  }

  if (box>0 && box <=(rowCnt*colCnt)) {
  	destVal=document.getElementById(cName+"_"+box+"_cnt").value;
    if (srcBox!=box) destVal++;
  }
  
  // calc src position
  dragStartLeft=document.getElementById("src_"+comp.name).offsetLeft;
  dragStartTop=document.getElementById("src_"+comp.name).offsetTop;
	
	// calc and handle boxfull
  if ((destVal-1)==boxLimit && boxLimit>0 && srcBox!=box) boxFull=true;
	if (boxFull) {
	  alert(limitError);
	  comp.moveTo(dragStartLeft,dragStartTop);
    box=0;
    destVal--;
  }
  
  // calc width and height and 
  compWidth=comp.w;
  compHeight=comp.h;
  
  // handle outOfBox
  if (outOfBox) {
  	if (srcBox>0) comp.resizeTo(compWidth*2,compHeight*2);
  	srcBox=0;
  	comp.moveTo(dragStartLeft,dragStartTop);
  }
  
  if (srcBox>0) document.getElementById(cName+"_"+srcBox+"_cnt").value=srcVal;
  if (box>0 && box <=(rowCnt*colCnt)) document.getElementById(cName+"_"+box+"_cnt").value=destVal;
  
  // resize comps if neccessary
  if (!outOfBox) {
    if (box>0) {
      if (srcBox==0) comp.resizeTo(compWidth/2,compHeight/2);
    } else {
    	if (srcBox>0) comp.resizeTo(compWidth*2,compHeight*2);
    }
  }
	// set value of dropped element
  if (!outOfBox) {
  	document.getElementById(itemName).value=box;
  } else {
  	document.getElementById(itemName).value=0;
  }
  // raster Element
  imageDropped=true;
  if (posX<0 || posX>boxWidth || posY<0 || posY>(cellHeight*rowCnt)) imageDropped=false;
  if (imageDropped) {
    if (posY+compHeight>(row+1)*cellHeight && !outOfBox) {
    	diffY=(posY+compHeight)-((row+1)*cellHeight);
    	comp.moveTo(comp.x,comp.y-diffY);
    }
    if (posX+compWidth>(col)*cellWidth && !outOfBox) {
    	diffX=(posX+compWidth)-((col)*cellWidth);
    	comp.moveTo(comp.x-diffX,comp.y);
    }
  }
}


function moveToOrigin() {
	comp=dd.obj;
	itemName=comp.name.substring(4);
	compName=document.getElementById(itemName+"_parent").value;
  p1x=document.getElementById(compName+"_origin").offsetLeft;
  p1y=document.getElementById(compName+"_origin").offsetTop;
  p2x=comp.x;
  p2y=comp.y;
  posX=p2x-p1x;
  posY=p2y-p1y;
  compWidth=comp.w;
  compHeight=comp.h;
  cellHeight=document.getElementById("cellheight_"+compName).value;
  boxWidth=document.getElementById("width_"+compName).value;
  rowCnt=document.getElementById("rows_"+compName).value;
	// calc src position
  dragStartLeft=document.getElementById("src_"+comp.name).offsetLeft;
  dragStartTop=document.getElementById("src_"+comp.name).offsetTop;
  imageDropped=true;
  if (posX<0 || posX>boxWidth || posY<0 || posY>(cellHeight*rowCnt)) imageDropped=false;
  if (imageDropped) {
    comp.moveTo(dragStartLeft,dragStartTop);
  }
}

