/* dragdrop.js v2.71

This notice must be untouched at all times.
Copyright Walter Zorn 2002.

This Drag & Drop Library
adds Drag & drop functionality to the following types of html-elements,
provided their names/IDs are passed to SET_DRAGGABLE():

- images, even if not positioned via layers,
  nor via stylesheets or any other kind of "hard-coding"
- absolutely positioned layers

Created by Walter Zorn
walter@kreuzotter.de
26. 8. 2002
Last modified: 21. 11. 2002 */


/* Path to the transparent one-pixel gif or png.
Default: same directory as the HTML-file.
If you wish a different path, adapt the value below: */
var spacer='transparentpixel.gif';

///// Don't change anything below this line /////
function ERR()
{
	return true;
}
window.onerror=ERR;

function DDClass(t)
{
	(t=this).d=document;
	t.db=(t.d.compatMode && t.d.compatMode!="BackCompat")? t.d.documentElement : t.d.body? t.d.body : null;
	t.n=navigator.userAgent.toLowerCase();
	t.op=(window.opera && t.d.getElementById)? true : false;
	t.op6=t.op && parseInt(t.n.substring(t.n.indexOf("opera")+6))<7;
	t.ie=t.n.indexOf("msie")!=-1 && t.d.all && t.db && !t.op;
	t.iemac=t.ie && t.n.indexOf("mac")!=-1;
	t.ie4=t.ie && !t.d.getElementById;
	t.n4=t.d.layers? true : false;
	t.n6=(t.n6i=t.n.indexOf("gecko"))!=-1 || t.n.indexOf("galeon")!=-1;
	t.n7=t.n6 && parseInt(t.n.substring(t.n6i+6, t.n6i+12))>200209;
	t.kq=(t.kqi=t.n.indexOf("konqueror"))>-1 && parseInt(t.n.substring(t.kqi+10))>2;
		t.kq_new=t.kq && t.n.substring(t.kqi+10, t.kqi+13)!="3.0";
	t.ce=t.d.captureEvents && t.d.releaseEvents;
	t.element=new Array();
	t.zInd=100;
	t.Int=new Function('x','y',
		'return isNaN(y=parseInt(x))? 0 : y;'
	);
	t.setEvtHdl=new Function('i',
		'if(dd.op6) RESIZ(2);'+
		'if(dd.kq) setTimeout("dd.recalc()", 20);'+
		'if(dd.loadFunc) eval(dd.loadFunc);'+
		'if(dd.d.onmousedown) dd.downFunc=(i=""+dd.d.onmousedown).substring(9,i.indexOf("("));'+
		'dd.moveFunc=dd.d.onmousemove || null;'+
		'dd.upFunc=dd.d.onmouseup || null;'+
		'if(dd.ce) dd.d.captureEvents(Event.MOUSEDOWN);'+
		'dd.d.onmousedown=PICK;'
	);
	t.evt=new Function('e','t',
		'(t=this).but=(e=e || window.event).which || e.button;'+
		't.type=e.type;'+
		't.src=e.target || e.srcElement;'+
		't.src.parent=t.src.parentNode || t.src.parentElement || null;'+
		't.x=dd.Int(e.pageX || e.clientX || 0)+dd.Int((dd.ie || dd.kq_new)? dd.db.scrollLeft : 0);'+
		't.y=dd.Int(e.pageY || e.clientY || 0)+dd.Int((dd.ie || dd.kq_new)? dd.db.scrollTop : 0);'
	);
	t.recalc=new Function(
		'var i, z=0; while(z<dd.element.length)'+
		'{'+
			'if((i=dd.element[z++]).img)'+
			'{'+
				'if(Math.abs(i.x-i.defx)<=10 && Math.abs(i.y-i.defy)<=10)'+
				'{'+
					'i.getImg(i.imgname);'+
					'i.moveTo(i.defx, i.defy);'+
				'}'+
				'else i.getImg(i.imgname);'+
			'}'+
			'else i.getWH();'+
		'}'
	);
}
var dd=new DDClass();

dd.c='cUrsOR:';

// Optional commands on the html-page:
var CLONE         ='C10onE';
var NO_ALT        ='n01a1T8t';

