/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Class = {
 create: function() { return function() {this.initialize.apply(this, arguments);}}
}

Object.extend = function(destination, source) {
 for (var property in source) destination[property] = source[property];
 return destination;
}

Function.prototype.bind = function(object) {
 var __method = this;
 return function() {return __method.apply(object, arguments);}
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) { return __method.call(object, event || window.event);}
}

if (!Array.prototype.forEach){
 Array.prototype.forEach = function(fn, bind){
 for(var i = 0; i < this.length ; i++) fn.call(bind, this[i], i);};
}

Array.prototype.each = Array.prototype.forEach;

String.prototype.camelize = function(){
 return this.replace(/-\D/gi, function(match){return match.charAt(match.length - 1).toUpperCase();});
}

Array.prototype.indexOf = function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
}

$A = function(iterable) {
 var nArray = [];
 for (var i = 0; i < iterable.length; i++) nArray.push(iterable[i]);
 return nArray;
}

function $() {
  var results = [], element;
  for (var i = 0; i < arguments.length; i++) {
    element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    results.push(element);
  }
  return results.length < 2 ? results[0] : results;
}

if (!window.Element) var Element = {};
Object.extend(Element, {
 remove: function(element) {
  element = $(element);
  element.parentNode.removeChild(element);
 },
 hasClassName: function(element, className) {
  element = $(element);
  return !!element.className.match(className);
 },
 addClassName: function(element, className) {
  element = $(element);
  if (!Element.hasClassName(element, className)) element.className = (element.className+' '+className);
 },
 removeClassName: function(element, className) {
  element = $(element);
  if (Element.hasClassName(element, className)) element.className = element.className.replace(className, '');
 },
   visible: function(element) {
    return $(element).style.visibility != 'hidden';
  },
   toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      Element[Element.visible(element) ? 'hide' : 'show'](element);
    }
  },

  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.visibility = 'hidden';
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.visibility = 'visible';
    }
  },
  setStyle: function(element, style) {
   element = $(element);
   for (var name in style)
    element.style[name.camelize()] = style[name];
  }
});

document.getElementsByClassName = function(className){
 var elements = [];
 var all = document.getElementsByTagName('*');
 alert(typeof(all[0]));
 $A(all).each(function(el){
  if (Element.hasClassName(el, className)) elements.push(el);
 });
 return elements;
};
