;
(function(){
var ResizeSensor=function(element, callback){
function EventQueue(){
this.q=[];
this.add=function(ev){
this.q.push(ev);
};
var i, j;
this.call=function(){
for (i=0, j=this.q.length; i < j; i++){
this.q[i].call();
}};}
function getComputedStyle(element, prop){
if(element.currentStyle){
return element.currentStyle[prop];
}else if(window.getComputedStyle){
return window.getComputedStyle(element, null).getPropertyValue(prop);
}else{
return element.style[prop];
}}
function attachResizeEvent(element, resized){
if(!element.resizedAttached){
element.resizedAttached=new EventQueue();
element.resizedAttached.add(resized);
}else if(element.resizedAttached){
element.resizedAttached.add(resized);
return;
}
element.resizeSensor=document.createElement('div');
element.resizeSensor.className='resize-sensor';
var style='position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;';
var styleChild='position: absolute; left: 0; top: 0; transition: 0s;';
element.resizeSensor.style.cssText=style;
element.resizeSensor.innerHTML =
'<div class="resize-sensor-expand" style="' + style + '">' +
'<div style="' + styleChild + '"></div>' +
'</div>' +
'<div class="resize-sensor-shrink" style="' + style + '">' +
'<div style="' + styleChild + ' width: 200%; height: 200%"></div>' +
'</div>';
element.appendChild(element.resizeSensor);
if(!{fixed: 1, absolute: 1}[getComputedStyle(element, 'position')]){
element.style.position='relative';
}
var expand=element.resizeSensor.childNodes[0];
var expandChild=expand.childNodes[0];
var shrink=element.resizeSensor.childNodes[1];
var shrinkChild=shrink.childNodes[0];
var lastWidth, lastHeight;
var reset=function(){
expandChild.style.width=expand.offsetWidth + 10 + 'px';
expandChild.style.height=expand.offsetHeight + 10 + 'px';
expand.scrollLeft=expand.scrollWidth;
expand.scrollTop=expand.scrollHeight;
shrink.scrollLeft=shrink.scrollWidth;
shrink.scrollTop=shrink.scrollHeight;
lastWidth=element.offsetWidth;
lastHeight=element.offsetHeight;
};
reset();
var changed=function(){
if(element.resizedAttached){
element.resizedAttached.call();
}};
var addEvent=function(el, name, cb){
if(el.attachEvent){
el.attachEvent('on' + name, cb);
}else{
el.addEventListener(name, cb);
}};
var onScroll=function(){
if(element.offsetWidth!=lastWidth||element.offsetHeight!=lastHeight){
changed();
}
reset();
};
addEvent(expand, 'scroll', onScroll);
addEvent(shrink, 'scroll', onScroll);
}
var elementType=Object.prototype.toString.call(element);
var isCollectionTyped=('[object Array]'===elementType
|| ('[object NodeList]'===elementType)
|| ('[object HTMLCollection]'===elementType)
|| ('undefined'!==typeof jQuery&&element instanceof jQuery)
|| ('undefined'!==typeof Elements&&element instanceof Elements)
);
if(isCollectionTyped){
var i=0, j=element.length;
for (; i < j; i++){
attachResizeEvent(element[i], callback);
}}else{
attachResizeEvent(element, callback);
}
this.detach=function(){
if(isCollectionTyped){
var i=0, j=element.length;
for (; i < j; i++){
ResizeSensor.detach(element[i]);
}}else{
ResizeSensor.detach(element);
}};};
ResizeSensor.detach=function(element){
if(element.resizeSensor){
element.removeChild(element.resizeSensor);
delete element.resizeSensor;
delete element.resizedAttached;
}};
if(typeof module!=='undefined'&&typeof module.exports!=='undefined'){
module.exports=ResizeSensor;
}else{
window.ResizeSensor=ResizeSensor;
}})();