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

