/** 
 * @fileoverview Klasse der benyttes til at lave en custom scrollbar
 * Der er et lag (scrollelement) med indholdet som ligger i et andet lag (maskelement) der fungerer som afgrænsende maske
 * Denne klasse benytter StoerrelserOgPlacering. 
 *
 * @author Marten Ølgaard moe@comonto.dk
 * @version 1.0 
 */

/**
 * Opretter en ny ScrollBar klasse.
 * @class ScrollBar klassens constructor.
 * @param {string} Lag der skal scrolles 
 * @param {string} Lag der afgræmnser scrolllaget
 * @param {string} Lag med op pilen
 * @param {string} Lag med ned pilen
 * @param {string} Lag som skyderen kører i 
 * @param {string} Lag med skyderen i  
 */
function ScrollBar(scrollElement,maskeElement,upScroller,downScroller,skyderFelt,skyder,sender){

this.sp = new StoerrelserOgPlacering();
this.vindue = new VindueProperties();

var srollLagHojde = this.sp.findHojde(scrollElement);
var maskeHojde = this.sp.findHojde(maskeElement);

if(maskeHojde >= srollLagHojde) {
if(downScroller!=null) this.sp.skjulElement(downScroller);	
if(upScroller!=null) this.sp.skjulElement(upScroller);	
if(skyderFelt!=null)this.sp.skjulElement(skyderFelt);
}
else{
if(downScroller!=null) this.sp.visElement(downScroller, false);	
if(upScroller!=null) this.sp.visElement(upScroller, false);	
if(skyderFelt!=null) {
	this.sp.visElement(skyderFelt, false);
	var skyderFeltHojde = this.sp.findHojde(skyderFelt);
	var skyderHojde = (maskeHojde/srollLagHojde)*skyderFeltHojde;
	if(skyderHojde<10){
		ekstraSkyderHojde = 10 - skyderHojde;	
		skyderHojde = 10;
		}
		this.sp.setHojde(skyder,skyderHojde);
}
this.scrollElement = scrollElement;
this.maskeElement = maskeElement;
this.skyderFelt = skyderFelt;
this.skyder = skyder;
this.sender = sender;

}

/**
* returnerer klassens type
* @type String
*/	
this.getClassName = function(){
return "ScrollBar";
}

var pThis = this;
document.onmousewheel = function(){
pThis.udfoerWheelScroll();
}


}


//Metoderne
ScrollBar.prototype.startScroll = ScrollBar_StartScroll;
ScrollBar.prototype.stopScroll = ScrollBar_StopScroll;
ScrollBar.prototype.udfoerScroll = ScrollBar_UdfoerScroll;
ScrollBar.prototype.stopDragScroll = ScrollBar_StopDragScroll;
ScrollBar.prototype.startDragScroll = ScrollBar_StartDragScroll;
ScrollBar.prototype.flytScroller = ScrollBar_FlytScroller;
ScrollBar.prototype.flytTekst = ScrollBar_FlytTekst;
ScrollBar.prototype.udfoerDragScroll = ScrollBar_UdfoerDragScroll;
ScrollBar.prototype.udfoerWheelScroll = ScrollBar_WheelScroll;


//

//Propertiesne
/**
 * Lag der skal scrolles 
 * @type string
 */
ScrollBar.prototype.scrollElement = null;

/**
 * Bruges vist ikke til noget?!
 * @type string
 */
ScrollBar.prototype.sender = null;

/**
 * Lag der afgræmnser scrolllaget
 * @type string
 */
ScrollBar.prototype.maskeElement = null;

/**
 * Lag som skyderen kører i 
 * @type string
 */
ScrollBar.prototype.skyderFelt = null;

/**
 * Lag med skyderen i
 * @type string
 */
ScrollBar.prototype.skyder = null;

/**
 * Lag der skal scrolles 
 * @type int
 */
ScrollBar.prototype.scrollTekstXpos = 0;

