//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=new Array();

function draginit(error, cname) {
  limitError[cname]=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;
	isAbs=false;
	ddType=document.getElementById("ddtype_"+cName).value;
	if (ddType=="abs") isAbs=true;
	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;
	col=0;
	row=0;
	valX=0;
	valY=0;
	srcValX=0;
	srcValY=0;
	
	// calc width and height
  compWidth=comp.w;
  compHeight=comp.h;
  
	if (isAbs) {
		srcValX=document.getElementById(itemName+"_x").value;
		srcValY=document.getElementById(itemName+"_y").value;
    valX=Math.round((posX)/(boxWidth-compWidth)*100);
    valY=Math.round((posY)/((cellHeight*rowCnt)-compHeight)*100);
    if (valX<0) valX=0;
    if (valX>100) valX=100;
    if (valY<0) valY=0;
    if (valY>100) valY=100;
  } else {
		boxLimit=document.getElementById("boxlimit_"+cName).value;
	  row=Math.floor(posY/cellHeight);
    col=Math.floor(posX/(boxWidth/colCnt))+1;
  }
	scale=document.getElementById("scale"+cName).value;
	
	
  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=0;
  if (!isAbs) 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 (!isAbs) {
    if ((destVal-1)==boxLimit && boxLimit>0 && srcBox!=box && !isAbs) boxFull=true;
	  if (boxFull) {
	    alert(limitError[cName]);
	    comp.moveTo(dragStartLeft,dragStartTop);
      box=0;
      destVal--;
    }
    if (box==0) comp.moveTo(dragStartLeft,dragStartTop);
  }
  

  // handle outOfBox
  if (outOfBox) {
  	if (srcBox>0 || scale==1) comp.resizeTo(compWidth*2,compHeight*2);
  	srcBox=0;
  	comp.moveTo(dragStartLeft,dragStartTop);
  }
  
  if (srcBox>0 && !isAbs) document.getElementById(cName+"_"+srcBox+"_cnt").value=srcVal;
  if (box>0 && box <=(rowCnt*colCnt) && !isAbs) document.getElementById(cName+"_"+box+"_cnt").value=destVal;
  
  imageDropped=true;
  if (posX<0 || posX>boxWidth || posY<0 || posY>(cellHeight*rowCnt)) imageDropped=false;  
  if (!imageDropped) {
  	valX=0;
  	valY=0;
  }
  // resize comps if neccessary
  if (!outOfBox) {
    if (box>0 || ((valX>0 || valY>0) && srcValX==0 && srcValY==0)) {
      if (srcBox==0 && scale==0) comp.resizeTo(compWidth/2,compHeight/2);
    } else {
    	if (!isAbs &&  (srcBox>0 || (srcBox==0 && scale==1)) || (isAbs && !imageDropped && valX==0 && valY==0 && (srcValX>0 || srcValY>0))) comp.resizeTo(compWidth*2,compHeight*2);
    }
  }
	// set value of dropped element
  if (!outOfBox) {
  	if (isAbs) {
  		document.getElementById(itemName+"_x").value=valX;
  		document.getElementById(itemName+"_y").value=valY;
    } else {
    	document.getElementById(itemName).value=box;
    }
  } else {
  	if (isAbs) {
  		document.getElementById(itemName+"_x").value=0;
  		document.getElementById(itemName+"_y").value=0;
    } else {
    	document.getElementById(itemName).value=0;
    }
  	
  }
  // raster Element
  if (!isAbs) {
    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 resizeElement() {
	itemName=dd.obj.name.substring(4);
	cName=getCompName(itemName);
	isAbs=false;
	//alert(cName);
	ddType=document.getElementById("ddtype_"+cName).value;
	if (ddType=="abs") isAbs=true;
	
	
	doScale=false;
	if (!isAbs) {
		if (document.getElementById("scale"+cName).value==1 && document.getElementById(itemName).value==0) doScale=true;
	} else {
		if (document.getElementById("scale"+cName).value==1 && document.getElementById(itemName+"_x").value==0  && document.getElementById(itemName+"_y").value==0) doScale=true;
	}
	if (doScale) {
	  compWidth=dd.obj.w;
    compHeight=dd.obj.h;
    dd.obj.resizeTo(compWidth/2,compHeight/2);
  }
}


function getCompName(itemName) {
	us=0;
	pos=0;
	while (pos<itemName.length && us<2) {
		if (itemName.charAt(pos)=="_") us++;
		pos++;
	}
	return (itemName.substring(0,pos-1));
}

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);
  }
}