var CURSOR_DEFAULT='',
CURSOR_MOVE       =dd.c+'move',
CURSOR_CROSSHAIR  =dd.c+'crosshair',
CURSOR_POINTER    =dd.c+(dd.ie?'hand':'pointer'),
CURSOR_E_RESIZE   =dd.c+'e-resize',
CURSOR_NE_RESIZE  =dd.c+'ne-resize',
CURSOR_NW_RESIZE  =dd.c+'nw-resize',
CURSOR_N_RESIZE   =dd.c+'n-resize',
CURSOR_SE_RESIZE  =dd.c+'se-resize',
CURSOR_SW_RESIZE  =dd.c+'sw-resize',
CURSOR_S_RESIZE   =dd.c+'s-resize',
CURSOR_W_RESIZE   =dd.c+'w-resize',
CURSOR_WAIT       =dd.c+'wait',
CURSOR_HELP       =dd.c+'help';

function DDObj(i, t)
{
	(t=this).getDiv=new Function('i','y',
		'if(dd.n4) return dd.d[i] || null;'+
		'if(dd.ie) return (y=dd.d.all[i])? y : null;'+
		'else return (y=dd.d.getElementById(i))? y : null;'
	);
	t.getImg=new Function('i','d','t',
		'(t=this).defx=0;'+
		't.defy=0;'+
		'd=d || window.document;'+
		'if(d.layers)'+
		'{'+
			'if(d.images[i])'+
			'{'+
				't.defx+=d.images[i].x;'+
				't.defy+=d.images[i].y;'+
				'return d.images[i];'+
			'}'+
			'for(var z=0; z<d.layers.length; z++)'+
			'{'+
				'var y=t.getImg(i, d.layers[z].document);'+
				'if(y)'+
				'{'+
					't.getDefXY(d.layers[z]);'+
					'return y;'+
				'}'+
			'}'+
			'return null;'+
		'}'+
		'else'+
		'{'+
			'var x, y=((x=d.images[i]) && x.name==i)? x : null;'+
			'if(y) t.getDefXY(y);'+
			'return y;'+
		'}'
	);
	t.getDefXY=new Function('i','t',
		't=this; if(dd.n4)'+
		'{'+
			't.defx+=i.left;'+
			't.defy+=i.top;'+
		'}'+
		'else while(i)'+
		'{'+
			't.defx+=dd.Int(i.offsetLeft);'+
			't.defy+=dd.Int(i.offsetTop);'+
			'i=i.offsetParent;'+
		'}'+
		'if(dd.iemac) t.defy+=dd.Int(dd.db.currentStyle.marginTop)+dd.Int(dd.db.currentStyle.paddingTop);'
	);
	t.getWH=new Function('t',
		'if((t=this).img)'+
		'{'+
			't.w=dd.Int(t.img.width);'+
			't.h=dd.Int(t.img.height);'+
		'}'+
		'else'+
		'{'+
			't.w=dd.Int(t.div.clip? t.div.clip.width : (t.css && t.css.pixelWidth)? t.css.pixelWidth : t.div.offsetWidth);'+
			't.h=dd.Int(t.div.clip? t.div.clip.height : (t.css && t.css.pixelHeight)? t.css.pixelHeight : t.div.offsetHeight);'+
		'}'
	);
	t.resetXY=new Function(
		'this.x=this.defx;'+
		'this.y=this.defy;'
	);
	t.activate=new Function('t','i',
		'if((t=this).div)'+
		'{'+
			'if(dd.ie4 && t.img && t.cln) t.img.src=t.img.orig;'+
			'(i=t.css || t.div).zIndex=t.zIndex=(++dd.zInd);'+
		'}'
	);
	t.moveTo=new Function('x','y','t','i',
		'if((t=this).div)'+
		'{'+
			't.x=x;'+
			't.y=y;'+
			'(i=t.css || t.div).left=t.x+t.px;'+
			'i.top=t.y+t.px;'+
		'}'
	);
	t.cln=(i.indexOf(CLONE)>-1 && i.indexOf(CLONE)==i.length-CLONE.length);
	if(t.cln) i=i.substring(0, i.length-CLONE.length);
	t.px=(dd.op6 || dd.n4)? '' : 'px';
	t.img=t.getImg(i);
	if(t.img)
	{
		t.imgname=i;
		t.id=i+'div';
		t.getWH();
		t.img.orig=t.img.src;
		t.htm='<div id="'+t.id+
			'" style="position:absolute;left:'+t.defx+'px;'+
			'top:'+t.defy+'px;'+
			'width:'+t.w+'px;'+
			'height:'+t.h+'px;">'+
			'<img src="'+t.img.src+'" '+
			'alt="'+(dd.noalt? '' : (t.img.alt || ''))+'" '+
			((t.img.border>1 || !dd.op6 && t.img.border)? ('border="'+t.img.border+'" ') : '')+
			'width="'+t.w+'" height="'+t.h+'">'+
			'<\/div>\n';
		if(typeof t.img.oncontextmenu!='undefined') t.img.oncontextmenu=new Function('return false;');
	}
	else
	{
		t.div=t.getDiv(i);
		if(!t.div) return;
		t.id=i;
		if(t.div.style)	t.css=t.div.style;
		t.getDefXY(t.div);
		t.getWH();
	}
	t.resetXY();
	t.zIndex=dd.Int(t.css? t.css.zIndex : t.div? t.div.zIndex : 0);
}