/**
 * Lag der skal scrolles 
 * @type int
 */
ScrollBar.prototype.scrollhastighed = 0;

/**
 * Timeout objektet 
 * @type Timeout
 */
ScrollBar.prototype.menusluk = null;

/**
 * StoerrelseOgPlacerings objekt 
 */
ScrollBar.prototype.sp;

/**
 * StoerrelseOgPlacerings objekt 
 */
ScrollBar.prototype.vindue;

/**
 * Musen position
 * @type int
 */
ScrollBar.prototype.musYPosition = null;

var ekstraSkyderHojde = 0;


/**
 * Starter scrollen
 * @param {int} Pixels der skal lægges til y positionen hver gang laget flyttes
 */
function ScrollBar_StartScroll(hastighed){
this.scrollhastighed = hastighed;
this.udfoerScroll();
}

/**
 * Starter scroll ved at trække i scrolleren
 */
function ScrollBar_StartDragScroll(){
this.musYPosition = this.vindue.findMusY();
var pThis = this;
//.getElementById(this.skyderFelt)
document.onmousemove = function(){
pThis.udfoerDragScroll();
return false;
}

document.onmouseup = function(){
pThis.stopDragScroll();
}

}

/**
 * Stopper scroll ved at trække i scrolleren
 */
function ScrollBar_StopDragScroll(){
document.onmousemove = null
document.onmouseup = null 
}

/**
 * Flytter laget
 */
function ScrollBar_UdfoerDragScroll(){
var musY = this.vindue.findMusY()
var musAlfaY = musY- this.musYPosition;
var srollLagHojde = this.sp.findHojde(this.scrollElement);
var skyderFeltHojde = this.sp.findHojde(this.skyderFelt);

this.scrollTekstXpos -= (musAlfaY/skyderFeltHojde)*srollLagHojde
this.flytTekst();
this.flytScroller();
this.musYPosition = musY
}

/**
 * Flytter laget
 */
function ScrollBar_UdfoerScroll(){

// find ny position
this.scrollTekstXpos -= this.scrollhastighed;
this.scrollhastighed += (this.scrollhastighed/100)

this.flytTekst();
this.flytScroller();

var pThis = this;
// nested function der er nødvendigt for at objektets state huskes ved timeout
var f = function(){
pThis.udfoerScroll();
}
this.menusluk = window.setTimeout(f, 30);

}

/**
 * Stopper den automatiske scrollning
 */
function ScrollBar_StopScroll(){
	clearTimeout(this.menusluk);
}

/**
 * Flytter scrolleren
 */
function ScrollBar_FlytScroller(){
//flyt skyderen
if(this.skyderFelt != null && this.skyder != null){
	
	var srollLagHojde = this.sp.findHojde(this.scrollElement);
	var skyderFeltHojde = this.sp.findHojde(this.skyderFelt);
	var nyYPlac = (-this.scrollTekstXpos/srollLagHojde)*(skyderFeltHojde-ekstraSkyderHojde);
	this.sp.setYVaerdi(this.skyder,nyYPlac);
}
}

/**
 * Flytter tekstlaget
 */
function ScrollBar_FlytTekst(){

if(this.scrollTekstXpos > 0) this.scrollTekstXpos = 0;

var srollLagHojde = this.sp.findHojde(this.scrollElement);
var maskeHojde = this.sp.findHojde(this.maskeElement);
if(this.scrollTekstXpos < -(srollLagHojde-maskeHojde))	this.scrollTekstXpos = -(srollLagHojde-maskeHojde);
this.sp.setYVaerdi(this.scrollElement,this.scrollTekstXpos);
}



/**
 * Scroller på baggrund af musehjulet
 */
function ScrollBar_WheelScroll(){
	
this.scrollhastighed = event.wheelDelta/12
	// find ny position
this.scrollTekstXpos += this.scrollhastighed;
this.flytTekst();
this.flytScroller();
}
