
// -------------- initialisering og formatering af scroll-systemet -------------------------------------------


function scrollInit(n,kn,fli)											// kaldes fra system.js 			
{

//	  var scrv=window.document.getElementById('scrollVindue');
    var scrv = GetById(m[n][0][0],'scrollVindue'); 

    //alert('h');
		if (scrv)
		{
      var scrp = scrv.parentNode;
			var ytop,ybund;   // absolute koordinater .. scrollerten's absolute reference koordinater (absY - atribut)
			
      var O,R,N,scrbH,shF,scrH,scrp,forh;
			
      if (scrv.getAttribute('title') != null)       
      {
         scrv.id = scrv.title;                                // id erstattes med title
 			   scrv.removeAttribute('title');										// og vi fjerner 'title' - popper ellers op ved mouseover !

      }
      else
      {
         scrv.id = '';
      }

      						
			scrv.style.overflow='hidden';							// just in case !

      // beregn fra parent .. og swap parent PADDING til scrolvindue MARGIN
      scrv.style.margin = scrp.style.padding;     // swap
      scrp.style.padding = '0px';                 // nulstil padding på parent

      scrv.style.width = ( parseInt(getStyle(scrp,'width')) - checkV('pre',scrv,'PL','PR','BL','BR','ML','MR') ).toString() + 'px';      

      scrH = parseInt(getStyle(scrp,'height')) - checkV('pre',scrv,'PT','PB','BT','BB','MT','MB'); 
      scrv.style.height = scrH.toString() + 'px';
      

/*

      scrH = parseInt(getStyle(scrp,'height')) - checkV('pre',scrv,'PT','PB','BT','BB','MT','MB');
      scrv.style.height = scrH.toString() + 'px'; 
*/
// ----------------------------
			if (scrv.scrollHeight > parseInt(scrv.style.height))
			{      			

/*
          var len = m[n][21].length;        // der kan være flere scroll-systemer på samme lag
          var a = m[n][21][len] = new Array();  // indeholder alle præferencer til scrollbar


*/
          var a = m[n][21];  // indeholder alle præferencer til scrollbar
          var S = GetById(m[n][0][0],'scrollBar');     // leder efter scrollBar med udgangspkt. i scrollvindue (parent)          

  				if (S && S != null) 	                  // 'scrollBar' og 'scrollVindue' ligger nu i SAMME div
  				{		
//alert(S.innerHTML);
              S.cF = 'scrollBAR';
    					S.id='';											// id tømmes - fanges ikke ved næste gennemgang
    					
    					S.style.zIndex+=1;									// .. og vi lægger os øverst !
    					S.style.visibility='visible';						// er sat 'hidden' i CSS-class !
  
  					
             var p = (brt ? S.children : S.childNodes);

             if ( p && p.length != 0 )   
             {
                 var q = 0;
                 
                 for (var j = 0; j < p.length; j++)
                 {
                    if (p[j].tagName)
                    {
                        q++;                // fast offset                        
                        a[q] = p[j];         // scrollert i a[1] ..OP i a[2] ..  NED i a[3]                  
                    }
                  } 
              }


 
// ------- beregning af scrollBaren's AKTUELLE højde samt placering ------------

            // scrollBaren's højde korrigeres for OP/NED knappernerne 
            scrbH = scrH + parseInt(getStyle(a[2],'top')) + parseInt(getStyle(a[3],'bottom'));

            S.style.height = scrbH.toString() + 'px';
            
            if (S.style.top == '')   // hvis top '' 
            {
                S.style.top =  ( checkV('pre',scrp,'MT') + checkV('pre',scrv,'MT') ).toString() + 'px';   // allign efter 'scrollVindue' PARENT
            }
            else
            {
                S.style.top = ( parseInt(getStyle(scrv,'top')) + checkV('pre',scrv,'PT','MT') ).toString() + 'px';   // allign efter 'scrollVindue'
//                S.style.top = ( parseInt(S.style.top) + checkV('pre',scrv,'MT') ).toString() + 'px';   // allign efter 'scrollVindue'            
            }

     

// ---------------  parkering af scrollbar  --------------------------

            
      					a[0]=scrv;   // scrollvinduet parkeret her
                					
//                a[2].setAttribute('scrn',len); a[2].scrn = len;   // OP knap .. med ref til scrollVindue
//  onmousedown="fast(50)" onmouseup="clearFast()" onmouseout="clearFast()" onclick="scrollOP(20)"      
                     a[2].style.visibility = 'visible';
                     a[2].dF = 'fast'; a[2].dA = 50;
                     a[2].upF = 'clearFast';
                     a[2].uF += ';clearFast';
                     a[2].cF = 'scrollOP'; a[2].cA = 20;
                     
//                a[1].setAttribute('scrn',len); a[1].scrn = len;   // scrollerten .. med ref til scrollVindue
//   onmouseover="barHoverOn()" onmousedown="scrolldown()" onmousemove="scrollmove()" onmouseup="scrollup()" onmouseout="scrollout()" ondragstart="return false" draggable="false"     
                     a[1].style.visibility = 'visible';
      					     a[1].oF += ';barHoverOn';
                     a[1].dF = 'scrolldown';
                     a[1].mF =	'scrollmove';
                     a[1].upF = 'scrollup';
                     a[1].uF += ';scrollout';				
//                     if ( brt ) { a[1].lF = 'scrollout'; } else { a[1].uF += ';scrollout'; }
//                     if ( brt ) { a[1].eF = 'scrollenter'; }     // kun IE .. eller kan den ikke lukke ved mousedown 

           if ( brt ) {  a[1].ondragstart = dragevent  }  // IE
           else { a[1].addEventListener( 'ondragstart' , dragevent , false ) } // Gecko


// -------------------------------- ende IMG ------------------------------------------------------

           if ( brt ) { a[1].firstChild.onmousemove = scrollEndeMoveIE  }  // IE
           else { a[1].firstChild.addEventListener( 'mousemove' , scrollEndeMoveGecko , false ) } // Gecko

           if ( brt ) { a[1].lastChild.onmousemove = scrollEndeMoveIE  }  // IE
           else { a[1].lastChild.addEventListener( 'mousemove' , scrollEndeMoveGecko , false ) } // Gecko

// ------------------------------------------------------------------------------------------------
//           function dragevent() { return false }
           
           
/*
           if ( brt ) { a[1].draggable = dragevent  }  // IE
           else { a[1].addEventListener( 'draggable' , dragevent , false ) } // Gecko
*/
// ------------------------------------------------------------------------------------------------


//                a[3].setAttribute('scrn',len); a[3].scrn = len;   // NED knap .. med ref til scrollVindue
//  onmousedown="fast(50)" onmouseup="clearFast()" onmouseout="clearFast()" onclick="scrollOP(20)"      

                     a[3].style.visibility = 'visible';
                     a[3].dF = 'fast'; a[3].dA = 50;
                     a[3].upF = 'clearFast';
                     a[3].uF += ';clearFast';
                     a[3].cF = 'scrollNED'; a[3].cA = 20;

// ------------------ 'bottom up' eller capture-handler's ----------------------------------------

                        // IE  ..  INGEN 'event' i funktions-kald
                        function wheelBrt()         
                        {
                            window.event.cancelBubble = true;
//                         window.scroll='no';  
                            var delta = 0;

                            delta = event.wheelDelta/120;
                            // udfør scrollWheel( capture-lagNr, delta)                                                        
                            scrollWheel( this.lnr , delta );
                        }

                        // Gecko .. MED 'event' i funktions-kald .. og SKAL defineres FØR 'addEventListener'
                        function wheelGecko(event)   
                        {
                            event.stopPropagation();                            
//                          window.document.body.scrolling='no';
                            var delta = 0;
                                                        
                            if ( UA == 0 )          // FF
                            {
                                delta = -event.detail/3;                            
                            }
                            else if ( UA == 1 )     // Chrome  
                            {
                                delta = event.wheelDelta/120;                            
                            }                            
                            // udfør scrollWheel( capture-lagNr, delta)                            
                            scrollWheel( event.currentTarget.lnr , delta );                                                        
                        }

                        function scrollWheel( lag , delta)
                        {   
                           if ( delta > 0 )    // opad
                           {
                               // aktiver scrollOP-knap
                               scrollOP( m[ lag ][21][2] );
                           }
                           else if ( delta < 0 )  // nedad
                           {
                               // aktiver scrollNED-knap
                               scrollNED( m[ lag ][21][3] );                           
                           }
                        }


        if ( brt ) 
        { 
//            scrp.attachEvent( 'onmousewheel' , wheelBrt );  // virker IKKE i IE med 'this' .. kalder wheel()
              m[n][0][0].onmousewheel = wheelBrt;                   // .. men det gør den her !
        }  
        else 
        { 
            if ( UA == 0 )      // FF, Safari
            {
                m[n][0][0].addEventListener( 'DOMMouseScroll' , wheelGecko, false );   
            }
            else if ( UA == 1 ) // Chrome
            {
                m[n][0][0].addEventListener('mousewheel', wheelGecko, false);          
            }
        }
                      

// ----------------------------------------------------------

                a[4] = false;   // scroll-flag .. mouseup/down
                
                a[5] = 0;       // musens absolute koordinat gemmes ved mousedown

      					a[7] = S;      // selve scrollbar .. med ref til scrollVindue

                // 0-lagets abs-koordinater
//                var absk = m[0][0][0].offsetTop + ( brt? 0 : checkV('pre',m[0][0][0],'PT','BT','MT') ); 

                var checkR = checkV('pre',a[1],'PT','PB','BT','BB','MT','MB');    // temporary
 
                a[11] = lagkoord(S,0)[1] + checkV('pre',m[0][0][0],'BT') + checkV('pre',m[0][0][0],'MT');        // OBS !

// ------------------ initialisering af selve scrollbaren ------------------------------------------
                forh = scrv.scrollHeight / parseInt(getStyle(scrv,'height'));
//                forh = scrv.scrollHeight / parseInt(scrv.style.height);

                var scrollertHeight = CSH(a[1]);

                a[1].style.height = ( scrollertHeight == 'auto' ? ( Math.round(scrbH/forh) - checkR ).toString() + 'px' :  scrollertHeight );                

            // check om attributen allerede er sat .. hvis 'nej' - første gennemløb

            scrv.setAttribute('ytoprel',0); scrv.ytoprel = 0;     //   boundary for top .. rel koord
                       

            scrv.setAttribute('ybundrel','');
            scrv.ybundrel = scrbH - parseInt(a[1].style.height) - checkR;  //   boundary for bund .. rel koord


            a[6] = (scrv.scrollHeight - parseInt(scrv.style.height))/(scrv.ybundrel); // korrigerede forhold .. det reelle forhold
            a[10] =  parseInt(a[1].style.height) + checkR; // R's samlede højde incl. border og margin !

            // scrollBar'ens højde .. med opdatering op til serever, sammen med scrollerten's aktuelle position 
            a[20] = scrbH;   // 'previous scrollBar højde'

            // initialisering .. starter fra top
            a[12] = null;         // timer1
            a[13] = null;         // timer2
            a[14] = false;        // timer flag
            a[15] = false;        // timer flag
                                                
            a[1].style.top = '0px';            
            scrv.scrollTop = 0;
				}		
      }
//		scrollInit(n,kn,fli);										// recursion
  }
}




