// written by Aleš Jiříček - 2008 - not for free usage !

maxoSlider={
  ////////////////////////////////////////////////////////////
  /* START// functions for helping with some stuffs //START */
  getElementsByClassName:function(classname, node) { //finds elements by class name - not standard JS function
    if(!node) node = document.getElementsByTagName("body")[0]
    var a = []
    var re = new RegExp('\\b^' + classname + '$\\b')
    var els = node.getElementsByTagName("*")
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i])
    return a
  },
  addEvent:function(elm, evType, fn, useCapture) { //adds event on element (onclick, onload etc.)
  	if (elm.addEventListener)
  	{
  		elm.addEventListener(evType, fn, useCapture)
  		return true
  	} else if (elm.attachEvent) {
  		var r = elm.attachEvent('on' + evType, fn)
  		return r
  	} else {
  		elm['on' + evType] = fn
  	}
  },
  getTarget:function(e){ //get element when onclick/onmouseover etc...
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;}
		return target
	},
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return;
		}
		if (e){
			e.stopPropagation();
			e.preventDefault();
		}
	},
  /* END// functions for helping with some stuffs //END */
  ////////////////////////////////////////////////////////

  ////////////////////////////////////////////////
  /* START// Ajax functions for sliders //START */
  actualNumberOfRequests: 0,
  httpRequests: new Array(),
  createAjax:function(){
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest()
    } else if (window.ActiveXObject) {
        try {
          return new ActiveXObject("Msxml2.XMLHTTP")
        } catch (eror) {
          return new ActiveXObject("Microsoft.XMLHTTP")
        }
    }
  },
  ajaxLoad:function(objectNumber,sectionNumber,itemNumber,itemsCount,preload) {
    var category = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].href
    var actualRequest = 0
    if(maxoSlider.actualNumberOfRequests<=0){
      maxoSlider.httpRequests[0] = maxoSlider.createAjax()
      maxoSlider.actualNumberOfRequests++
    } else {
      maxoSlider.httpRequests[maxoSlider.actualNumberOfRequests] = maxoSlider.createAjax()
      actualRequest = maxoSlider.actualNumberOfRequests
      maxoSlider.actualNumberOfRequests++
    }
    maxoSlider.objects[objectNumber].loading = true
    if(!preload) maxoSlider.showLoader(objectNumber)
    maxoSlider.httpRequests[actualRequest].onreadystatechange = function() { maxoSlider.ajaxComplete(objectNumber,sectionNumber,itemNumber,itemsCount,actualRequest,preload); }
    maxoSlider.httpRequests[actualRequest].open('POST', '/engine/ajax/main-page-sliders.php', true)
    maxoSlider.httpRequests[actualRequest].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    maxoSlider.httpRequests[actualRequest].send('category='+category+'&startFrom='+itemNumber+'&count='+itemsCount)
  },
  ajaxComplete:function(objectNumber,sectionNumber,itemNumber,itemsCount,requestNumber,preload) {
    if (maxoSlider.httpRequests[requestNumber].readyState == 4) {
      if (maxoSlider.httpRequests[requestNumber].status == 200) {
        var response = eval('(' + maxoSlider.httpRequests[requestNumber].responseText + ')')
        for(y=0;y<response.length;y++){
            gameObject = response[y]
            maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects.length++] = gameObject
        }
        maxoSlider.imagesPreload(objectNumber,sectionNumber,itemNumber,itemsCount,preload)
        if(!preload){
          maxoSlider.showContent(objectNumber,sectionNumber,itemNumber,5,true)
        } else {
          maxoSlider.objects[objectNumber].loading = false
        }
      }
      maxoSlider.httpRequests[requestNumber] = false;
    }
  },
  /* END// Ajax functions for sliders //END */
  ////////////////////////////////////////////
  
  initialized: false,
  objects: false,
  init:function(){
    // initialize the sliders on page - only once... only in div with id "obsah" - to change it edit the "objects = ..." line below
    if(maxoSlider.initialized) return
    maxoSlider.initialized = true
    maxoSlider.objects = maxoSlider.getElementsByClassName('rollBoxGames',document.getElementById('obsah'))
    for(i=0;i<maxoSlider.objects.length;i++){

      maxoSlider.objects[i].loadedContent = new Array()
      maxoSlider.objects[i].loading = false
      maxoSlider.objects[i].efecting = false
      maxoSlider.objects[i].typeOfEfect = false
      maxoSlider.objects[i].objectNumber  = i
      maxoSlider.objects[i].actualSection = 0
      maxoSlider.objects[i].actualContent = 0
      var innerUl = maxoSlider.objects[i].getElementsByTagName('ul')[0]
      var lis = innerUl.getElementsByTagName('li')
      var innerDiv = maxoSlider.objects[i].getElementsByTagName('div')[0]
      var innerInnerDiv = innerDiv.getElementsByTagName('div')[0]
      var aHrefs = innerDiv.getElementsByTagName('a')
      var descriptions = innerDiv.getElementsByTagName('p')

      for(y=0;y<lis.length;y++){
        var aLiHref = lis[y].getElementsByTagName('a')[0]
        sectionObject = new Object()
        sectionObject.href = aLiHref.href
        sectionObject.objects = new Array()
        maxoSlider.objects[i].loadedContent[maxoSlider.objects[i].loadedContent.length++] = sectionObject
        maxoSlider.addEvent(aLiHref,'click',maxoSlider.loadSection,false)
      }

      x = 0
      for(y=0;y<aHrefs.length;y++){
        if(aHrefs[y].parentNode!=innerInnerDiv && !(aHrefs[y].className=="next" || aHrefs[y].className=="prev")) continue
        if(aHrefs[y].className=="next" || aHrefs[y].className=="prev"){
          aHrefs[y].href = 'javascript:void(0)'
          maxoSlider.addEvent(aHrefs[y], 'click', maxoSlider.nextPrevContent, false)
        } else {
          gameObject = new Object()
          gameObject.title = aHrefs[y].title
          gameObject.href = aHrefs[y].href
          gameObject.thumb = aHrefs[y].getElementsByTagName('img')[0].src
          gameObject.description = descriptions[x].innerHTML
          maxoSlider.objects[i].loadedContent[0].objects[maxoSlider.objects[i].loadedContent[0].objects.length++] = gameObject
          maxoSlider.addEvent(aHrefs[y],'mouseover',maxoSlider.mouseOver,false)
          x++
        }
      }
      maxoSlider.ajaxLoad(i,0,5,10,true)
    }
    maxoSlider.imageLoader.src = 'http://cssimages.maxo.cz/images/preloader.gif'
  },
  mouseOver:function(e){
    // mouse over the images (thumbs)
    var o = maxoSlider.getTarget(e)
    var aHrefs = o.parentNode.getElementsByTagName('a')
    var descriptions = o.parentNode.parentNode.getElementsByTagName('p')
    x=0
    for(y=0;y<aHrefs.length;y++){
      if(aHrefs[y].className=="next" || aHrefs[y].className=="prev" || aHrefs[y].parentNode!=o.parentNode) continue
      if(aHrefs[y]==o){
        aHrefs[y].className = 'active'
        descriptions[x].style.display = ''
        x++
      } else {
        aHrefs[y].className = ''
        descriptions[x].style.display = 'none'
        x++
      }
    }
    return
  },
  nextPrevContent:function(e){
    // click on the next/prev button
    maxoSlider.cancelClick(e)
    var o = maxoSlider.getTarget(e)
    var objectNumber = o.parentNode.parentNode.objectNumber
    if(maxoSlider.objects[objectNumber].loading || maxoSlider.objects[objectNumber].efecting) return
    
    var actualSection = maxoSlider.objects[objectNumber].actualSection;
    var actualContent = maxoSlider.objects[objectNumber].actualContent;
    if(o.className=='prev'){
      var itemNumber = actualContent-5
      maxoSlider.objects[objectNumber].typeOfEfect = 'left'
    } else {
      var itemNumber = actualContent+5
      maxoSlider.objects[objectNumber].typeOfEfect = 'right'
    }
    
    if(itemNumber<0) itemNumber = 15 + itemNumber
    if(itemNumber>10) itemNumber = itemNumber - 15

    maxoSlider.hideActualContent(objectNumber,false)
    if(maxoSlider.objects[objectNumber].loadedContent[actualSection].objects.length>itemNumber){
      maxoSlider.showContent(objectNumber,actualSection,itemNumber,5,false)
    } else {
      maxoSlider.ajaxLoad(objectNumber,actualSection,itemNumber,5,false)
    }

    return
  },
  loadSection:function(e){
    // click on the other section
    maxoSlider.cancelClick(e)
    var o = maxoSlider.getTarget(e)
    var lis = o.parentNode.parentNode.getElementsByTagName('li')
    var objectNumber = o.parentNode.parentNode.parentNode.objectNumber

    if(maxoSlider.objects[objectNumber].loading || maxoSlider.objects[objectNumber].efecting) return
    
    maxoSlider.objects[objectNumber].typeOfEfect = 'top'
    maxoSlider.hideActualContent(objectNumber,false)
    for(y=0;y<lis.length;y++){
      if(lis[y]!=o.parentNode){
        lis[y].className = ''
      } else {
        lis[y].className = 'active'
        if(maxoSlider.objects[objectNumber].loadedContent[y].objects.length>=15){
          maxoSlider.showContent(objectNumber,y,0,5,false)
        } else {
          maxoSlider.ajaxLoad(objectNumber,y,0,15,false)
        }
      }
    }
    return
  },
  showContentContinue:function(objectNumber,position){
    if(position>0){
      var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]
      posun = Math.abs(Math.round((100-position) / 3))
      if(posun<5) posun = 5
      var newPosition = position - posun
      if(newPosition<0) newPosition = 0
      var imageDiv = innerDiv.getElementsByTagName('div')[0]
      var aHrefs = imageDiv.getElementsByTagName('a')

      if(maxoSlider.objects[objectNumber].typeOfEfect == 'top'){
        for(x=0;x<aHrefs.length;x++)
          aHrefs[x].style.top = ((-0.9)*newPosition)+'px';
      } else if(maxoSlider.objects[objectNumber].typeOfEfect == 'left'){
        for(x=0;x<aHrefs.length;x++){
          var hrefPosition = (5*(newPosition*0.96))
          aHrefs[x].style.left = hrefPosition+'px'
        }
      } else if(maxoSlider.objects[objectNumber].typeOfEfect == 'right'){
        for(x=0;x<aHrefs.length;x++){
          var hrefPosition = -(5*(newPosition*0.96))
          aHrefs[x].style.left = hrefPosition+'px'
        }
      }
      setTimeout("maxoSlider.showContentContinue("+objectNumber+","+newPosition+")",50)
    } else {
      var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]
      var imageDiv = innerDiv.getElementsByTagName('div')[0]
      var aHrefs = imageDiv.getElementsByTagName('a')

      maxoSlider.objects[objectNumber].loading = false
      maxoSlider.objects[objectNumber].efecting = false
      for(x=0;x<aHrefs.length;x++)
        aHrefs[x].style.position = ''
    }
  },
  showContent:function(objectNumber,sectionNumber,itemNumber,itemsCount,preload){
    // gets new content into slider
    if((maxoSlider.loadedImagesNumber==maxoSlider.neededImagesNumber && preload && !maxoSlider.objects[objectNumber].efecting) || (!maxoSlider.objects[objectNumber].efecting && !preload)){
      if(preload){
        maxoSlider.hideActualContent(objectNumber,true)
      }

      var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]
      var nextHref = maxoSlider.getElementsByClassName('next',innerDiv)[0]

      var imageDiv = document.createElement('div')
      imageDiv.className = 'images'
      imageDiv.zIndex = 5
      var spanUzavirac = document.createElement('span')
      spanUzavirac.className = 'uzavirac'
      innerDiv.appendChild(spanUzavirac)
      
      for(x=itemNumber;x<itemNumber+itemsCount;x++){
        var aHref = document.createElement('a')
        aHref.style.position = 'relative'
        if(maxoSlider.objects[objectNumber].typeOfEfect == 'top'){
          aHref.style.top = '-90px';
        } else if(maxoSlider.objects[objectNumber].typeOfEfect == 'left'){
          aHref.style.left = '500px';
        } else if(maxoSlider.objects[objectNumber].typeOfEfect == 'right'){
          aHref.style.left = '-500px';
        }
        if(x==itemNumber) aHref.className = 'active'
        aHref.title = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[x].title
        aHref.href = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[x].href
        var imgInHref = document.createElement('img')
        imgInHref.alt = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[x].title
        imgInHref.src = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[x].thumb
        aHref.appendChild(imgInHref)
        imageDiv.appendChild(aHref)
        maxoSlider.addEvent(aHref,'mouseover',maxoSlider.mouseOver,false)
        var paragraph = document.createElement('p')
        if(x!=itemNumber) paragraph.style.display = 'none'
        innerDiv.appendChild(paragraph)
        paragraph.innerHTML = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[x].description
      }
      
      innerDiv.insertBefore(imageDiv,nextHref)

      maxoSlider.objects[objectNumber].actualContent = itemNumber;
      maxoSlider.objects[objectNumber].actualSection = sectionNumber;
      maxoSlider.objects[objectNumber].efecting = true

      setTimeout("maxoSlider.showContentContinue("+objectNumber+",100)",1)
    } else {
      setTimeout("maxoSlider.showContent("+objectNumber+","+sectionNumber+","+itemNumber+","+itemsCount+","+preload+")",50)
    }
    return
  },
  hideContentContinue:function(objectNumber,position){
    if(position<100){
      var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]

      posun = Math.abs(Math.round((position) / 3))
      if(posun<5) posun = 5
      var newPosition = position + posun
      var imageDiv = innerDiv.getElementsByTagName('div')[0]
      var aHrefs = imageDiv.getElementsByTagName('a')
        
      if(maxoSlider.objects[objectNumber].typeOfEfect == 'top'){
        for(x=0;x<aHrefs.length;x++)
          aHrefs[x].style.top = ((-0.9)*newPosition)+'px';
      } else if(maxoSlider.objects[objectNumber].typeOfEfect == 'left'){
        for(x=0;x<aHrefs.length;x++){
          var hrefPosition = -(5*newPosition)
          aHrefs[x].style.left = hrefPosition+'px'
        }
      } else if(maxoSlider.objects[objectNumber].typeOfEfect == 'right'){
        for(x=0;x<aHrefs.length;x++){
          var hrefPosition = (5*newPosition)
          aHrefs[x].style.left = hrefPosition+'px'
        }
      }

      setTimeout("maxoSlider.hideContentContinue("+objectNumber+","+newPosition+")",50)
    } else {
      var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]
      var descriptions = innerDiv.getElementsByTagName('p')

      for(y=0;y<descriptions.length;y++){
        innerDiv.removeChild(descriptions[y])
        y--
      }
      var spanUzavirace = maxoSlider.getElementsByClassName('uzavirac',innerDiv)
      for(x=0;x<spanUzavirace.length;x++){
        if(spanUzavirace[x].parentNode!=innerDiv) continue
        var spanUzavirac = spanUzavirace[x]
      }
      innerDiv.removeChild(innerDiv.getElementsByTagName('div')[0])
      innerDiv.removeChild(spanUzavirac)
      
      maxoSlider.objects[objectNumber].loading = true
      maxoSlider.objects[objectNumber].efecting = false
    }
  },
  hideActualContent:function(objectNumber,preload){
    // hides actual content in slider
    var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]
    if(!maxoSlider.objects[objectNumber].loading && !preload){
      if(!maxoSlider.objects[objectNumber].efecting){
        var aHrefs = innerDiv.getElementsByTagName('div')[0].getElementsByTagName('a')
        for(x=0;x<aHrefs.length;x++)
          aHrefs[x].style.position = 'relative'

        maxoSlider.objects[objectNumber].efecting = true
        
        setTimeout("maxoSlider.hideContentContinue("+objectNumber+",0)",1)
      } else {
        //setTimeout("maxoSlider.hideActualContent("+objectNumber+","+preload+")",50)
      }
    } else {
      var imgs = innerDiv.getElementsByTagName('img')
      var brs = innerDiv.getElementsByTagName('br')
      for(y=0;y<imgs.length;y++){
        if(imgs[y].alt!='loading...') continue
        innerDiv.removeChild(imgs[y])
        y--
      }
      for(y=0;y<brs.length;y++){
        if(brs[y].parentNode!=innerDiv) continue
        innerDiv.removeChild(brs[y])
        y--
      }
    }
    return
  },
  imageLoader: document.createElement('img'),
  showLoader:function(objectNumber){
    // hides actual content in slider
    if(!maxoSlider.objects[objectNumber].efecting){
      if(maxoSlider.objects[objectNumber].loading){
          var innerDiv = maxoSlider.objects[objectNumber].getElementsByTagName('div')[0]
          var nextHref = maxoSlider.getElementsByClassName('next',innerDiv)[0]
          innerDiv.insertBefore(document.createElement('br'),nextHref)
          innerDiv.insertBefore(document.createElement('br'),nextHref)
          maxoSlider.imageLoader = document.createElement('img')
          maxoSlider.imageLoader.src = 'http://cssimages.maxo.cz/images/preloader.gif'
          maxoSlider.imageLoader.alt = 'loading...'
          maxoSlider.imageLoader.className = 'preloader'
          innerDiv.insertBefore(maxoSlider.imageLoader,nextHref)
          innerDiv.insertBefore(document.createElement('br'),nextHref)
          innerDiv.insertBefore(document.createElement('br'),nextHref)
          innerDiv.insertBefore(document.createElement('br'),nextHref)
      }
    } else {
      setTimeout("maxoSlider.showLoader("+objectNumber+")",50)
    }
    return
  },
  imagesToPreload: false,
  loadedImagesNumber: 0,
  neededImagesNumber: 0,
  nextLoadedImage:function(){
    maxoSlider.loadedImagesNumber++
  },
  imagesPreload:function(objectNumber,sectionNumber,itemNumber,itemsCount,preload){
    //preloads images
    maxoSlider.imagesToPreload = new Array()
    maxoSlider.loadedImagesNumber = 0
    maxoSlider.neededImagesNumber = itemsCount
    for(x=itemNumber;x<itemNumber+itemsCount;x++){
      maxoSlider.imagesToPreload[maxoSlider.imagesToPreload.length++] = document.createElement('img')
      if(!preload)
        maxoSlider.addEvent(maxoSlider.imagesToPreload[maxoSlider.imagesToPreload.length-1],'load',maxoSlider.nextLoadedImage,false)
      maxoSlider.imagesToPreload[maxoSlider.imagesToPreload.length-1].src = maxoSlider.objects[objectNumber].loadedContent[sectionNumber].objects[x].thumb
    }
    return
  }
}