docs: function removeListener(attr,func,child,update)
          {
            if(typeof func !== 'function') return bind;
  
            var isInput = (['value','checked'].indexOf(attr) !== -1),
                isStyle = (_allStyles.indexOf(attr) !== -1),
                listeners,
                x;
  
                function cut(attr,list)
                {
                  var listenerFuncs = list[attr],
                      len = listenerFuncs.length;
                  for(x=0;x<len;x++)
                  {
                    if(listenerFuncs[x].toString() === func.toString())
                    {
                      listenerFuncs.splice(x,1);
                    }
                  }
                }
  
            if(this.toString() !== bind.toString())
            {
              if(child)
              {
                var children = this.querySelectorAll('*'),
                    len = children.length;
                if(isStyle)
                {
                  listeners = (update ? '_childStyleUpdateListeners' : '_childStyleListeners');
                  cut(attr,this.attrListeners()[listeners]);
                  listeners = (update ? '_parentStyleUpdateListeners' : '_parentStyleListeners');
                }
                else
                {
                  if(attr === _all)
                  {
                    listeners = (update ? '_childStyleUpdateListeners' : '_childStyleListeners');
                    cut(attr,this.attrListeners()[listeners]);
                  }
                  listeners = (update ? '_childAttrUpdateListeners' : '_childAttrListeners');
                  cut(attr,this.attrListeners()[listeners]);
                  listeners = (update ? '_parentAttrUpdateListeners' : '_parentAttrListeners');
                }
                for(x=0;x<len;x++)
                {
                  var parents = children[x].attrListeners()[listeners][attr],
                      parentLen = parents.length;
                  for(var i=0;i<parentLen;i++)
                  {
                    if(parents[i].isEqualNode(this))
                    {
                      parents.slice(i,1);
                    }
                  }
                  if(attr === _all)
                  {
                    listenersStyle = (update ? '_parentStyleUpdateListeners' : '_parentStyleListeners');
                    var parents = children[x].attrListeners()[listeners][attr],
                        parentLen = parents.length;
                    for(var i=0;i<parentLen;i++)
                    {
                      if(parents[i].isEqualNode(this))
                      {
                        parents.slice(i,1);
                      }
                    }
                  }
                }
              }
              else
              {
                if(isStyle)
                {
                  listeners = (update ? '_styleUpdateListeners' : '_styleListeners');
                  cut(attr,this.attrListeners()[listeners]);
                }
                else
                {
                  if(attr === _all)
                  {
                    listeners = (update ? '_styleUpdateListeners' : '_styleListeners');
                    cut(attr,this.attrListeners()[listeners]);
                  }
                  listeners = (update ? '_attrUpdateListeners' : '_attrListeners');
                  cut(attr,this.attrListeners()[listeners]);
                }
              }
            }
            else
            {
              if(isStyle)
              {
                listeners = (update ? _styleUpdateListeners : _styleListeners);
                cut(attr,listeners);
              }
              else
              {
                if(attr === _all)
                {
                  listeners = (update ? _styleUpdateListeners : _styleListeners);
                  cut(attr,listeners);
                }
                listeners = (update ? _attrUpdateListeners : _attrListeners);
                cut(attr,listeners);
              }
            }
          }