// --------------- de egentlige scroll-funktioner ---------------------
//function flyt(s,a,koord,t)                    // opdaterer scrollsystemet's  array ,, t for tilstand (N/H)
function flyt(s,a,koord)                    // opdaterer scrollsystemet's  array
{
      // hvor meget har vi bevæget os (beregnes udfra absolute koordinater)
      var deltaY = ((koord == '-') ? (s.absY - a[5]) : parseInt(koord));           
      var atop = parseInt(a[1].style.top);  // aktuel top-position af scrollert
     
      var bongTop = a[0].ytoprel;
      var bongBund = a[0].ybundrel;
      
     
      var til = atop + deltaY;              // ønskede 'til' (top-)position
                  
      if ( til > bongTop && til < bongBund )
      {
          a[1].style.top = til.toString() + 'px';      
      }
      else
      {
        if ( til <= bongTop )   // vi har bonget loftet .. eller hænger der allerede
        {
            a[1].style.top = bongTop.toString() + 'px';        
        }
        else if ( til >= bongBund )    // vi har ramt bunden                            
        {
            a[1].style.top = bongBund.toString() + 'px';        
        }
      }      

      a[0].scrollTop = Math.ceil( parseInt(a[1].style.top)*( a[6] ));
      
      a[5] = s.absY;               // og gammel til ny entry      
}



