/* Settings */
slide_maxVisCount=0;
slide_nodeTop=10;
slide_left=60;
slide_distance=48;
slide_center=true;
slide_inverse=true;
slide_defaultSpeed=-1;
slide_adjustVisCount=true;

/* Now some useful tools*/

pmde_isIE=false;
pmde_isIE=(navigator.appVersion.indexOf("MSIE")!=-1);

pmde_isSafari=false;
pmde_isSafari=(navigator.appVersion.indexOf("Safari")!=-1);

pmde_isGecko=false;
pmde_isGecko=(navigator.userAgent.indexOf("Gecko")!=-1);

pmde_isKonqui=false;
pmde_isKonqui=(navigator.appVersion.indexOf("Konqueror")!=-1);

pmde_isWin=false;
if(navigator.appVersion.indexOf("Windows")!=-1) pmde_isWin=true;
pmde_isMac=false;
if(navigator.appVersion.indexOf("Mac")!=-1) pmde_isMac=true;

pmde_isIElt7=false;
pmde_isIElt6=false;
pmde_isIElt5=false;
if(pmde_isIE) {
	if(navigator.appVersion.indexOf("MSIE 5")!=-1) { pmde_isIElt7=true; pmde_isIElt6=true; }
	else if(navigator.appVersion.indexOf("MSIE 6")!=-1) pmde_isIElt7=true;
	else if(navigator.appVersion.indexOf("MSIE 4")!=-1) { pmde_isIElt7=true; pmde_isIElt6=true; pmde_isIElt5=true; }
}
	
function pmde_addEvtHnd(obj, evt, funct) {
   if(pmde_isIE) {
      obj.attachEvent('on'+evt, funct);   
   } else {   
      obj.addEventListener(evt, funct, false);
   }
}
function pmde_remEvtHnd(obj, evt, funct) {
   if(pmde_isIE) {
      obj.detachEvent('on'+evt, funct);
   } else {   
      obj.removeEventListener(evt, funct, false);
   }
}
function pmde_prevDef(evt) {
   if(pmde_isIE) event.returnValue=false; else evt.preventDefault();
}
function pmde_stopProp(evt) {
   if(pmde_isIE) event.cancelBubble=true; else evt.stopPropagation();
}

function pmde_vwHei(elem) {
   if(pmde_isIE) {
      return elem.offsetHeight;
   } else {
      var he =getComputedStyle(elem, null).height;
      return parseInt(he.substring(0,he.length-2));
   }
}

function pmde_vwWid(elem) {
   if(pmde_isIE) {
      return elem.offsetWidth;
   } else {
      var wi =getComputedStyle(elem, null).width;
      return parseInt(wi.substring(0,wi.length-2));
   }
}

function pmde_absLeft(elem) {
	if (elem.offsetParent) {
      var obj=elem;
      var wsleft;
	   wsleft = obj.offsetLeft;
	   while (obj = obj.offsetParent) wsleft += obj.offsetLeft;
	   return wsleft;
   } else return 0;
}

function pmde_absTop(elem) {
	if (elem.offsetParent) {
      var obj=elem;
      var wstop;
	   wstop = obj.offsetTop
	   while (obj = obj.offsetParent) wstop += obj.offsetTop;
      return wstop;
   } else return 0;
}

function pmde_cliWid() {
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    return window.innerWidth;
  } else if( document.documentElement && document.documentElement.clientWidth ) {
    //IE 6+ in 'standards compliant mode'
    return document.documentElement.clientWidth;
  } else if( document.body && document.body.clientWidth ) {
    //IE 4 compatible
    return document.body.clientWidth;
  }
}

function pmde_cliHei() {
  if( typeof( window.innerHeight ) == 'number' ) {
    //Non-IE
    return window.innerHeight;
  } else if( document.documentElement && document.documentElement.clientHeight ) {
    //IE 6+ in 'standards compliant mode'
    return document.documentElement.clientHeight;
  } else if( document.body && document.body.clientHeight ) {
    //IE 4 compatible
    return document.body.clientHeight;
  }
}


/* Now the real slide magic. Yeah! */

