var ScrollerMaker = {

	Tag			: "scroller",
	Parent			: "divContainer",
	defaultScrollHeight	: 19,
	buttonDecal		: 19
};

ScrollerMaker.setScrolls = function(){
	if(this.Parent == document.body){
		this.ParentObj = document.body;
	}else{
		this.ParentObj = document.getElementById(this.Parent);
	}
	for(var i=0; this.ParentObj.getElementsByTagName("div")[i]; i++){
		var El = this.ParentObj.getElementsByTagName("div")[i];
		if(El.id.indexOf(this.Tag) != -1 && El.scrollHeight > El.offsetHeight){
			this.makeScroll(El);
		}
	}
};

ScrollerMaker.setPositions = function(){

	if(this.Parent == document.body){
		this.ParentObj = document.body;
	}else{
		this.ParentObj = document.getElementById(this.Parent);
	}
	for(var i=0; this.ParentObj.getElementsByTagName("div")[i]; i++){
		if(this.ParentObj.getElementsByTagName("div")[i].id.indexOf(this.Tag) != -1){
			
			var el = this.ParentObj.getElementsByTagName("div")[i];
			if(el.scrMain){
				el.scrMain.style.top		= (el.offsetTop+1)+"px";
				el.scrMain.style.left		= (el.offsetLeft+el.offsetWidth-parseInt(el.scrMain.offsetWidth)-1)+"px";
			}
		}
	}
};

ScrollerMaker.scrollUp = function(el){
	if(el.scrollTop==0){ return false; }
	else if(el.scrollTop-this.buttonDecal<0){
		el.scrollTop 		= 0;
		el.scrBar.style.top	= "0px";
	}else{
		el.scrollTop 		= el.scrollTop-this.buttonDecal;
		el.scrBar.style.top	= parseInt(el.scrBar.style.top)-(this.buttonDecal/el.ratio)+"px";
	}
};

ScrollerMaker.scrollDown = function(el){
	if(el.scrollHeight == el.scrollTop+el.offsetHeight){ return false; }
	else if((el.scrollTop+el.offsetHeight+this.buttonDecal) > el.scrollHeight){
		el.scrollTop 		= el.scrollHeight - el.offsetHeight;
		el.scrBar.style.top	= el.scrBarCont.offsetHeight-el.scrBar.offsetHeight+"px";
	}else{
		el.scrollTop 		= el.scrollTop+this.buttonDecal;
		el.scrBar.style.top	= parseInt(el.scrBar.style.top)+(this.buttonDecal/el.ratio)+"px";
	}
};

ScrollerMaker.makeScroll = function(el){

	el.scrMain			= document.createElement("div");
	el.scrMain.className		= "scrollerMain";
	el.parentNode.appendChild(el.scrMain);
	el.scrMain.style.top		= (el.offsetTop+1)+"px";
	el.scrMain.style.left		= (el.offsetLeft+el.offsetWidth-parseInt(el.scrMain.offsetWidth)-1)+"px";
	if(document.all && !is_opera){ var decal = 2; }else{ var decal = 2; }
	el.scrMain.style.height	= (el.offsetHeight-decal)+"px";
	

	el.scrTopArrow			= document.createElement("div");
	el.scrTopArrow.className	= "scrollerTopArrow";
	el.scrTopArrow.nodeElement	= el;
	el.scrTopArrow.onclick		= function(){
	
		ScrollerMaker.scrollUp(this.nodeElement);
	};
	el.scrMain.appendChild(el.scrTopArrow);
	
	el.scrBarCont			= document.createElement("div");
	el.scrBarCont.main		= el;
	el.scrBarCont.className		= "scrollerBarContainer";
	el.scrMain.appendChild(el.scrBarCont);
	el.scrBarCont.style.height 	= (el.offsetHeight-(el.scrTopArrow.offsetHeight*2)-decal)+"px";
	
	//BARE
	el.scrBar			= document.createElement("div");
	el.scrBar.className		= "scrollerBar_out";
	el.scrBar.onmouseover		= function(){ this.className="scrollerBar_over"; };
	el.scrBar.onmouseout		= function(){ this.className="scrollerBar_out"; };
	el.scrBar.style.top		= "0px";
	el.scrBar.toDrag		= el.scrBar;
	addeventHandler(el.scrBar);
	el.scrBar.addMouseDown(srcmousedowndrag);
	
	el.scrBarCont.appendChild(el.scrBar);
	//BARE
	
	el.scrBotArrow		= document.createElement("div");
	el.scrBotArrow.className	= "scrollerBotArrow";
	el.scrBotArrow.nodeElement	= el;
	el.scrBotArrow.onclick	= function(){
		ScrollerMaker.scrollDown(this.nodeElement);
	};
	el.scrMain.appendChild(el.scrBotArrow);
	el.scrBotArrow.style.top	= (el.offsetHeight-parseInt(el.scrBotArrow.offsetHeight))+"px";

	//CALCUL DU RATIO
	el.ratio = (el.scrollHeight-el.offsetHeight) / eval(el.scrBarCont.offsetHeight-(el.scrBar.offsetHeight));

	//SETTING EVENTS
	/*
	if(document.all){
		el.onmousewheel = function(){ 
			if(window.event.wheelDelta > 0){
				this.scrollTop = eval(this.scrollTop)-ScrollerMaker.defaultScrollHeight;
			}else{
				this.scrollTop = eval(this.scrollTop)+ScrollerMaker.defaultScrollHeight;
			}
			if(this.scrollTop+this.offsetHeight == this.scrollHeight){
				this.scrBar.style.top = (this.scrBar.parentNode.offsetHeight - this.scrBar.offsetHeight)+"px";
			}else{
				this.scrBar.style.top = (this.scrollTop/this.ratio)+"px";
			}
		};
	}else{
		el.addEventListener("DOMMouseScroll", ScrollerMaker.ffScroller, false);
	}*/
	
};

