var Aheuh = {
	Version: '1.0',
	intialize: function () {}
}
Aheuh.intialize();Aheuh.Scroller = Class.create({
	
	_baseHtmlClass: { mask:'scrollerMask', content:'scrollerContent' },
	_buttons: { Left:-1, Right:1 ,Top:-1, Bottom:1 },
	_axis: { Left:'x', Right:'x', Top:'y', Bottom:'y' },
	
	initialize: function (o) {
		if ($(o.root)) {
			
			for (var i in this._baseHtmlClass) {
				var check = $$('#'+o.root+' .'+this._baseHtmlClass[i]);
				if (check.length==0) { alert('Html Class required : '+this._baseHtmlClass[i]); return; }
				else { this['_'+i] = check[0]; }
			}
			
			this._root = o.root;
			this.speed = o.speed || 2;
			this.speedInterval = o.speedInterval || 2;
			this._wheelSpeed = o.wheelSpeed|| 10;
			this._interval = null;			
			this._cursors = { scrollx:false, scrolly:false };
			this._tools = {};
			this._wheelFactor = 0;
			
			if ($$('#'+o.root+' .scrollerTools')) {
				for (var i in this._buttons) {
					$$('#'+o.root+' .scroller'+i).each( this._setButtonsEvents.bind(this,this._axis[i],this._buttons[i]) );
				}
				this.reload();
				Aheuh.Axis.each( this._setBg.bind(this) );
			}
			
		}
		else { alert('Root Scroller Html ID required'); }
	},
	
	_setButtonsEvents: function (axis,move,o) {
		Event.observe(o,'mouseover',this._setInterval.bind(this,axis,move));
		Event.observe(o,'mouseout',this._stop.bind(this));
	},
	
	_scrolling: function (k) {
		var tools = $$('#'+this._root+' .scrollerTools'+k.key.toUpperCase());
		var visibility = '';
		if (this._mask[k.scrollscale]>this._mask[k.offsetscale]) {
			this._cursors['scroll'+k.key] = true;
			visibility = 'visible';
			this._mask[k.scrollpos] = 0;
			if (k.key == 'y'&&!this._cursors['element'+k.key]) {
				Event.observe(this._mask, document.all ?'mousewheel' :'DOMMouseScroll', this._onMouseWheel.bindAsEventListener(this));
			}
		}
		else {
			this._cursors['scroll'+k.key] = false;
			visibility = 'hidden';
		}
		if (tools.length>0) {
			this._tools['element'+k.key] = tools[0];
			this._viewScrollTools(visibility,k.key);
		}
	},
	
	_setCursor: function (k) {
		if (this._cursors['scroll'+k.key]) {
			var o = $$('#'+this._root+' .scrollerCursor'+Aheuh.Axis.pos[k.key]);			
			if (o.length>0) {
				if (!this._cursors['element'+k.key]) {				
					this._cursors['start'+k.key] = o[0][k.offsetpos];
					this._cursors['size'+k.key] = o[0][k.offsetscale];
					this._cursors['element'+k.key] = o[0];
					this._cursors['params'+k.key] = {target:o[0], xmin:0, xmax:0, ymin:0, ymax:0, onMoveFunction:this._onDrag.bind(this,k) };
					this._cursors['params'+k.key][k.min] = o[0][k.offsetpos];
					this._cursors['params'+k.key][k.max] = o[0][k.offsetpos]+o[0][k.offsetscale];
					this._cursors['drag'+k.key] = new Aheuh.Drag(this._cursors['params'+k.key]);
				}			
				this._cursors['fact'+k.key] = this._getFactor(k);
				if (k.key == 'y') {	this._setWheelFactor(); }
				o[0].style[k.scale] = this._cursors['size'+k.key]*this._cursors['fact'+k.key]+'px';
				this._cursors['drag'+k.key].reload(this._cursors['params'+k.key]);				
			}
		}
	},
	
	_getFactor: function (k) {
		return (this._mask[k.offsetscale]-(this._mask[k.offsetscale]-this._cursors['size'+k.key]))/(this._mask[k.scrollscale]-(this._mask[k.offsetscale]-this._cursors['size'+k.key]));
	},
	
	_setWheelFactor: function () {
		this._wheelFactor = this._wheelSpeed - this._cursors['facty'];
	},
	
	_setInterval: function (axis,move) {
		if (!this._interval) {
			this._interval = new PeriodicalExecuter(this._scroll.bind(this,axis,move),this.speedInterval/1000);
		}
		else {
			this._interval.callback = this._scroll.bind(this,axis,move);
			this._interval.registerCallback();
		}
	},
	
	_scroll: function (axis,move) {
		this._mask[Aheuh.Axis[axis].scrollpos] += this.speed*move;
		this._moveCursor(axis);
	},
	
	_moveCursor: function (axis) {
		if (this._cursors['element'+axis]) {
			this._cursors['element'+axis].style[Aheuh.Axis[axis].pos] = this._cursors['start'+axis] + this._mask[Aheuh.Axis[axis].scrollpos] * this._cursors['fact'+axis] + "px";
		}
	},
	
	_onMouseWheel: function (e) {
		e.stop();
		this._scroll('y',Event.Wheel(e)*-1*this._wheelFactor);
	},
	
	_stop: function () {
		this._interval.stop();
	},
	
	_setBg: function (k) {
		if (this._cursors['scroll'+k.key]) {
			var o = $$('#'+this._root+' .scrollerCursorBg'+Aheuh.Axis.pos[k.key]);
			if (o.length>0) {
				Event.observe(o[0], "click", this._onBgClick.bindAsEventListener(this,k));
			}
		}
	},
	
	_onDrag: function (k) {
		this._mask[k.scrollpos] = (this._cursors['element'+k.key][k.offsetpos]-this._cursors['start'+k.key])/this._cursors['fact'+k.key];
	},
	
	_onBgClick: function (e,k) {
		var move = (Event[k.pointer](e)>this._cursors['element'+k.key].cumulativeOffset()[Aheuh.Axis.id[k.key]]+this._cursors['element'+k.key][k.offsetscale]) ?1 :-1;		
		this._scroll(k.key,this._cursors['element'+k.key][k.offsetscale]*move);		
	},
	
	moveTo: function (o) {
		Aheuh.Axis.each(function (k){
			this._mask[k.scrollpos] = $(o)[k.offsetpos];
			this._moveCursor(k.key);
		}.bind(this));
	},
	
	_viewScrollTools: function (visibility,k) {
		this._tools['element'+k].setStyle({ visibility:visibility });
	},
	
	forceScrollTools: function (visibility,k) {
		if (this._cursors['scroll'+k]) {
			this._viewScrollTools(visibility,k);
		}
	},
	
	reload: function () {
		Aheuh.Axis.each( this._scrolling.bind(this) );
		Aheuh.Axis.each( this._setCursor.bind(this) );
	}
	
});Aheuh.SelectHtml = Class.create({
	
	initialize: function (params) {		
		this._params = params;
		this._onChangeFunction = params.onChangeFunction;
		this.isOpen = this._closeOnClick = this._keyActive = this.changeFunctionActive = false;
		this._styles = new Array();
		this._datas = new Array();
		this.keyIndex = {};
		this._select = $(params.selectHtml);
		this._select.setStyle({ visibility:'hidden' });
		this._index = this.keyCntCheck = 0;
	},
	
	init: function () {
		
		this._writeHtml = $(this._params.selectWrite);
		this._zIndex = this._writeHtml.getStyle('zIndex');
			
		this._setStyles();
		this._style = this._styles[this._params.style || 0];
		this._parseDatas(this._select);
		
		this._write();		
			
		this._main = $$('#'+this._params.selectWrite+' .selectMain')[0];
		this._mask = $$('#'+this._params.selectWrite+' .scrollerMask')[0];		
		this._content = $$('#'+this._params.selectWrite+' .selectOptions')[0];

		this._scroller =  new Aheuh.Scroller({ root:this._params.selectWrite, speed:5, speedInterval:2 });	
		this._scroller.forceScrollTools('hidden','y');
		
		this._setEvents();
		this.setSelectedIndex(this._index);

	},
	
	_setStyles: function () {
		var styles = Aheuh.SelectHtmlConfig.styles;
		for (var i in styles) {
			this._styles.push({ name:i, html:styles[i] });
		}
	},
	
	_parseDatas: function (o) {
		for (var i=0;i<o.length;i++) {
			if (o[i].selected) {
				this._index = i;
			}
			this._add({ data:o[i].value, label:o[i].innerHTML });
		}
	},
	
	_write: function () {
		
		this._writeHtml.innerHTML = this._style.html;
		var writeOptions = $$('#'+this._params.selectWrite+' .selectOptions')[0];
		
		var options = '<ul>';
		for (var i=0;i<this._datas.length;i++) {
		    if ((this._select.id == "episodes" && i != '0') || (this._select.id == "emissions" && i != '0') || (this._select.id == "filter" && i != '0') || (this._select.id == "AnimateurInfo" && i != '0') || (this._select.id == "guideTV" && i != '0') || (this._select.id == "recherche" && i != '0') || (this._select.id == "contrat" && i != '0')) {
				if (this._datas[i].data != "sélectionnez") {
					var UrlId = this._datas[i].data;
				} else {
					var UrlId = "#0";
				}
			} else {
				var UrlId = "#0"; 
			}
			options += '<li id="'+i+''+this._select.id+'"><a href="'+UrlId+'">' + this._datas[i].label + '</a></li>';
		}
		options += '</ul>';
		writeOptions.innerHTML = options;		
		
	},
	
	_add: function (o) {
		this._addKeyIndex(o.label.charAt(0).toLowerCase(),this._datas.length);
		this._datas[this._datas.length] = o;
	},
	
	_addKeyIndex: function (key,index) {
		if (!this.keyIndex[key]) { this.keyIndex[key] = {index:[]}; }
		this.keyIndex[key].index[this.keyIndex[key].index.length] = index;
	},
	
	_setEvents: function () {
		
		var tmp = this._content.getElementsByTagName("a");
		
		for (var i=0;i<tmp.length;i++) {
			tmp[i].className = "s"+i;
			Event.observe(tmp[i], "click", this._onItemClickEvents.bindAsEventListener(this));
			Event.observe(tmp[i], "mouseover", this._onItemOverEvents.bindAsEventListener(this));
			Event.observe(tmp[i], "mouseout", this._onItemOutEvents.bindAsEventListener(this));
		}
		
		Event.observe(this._main, "click", this._onMainClick.bindAsEventListener(this));
		Event.observe(this._main, "click", Event.SelectionClear);
		Event.observe(this._main, "mouseover", this._onMainOver.bindAsEventListener(this));
		Event.observe(this._main, "mouseout", this._onMainOut.bindAsEventListener(this));		
		Event.observe(this._main, this._scroller._mouseWheelEvent, this._onMainMouseWheel.bindAsEventListener(this));
		
		Event.observe(this._writeHtml, "mouseover", this._onWriteMouseOver.bindAsEventListener(this));
		Event.observe(this._writeHtml, "mouseout", this._onWriteMouseOut.bindAsEventListener(this));
		
		Event.observe(document, "mouseup", this._checkToClose.bindAsEventListener(this));
		Event.observe(document, "keydown", this._setSelectedKeyboardIndex.bindAsEventListener(this));
		
	},
	
	_onItemClickEvents: function (e) {
		this._content.style.visibility = this._mask.style.visibility = "hidden";
		this.isOpen = this._closeOnClick = this._keyActive = false;
		this.setSelectedIndex(parseInt(Event.element(e).parentNode.id)); 
		this._scroller.reload();
		this._scroller.forceScrollTools('hidden','y');
	},
	_onItemOverEvents: function (e) {
		if (this.itemMouseOver!="") { Element.removeClassName($(this.keyItemSelected), "on"); }
		this.itemMouseOver = Event.element(e);
	},
	_onItemOutEvents: function () {
		this.itemMouseOver = "";
	},
	
	_onMainClick: function () {
		this._scroller.reload();
		this._scroller.moveTo(this._index+this._select.id);
		var visibility = (this.isOpen) ?'hidden' :'visible';	
		this._showHideDatas(visibility);
	},
	_onMainOver: function () {
		this._keyActive = true;
	},
	_onMainOut: function () {
		if (!this.isOpen){  this._keyActive = false; }
	},
	_onMainMouseWheel: function (e) {
		(Event.Wheel(e)==-1) ?this.setSelectedIndex(this._index+1) :this.setSelectedIndex(this._index-1);
	},
	
	_onWriteMouseOver: function () {
		if (this.isOpen) { this._keyActive = true; this._closeOnClick = false; }
	},
	_onWriteMouseOut: function () {
		if (this.isOpen) { this._keyActive = false; this._closeOnClick = true; }
	},
	
	_showHideDatas: function (visibility) {
		this._content.style.visibility = this._mask.style.visibility = visibility;
		this._scroller.forceScrollTools(visibility,'y');
		this.isOpen = this._keyActive = (visibility=="hidden") ?false :true;		
		var zIndex = (this.isOpen) ?Number(this._zIndex)+1 :this._zIndex;		
		this._writeHtml.setStyle({ zIndex:zIndex })		
		this.itemMouseOver = "";
	},
	
	getSelectedData: function () {
		return this._datas[this._index].data;
	},
	
	getSelectedLabel: function () {
		return this._datas[this._index].label;
	},
	
	setSelectedIndex: function (index) {
		if (index>=0&&index<this._datas.length) {
			Element.removeClassName(this._content.getElementsByTagName('a')[this._index], "on");
			this._index = index;
			this._main.innerHTML = this.getSelectedLabel();			
			Element.addClassName(this._content.getElementsByTagName('a')[index], "on");
			this._select.selectedIndex = index;			
			if (this._onChangeFunction&&this.changeFunctionActive) { this._onChangeFunction(); }
			if (!this.changeFunctionActive) { this.changeFunctionActive = true; }
		}
	},
	
	setSelectedData : function (data) {
		this.changeFunctionActive = false;
		for (var i=0;i<this._datas.length;i++) { if (this._datas[i].data==data) { this.setSelectedIndex(i); }}
	},
	
	_checkToClose: function () {
		if (this._closeOnClick&&this.isOpen) {
			this._showHideDatas("hidden");
		}
	},
	
	_setSelectedKeyboardIndex: function (e) {

		if (this._keyActive) {
			
			var keyCode = (window.event) ?e.keyCode :e.which;
			var keyCodeLabel = String.fromCharCode(keyCode).toLowerCase();
			
			if (keyCode==13&&this.isOpen) {
				if (this.itemMouseOver!="") this.setSelectedIndex(parseInt(this.itemMouseOver.parentNode.id));
				this._showHideDatas("hidden");
			}
			
			if (this.keyIndex[keyCodeLabel]) {
				
				this.keyCntCheck =  (this.currentKey==keyCodeLabel) ?(this.keyCntCheck<this.keyIndex[keyCodeLabel].index.length-1) ?this.keyCntCheck + 1 :0 :0;
				
				if (this.keyItemSelected!="") {
					Element.removeClassName($(this.keyItemSelected), "on");
				}
				Element.removeClassName(this._content.getElementsByTagName("div")[this._index], "on");
				
				this.keyItemSelected = this.keyIndex[keyCodeLabel].index[this.keyCntCheck] + this._select.id;
				Element.addClassName($(this.keyItemSelected), "on");
				
				this._scroller.moveTo(this.keyItemSelected);
				this.currentKey = keyCodeLabel;
				this.itemMouseOver = $(this.keyItemSelected);

				this.setSelectedIndex(this.keyIndex[keyCodeLabel].index[this.keyCntCheck]);
			
			}
			
			if (keyCode==38&&this._index>0) {
				this.setSelectedIndex(this._index-1);
				this._scroller.moveToAnchor(this._content.getElementsByTagName('li')[this._index].id);
			}
			else if (keyCode==40&&this._index<this._datas.length) {
				this.setSelectedIndex(this._index+1);
				this._scroller.moveToAnchor(this._content.getElementsByTagName('li')[this._index].id);
			}
			
		}
		
	}
	
});Aheuh.SelectHtmlConfig = {
	styles:{
	style1: '<div id="collectionSelect" class="selectObj">' +
				'<div class="main"><div class="selectMain">&nbsp;</div></div>' +
				'<div class="dataScroll scrollerMask"><div class="scrollerContent selectOptions"></div></div>' +
				'<div class="scrollerTools scrollerToolsPush">' +
					'<div class="scrollerToolsY">' +
						'<div><a href="#0" class="scrollerTop">&nbsp;</a></div>' +
						'<div><a href="#0" class="scrollerBottom">&nbsp;</a></div>' +
						'<div class="scrollerCursorTop"></div>' +
						'<div class="scrollerCursorBgTop"></div>' +
					'</div>' +
				'</div>' +
			'</div>',

	style2: '<div id="collectionSelect" class="selectObj">' +
				'<div class="main"><div class="selectMain">&nbsp;</div></div>' +
				'<div class="dataScroll scrollerMask"><div class="scrollerContent selectOptions"></div></div>' +
				'<div class="scrollerTools scrollerToolsPush">' +
					'<div class="scrollerToolsY">' +
						'<a href="#0" class="scrollerTop"></a>' +
						'<a href="#0" class="scrollerBottom"></a>' +
						'<div class="scrollerCursorTop"></div>' +
						'<div class="scrollerCursorBgTop"></div>' +
					'</div>' +
				'</div>' +
			'</div>'

    }
};Aheuh.PopHtml = Class.create({

    initialize: function(o) {
        this._name = o.name;
        this._target = o.target;
        this._contentURL = o.contentURL;
        this._methodURL = o.methodURL;
        this._ajaxParams = o.ajaxParams;
        this._onEvent = o.onEvent;
        this._targetHtmlStatic = o.targetHtmlStatic;
        this._content = this._bg = null;
        this._doc = (!this.Safari) ? document.documentElement : document.body;
        this.IE6 = (navigator.appVersion.indexOf("MSIE 6") != -1) ? true : false;
        this._intervalFixFirefox = null;
        Event.observe(window, 'resize', this._onWindowResize.bind(this));
        Event.observe(window, 'scroll', this._onWindowResize.bind(this));
        this._writeBg();
        this._writeContent();
    },

    _onWindowResize: function() {
        this._startSetContentPosition(this._content);
        Aheuh.Axis.each(this._setBgSize.bind(this, this._bg));
    },

    _getPageSize: function(k) {
        return (this._doc[k.scrollscale] < this._getWindowSize(k)) ? this._getWindowSize(k) : this._doc[k.scrollscale];
    },

    _getWindowSize: function(k) {
        return document.documentElement[k.clientscale];
    },

    _getCenter: function(o, k) {
        return this._doc[k.scrollpos] + (this._getWindowSize(k) / 2) - (o[k.offsetscale] / 2);
    },

    _writeContent: function() {
        if (this._contentURL) {
            var newAJAX = new Ajax.Request(
				this._contentURL, {
				    method: this._methodURL,
				    postBody: $H(this._ajaxParams).toQueryString(),
				    onComplete: function(response) {
				        this._content.innerHTML = response.responseText;
				        this._setInterval();
				    } .bind(this)
				}
			);
        }
        else {
            this._content.appendChild(this._targetHtmlStatic);
            Element.setStyle(this._targetHtmlStatic, { display: 'block' });
            this._setInterval();
        }
    },

    _setInterval: function() {
        if (this._intervalFixFirefox == null) { this._intervalFixFirefox = new PeriodicalExecuter(this._setContent.bind(this), 0); }
        else {
            this._intervalFixFirefox.callback = this._setContent.bind(this);
            this._intervalFixFirefox.registerCallback();
        }
    },

    _writeBg: function() {

        var str =
		'<div id="PopHtmlBg" style="z-index:1000;position:absolute;top:0;left:0;background:#000;filter:alpha(opacity=50);-moz-opacity:0.50;opacity:0.50;"></div>' +
		'<div id="PopHtmlContent" style="z-index:1001;position:absolute;top:0;left:0;"></div>';

        if (this.IE6) {
            str += '<iframe id="PopHtmlIframeIE6Hack" style="z-index:999;position:absolute;top:0;left:0;filter:alpha(opacity=0);"></iframe>';
        }

        this._target.innerHTML = str;
        this._target.setStyle({ display: 'block' });
        this._bg = $('PopHtmlBg');
        this._content = $('PopHtmlContent');
        this._content.setStyle({ visibility: 'hidden' });
        Aheuh.Axis.each(this._setBgSize.bind(this, this._bg));
        if (this.IE6) {
            this._IframeIE6Hack = $('PopHtmlIframeIE6Hack');
            Aheuh.Axis.each(this._setBgSize.bind(this, this._IframeIE6Hack));
        }

    },

    _setBgSize: function(o, k) {
        o.style[k.scale] = this._getPageSize(k) + 'px';
    },

    _setContent: function() {
        this._intervalFixFirefox.stop();
        if (this._onEvent) { this._onEvent("onReady", this._name); }
        this._startSetContentPosition(this._content);
        this._content.focus();
    },

    _startSetContentPosition: function(o) {
        Aheuh.Axis.each(this._setContentPosition.bind(this, o));
        o.style.visibility = 'visible';
    },

    _setContentPosition: function(o, k) {
        o.style[k.pos] = this._getCenter(o, k) + 'px';
    },

    close: function() {
        Element.setStyle(this._target, { display: 'none' });
    }

}); Aheuh.Axis = {
    initialize: function() {
        this.each( function(k,r){ this.base[k] = this.base[k]||this.keys(k); }.bind(this) );
    },
    base:{x:null,y:null},
    pos:{x:'Left',y:'Top'},
    scale:{x:'Width',y:'Height'},
    id:{x:0,y:1},
    keys: function(key){
         this[key] = this[key] ||
            {
                key:key,          
                min:key+'min',
                max:key+'max',
                axis:key+'axis',
                limit:key+'limit',
                factor:key+'factor',
                pos:this.pos[key].toLowerCase(),
                scale:this.scale[key].toLowerCase(),
                scrollpos:'scroll'+this.pos[key],
                scrollscale:'scroll'+this.scale[key],
                offsetpos:'offset'+this.pos[key],
                offsetscale:'offset'+this.scale[key],
                clientscale:'client'+this.scale[key],
				mouse:key+'mouse',
				pointer:'pointer'+key.toUpperCase()
            };
        return this[key];
    },
    from: function(o)
    {
        return {x:o[0],y:o[1]};
    },
    each: function(iterator,memo)
    {
        for(var key in this.base)
            memo = iterator((this[key]||key),memo);
        return memo;
    }
}
Aheuh.Axis.initialize();Aheuh.Drag = Class.create({
	
	initialize: function (o) {
		this._target = o.target;
		this._mouseOldPos = {};
		this._setLimit(o.xmin,o.xmax,o.ymin,o.ymax);
		this.onMoveFunction = o.onMoveFunction;		
		this.draggable = false;
		this._targetDown = this.setDraggable.bind(this,true);
		this._docMouseUp = this.setDraggable.bind(this,false);
		this._docMouseMove = this._setMove.bindAsEventListener(this);
		Event.observe(this._target,"mousedown",this._targetDown);
		Event.observe(document,"mouseup",this._docMouseUp);
		Event.observe(document,"mousemove",this._docMouseMove);
	},
	
	_setLimit: function (xmin,xmax,ymin,ymax) {
		Aheuh.Axis.each( function (k){
			this[k.min] = eval(k.min); this[k.max] = eval(k.max);
			this['target'+[k.max]] = this[k.max]-this._target[k.offsetscale];
			this._mouseOldPos[k.mouse] = null;
		}.bind(this));
	},
	
	setDraggable: function (draggable) {
		this.draggable = draggable;
		Aheuh.Axis.each( function (k){ this._mouseOldPos[k.mouse] = null; }.bind(this));
	},
	
	_setMove: function (e) {
		Aheuh.Axis.each( this._move.bind(this,e) );
	},
	
	_move: function (e,k) {
		if (this.draggable) {			
			var mouse = Event['pointer'+k.key.toUpperCase()](e);
			if (this._mouseOldPos[k.mouse]) {	
				if (this[k.max]>this[k.min]) {
					var n = this._target[k.offsetpos]-(this._mouseOldPos[k.mouse]-mouse);					
					if (n<this[k.min]) { n = this[k.min]; }
					else if (n+this._target[k.offsetscale]>this[k.max]) { n = this['target'+[k.max]]; }
					this._target.style[k.pos] = n+"px";
					if (this.onMoveFunction) { this.onMoveFunction(); }
				}
			}
			Event.SelectionClear();
			this._mouseOldPos[k.mouse] = mouse;
		}
		e.stop();
	},
	
	reload: function (o) {
		this._setLimit(o.xmin,o.xmax,o.ymin,o.ymax);
	},
	
	kill: function () {
		Event.stopObserving(this._target,"mousedown",this._targetDown);
		Event.stopObserving(document,"mouseup",this._docMouseUp);
		Event.stopObserving(document,"mousemove",this._docMouseMove);
	}

});Object.extend(Event, {
	Wheel: function (event){
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120; 
			if (window.opera) delta = -delta;
		} else if (event.detail) { delta = -event.detail/3;	}
		return Math.round(delta);
	}
});

Object.extend(Event, {
	SelectionClear: function () {
		if (document.execCommand&&navigator.userAgent.indexOf("Firefox")==-1) { document.execCommand("Unselect"); }
		else if (window.getSelection&&window.getSelection().removeAllRanges) {			
			window.getSelection().removeAllRanges();
			window.getSelection().addRange(document.createRange());
		}
	}
});

Object.extend(Array, {
    sortOnNumber: function (a) { return a.sort( function(n1,n2) { return (n1-n2) } ) }
});