// ------------------------ scrollert funktioner ----------------------------

            // kub til ende-div
            function scrollEndeMoveIE()
            {
                var src = window.event.srcElement.parentElement;
                window.event.cancelBubble = true;
            
                src.absY = window.event.clientY;
                scrollmove(src);
            }


            function scrollEndeMoveGecko(event)
            {
                var src = event.target.parentNode;
                event.stopPropagation();

                src.absY = event.clientY;
                scrollmove(src);
            }
   







function scrollmove(s)            // onmousemove af scrollert
{
   var a = m[s.dwli][21];   // scroll-arrayen

   if (a[4])                      // hvis mousedown er aktiv
   {    
      flyt(s,a,'-');
   }
}


function scrolldown(s)            // onmousedown på scrollert
{
   var a = m[s.dwli][21];   // scroll-arrayen

   a[4] = true;

                    // selve scrollert .. dynamisk hover width
                    a[1].style.width = '6017px';   // tilbage til class-style 
                    a[1].style.left = '-3000px';
                    a[1].style.backgroundPosition = '50%';


      
   childCheck(a[1],'_o');
   a[5] = s.absY;                 // musens placering registreres ved 'clickdown'  !!
}


function scrollup(s)              // onmouseup på scrollert
{
//   var a = m[s.dwli][21][s.scrn];   // scroll-arrayen
   var a = m[s.dwli][21];   // scroll-arrayen


   a[4] = false;     
   smReset( a[1] );
}