function slide_Slide(slideBox) {
   var me = this;
   me.box = slideBox;
   var items = new Array();
   var j = 0;
   for(var i = 0; i<slideBox.childNodes.length;i++) {
      if(slideBox.childNodes[i].className=="slideForward") {
         var node=slideBox.childNodes[i]; node.style.zIndex=23+slideBox.childNodes.length+1;node.style.display="block";
         node.onmousedown = function(evt) {
            if(speed>=1) speed+=3;
            if(speed==0) { speed=1; setFrontLeft(frontLeft+1); }      
            if(inverse) if(speed==-1) speed=0;
            me.accel=true; me.deccel=false;
            pmde_stopProp(evt); pmde_prevDef(evt);
         }
         node.onmouseup = function(evt) {
            me.accel=false;
            pmde_stopProp(evt); pmde_prevDef(evt);
         }
      } else if(slideBox.childNodes[i].className=="slideBackward") {
         var node=slideBox.childNodes[i]; node.style.zIndex=23+slideBox.childNodes.length;node.style.display="block";
         node.onmousedown = function(evt) {
            if(speed<=-1) speed-=3;
            if(speed==0) { speed=-1; setFrontLeft(frontLeft-1); }      
            if(!inverse) if(speed==1) speed=0;      
            me.deccel=true; me.accel=false;
            pmde_stopProp(evt); pmde_prevDef(evt);
         }
         node.onmouseup = function(evt) {
            me.deccel=false;
            pmde_stopProp(evt); pmde_prevDef(evt);
         }
      } else if(slideBox.childNodes[i].className=="sliding") {
         items[j]=slideBox.childNodes[i];
         items[j].style.position="absolute";
         items[j].style.top = slide_nodeTop+"px";
         j++;
      }
   }
   var distance = slide_distance;
   var inverse = slide_inverse;
   var itemCount = items.length;
   var frontItem = 0;
   var frontLeft = 0;//slide_distance/2;
   if(inverse) frontLeft=distance-1;
   var visCount = (slide_maxVisCount>0 && slide_maxVisCount<itemCount ? slide_maxVisCount : itemCount);
   var newVisCount = 0;
   var newTotalLeft = 0;
   var defaultSpeed = slide_defaultSpeed;
   var speed=defaultSpeed;
   var escapeItem = 0;
   me.accel=false;
   me.deccel=false;
   var totalLeft=slide_left;

   var escapeItemImg = document.createElement("img");
   escapeItemImg.style.position="absolute"; escapeItemImg.style.top=slide_nodeTop+"px";
   escapeItemImg.style.cursor="pointer";
   escapeItemImg.onclick = function(evt) {
      window.location.href = items[escapeItem].href;
   }
   me.box.appendChild(escapeItemImg);
   me.box.style.overflow="hidden";

   function setEscapeItem(index,opa) {
      escapeItem=index;
      if(items[index].tagName.toLowerCase()=="img") {
         escapeItemImg.src=items[index].src;
      } else {
         escapeItemImg.src=items[index].firstChild.src;
      }
      if(pmde_isIE) {
         escapeItemImg.style.filter="alpha(opacity = " + Math.round((opa)*100) + ");"
      } else {
         escapeItemImg.style.opacity=opa;
      }
   }   
   setEscapeItem(itemCount - 1,0);

   function min0max1(i) {
      return(i<0?0:(i>1?1:i));
   }

   
   function positionItems() {
      if(newVisCount!=0) {
         visCount = newVisCount;
         newVisCount = 0;
      }
      if(newTotalLeft!=0) {
         totalLeft = newTotalLeft;
         newTotalLeft = 0;
      }
      var j = frontItem; var pos = Math.round(frontLeft);

      escapeItemImg.style.left = (totalLeft+pos-distance)+"px";
      escapeItemImg.style.zIndex=(inverse?23+itemCount+1:23-1);
      if(inverse) {
         if(pmde_isIE) {
            escapeItemImg.style.filter="alpha(opacity = " + Math.round((1-Math.pow(1-(frontLeft/distance),3))*100) + ");"
         } else {
            escapeItemImg.style.opacity=1-Math.pow(1-(frontLeft/distance),3);
         }
      } else {
         if(pmde_isIE) {
            escapeItemImg.style.filter="alpha(opacity = " + Math.round((Math.pow((frontLeft/distance),3))*100) + ");"
         } else {
            escapeItemImg.style.opacity=Math.pow((frontLeft/distance),3);
         }
      }
      for(var i = 0; i<itemCount;i++) {
         if(i<visCount) {
            items[j].style.display="block"; 
            items[j].style.left=(totalLeft+pos)+"px";

            items[j].style.zIndex=(inverse?23+itemCount-i:23+i);
            if(i==visCount-1) {
               if(pmde_isIE) {
                  items[j].style.filter="alpha(opacity = " + Math.round((1-Math.pow((frontLeft/distance),3))*100) + ");"
               } else {
                  items[j].style.opacity=1-Math.pow((frontLeft/distance),3);
               }
            } else {
               if(pmde_isIE) {
                  items[j].style.filter="alpha(opacity = 100 );"
               } else {
                  items[j].style.opacity=1;
               }
            }

         } else {
            items[j].style.display="none";
         }

         pos+=distance;
         j=(j+1)%itemCount;
      }

   }

   function myModulo(i,j) {
      var a = i%j;
      while(a<0) a+=j;
      return a;
   }
 
   function setFrontLeft(value) {
      frontLeft=value;
      while(true) {
         if(frontLeft<0) {
            frontLeft+=distance; setEscapeItem(frontItem,1); frontItem=(frontItem+1)%itemCount;
         } else if(frontLeft>=distance) {
            frontLeft-=distance; frontItem=escapeItem; setEscapeItem(myModulo(escapeItem-1,itemCount),0);
         } else {
            break;
         }
      }
      positionItems();
   }
   
   me.tick=function() {
      //Geschwindigkeit abhaengig von gedruecktem Knopf veraendern. 
      if(speed==0) {      
         if(me.accel) {
            speed=1
         } else if(me.deccel) {
            speed=-1
         }         
      } else if(speed>0) {   
         if(me.accel) {
            speed*=1.1;
            if(speed>distance*.6) speed=distance*.6;
         } else if(me.deccel) {
            speed=speed*.8;
            if(speed<.5) speed=0;         
         } else {
            if(defaultSpeed<=0 || speed<defaultSpeed) {
               if(speed>3) {
                  speed=speed*.9;
                  if(speed<3) speed=3;
               }
               if(speed<=3) {
                  //"auslaufen", damit an passender Stelle zum Stehen kommt
                  if(speed<2&&speed>1) speed=1;
                  if(frontLeft>distance*.7 && speed>2) speed=2;
                  if(frontLeft>distance*.9 && speed>1) speed=1;
                  if(inverse) {
                     if(frontLeft>=distance-2) { frontLeft=distance-1; speed=0; }
                  } else {
                     if(frontLeft>=distance-1) { frontLeft=distance; speed=0; }
                  }
               }
            } else {
               if(speed>defaultSpeed) {
                  speed*=.9;
                  if(speed<defaultSpeed) speed=defaultSpeed;
               } else if(speed<.1) {
                  speed=0;
               }
            }
         }
      } else {
         if(me.accel) {
            speed=speed*.8;
            if(speed>-.5) speed=0;         
         } else if(me.deccel) {
            speed*=1.1;
            if(speed<-(distance*.6)) speed=-(distance*.6);
         } else {
            if(defaultSpeed<0 && speed<=defaultSpeed) {
               if(speed<defaultSpeed) {
                  speed*=.9;
                  if(speed>defaultSpeed) speed=defaultSpeed;
               } else if(speed>-.1) {
                  speed=0;
               }
            } else {
               if(speed<-3) {
                  speed=speed*.9;
                  if(speed>-3) speed=-3;
               }
               if(speed>=-3) {
                  //"auslaufen", damit an passender Stelle zum Stehen kommt
                  if(speed>-2&&speed<-1) speed=-1;
                  if(frontLeft<distance*.3 && speed<-2) speed=-2;
                  if(frontLeft<distance*.1 && speed<-1) speed=-1;
                  if(inverse) {
                     if(frontLeft>=distance-1) { frontLeft=distance-1; speed=0; }
                  } else {
                     if(frontLeft<=1) { frontLeft=0; speed=0; }
                  }
               }
            }
         }
      } 

      //if(inverse) {
      //   setFrontLeft(frontLeft-speed);
      //} else {
         setFrontLeft(frontLeft+speed);
      //}
   }

   
   this.resize=function() {
      if(slide_adjustVisCount) {
         var optiVisCount=Math.floor((pmde_vwWid(me.box)-pmde_vwWid(items[0])-distance-50)/distance);
         if(optiVisCount>0) {
            if(optiVisCount<2) optiVisCount = 2;
            if(optiVisCount>itemCount) optiVisCount = itemCount;
            newVisCount=optiVisCount;
         } else {
            newVisCount=visCount;
         }
         if(slide_center) {
            newTotalLeft=(pmde_vwWid(me.box)-((newVisCount-.5)*distance+pmde_vwWid(items[0])))/2;
            if(!(newTotalLeft>0)) newTotalLeft = 0;
         }
      } else if(slide_center) {
         newTotalLeft=(pmde_vwWid(me.box)-((newVisCount-.5)*distance+pmde_vwWid(items[0])))/2;
         if(!(newTotalLeft>0)) newTotalLeft = 0;
      }
   }

   this.resize();
   positionItems();
   slide_objects[slide_objects.length] = me;

}

var slide_objects = new Array();

function slide_tick() {

   for(var i = 0; i<slide_objects.length;i++) {
      slide_objects[i].tick();
   }

}

function slide_loader() {

   if(!pmde_isIElt7) {
	var allDivs = document.getElementsByTagName("div");
	var j = 0;
   for(var i = 0; i<allDivs.length; i++) {
      if(allDivs[i].className=="slideBox") {
         allDivs[i].slideObject = new slide_Slide(allDivs[i]);
      }
   }
   setInterval("slide_tick();", 50);   
 
   function resize(evt) {
      for(var i = 0; i<slide_objects.length;i++) {
         slide_objects[i].resize();
      }
   } 
 
   pmde_addEvtHnd(window,"resize", resize);

   resize(null); 
   }
}

