/**********************  EXAMPLE   *****************

<div DD_ID='1' DD_MI="category">almakorte</div>
<a href='#'><img src='test.jpg' DD_ID='23' DD_MI="imgage"></a>


ZDragDropInit("alert('%1%2');");  // ha csak az end actiont akarjuk lekezelni

vagy 

ZDragDropAddAction('end',"alert('%1%2');");// lehetseges actionok: 'start','drag','end','over','out'
ZDragDropInit();


%1 : a drag obj. DD_ID -ja
%2 : a drop obj. DD_ID -ja

%3 : a drag obj. DD_MI -je
%4 : a drop obj. DD_MI -je

%5 : a drag ojektum
%6 : a drop ojektum

utanna evalolja 

EGYEB TUDNIVALO

zdrag_drop_ret_if_same_obj=1;//ha 1 akkor nem kezeli le az actionokat ha ugyanaz a 2 obiektum
var zdrag_drop_ret_if_no_target=1;//ha 1 akkor nem kezeli le az actionokat ha nincs target


zdrag_drop_tags=['td','img','div'];//meg lehet adni hogy milyen tag-okat nezzen vegig, default 'img'
zdrag_drop_tags=['*'];  a csillag azt jelenti hogy minden

***************************************************/
var zdrag_drop_is_tree=false; //tree nel nem hagyjuk, hogy sajat maga ala rakja
var zdrag_img_accept = 'images/accept.gif';//icon_smile_wink.gif
var zdrag_img_denied = 'images/denied.gif';//icon_smile_sad.gif
var zdrag_img_obj = null;
var zdrag_drop_div=null;

var zdrag_drop_ret_if_same_obj=1;//nem kezeli le az actionokat ha ugyanaz a 2 obiektum
var zdrag_drop_ret_if_no_target=1;//nem kezeli le az actionokat ha nincs target
var zdrag_drop_scroll_window=1;//ha 1 akkor scrollozza az ablakot 
var zdrag_drop_put_drag_img=1;//ha 1 akkor kiteszi a huziga kepeket/diveket

var zdrag_drop_tags=new Object();
zdrag_drop_tags=['img'];

var zdrag_drop_actions=new Object();
var zdrag_mouseX = 0;
var zdrag_mouseY = 0;
var zdrag_mouseButton = 0;