function scrollenter(s)           // onmouseenter ( IE ) på scrollert
{
    if ( smFl )       // var mus nede, da vi forlod .. og er det stadig
    {
        scrolldown(smEL);             // simuler
    }
}



function scrollout(s)             // onmouseout ( Gecko ) onmouseleave ( IE ) på scrollert
{
//   var a = m[s.dwli][21][s.scrn];   // scroll-arrayen
    var a = m[s.dwli][21];   // scroll-arrayen   

    // hvis vi forlader scrollert MED mousedown aktiv
    if (a[4])
    {
//      scrFl = true;
//      scrDwli = s.dwli;      // ref til lag, hvorpå scrollbar ligger

      smFl = true;
      smDwli = s.dwli;      // ref til lag, hvorpå scrollbar ligger
      smEl = s;
    }
    else
    {
      smReset(a[1]);
    }

}

function barHoverOn(s)          // onmouseover på 'scrollert'
{                   
//    var a = m[s.dwli][21];   // scroll-arrayen 
    childCheck(s,'_o');
}


function smNull()         // onmouseup på gummidiv .. eneste element med smNull()
{
    if ( smFl )             // var der en 'aktiv' scrollert eller en 'aktiv' move .. global variabel
    {        
      // og vi fanger elementet .. via GLOBAL reference ( smEl ).. og resetter INLINE manuelt FØR childcheck()
      // scrollbaren eller selve vinduet (laget)
/*
      if ( UA == 2 ){ smReset( smEl.parentNode ) }    // kun til ære for Safari
      else {smReset( smEl );}
*/
      smReset( smEl );
    }
}

          // kaldes af  smNull() eller af elementer med defineret scroll-array eller definerede vindue-funktioner          
          function smReset(el)
          {
             if ( el.mF != '' )                // kun hvis move
             {
                if ( (el.mF).match(/scrollmove/) )
                {
                    var a = m[ el.dwli ][ 21 ];
                    a[4] = false;                    // <-- scroll systemet's interne move-flag

                    // selve scrollert .. dynamisk hover width resettes
                    a[1].style.width = '';   // tilbage til class-style 
                    a[1].style.left = '';
                    a[1].style.backgroundPosition = '';
/*                
                    // inklusive TOP
                    a[1].firstChild.style.left = '';
                    a[1].firstChild.style.top = '';
                    a[1].firstChild.style.backgroundPosition = '50% 100%';    // SKAL angives for IE7
                
                    // .. og BUND
                    a[1].lastChild.style.left = '';
                    a[1].lastChild.style.bottom = '';
                    a[1].lastChild.style.backgroundPosition = '50% 0%';       // .. og her for alle
*/
                }
                else if ( (el.mF).match(/wanMove/) )
                {
                    m[ el.dwli ][ 30 ][ 4 ] = false;      // <-- vinduet's interne move-flag              

                    // reset dynamiske .. kun for wanMove
                    el.style.height =  '';
                    el.style.top = '';                    

                }
                
                // reset dynamiske .. før childCheck() .. fælles
                el.style.width = '';
                el.style.left = '';
                el.style.backgroundPosition = '50%';


                childCheck(el,'');
              
                smFl = false;                             // globale flag            
                smEl = '';
              }                         
          }



