IE = false;   //@cc_on; IE=true; //dnd by dandavis. creative commons attribution-only license applies.
function dnd(elm) {
	var branch = IE ? "srcElement" : "target";
	dnd.branch = branch;
	var D = document;
	var PI = parseInt;
	function el(tid) {
	  return D.getElementById(tid);
	}
	var GC = function (k) {
	  var d = D.cookie || "";
	  var pairs = d.split(k + "=");
	  if (pairs && pairs[1]) {
		return unescape(pairs[pairs.length - 1].split(";")[0]);
	  }
	}
	var SC = function (nm, valu) {
	  var e2 = (new Date(2019, 1, 1)).toGMTString();
	  D.cookie = nm + "=" + escape(valu) + "; expires=" + e2;
	}



if(window.globalStorage){
  GC=function(k){  var t =  globalStorage[document.domain][k]; return t ? String(t):t; }
  SC=function(k,v){ globalStorage[document.domain][k] = String(v); return ""; }
}


	if (!dnd.hlColor) {
	  dnd.hlColor = "yellow";
	}
	var PS = dnd.useFixed ? "fixed" : "absolute";
	if (!drag.items) {
	  drag.items = [];
	}
	if (!dnd.dndTags) {
	  dnd.dndTags = {};
	}
	if (!dnd.z) {
	  dnd.z = 500;
	}
	if (elm.split) {
	  elm2 = el(elm);
	} else {
	  elm2 = elm;
	}
	if (!elm2) {
	  return;
	}
	if (!elm2.id) {
	  var tgn = elm2.tagName.toLowerCase();
	  if (!dnd.dndTags[tgn]) {
		dnd.dndTags[tgn] = 0;
	  } else {
		dnd.dndTags[tgn]++;
	  }
	  elm2.id = tgn + dnd.dndTags[tgn];
	}
	if (!dnd.items) {
	  dnd.items = [elm2.id];
	} else {
	  dnd.items.push(elm2.id);
	}
	elm2.style.cursor = "pointer";
	var ds7 = elm2.style;
	if (!ds7.position) {
	  ds7.position = PS;
	  ds7.left = elm2.offsetLeft + "px";
	  ds7.top = elm2.offsetTop + "px";
	}
	ds7.oldCursor = ds7.cursor || "";
	if (GC) {
	  var od = GC(elm2.id);
	  if (od) {
		try {
			oP = eval(String(od));
		} catch (yy) {
			oP = [ds7.left, ds7.top, dnd.z++];
		}
		if (oP[2] > dnd.z) {
			dnd.z = oP[2];
		}
		ds7.left = oP[0];
		ds7.top = oP[1];
		ds7.zIndex = oP[2] || dnd.z;
 console.info([oP,ds7]);
	  }


	} 
	function drag(d, e) {
	  var that = e[branch];
	  if (that != d) {
		if (that.focus) {
			that.focus();
			return true;
		}
		return false;
	  }
	  var ds = d.style;
	  if (!ds.position) {
		ds.position = PS;
		ds.left = ds.left ? ds.left : xy(e) + "px";
		ds.top = ds.top ? ds.top : xy(e, 1) + "px";
	  }
	  ds.cursor = "move";
	  d.buc = [ds.borderColor, ds.borderStyle, ds.borderWidth];
	  ds.borderColor = dnd.hlColor;
	  ds.borderWidth = "2px";
	  ds.borderStyle = "dashed";
	  stop2 = 0;
	  var oX = PI(d.style.left), oY = PI(d.style.top), eX = xy(e, 0), eY = xy(e, 1), tX, tY, stop2;
	   function dragI(e) {
		if (!stop2) {
			ds.top = xy(e, 1) + oY - eY + "px";
			ds.left = xy(e) + oX - eX + "px";
		}
		return false;
	  }
	   D.onmousemove = dragI;

	   function mouseup3(event) {
		if (!event) {
			event = window.event;
		}
		stop2 = 1;
		if (PI(ds.left) < 1) {
			ds.left = "1px";
		}
		if (PI(ds.top) < 1) {
			ds.top = "1px";
		}
		if (dnd.snap) {
			var dsl = PI(ds.left);
			var dst = PI(ds.top);
			var tfactor = PI(dsl % dnd.snap);
			var toff = (PI(dnd.snap / 2) > tfactor) ? tfactor : tfactor * -1;
			ds.left = (dsl - toff) + "px";
			var tfactor = dst % dnd.snap;
			var toff = (PI(dnd.snap / 2) > tfactor) ? tfactor : tfactor * -1;
			ds.top = dst - toff + "px";
		}
		ds.cursor = ds.oldCursor || "default";
		if(IE){ ds.float="left"; ds.clear="";   }
		d._saveNewPos();
		if (!event.srcElement) {
			event.srcElement = event.target;
		}
		if (!event.target) {
			event.target = event.srcElement;
		}
		if (D.elementFromPoint) {
			var onElm = D.elementFromPoint(PI(ds.left) - 2, (PI(ds.top) + D.body.scrollTop) - 2);
			if (onElm && onElm.getAttribute) {
			  d.landedOn = onElm;
			  var od = onElm.getAttribute("ondnd") || onElm.ondnd;
			  if (od) {
				if (od.split) {
					od = new Function("event", od);
				}
				od.apply(onElm, [event]);
			  }
			}
		}
		drag.items[d.id] = [PI(ds.left), PI(ds.top)];
		var ocolr = d.buc[0] || "";
		var ost = d.buc[1] || "";
		var ow = d.buc[2] || "";
		ds.borderColor = ocolr;
		ds.borderStyle = ost;
		ds.borderWidth = ow;
		D.onmousemove = "";
		D.onmouseup = "";
	  }
	   D.onmouseup = mouseup3;
	  return false;
	}
	drag.items[elm2.id] = [PI(ds7.left), PI(ds7.top)];
	elm2.onmousedown = function (event2) {var ts = this.style;this._saveOldPos();ts.zIndex = dnd.z++;drag(this, event2 || event);return false;};
	dnd.eva = function (a) {return drag.items;};
	elm2.oldPos = [{left: ds7.left, top: ds7.top, z: ds7.zIndex}];
	elm2.oldSize = [{width: ds7.width, height: ds7.height}];
	elm2._saveOldPos = function () {var ts = this.style;this.oldPos.push({left: ts.left, top: ts.top, z: ts.zIndex});dnd.currentElement = elm2;};
	elm2._saveNewPos = function () {var es = this.style; SC(this.id, "['" + es.left + "', '" + es.top + "', '" + es.zIndex + "']"); console.info("dropp:"+this.id);};
	elm2.dnd = true;
	elm2.moveTo = function (x, y) {var es = this.style;es.top = PI(y) + "px";es.left = PI(x) + "px";};
	elm2.moveBy = function (right, up) {var es = this.style;es.top = PI(es.top) + PI(up) + "px";es.left = PI(es.left) + PI(right) + "px";};
	elm2.resizeTo = function (w, h) {var es = this.style;es.width = PI(w) + "px";es.height = PI(h) + "px";};
	elm2.unSize = function () {var es = this.style;var ts = this.oldSize.pop();if (!ts) {return 0;}es.width = ts.width;es.height = ts.height;};
	elm2.unMove = function () {var es = this.style;var ts = this.oldPos.pop();if (!ts) {return 1;}es.top = ts.top;es.left = ts.left;es.zIndex = ts.z;};
	elm2.hide = function () {var es = this.style;es.display = "none";};
	elm2.show = function () {var es = this.style;es.display = "inline";};
	elm2.undelete = function () {this.show();this.unMove();};
	elm2.landedOn = {};
	dnd.reset = function () {if (!confirm("Are you sure you want to remove the saved layout ?")) {return;}var b = dnd.items;for (var i = 0; i < b.length; i++) {SC(b[i], "");location.href = location.href;}};


	var xy = function (e, v) {return v ? e.pageY : e.pageX;};

	if (IE) {
	  //xy = function (e, v) {return v ? event.clientY + D.body.scrollTop : event.clientX;};


	xy = function (e, v) {return v ? event.clientY : event.clientX;};

	}




	dnd.hlColor = "transparent";
}