ScrollerMaker.ffScroller = function(evt){

	var el = evt.target;

	if(evt.detail > 0){
		this.scrollTop = eval(this.scrollTop)+ScrollerMaker.defaultScrollHeight;
	}else{
		this.scrollTop = eval(this.scrollTop)-ScrollerMaker.defaultScrollHeight;
	}
	if(this.scrollTop+this.offsetHeight == this.scrollHeight){
		this.scrBar.style.top = (this.scrBar.parentNode.offsetHeight - this.scrBar.offsetHeight)+"px";
	}else{
		this.scrBar.style.top = (this.scrollTop/this.ratio)+"px";
	}
};

ScrollerMaker.setSelect = function(el, bool){

	if(bool){
		if(document.all){
			document.body.setAttribute("style", "user-select:all;");
			//el.onselectstart = function(){ return false; };
		}else
			document.body.setAttribute("style", "-moz-user-select:toggle;");
	}else{
		if(document.all){
			document.body.setAttribute("style", "user-select:none;");
			//el.onselectstart = function(){ return true; };
		}else
			document.body.setAttribute("style", "-moz-user-select:none;");
	}
};

//------------------------------------------DRAG-CODE---------------------------------------------------------

function addeventHandler(element) {

	element._keyObject = new Array();
	
	element.addMouseDown = function (action) {
		element._keyObject["mousedown"] = action;
	};
	
	element.removeMouseDown = function () {
		element._keyObject["mousedown"] = null;
	};

	element.addMouseUp = function (action) {
		element._keyObject["mouseup"] = action;
	};
	
	element.removeMouseUp = function () {
		element._keyObject["mouseup"] = null;
	};
	
	element.addMouseMove = function (action) {
		element._keyObject["mousemove"] = action;
	};
	
	element.removeMouseMove = function () {
		element._keyObject["mousemove"] = null;
	};
	
	function handlemouseEvent(evt) {

		if(document.all){
			var type = event.type;
			var code = event.keyCode;
		}else{
			var type = evt.type;
			var code = evt.keyCode;
		}
		if (element._keyObject[type] != null) 
			element._keyObject[type](evt);
	}
	
	element.onmousedown = handlemouseEvent;
	element.onmouseup = handlemouseEvent;
	element.onmousemove = handlemouseEvent;
}

//---------------------------------DRAGCODE-----------------------------------------

var inDrag = null;
var dragObj_x = 0;
var dragObj_y = 0;

function srcmousedowndrag(evt){
	
	var dragIt = null;
	var mainDiv = document.getElementById('divContainer');
	if(document.all){	
		dragIt = event.srcElement;
		cltY = event.clientY;
	}else{
		dragIt = evt.target;
		cltY = evt.clientY;
	}
	if(!dragIt.toDrag){ return false; }
	
	inDrag = dragIt.toDrag;

	ScrollerMaker.setSelect(inDrag.parentNode.main, false);
	
   	dragObj_y = (cltY + mainDiv.scrollTop) - inDrag.offsetTop;

   	return true;
};

function srcmousemovedrag(evt){


	if (inDrag == null) { return true; }

	var mainDiv = document.getElementById('divContainer');
	if(document.all){

		var decal_y = 0;
		var newY = (event.clientY + mainDiv.scrollTop);
	}else{
		var decal_y = 0;
		var newY = (evt.clientY + mainDiv.scrollTop);		
	}
	
	distanceY = newY - dragObj_y;
	newTop	= eval(inDrag.offsetTop) + distanceY;
	
	if(distanceY < 0){ distanceY = 0; }
	if((distanceY+eval(inDrag.offsetHeight)-decal_y) > inDrag.parentNode.offsetHeight ){ distanceY = inDrag.parentNode.offsetHeight - eval(inDrag.offsetHeight)+decal_y; }
	
	inDrag.style.top = distanceY+"px";
	inDrag.parentNode.main.scrollTop = distanceY*inDrag.parentNode.main.ratio;
	
	return false;
};

function srcmouseupdrag(evt){
	if(inDrag){
		ScrollerMaker.setSelect(inDrag.parentNode.main,true);
	}
	
	inDrag = null;
	return true;
};

//---------------------------------DRAGCODE-----------------------------------------

//------------------------------------------DRAG-CODE---------------------------------------------------------
