/**
 * Utility functions
 *
 * Created at 22 Dec, 2008 by KONDO Takahiro <heartery@gmail.com>
 *----------------------------------------------------------------------------*/

var $ = function(id) {
  return document.getElementById(id);
};

var listen = window.addEventListener
           ? function(element, event, callback) {
               element.addEventListener(event, callback, false);
             }
           : function(element, event, callback) {
               element.attachEvent('on' + event, callback, false);
             };

var create = function(tagName, className, children) {
  var e = document.createElement(tagName);

  if (typeof className != 'undefined') {
    e.className = className;
  }

  if (typeof children == 'undefined') {
    return e;
  }

  if (children.constructor == Array) {
    for (var i = 0, l = children.length; i < l; i++) {
      e.appendChild(children[i]);
    }
  }
  else {
    e.innerHTML = children;
  }

  return e;
};

var stop = function(event) {
  if (event.stopPropagation) {
    event.stopPropagation();
    event.preventDefault();
  }
  else {
    event.cancelBubble = true;
    event.returnValue = false;
  }
};

var globalOffset = function(element) {
  var left = 0;
  var top = 0;

  while (element) {
    left += element.offsetLeft || 0;
    top += element.offsetTop || 0;
    element = element.offsetParent;;
  }

  return {left: left, top: top};
};

var style = function(element, styles) {
  var s = element.style;

  for (var p in styles) {
    s[p] = styles[p];
  }

  return element;
};

var docSize = function() {
  var d = document.documentElement;
  var b = document.body;

  return {
    width: d.scrollWidth || b.scrollWidth,
    height: d.scrollHeight || b.scrollHeight
  };
};

var screenSize = function() {
  var w = 0;
  var h = 0;
  var opera = (navigator.userAgent.toLowerCase().indexOf('opera') > -1);
  var safari = (navigator.appVersion.toLowerCase().indexOf('safari') > -1);

  if (!safari && !opera) {
    var d = document.documentElement;
    var b = document.body;

    w =  d.clientWidth || b.clientWidth || b.scrollWidth;
    h =  d.clientHeight || b.clientHeight || b.scrollHeight;
  }
  else {
    w = window.innerWidth;
    h = window.innerHeight;
  }

  return {width: w, height: h};
};

var scrollOffset = function() {
  return {
    left: document.body.scrollLeft || document.documentElement.scrollLeft,
    top: document.body.scrollTop || document.documentElement.scrollTop
  };
};

