	var Prototype = {
		Browser: {
		IE:     !!(window.attachEvent && !window.opera),
		Opera:  !!window.opera,
		WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
		Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
		MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
	}
	};
	
	/*
	*------Selection--------------------------------------------------
	*/
	function $(id) {
		return (typeof(id) == "string") ? document.getElementById(id) : id;
	}
	
	/*
	*------Object--------------------------------------------------
	*/
	Object.extend = function(destination, source) {
	for (var property in source)
		destination[property] = source[property];
	return destination;
	};
	/*
	*------Fonction--------------------------------------------------
	*/
	Object.extend(Function.prototype, {
	bind : function() {
		var __method = this, args = Array.prototype.slice.call(arguments,0), object = args.shift();
		return function() {
			return __method.apply(object, args.concat(Array.prototype.slice.call(arguments,0)));
		}
	},
	bindAsEventListener : function() {
		var __method = this, args = Array.prototype.slice.call(arguments,0), object = args.shift();
		return function(event) {
			return __method.apply(object, [( event || window.event)].concat(args).concat(Array.prototype.slice.call(arguments,0)));
		}
	}
	});
	/*
	*------Evenement--------------------------------------------------
	*/
	var Event = {
	observe : function() {
		if(window.addEventListener){
			return function(element, eventName, handler) {
				$(element).addEventListener(eventName, handler, false);
			};
		}else if(window.attachEvent){
			return function(element, eventName, handler) {
				$(element).attachEvent("on"+eventName, handler);
			};
		}else{
			return function(element, eventName, handler) {};
		}
	}(),
	stopObserving : function() {
		if(window.removeEventListener){
			return function(element, eventName, handler) {
				$(element).removeEventListener(eventName, handler, false);
			};
		}else if(window.detachEvent){		
			return function(element, eventName, handler) {
				$(element).detachEvent("on"+eventName, handler);	
			};		
		}else{
			return function(element, eventName, handler) {};
		}				
	}(),
	pointer: function(event) {
		return {
			x: event.pageX || (event.clientX +
			(document.documentElement.scrollLeft || document.body.scrollLeft)),
			y: event.pageY || (event.clientY +
			(document.documentElement.scrollTop || document.body.scrollTop))
		};
		}
	};
	
	
	/*
	*------Element--------------------------------------------------
	*/
	var Element = new Object();
	Object.extend(Element,  {
	viewportOffset: function(forElement) { 
		var forElement=$(forElement);
		var element = forElement;
		var value = [0,0];
		do {
		value[0]+=element.offsetLeft || 0;
		value[1]+=element.offsetTop || 0;
		element = element.offsetParent;
		} while (element);
		element = forElement;
		do {
		if( element.tagName != 'HTML'){
			value[1]-=element.scrollTop || 0;
			value[0]-=element.scrollLeft || 0;
		}
		} while (element = element.parentNode);
		
		return value;
	}
	});

