/*
	Copyright (c) 2004-2016, The JS Foundation All Rights Reserved.
	Available via Academic Free License >= 2.1 OR the modified BSD license.
	see: http://dojotoolkit.org/license for details
*/

//>>built
define("dojo/dnd/autoscroll",["../_base/lang","../sniff","../_base/window","../dom-geometry","../dom-style","../window"],function(_1,_2,_3,_4,_5,_6){
var _7={};
_1.setObject("dojo.dnd.autoscroll",_7);
_7.getViewport=_6.getBox;
_7.V_TRIGGER_AUTOSCROLL=32;
_7.H_TRIGGER_AUTOSCROLL=32;
_7.V_AUTOSCROLL_VALUE=16;
_7.H_AUTOSCROLL_VALUE=16;
var _8,_9=_3.doc,_a=Infinity,_b=Infinity;
_7.autoScrollStart=function(d){
_9=d;
_8=_6.getBox(_9);
var _c=_3.body(_9).parentNode;
_a=Math.max(_c.scrollHeight-_8.h,0);
_b=Math.max(_c.scrollWidth-_8.w,0);
};
_7.autoScroll=function(e){
var v=_8||_6.getBox(_9),_d=_3.body(_9).parentNode,dx=0,dy=0;
if(e.clientX<_7.H_TRIGGER_AUTOSCROLL){
dx=-_7.H_AUTOSCROLL_VALUE;
}else{
if(e.clientX>v.w-_7.H_TRIGGER_AUTOSCROLL){
dx=Math.min(_7.H_AUTOSCROLL_VALUE,_b-_d.scrollLeft);
}
}
if(e.clientY<_7.V_TRIGGER_AUTOSCROLL){
dy=-_7.V_AUTOSCROLL_VALUE;
}else{
if(e.clientY>v.h-_7.V_TRIGGER_AUTOSCROLL){
dy=Math.min(_7.V_AUTOSCROLL_VALUE,_a-_d.scrollTop);
}
}
window.scrollBy(dx,dy);
};
_7._validNodes={"div":1,"p":1,"td":1};
_7._validOverflow={"auto":1,"scroll":1};
_7.autoScrollNodes=function(e){
var b,t,w,h,rx,ry,dx=0,dy=0,_e,_f;
for(var n=e.target;n;){
if(n.nodeType==1&&(n.tagName.toLowerCase() in _7._validNodes)){
var s=_5.getComputedStyle(n),_10=(s.overflowX.toLowerCase() in _7._validOverflow),_11=(s.overflowY.toLowerCase() in _7._validOverflow);
if(_10||_11){
b=_4.getContentBox(n,s);
t=_4.position(n,true);
}
if(_10){
w=Math.min(_7.H_TRIGGER_AUTOSCROLL,b.w/2);
rx=e.pageX-t.x;
if(_2("webkit")||_2("opera")){
rx+=_3.body().scrollLeft;
}
dx=0;
if(rx>0&&rx<b.w){
if(rx<w){
dx=-w;
}else{
if(rx>b.w-w){
dx=w;
}
}
_e=n.scrollLeft;
n.scrollLeft=n.scrollLeft+dx;
}
}
if(_11){
h=Math.min(_7.V_TRIGGER_AUTOSCROLL,b.h/2);
ry=e.pageY-t.y;
if(_2("webkit")||_2("opera")){
ry+=_3.body().scrollTop;
}
dy=0;
if(ry>0&&ry<b.h){
if(ry<h){
dy=-h;
}else{
if(ry>b.h-h){
dy=h;
}
}
_f=n.scrollTop;
n.scrollTop=n.scrollTop+dy;
}
}
if(dx||dy){
return;
}
}
try{
n=n.parentNode;
}
catch(x){
n=null;
}
}
_7.autoScroll(e);
};
return _7;
});
