if(typeof oParts == "undefined") var oParts = {};

oParts.version = '20090923.061350';

oParts.client = {
     w3c : !!window.getComputedStyle,
    MSIE : /*@cc_on!@*/false,
     IE6 : false/*@||!window.XMLHttpRequest@*/,
     IE7 : false/*@||!!window.XMLHttpRequest@*/,
     IE8 : false/*@||!!document.documentMode@*/,
   Opera : !!(navigator.userAgent.toLowerCase().match(/opera/)),
   Gecko : !!window.GeckoActiveXObject,
  Webkit : !!(navigator.userAgent.toLowerCase().match(/webkit/))
};

oParts.events = [];
oParts.callee = [];
oParts.queryCache = {};

try {
 var scripts = document.getElementsByTagName('script');
 oParts.baseURL = scripts[scripts.length - 1].src.replace(/js\/.+$/, '');
} catch(e){ oParts.baseURL = '';}


(function(){
 var w = window, d = document, de = d.documentElement, UD = 'undefined';
 var client = oParts.client;

 function Parts(parts, context){
  this.oparts = [];
  var _o;
  switch (typeof parts){
   case 'string' :
    _o = oParts.query(parts, context);
    this.size = (_o && _o.length) ? _o.length : _o ? 1 : 0;
    if(this.size){ 
     for(var j = 0; j < this.size; j++){
      att(this, _o[j]);
      this.oparts[this.oparts.length] = _o[j];
     }
    }
    break;
   case 'object' :
    if(parts instanceof Array){
     this.size = 0;
     for (var j = 0; _o = parts[j++];){
      if(_o){
       this.size++;
       this.oparts[this.oparts.length] = _o.$;
      }
     }
    } else {
     this.size = 1;
     att(this, parts);
     this.oparts[this.oparts.length] = parts;
    }
    break;
  }
  return this;
 }
 
 function att(a, b){
  a.$ = b;
  try { a.id = b.id; } catch(e) { a.id = null;};
  try { a.className = b.className; } catch(e){ a.className = null;};
 }
 Parts.prototype = {
  item : function(i){ return o(this.oparts[i]);},
  parent : function(n){
   var N = !n ? 1 : n, p = 'this.$';
   for(var i = 1; i <= N; i++){
    p += '.parentNode';
    if(!eval(p)) return null;
   }
   return o(eval(p));
  },
  child : function(n){
   var cn = this.$.childNodes, c = cn[n];
   if(c && c.nodeType != 1) while(c.nodeType != 1) c = c.nextSibling;
   return c ? o(c) : null;
  },
  sib : function(n){
   var N = n < 0 ? -n : n, sb = n < 0 ? '.previousSibling' : '.nextSibling', s = 'this.$';
   for(var i = 1; i <= N; i++){
    s += sb;
    if(!eval(s)) return null;
    if(eval(s).nodeType != 1) N++;
   }
   return o(eval(s));
  },
  visible : function(){
   return (this.css('display') != 'none') * 1;
  },
  show : function(a){
   if(a){ var s;
    if(client.Gecko) s = 'display: -moz-inline-stack; display:inline-block;';
    else if(client.MSIE) s = 'overflow:hidden; zoom: 1; display:inline;';
    else s = 'display: inline;'; this.css(s);
   } else this.css('display: block;'); return this;
  },
  hide : function(){
   this.css('display: none;'); return this;
  },
  toggle : function(){
   this.css('display:' + ['block','none'][this.visible()]); return this;
  },
  view : function(b){
   if(b === 2) {this.show().$.scrollIntoView(true); return this;}
   if(this.visible()) this.$.scrollIntoView(b);
   return this;
  },
  inview : function(){
   return (Number(oParts.metrics(3) + oParts.metrics(1)) - this.$.offsetTop) > 0 ? 1 : 0;
  },
  focus : function(a){ !a ? this.$.focus() : this.view(0).$.focus(); return this;},
  html : function(s, add){
   var v = []; this.each(function(o){
    if(s){
     if(add){
      switch (add){
       case 'before' : case -1 : o.innerHTML = (s + o.innerHTML); break;
       default  : o.innerHTML += s;
      }
     } else o.innerHTML = s;
    } else v[v.length] = o.innerHTML;
   });
   return s ? this : v.length == 1 ? v[0].toString() : v;
  },
  title : function(s){
   var v = []; this.each(function(o){
    if(s) o.title = s; else v[v.length] = o.title;
   });
   return s ? this : v.length == 1 ? v[0] : v;
  },
  value : function(s){
   var v = []; this.each(function(o){
    if(s || s == '') o.value = s; else v[v.length] = o.value;
   });
   return s ? this : v.length == 1 ? v[0] : v;
  },
  contains : function(child){
   while (child.parentNode){
    child = child.parentNode;
    if(child == this.$) return true;
   }
   return false;
  },
  checked : function(){
   var v = []; this.each(function(o){
    v[v.length] = (o.checked ? 1 : 0);
   });
   return v.length == 1 ? v[0] : v;
  },
  src : function(s){
   if(s) this.$.src = s; else return this.$.src;
   return this;
  },
  subst : function (a, b){
   this.html(this.html().replace(a, b));
   return this;
  },
  clone : function(b){
   return o(this.$.cloneNode(b));
  },
  klass : function(c){
   if(c){
    return !this.$.className ? 0 : (' ' + this.$.className + ' ').indexOf(c) > 0 ? 1 : 0;
   } else return this.$.className;
  },
  css : function(exp){
   return exp.indexOf(':') > 0 ? this.setCSS(exp) : this.getCSS(exp);
  },
  setCSS : function(css){
   this.each(function(o){
    css.split(/;/).forEach(function(v){
     if(v.indexOf(':') > 0){
      v = v.split(/:/); var p = v.shift().trim(), s = v.join(':').trim() || '';
      if(/^0\.\d+$/.test(s) && s < 0.001) s = 0;
      p = p.replace(/-\D/g, function(m){ return m.charAt(1).toUpperCase()});
      if(p.indexOf('pacity') > 0){
       if(client.MSIE) o.style.zoom = 1;
       p = client.MSIE ? 'filter' : 'opacity';
       s = client.MSIE ? 'alpha(opacity=' + (parseFloat(s) * 100).toFixed(3) + ')' : parseFloat(s).toFixed(3);
      }
      if(p=='float') p = client.MSIE ? 'styleFloat' : 'cssFloat';
      if(s != UD) o.style[p] = s;
     }
    });
   });
   return this;
  },
  getCSS : function(prop){
   var v = null, o = this.$;
   if(d.defaultView){
    prop = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
    if(prop.indexOf('border') != -1){
     prop = prop.replace(/border\-(\w+)$/, 'border-left-$1');
    }
    v = d.defaultView.getComputedStyle(o, null).getPropertyValue(prop);
   } else if(o.currentStyle){
    prop = prop.replace(/-\D/g, function(m){ return m.charAt(1).toUpperCase()});
    var cs = o.currentStyle, md = 'medium';
    switch (prop){
     case 'width' : 
      var bl = cs.borderLeftWidth; bl = bl == md ? 0 : parseInt(bl);
      var br = cs.borderRightWidth; br = br == md ? 0 : parseInt(br);
      v = o.offsetWidth - bl - br; break;
     case 'height' :
      var bt = cs.borderTopWidth; bt = bt == md ? 0 : parseInt(bt);
      var bb = cs.borderBottomWidth; bb = bb == md ? 0 : parseInt(bb);
      v = o.offsetHeight - bt - bb; break;
     case 'opacity' :
      o.style.zoom = 1; v = cs.filter.match(/opacity=([^)]+)/)[1] / 100; break;
     case 'float' : v = cs.styleFloat; break;
     default : v = cs[prop];
    }
    if(v == md) v = 2;
   } else v = o.style[prop];
   return /px$/.test(v) ? parseInt(v) : v;
  },
  moveTo : function(x, y){
   this.each(function(o){
    o.style.position = 'absolute';
    if(x != null) {o.style.left = parseInt(x) + 'px'; this.X = x;}
    if(y != null) {o.style.top = parseInt(y) + 'px'; this.Y = y;}
   });
   return this;
  },
  sizeTo : function(w, h){
   this.each(function(o){
    if(w != null) {o.style.width = parseInt(w) + 'px'; this.W = w;}
    if(h != null) {o.style.height = parseInt(h) + 'px'; this.H = h;}
   });
   return this;
  },
  dimension : function(x, y, w, h, pos){
   this.moveTo(x, y).sizeTo(w, h); if(pos) this.css('position:relative;'); return this;
  },
  rect : function(s){
   var self = this.$;
   return s === 0 ? self.offsetWidth : s === 1 ? self.offsetHeight : [self.offsetWidth, self.offsetHeight];
  },
  offset : function(s){
   var v, $ = this.$;
   if($.getBoundingClientRect){
    var r = $.getBoundingClientRect();
    if(s === 0) v = parseInt(r.left + de.scrollLeft - 2);
    else if(s === 1) v = parseInt(r.top + de.scrollTop - 2);
    else v = [r.left + de.scrollLeft - 2, r.top + de.scrollTop - 2];
   } else {
    var x = 0, y = 0;
    while ($.offsetParent){
     x += ($.offsetLeft); y += $.offsetTop; $ = $.offsetParent;
    }
    if(client.Webkit && !w.getSearchEngine){
     x += d.body.offsetLeft; y += d.body.offsetTop;  
    }
    v = s === 0 ? parseInt(x) : s === 1 ? parseInt(y) : [parseInt(x), parseInt(y)];
   }
   return v;
  },
  addBefore : function(el){
   if(el.$) el = el.$;
   this.$.parentNode.insertBefore(el, this.$);
   return this;
  },
  addAfter : function(el){
   this.parent().addChild(el, this.$.nextSibling);
   return this;
  },
  addChild : function(a, b){
   if(!(a instanceof Array)) a = [a];
   for(var el, i = 0; el = a[i++];){
    if(el.$) el = el.$;
    if(b){
     if(b.$) b = b.$;
     this.$.insertBefore(el, b);
    } else this.$.appendChild(el);
   }
   return this;
  },
  deleteChild : function(a){
   if(!(a instanceof Array)) a = [a];
   for(var i = 0; el = a[i++];){
    if(el.$) el = el.$; this.$.removeChild(el);
   }
   return this;
  },
  away : function(){
   this.each(function(o){
    o.parentNode.removeChild(o); o = null;
   });
   return this;
  },
  await : function(ms, F){
   this.each(function(o){
    o.ticker = setTimeout(function(){ F.apply(o, arguments); }, ms);
   });
  },
  fade : function(delay, mode, speed, step, callback){
   delay = delay || 500; mode = mode || 'OUT';
   speed = speed || 30; step = step || 0.1;
   this.await(delay, function(e){ var el = o(this);
    o.onFade = true;
    switch(mode){
     case 'OUT' : var op = 1.0, rnd = Math.round(op/step);
      (function(o){
       o.css('opacity:'+ (op -= step));
       if(op < 0.001){
        o.hide().css('opacity:1');
        if(this.ticker){
         clearTimeout(this.ticker); this.ticker = null;
        }
        if(callback) callback(); return;
       }
      }).loop(speed, rnd)(el);
     break;
     case 'IN' : var op = 0, rnd = Math.round(1/step);
      el.css('opacity:0');
      (function(o){
       o.css('opacity:'+ (op += step));
       if(op >= 1){
        o.show().css('opacity:1');
        if(this.ticker){
         clearTimeout(this.ticker); this.ticker = null;
        }
        if(callback) callback(); return;
       }
      }).loop(speed, rnd)(el);
     break;
    }
   });
  },
  each : function(F, index){
   for (var i = 0, l = this.oparts.length; i < l; ++i){
    if(this.$break) break;
    F.call(this, this.oparts[i], i);
   }
   return this;
  },
  cancelEvent : function(){
   this.each(function(){
    if(oParts.evt){
     oParts.evt.preventDefault();
     oParts.evt.stopPropagation();
    }
   });
   return this;
  },
  on : function(evType, F){
   var listener = function(o){
    var ev = evType.split('|');
    for (var i = 0, l = ev.length; i < l; i++){
     var evi = ev[i], evRef = '_' + evi;
     if(!Object.prototype.hasOwnProperty.call(o, evRef)){
      o[evRef] = [];
      o['on' + evi] = function(e){
       e = e || ieev(w.event);
       for(var i in this[evRef]){ this[evRef][i].apply(this, [e]);}
      }
     } else for(var j in o[evRef]){ if(o[evRef][j] === F) return;}
     o[evRef].push(F);
     oParts.events.push([o, evRef]);
    }
    o = null;
   }
   this.each(function(o){ listener(o)});
  },
  off : function(evType, F){
   var listener = function(o){
    var evRef = '_' + evType;
    if(o[evRef]){
     for(var i in o[evRef]) if(o[evRef][i] === F) delete o[evRef][i];
     if(oParts.isEmpty(o[evRef])) delete o[evRef];
    }
   }
   this.each(function(o){ listener(o)});
  }
 }; //#prototype
 w.o = function(a, context, htmlelement){
  var element = new Parts(a, context || d);
  if(!element.size) delete element;
  return element.size ? element : null;
 }
  
 function ieev(e){
  e.preventDefault = new Function('event.returnValue = false;');
  e.stopPropagation = new Function('event.cancelBubble = true;');
  e.target = e.srcElement;
  e.relatedTarget = /out/.test(e.type) ? e.toElement : e.fromElement;
  e.pageX = de.scrollLeft + e.clientX || d.body.scrollLeft + e.clientX || 0;
  e.pageY = de.scrollTop + e.clientY || 0;
  e.which = e.keyCode;
  return e;
 };

 Parts.extend = function(name, method){
  if(!Parts.prototype[name]){
   Parts.prototype[name] = method;
  }
 };

 o(w).on('unload', function(){
  if(!oParts || !oParts.events) return;
  for (var i = 0, ev, oe; oe = oParts.events[i++];){
   ev = oe[i]; if(ev && ev[0]) ev[0][ev[1]] = null;
  }
  oParts = null;
  Function.prototype.await = Function.prototype.loop = null; // IE
 });

 oParts.start = function(F){
  for(var i in oParts.callee) if(oParts.callee[i] !== F) oParts.callee.push(F);
  if(client.Gecko || client.Opera || client.Webkit){
   d.addEventListener('DOMContentLoaded', F, false);
  } else if(client.MSIE){
   (function(){
    try { de.doScroll("left"); } catch(e){ setTimeout(arguments.callee, 1); return;}
    F();
   })();
  } else o(w).on('load', F);
 };
 
 [].forEach || (Array.prototype.forEach = function(F){
  var i, l = this.length;
  for (i = 0; i < l; i++){
   if(typeof F != 'function') return;
   if(i in this) F.call(arguments[0], this[i], i, this);
  }
 });
 var EVENTS = 'MOUSEDOWN|MOUSEUP|MOUSEOVER|MOUSEOUT|MOUSEMOVE|MOUSEDRAG|CLICK|DBLCLICK|KEYPRESS|KEYDOWN|KEYUP';
 if(client.w3c){
  EVENTS.split('|').forEach(function(e){
   w.addEventListener(e.toLowerCase(), function(e){ oParts.evt = e}, true);
  });
 } else {
  EVENTS.split('|').forEach(function(e){
   d.attachEvent('on' + e.toLowerCase(), function(){ oParts.evt = ieev(event);});
  });
 }

 oParts.target = function(a){
  try {
   var tar = oParts.evt.target;
   if(a === 0) return o(tar).offset(0); // x-offset
   if(a === 1) return o(tar).offset(1); // y-offset
   if(a === 2) return [o(tar).offset(0), o(tar).offset(1)]; // x, y-offset
   return o(tar);
  } catch(e){ return null;}
 }

 oParts.create = function(tag, css, parent, fly){
  var I = tag.indexOf('#'), C = tag.indexOf('.'); fly = fly || false;
  var el = d.createElement(tag.split(/[#\.]/)[0]);
  var context = parent || d.body;
  if(I > 0) el.id = tag.slice(I + 1);
  if(C > 0) el.className = tag.slice(C + 1);
  if(!fly){
   if(context.$) context = context.$;
   context.appendChild(el);
   el = el.id ? o(tag.slice(I)) : el.className ? o(tag.slice(C)) : o(el);
  } else el = o(el);
  if(css) el.setCSS(css);
  return el;
 };
 
 oParts.fragment = function(nodes){
  var frag, div = d.createElement('div'); div.innerHTML = nodes;
  frag = d.createDocumentFragment();
  while (div.firstChild) frag.appendChild(div.firstChild);
  return frag;
 };

})();

oParts.isEmpty = function(ob){
 for(var i in ob) return false; return true;
};
 
oParts.search = function(rex, array){
 for (var i = 0, l = array.length, m = null; i < l; i++){
  m = rex.test(array[i]);
  if(m) return array[i];
 }
 return m;
};

oParts.metrics = function(w){
 var d = document, de = d.documentElement;
 switch (w){
  case 'w' : case 0 : return de.clientWidth || self.innerWidth || d.body.clientWidth || 0;
  case 'h' : case 1 : return self.innerHeight || de.clientHeight || d.body.clientHeight || 0;
  case 'dh': case 2 : return de.scrollHeight || d.body.scrollHeight || 0;
  case 'sc': case 3 : return window.pageYOffset || de.scrollTop || d.body.scrollTop || 0;
  default: return 0;
 }
}

oParts.scroll = function(amountY, delay, step, interval){
 delay = delay || 500, interval = interval || 1;
 if(oParts.client.Webkit) interval = interval * 30;
 (function(){
   var a = step || 20, s = arguments[0] / a;
   var yy = [];
   for (var i = 0; i < a; i++) yy[i] = oParts.metrics(3) + s * i;
   var i = 0, t = setInterval(function(){ window.scrollTo(0, yy[i++]); if(i >= a) clearInterval(t);}, interval);
 }).await(delay)(amountY);
}

oParts.imgloader = function(hash, path){
 for(var name in hash){
  eval(name+'= new Image().src = "'+path+hash[name]+'";');
 }
}

oParts.server = {
 request : function(){
  if(window.XMLHttpRequest) return new XMLHttpRequest();
  if(window.ActiveXObject){
   try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e){
    try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (e){ return null;}
   }
  }
  return null;
 },
 get : function(url, func, async, type){
  var r = oParts.server.request();
  async = !async ? true : false;
  type = type || 'responseText';
  try {
   r.open("GET", url, async);
   r.onreadystatechange = function(){
    if(r.readyState==4){
     if(typeof toolTip !== 'undefined' && toolTip.visible()) toolTip.fade(200);
     if(func) func(r[type]);
    }
   }
   if(oParts.client.MSIE) r.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT");
   r.send(null);
  } catch (e){;}
 },
 post : function(url, data, func, async){
  var r = oParts.server.request();
  async = !async ? true : false;
  try {
   r.open("POST", url, async);
   r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   r.onreadystatechange = function(){
    if(r.readyState==4){
     if(typeof toolTip !== 'undefined' && toolTip.visible()) toolTip.fade(200);
     if(func) func(r.responseText);
    }
   }
   r.send(data);
  } catch (e){;}
 }
}

oParts.loadScript = function(src){
 if(!oParts.scripts) oParts.scripts = {};
 var r, s, async = arguments[1] ? true : false, d = document, safari = oParts.client.Webkit;
 if(!oParts.scripts[src]){
  try {
   r = oParts.server.request();
   r.open('GET', src, async);
   r.send(null);
   if(r.readyState==4){
    if(r.status==200){
     s = d.createElement('script');
     s.type = 'text/javascript'; s.charset = 'utf-8';
     if(safari) s.src = src;
     s.text = r.responseText;
     d.documentElement.firstChild.appendChild(s);
     if(safari) eval(s.text);
     oParts.scripts[src] = 1;
     return true;
    }
   }
  } catch(e){
   d.write('<script type="text/javascript" src="'+src+'"><\/scr'+'ipt>');
  }
 } else return true; // cached
 return false;
}

oParts.cookie = {
 set : function(name, value, days){
  days = days || 30;
  if(value == UD || value === '') return;
  var expire = new Date(); expire.setTime(expire.getTime() + (days*60*60*24*1000));
  document.cookie = name + "=" + escape(value) + "; expires=" + expire.toGMTString() + "; path=/";
 },
 get : function(name){
  var c = document.cookie.match(name + '=(.*?)(;|$)');
  return c ? unescape(c[1]) : null;
 },
 del : function(name) { oParts.cookie.set(name, '', -1); }
}

String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '');}

