/*  Prototype CUSTOM JavaScript framework, version 1.6.0.3
 *  (c) 2005-2008 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 *--------------------------------------------------------------------------*/

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

function isUndefined(object) {
    return typeof object === "undefined";
}


extend(Object, {
    extend:extend,
    isUndefined:isUndefined
});


Object.extend(Function.prototype, (function() {
	  var slice = Array.prototype.slice;

	  function update(array, args) {
	    var arrayLength = array.length, length = args.length;
	    while (length--) array[arrayLength + length] = args[length];
	    return array;
	  }

	  function merge(array, args) {
	    array = slice.call(array, 0);
	    return update(array, args);
	  }

	  function argumentNames() {
	    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
	      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
	      .replace(/\s+/g, '').split(',');
	    return names.length == 1 && !names[0] ? [] : names;
	  }

	  function bind(context) {
	    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
	    var __method = this, args = slice.call(arguments, 1);
	    return function() {
	      var a = merge(args, arguments);
	      return __method.apply(context, a);
	    }
	  }

	  function bindAsEventListener(context) {
	    var __method = this, args = slice.call(arguments, 1);
	    return function(event) {
	      var a = update([event || window.event], args);
	      return __method.apply(context, a);
	    }
	  }

	  function curry() {
	    if (!arguments.length) return this;
	    var __method = this, args = slice.call(arguments, 0);
	    return function() {
	      var a = merge(args, arguments);
	      return __method.apply(this, a);
	    }
	  }

	  function delay(timeout) {
	    var __method = this, args = slice.call(arguments, 1);
	    timeout = timeout * 1000
	    return window.setTimeout(function() {
	      return __method.apply(__method, args);
	    }, timeout);
	  }

	  function defer() {
	    var args = update([0.01], arguments);
	    return this.delay.apply(this, args);
	  }

	  function wrap(wrapper) {
	    var __method = this;
	    return function() {
	      var a = update([__method.bind(this)], arguments);
	      return wrapper.apply(this, a);
	    }
	  }

	  function methodize() {
	    if (this._methodized) return this._methodized;
	    var __method = this;
	    return this._methodized = function() {
	      var a = update([this], arguments);
	      return __method.apply(null, a);
	    };
	  }

	  return {
	    argumentNames:       argumentNames,
	    bind:                bind,
	    bindAsEventListener: bindAsEventListener,
	    curry:               curry,
	    delay:               delay,
	    defer:               defer,
	    wrap:                wrap,
	    methodize:           methodize
	  }
})());




Function.prototype.Event = function SetTimeoutObj(o,t,a) {
	var _method=this;
	return setTimeout(function() {
		_method.apply(o,a);
	}, t);

}
