/*
*
* prototype-lite
*
*/
/*
*------Browser--------------------------------------------------
*/
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;
}
}); 