function RESIZ(x)
{
	if(x==1 || x==2)
	{
		if(dd.n4 || dd.op6 && x==2)
		{
			dd.iW=innerWidth;
			dd.iH=innerHeight;
			if(dd.op6) setTimeout("RESIZ()", 500);
		}
		else window.onresize=RESIZ;
	}
	else if((dd.n4 || dd.op6) && (innerWidth!=dd.iW || innerHeight!=dd.iH))
		location.reload();
	else if(dd.op6) setTimeout("RESIZ()", 500);
	else setTimeout('dd.recalc()', 10);
}
RESIZ(1);

function PICK(ev)
{
	if(((e=new dd.evt(ev)).but==1 || dd.n6) && e.type=="mousedown")
	{
		var i, comp=-1;
		var z=0; while(z<dd.element.length)
		{
			i=dd.element[z++];
			if(!dd.n4 && i.img && e.src && e.src.parent && e.src.parent.id==i.id)
			{
				dd.obj=i;
				break;
			}
			else if((dd.n4 || !i.img) && e.x>i.x && e.x<i.x+i.w && e.y>i.y && e.y<i.y+i.h)
			{
				if(i.zIndex>comp)
				{
					comp=i.zIndex;
					dd.obj=i;
				}
			}
		}
	}
	if(dd.obj)
	{
		if(dd.ce) dd.d.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
		dd.d.onmousemove=DRAG;
		dd.d.onmouseup=DROP;
		dd.obj.activate();
		dd.prex=e.x;
		dd.prey=e.y;
		return !(dd.n4 && dd.obj.img || dd.n6 || dd.kq);
	}
	if(dd.downFunc) return eval(dd.downFunc+"(ev);");
}

function DRAG(e)
{
	if((dd.kq || dd.n6 && !dd.n7) && dd.wait) return false;
	dd.obj.moveTo(dd.obj.x+(e=new dd.evt(e)).x-dd.prex, dd.obj.y+e.y-dd.prey);
	dd.prex=e.x;
	dd.prey=e.y;
	if(dd.kq || dd.n6 && !dd.n7)
	{
		dd.wait=true;
		setTimeout('dd.wait=false', 5);
	}
	return false;
}

function DROP(e)
{
	if(dd.obj)
	{
		if(!dd.obj.img) dd.obj.getWH();
		if(dd.ce && !dd.moveFunc && !dd.upFunc) dd.d.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
		dd.obj=null;
		dd.d.onmousemove=dd.moveFunc;
		dd.d.onmouseup=dd.upFunc;
	}
}

function SET_DRAGGABLE()
{
	if(!(dd && (dd.n4 || dd.n6 || dd.ie || dd.op || dd.kq))) return;
	for(var a=SET_DRAGGABLE.arguments, htm='', i, z=0; z<a.length; z++)
	{
		if(dd.op6)
		{
			dd.t0=(new Date()).getTime();
			while((new Date()).getTime()<dd.t0+120);
		}
		if(a[z].indexOf(dd.c)==0) dd.curs=a[z];
		else if(a[z]==NO_ALT) dd.noalt=1;
		else
		{
			i=new DDObj(a[z]);
			if(i.img || i.div)
			{
				dd.element[dd.element.length]=dd.element[i.imgname? i.imgname : i.id]=i;
				htm+=i.htm || '';
			}
		}
	}
	if(dd.element.length)
	{
		dd.d.write('<div style="position:absolute;"><\/div>\n'+htm);
		z=0; while(z<dd.element.length)
		{
			if((i=dd.element[z++]).img)
			{
				i.div=i.getDiv(i.id);
				if(i.div.style) i.css=i.div.style;
				if(!i.cln || i.cln && dd.ie4) i.img.src=spacer;
			}
			if (i.css && dd.curs) i.css.cursor=dd.curs.substring(dd.c.length);
		}
		if(window.onload) dd.loadFunc=(i=""+window.onload).substring(i.indexOf("{"));
		window.onload=dd.setEvtHdl;
	}
}


