/*  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;
}
Object.inspect = function(object) {
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
}
Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(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;
Array.prototype.findAll = function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  }

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;
}

var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

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;
};