Function.prototype.await = function(ms){
 var F = this; return function(){
  var a = arguments, self = this;
  setTimeout(function(){ F.apply(self, a);}, ms);
 }
};

Function.prototype.loop = function(ms, limit){
 var count = 0, self = this;
 return function(){
  var a = arguments;
  if(limit <= count) return; count++;
  self.apply(a.callee.await(ms)(a[0]), a);
 }
};

oParts.query = (function(rule, context, parts){

function q(rule, context){
 var items, nodes = [], d = document;
 if(d.querySelectorAll){
  items = (context.$ || context || d).querySelectorAll(rule);
  for (var i = 0, l = items.length; i < l; i++) nodes[nodes.length] = items[i];
  return nodes;
 }
 var TAG, ATT = rule.indexOf('['), SID = rule.indexOf('#'), CLS = rule.indexOf('.');
 if(SID !== -1){
  TAG = SID > 0 ? rule.split('#')[0] : null;
  items = (context || d).getElementById(rule.slice(SID + 1));
  if(TAG){
   return (items.nodeName.toLowerCase() == TAG) ? [items] : null;
  } else return [items];
 } else if(CLS !== -1){
  return getC(rule.slice(CLS + 1), CLS > 0 ? rule.slice(0, CLS) : null, context);
 } else if(ATT !== -1){
  return getA(rule, ATT, rule.slice(0, ATT), context || d);
 } else {
  var m = /^\w+$/.exec(rule);
  if(m){
   items = context.getElementsByTagName(m[0]);
   for (var i = 0, l = items.length; i < l; i++) nodes[nodes.length] = items[i];
   return nodes;
  }
 }
 return nodes;
}

function getC(c, tag, context){
 var nodes = [], item, itemc, items = (context.$ || context || d).getElementsByTagName((tag || '*'));
 for(var i = 0, l = items.length; i < l; i++){
  item = items[i], itemc = item.className;
  if(itemc && (" " + itemc + " ").indexOf(" " + c + " ") != -1){
   nodes[nodes.length] = item;
  }
 }
 return nodes;
}
function getA(rule, apos, tag, context){
 var attr = rule.slice(apos + 1, -1);
 attr = (attr.indexOf('][') > 0) ? attr.split('][') : [attr];
 var s = '', e, k, ks, v, z, i = 0, l = attr.length;
 if(!oParts.queryCache[rule]){
 for(; a = attr[i++];){
  e = (i != l ? ' && ' : '');
  z = a.split('=');
  if(z[1]){
   k = z[0], ks = k.slice(-1);
   v = z[1].indexOf('"')===0 ? z[1].slice(1, -1) : z[1];
   k = k.indexOf('class') !== -1 ? k.replace('class', 'className') : k;
   switch (ks){
    case '^' : k = k.slice(0, -1); s += 'n["'+k+'"].indexOf("'+v+'")===0' + e; break;
    case '$' : k = k.slice(0, -1); s += 'n["'+k+'"].lastIndexOf("'+v+'")===(n["'+k+'"].length - "'+v+'".length)' + e; break;
    case '~' : k = k.slice(0, -1); s += '(n["'+k+'"]=="'+v+'" || n["'+k+'"].indexOf("'+v+' ")===0 || n["'+k+'"].indexOf(" '+v+' ")!==-1 || ((z=n["'+k+'"].indexOf(" '+v+'"))>0 && !n["'+k+'"].charAt(z+"'+v+'".length+1)))' + e; break;
    case '*' : k = k.slice(0, -1); s += 'n["'+k+'"] && n["'+k+'"].indexOf("'+v+'")!=-1' + e; break;
    case '|' : k = k.slice(0, -1); s += '(n["'+k+'"]=="'+v+'" || n["'+k+'"].indexOf("'+v+'-")!= -1)' + e; break;
    default  : s += 'n["'+k+'"]=="'+ v +'"' + e;
   }
  } else {
   s += 'n["'+(a==='class'?'className':a)+'"]' + e;
  }
 }
  oParts.queryCache[rule] = s;
 } else {
  s = oParts.queryCache[rule];
 }
 var r = [];
 var items = (context.$ || context || d).getElementsByTagName(tag||'*'), j = 0, n;
 var v = new Function('n', 'return ('+s+')');
 for (;n = items[j++];){
  if(v(n)){
   r[r.length] = n;
  }
 }
 return r;
}

return function(rule, context, parts) {
 var d = document, nodes = [];
 if (rule.indexOf(',') > 0) {
  var i, r, rs = rule.split(','), x = rs.length, unique = [], u = {}, ns;
  while (x--) {
   r = rs[x].replace(/^\s|\s$/g, '');
   if (u[r] == undefined) unique[unique.length] = u[r] = r;
  }
  for (i = 0; u = unique[i++];) {
   ns = $S(u, context);
   for (x = 0; r = ns[x++];) nodes[nodes.length] = r;
  }
 } else nodes = q(rule, context, parts);
 if (nodes == null || nodes == '') return null;
 if (parts) return o(nodes);
 return nodes;
}

})();
