
var xLib = {

  Initialize: function() {
    xLib.onLoad(function(){xLib.onLoad = function(handler){handler()}});
  },

  $: function(id) {
    return document.getElementById(id);
  },
  
  onLoad: function(handler) {
    xLib.addHandler(window,'load',handler);
  },


  //
  // cookies
  //
  getCookie: function(key) {
  	if (document.cookie.length)
  	{
  		var c = document.cookie.indexOf(key+'=');
  		if (c >= 0)	{
  			c += key.length+1;
    		var d = document.cookie.indexOf(';',c);
    		if (d == -1) d = document.cookie.length;
    		return document.cookie.substring(c,d);
  		}
  	}
  	return null;
  },
  setCookie: function(key,value,expires) {
  	var exp = new Date();
  	exp.setTime(exp.getTime()+(expires*1000));
  	document.cookie = key+'='+value+'; expires='+exp.toGMTString();
  },
  
  select: function(node) {
    if (typeof node.select === 'function') {
      node.select();
    } else {
      var selection, range, doc, win;
      if (
        (doc = node.ownerDocument) && (win = doc.defaultView) && typeof
        win.getSelection != 'undefined' && typeof doc.createRange != 'undefined'
        && (selection = window.getSelection()) && typeof
        selection.removeAllRanges != 'undefined'
      ) {
        range = doc.createRange();
        range.selectNode(node);
        selection.removeAllRanges();
        selection.addRange(range);
      }
      else if (
        document.body && typeof document.body.createTextRange != 'undefined' &&
        (range = document.body.createTextRange())
      ) {
        range.moveToElementText(node);
        range.select();
      }
    }
  }



};


//
// event handler
//
if (window.HTMLElement && window.addEventListener) { // w3c DOM Core Level 2

  xLib.createEventCallback = function(handler) {
    return function(e) {
			e.stopPropagation();
			if (!handler(e)) e.preventDefault();
    };
  };

  xLib.addHandler = function(node,event,handler) {
    node.addEventListener(event,handler,false);
  };

  xLib.removeHandler = function(node,event,handler) {
    node.removeEventListener(event,handler,false);
  };

} else if (window.ActiveXObject && window.attachEvent) { // MSIE

  xLib.createEventCallback = function(handler) {
    return function() {
      var e = window.event;
			e.cancelBubble = true;
			e.returnValue = handler(e);
    };
  };

  xLib.addHandler = function(node,event,handler) {
    node.attachEvent('on'+event,handler);
  };

  xLib.removeHandler = function(node,event,handler) {
    node.detachEvent('on'+event,handler);
  };

}

