function zdrag_drop_get_window_size(){
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {//Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {//IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {//IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return [ myWidth, myHeight ];
}   


function zdrag_drop_getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {//Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {//DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {//IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function zdrag_drop_replace(inString,find,replace){
  var outString = "";
  if (!inString) return "";
  if (inString.indexOf(find)!=-1){
    t = inString.split(find);
    return (t.join(replace));
  }else {
    return inString;
  }
}

var ZDragDropObj = {

  obj   : null,
  overobj : null,
  
  init : function(o)
  {
    o.onmousedown = ZDragDropObj.start;
    if (o.addEventListener) { // for FF and NS and Opera
      o.addEventListener('mouseover',ZDragDropObj.over,false);
      o.addEventListener('mouseout',ZDragDropObj.out,false);
    }else if (o.attachEvent){
      o.attachEvent('onmouseover',ZDragDropObj.over);
      o.attachEvent('onmouseout',ZDragDropObj.out);
    }
    
  },

  start : function(e){
    var o = ZDragDropObj.obj = ZDragDropObj.overobj =(document.attachEvent?event.srcElement:this);
    e = ZDragDropObj.fixE(e);
    var sc=zdrag_drop_getScrollXY();
    zdrag_mouseX = e.clientX+sc[0];
    zdrag_mouseY = e.clientY+sc[1];
    zdrag_mouseButton= (document.all && (ev=event.button))?ev:(ev=e.which)?(ev==3?2:1):1;

    if (ZDragDropObj.obj.attributes['DD_NODRAG']) return;
    if (!ZDragDropObj.obj.attributes || !ZDragDropObj.obj.attributes['DD_ID']) return;
    onDragDropAction('start',ZDragDropObj.obj,ZDragDropObj.obj);
    if (zdrag_drop_ret_if_same_obj==1 || !ZDragDropCheck(ZDragDropObj.obj,ZDragDropObj.obj)) ZDragDropChangeCursor('denied');
    document.onmousemove  = ZDragDropObj.drag;
    document.onmouseup    = ZDragDropObj.end;

    return false;
  },
  
  drag : function(e){
    e = ZDragDropObj.fixE(e);
    var o = ZDragDropObj.obj;
    var sc=zdrag_drop_getScrollXY();
    var ws=zdrag_drop_get_window_size();
    var ex  = e.clientX+sc[0]+10;
    var ey  = e.clientY+sc[1]+10;
    zdrag_mouseX = e.clientX+sc[0];
    zdrag_mouseY = e.clientY+sc[1];
    zdrag_mouseButton= (document.all && (ev=event.button))?ev:(ev=e.which)?(ev==3?2:1):1;
    
    if (zdrag_drop_scroll_window){
      if (sc[0]>0 && e.clientX<=10) scroll(sc[0]-10,sc[1]);
      if (sc[1]>0 && e.clientY<=10) scroll(sc[0],sc[1]-10);
      if (e.clientX>ws[0]-10) scroll(sc[0]+10,sc[1]);
      if (e.clientY>ws[1]-10) scroll(sc[0],sc[1]+10);
    }
    if (zdrag_drop_put_drag_img==1){
      zdrag_drop_div.style.visibility='visible';
      zdrag_drop_div.style["left"] = ex + "px";
      zdrag_drop_div.style["top"] = ey + "px";
    }
    onDragDropAction('drag',ZDragDropObj.obj,ZDragDropObj.overobj);
    
    return false;
  },

  end : function(e){
    e = ZDragDropObj.fixE(e);
    var sc=zdrag_drop_getScrollXY();
    zdrag_mouseX = e.clientX+sc[0];
    zdrag_mouseY = e.clientY+sc[1];
    zdrag_mouseButton= (document.all && (ev=event.button))?ev:(ev=e.which)?(ev==3?2:1):1;

    if (zdrag_drop_put_drag_img==1) zdrag_drop_div.style.visibility='hidden';
    document.onmousemove = null;
    document.onmouseup   = null;
    if (!ZDragDropObj.overobj || !ZDragDropObj.overobj.attributes['DD_ID']) return;
    if (ZDragDropCheck(ZDragDropObj.obj,ZDragDropObj.overobj)) onDragDropAction('end',ZDragDropObj.obj,ZDragDropObj.overobj);
    ZDragDropObj.obj = null;
  },

  over : function(){
    if (!ZDragDropObj || !ZDragDropObj.obj) return;
    ZDragDropObj.overobj =(document.attachEvent?event.srcElement:this) ;
    if (!ZDragDropObj.overobj.attributes['DD_ID']) return;
    if (ZDragDropCheck(ZDragDropObj.obj,ZDragDropObj.overobj)) ZDragDropChangeCursor('accept');
    onDragDropAction('over',ZDragDropObj.obj,ZDragDropObj.overobj);
  },

  out : function(){
    if (!ZDragDropObj || !ZDragDropObj.obj) return;
    ZDragDropChangeCursor('denied');
    onDragDropAction('out',ZDragDropObj.obj,ZDragDropObj.overobj);
    ZDragDropObj.overobj = null;
  },

  fixE : function(e)
  {
    if (typeof e == 'undefined') e = window.event;
    if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
    if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
    return e;
  }
};

function ZDragDropChangeCursor(mode){
  if (zdrag_drop_put_drag_img!=1) return;
  if (mode=='accept'){
    if (zdrag_img_obj){
      zdrag_img_obj.src = zdrag_img_accept;
    }else{
      document.getElementById('zzdrag_drop_div01').style.backgroundColor = '#FFFFFF';
      document.getElementById('zzdrag_drop_div02').style.backgroundColor = '#FFFFFF';
      document.getElementById('zzdrag_drop_div03').style.backgroundColor = '#FFFFFF';
    }
  }else{
    if (zdrag_img_obj){
      zdrag_img_obj.src = zdrag_img_denied;
    }else{
      document.getElementById('zzdrag_drop_div01').style.backgroundColor = '#FF7777';
      document.getElementById('zzdrag_drop_div02').style.backgroundColor = '#FF7777';
      document.getElementById('zzdrag_drop_div03').style.backgroundColor = '#FF7777';
    }
  }
}

function ZDragDropInit(EndFunction,CheckFunction){
  if (EndFunction!=undefined && EndFunction!='') ZDragDropAddAction('end',EndFunction);
  if (CheckFunction!=undefined && CheckFunction!='') ZDragDropAddAction('check',CheckFunction);
  if (zdrag_drop_put_drag_img==1){
    if (!zdrag_drop_div){
      document.write("<div id='zzdrag_drop_div' style='visibility:hidden;left:0;top:0;position:absolute;'>");
      if (zdrag_img_accept!='' && zdrag_img_denied!=''){
        document.write("<img src='" + zdrag_img_accept + "' id='zdrag_img_obj' border=0>");
        zdrag_img_obj = document.getElementById('zdrag_img_obj');
      }else{
        document.write("<div id='zzdrag_drop_div01' style='left:0;top:0;width:12;height:14;position:absolute;border: 1px solid; border-color: #000000;z-index:1;background-color: #FFFFFF;'></div>");
        document.write("<div id='zzdrag_drop_div02' style='left:2;top:2;width:12;height:14;position:absolute;border: 1px solid; border-color: #000000;z-index:1;background-color: #FFFFFF;'></div>");
        document.write("<div id='zzdrag_drop_div03' style='left:4;top:4;width:12;height:14;position:absolute;border: 1px solid; border-color: #000000;z-index:1;background-color: #FFFFFF;'></div>");
      }
      document.write("</div>");
      zdrag_drop_div=document.getElementById('zzdrag_drop_div');
    }
  }

  var objs;
  for(var key in zdrag_drop_tags){
    objs=document.getElementsByTagName(zdrag_drop_tags[key]);
    for (i=0;i<objs.length;i++){
      if (objs[i].attributes['DD_ID']){
        ZDragDropObj.init(objs[i]);
      }
    }
  }
}

function ZDragDropAddAction(action,FunctionName){
  if (!FunctionName || FunctionName==undefined || FunctionName=='') return;
  zdrag_drop_actions[action]=FunctionName;
}

function ZDragDropVarReplace(action,obj_from,obj_to){
  var eval_str=zdrag_drop_actions[action];
  eval_str=zdrag_drop_replace(eval_str,'%1',obj_from.attributes['DD_ID'].value);
  eval_str=zdrag_drop_replace(eval_str,'%2',(obj_to!=null?obj_to.attributes['DD_ID'].value:''));
  eval_str=zdrag_drop_replace(eval_str,'%3',((o=obj_from.attributes['DD_MI'])?o.value:''));
  eval_str=zdrag_drop_replace(eval_str,'%4',((obj_to!=null && (o=obj_to.attributes['DD_MI']))?o.value:''));
  eval_str=zdrag_drop_replace(eval_str,'%5','obj_from');
  eval_str=zdrag_drop_replace(eval_str,'%6','obj_to');
  eval_str=zdrag_drop_replace(eval_str,'%7',zdrag_mouseX);
  eval_str=zdrag_drop_replace(eval_str,'%8',zdrag_mouseY);
  eval_str=zdrag_drop_replace(eval_str,'%button',zdrag_mouseButton);
  
  return eval_str;
}

function onDragDropAction(action,obj_from,obj_to){
  if (zdrag_drop_actions[action]){
    if (obj_from==null) return;
    if (!obj_from.attributes['DD_ID']) return;
    
    if (obj_to!=null && !obj_to.attributes['DD_ID']) return;
    
    if (zdrag_drop_ret_if_no_target==1 && obj_to==null) return;
    
    if (zdrag_drop_ret_if_same_obj==1 && obj_from==obj_to) return ;

    return eval(ZDragDropVarReplace(action,obj_from,obj_to));
    
  }
  return true;
}

/*
function ZReqTreeCheck(obj_from,obj_to){
  if (obj_from.DD_ID==obj_to.DD_ID) return false;
  if (obj_to.DD_PARENT) return ZReqTreeCheck(obj_from,zzobjs[obj_to.DD_PARENT]);
  return true;
}
*/

function ZDragDropCheck(obj_from,obj_to){
  if (!obj_to) return false;
/*
  if (zdrag_drop_is_tree){
    if (!ZReqTreeCheck(obj_from,obj_to)) return false;
  }
*/
  if (zdrag_drop_actions['check']){
    if (obj_from==null) return true;
    if (!obj_from.attributes['DD_ID']) return true;
    return eval(ZDragDropVarReplace('check',obj_from,obj_to));
  }
  if (zdrag_drop_ret_if_same_obj==1 && obj_to==obj_from) return false;
  return true;
}