// ----------------- funktioner til scroll-knapperne------------------



function scrollOP(s)
{
   var a = m[s.dwli][21];   // scroll-arrayen
   var tmp = Math.floor((parseInt(s.cA))/a[6]);  // hvor er scrollerten ifht. top af bar?
   flyt(s,a,'-'+tmp.toString());                 // bemærk '-'
}


function scrollNED(s)
{
   var a = m[s.dwli][21];   // scroll-arrayen
   var tmp = Math.floor((parseInt(s.cA))/a[6]);  // hvor er scrollerten ifht. top af bar?
   flyt(s,a,'+'+tmp.toString());                 // bemærk '+'
}


function fast(s)                    // onmousedown
{
   var a = m[s.dwli][21];   // scroll-arrayen
   a[14] = true;

   a[12] = window.setTimeout(callbck1,200);

      function callbck1()
      {
        a[13] = window.setTimeout(callbck2,s.dA);      
      }

      function callbck2()
      {

        if (s.cF == 'scrollOP')
        {
          scrollOP(s);        
        }
        else
        {
          scrollNED(s);
        }
        
        if (a[14] == true) {callbck1();}     // hvis mousedown .. noch einmahl 
      }
}



function clearFast(s)               // onmouseup eller onmouseout
{
   var a = m[s.dwli][21];   // scroll-arrayen
   if (a[14] == true)
   {
	   window.clearTimeout(a[12]);   
	   window.clearTimeout(a[13]);
	   a[14] = false;
   }
   
   if (s.evtyp == 'mouseout')       // da clearFast() er fælles for mouseup og mouseout
   {
     childCheck(s,'');
   }
}


function scrollBAR(s)
{
   var a = m[s.dwli][21];   // scroll-arrayen

   var akt = s.absY - a[11] + window.document.documentElement.scrollTop + window.document.body.scrollTop;
   var hvorTop = parseInt(a[1].style.top);
   
   if (akt > (hvorTop + a[10]))             //  under  .. og flyt() flytter 'delta' nedad
   {
      flyt(s,a,'+'+(akt - a[10] - hvorTop - (UA == 7 ? 3 : 1)).toString());    // '+' vi lægger til .. flytter NEDAD
   }
   else if (akt < hvorTop)        //  over
   {
      flyt(s,a,'-'+(hvorTop - akt - (UA == 7 ? 0 : 2)).toString());       // .. bemærk offset !
   }
}








