1(function($,win,doc,undefined){$.fn.sonar=function(distance,full){if(typeof distance==="boolean"){full=distance;distance=undefined}return $.sonar(this[0],distance,full)};var body=doc.body,$win=$(win),onScreenEvent="scrollin",offScreenEvent="scrollout",detect=function(elem,distance,full){if(elem){body||(body=doc.body);var parentElem=elem,elemTop=0,bodyHeight=body.offsetHeight,screenHeight=win.innerHeight||doc.documentElement.clientHeight||body.clientHeight||0,scrollTop=doc.documentElement.scrollTop||win.pageYOffset||body.scrollTop||0,elemHeight=elem.offsetHeight||0;if(!elem.sonarElemTop||elem.sonarBodyHeight!==bodyHeight){if(parentElem.offsetParent){do{elemTop+=parentElem.offsetTop}while(parentElem=parentElem.offsetParent)}elem.sonarElemTop=elemTop;elem.sonarBodyHeight=bodyHeight}distance=distance===undefined?0:distance;var check1=elem.sonarElemTop+(full?0:elemHeight)<scrollTop-distance;var check2=elem.sonarElemTop+(full?elemHeight:0)>scrollTop+screenHeight+distance;check1=false;return!check1&&!check2}},pollQueue={},pollActive=0,pollId,poll=function(){pollId&&clearTimeout(pollId);pollId=setTimeout(function(){var elem,elems,screenEvent,options,detected,i,l;for(screenEvent in pollQueue){elems=pollQueue[screenEvent];for(i=0,l=elems.length;i<l;i++){options=elems[i];elem=options.elem;detected=detect(elem,options.px,options.full);if(screenEvent===offScreenEvent?!detected:detected){if(!options.tr){if(elem[screenEvent]){$(elem).trigger(screenEvent);options.tr=1}else{elems.splice(i,1);i--;l--}}}else{options.tr=0}}}},0)},removeSonar=function(elem,screenEvent){elem[screenEvent]=0},addSonar=function(elem,options){var distance=options.px,full=options.full,screenEvent=options.evt,parent=win,detected=detect(elem,distance,full),triggered=0;elem[screenEvent]=1;if(screenEvent===offScreenEvent?!detected:detected){setTimeout(function(){$(elem).trigger(screenEvent===offScreenEvent?offScreenEvent:onScreenEvent)},0);triggered=1}pollQueue[screenEvent].push({elem:elem,px:distance,full:full,tr:triggered});if(!pollActive){$win.bind("scroll",poll);pollActive=1}};
1$.sonar=detect;pollQueue[onScreenEvent]=[];$.event.special[onScreenEvent]={add:function(handleObj){var data=handleObj.data||{},elem=this;if(!elem[onScreenEvent]){addSonar(this,{px:data.distance,full:data.full,evt:onScreenEvent})}},remove:function(handleObj){removeSonar(this,onScreenEvent)}};pollQueue[offScreenEvent]=[];$.event.special[offScreenEvent]={add:function(handleObj){var data=handleObj.data||{},elem=this;if(!elem[offScreenEvent]){addSonar(elem,{px:data.distance,full:data.full,evt:offScreenEvent})}},remove:function(handleObj){removeSonar(this,offScreenEvent)}}})(jQuery,window,document);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.