sk.withEachDo = function(seq, callback){
  var i;
  if(typeof callback !== "function"){
    return;
  }
  if(seq instanceof Array || typeof seq === "object"){
    for(i in seq){
      callback(seq[i], i);
    }
  }
  else if(seq instanceof NodeList){
    for(i=0; i<seq.length; i++){
      callback(seq[i], i);
    }
  }
};

sk.withElementDo = function(arg, callback){
  if(typeof callback !== "function" || arg == null){
    return;
  }
  if(arg instanceof Element){
    callback(arg);
  }
  else if(typeof arg === "string"){
    var elem = document.querySelector(arg);
    if(elem){
      callback(elem);
    }
  }
  else{
    for (var i in sk.elementDrivers){
      var driver = sk.elementDrivers[i];
      var result = driver(arg);
      if(result === undefined){
        continue;
      }
      else{
        sk.withElementDo(result, callback);
        return;
      }
    }
  }
}

sk.addElementDriver = function(driver){
  if(typeof driver === "function"){
    sk.elementDrivers.push(driver);
  }
};

sk.elementDrivers = [];

var runDrivers = function(drivers, val, callback){
  for (var i in drivers){
    var driver = drivers[i];
    var check = driver.check;
    if(check === 'instanceof' && val instanceof driver.value){
      handler(val, callback);
    }
    else if(check === 'typeof' && typeof val === driver.value){
      handler(val, callback);
    }
    else if(check === 'property' && val[driver.value] === true){
      handler(val, callback);
    }
  }
}

sk.getAbsolutePosition = function(elem){
  var temp = elem;
  var offset = {
    top: 0,
    left: 0,
  };
  while (temp !== null){
    offset.left += temp.offsetLeft;
    offset.top += temp.offsetTop;
    temp = temp.offsetParent;
  }
  return offset;
};
@@ -312,24 +312,49 @@
     %7D%0A  %7D%0A%7D;
+%0Ask.each = sk.withEachDo;
 %0A%0Ask.withEle
@@ -1748,8 +1748,487 @@
 fset;%0A%7D;
+%0A%0Ask.activator = function(args)%7B%0A  return new SKActivator(args);%0A%7D%0A%0Afunction SKActivator()%7B%0A  var self = this;%0A  var args = sk.args(arguments, 'args?');%0A  this.activation = args.activation;%0A  this.deactivation = args.deactivation;%0A  this.active;%0A%7D%0A%0ASKActivator.prototype.activate = function(args)%7B%0A  var self = this;%0A  var prev = self.active;%0A  var next = args;%0A  if(prev)%7B%0A    self.deactivation(prev, next, self);%0A  %7D%0A  self.activation(prev, next, self);%0A  self.active = args;%0A%7D

Add sk.activator()