var slider;
var UTILS = {
  argItems: function(theArgName) {
    var sArgs = location.search.slice(1).split('&');
    var r = '';
    for (var i = 0; i < sArgs.length; i++) {
      if (sArgs[i].slice(0, sArgs[i].indexOf('=')) == theArgName) {
        r = sArgs[i].slice(sArgs[i].indexOf('=') + 1);
        break;
      }
    }
    return (r.length > 0 ? unescape(r).split(',') : '')
  },

  updateScrollbar: function(scrollBox, scrollBar, scbarHandle, scbarTrack, slider, wheelTarget) {

    // IE bug - if get these values after adjusting the marginRight, it gives zero values !
    var sBoxOffsetHeight = scrollBox.offsetHeight;
    var sBoxScrollHeight = scrollBox.scrollHeight;

    if (!scrollBox || !sBoxOffsetHeight) {
      return;
    }

    var handleHt = scrollBox.offsetHeight * scrollBox.offsetHeight / scrollBox.scrollHeight;
    scbarHandle.style.height = handleHt + 'px';

    if (handleHt <= 10)
      scbarHandle.addClassName('flat');
    else
      scbarHandle.removeClassName('flat');
    var margRight = '0';
    if (handleHt < scrollBox.offsetHeight)
      margRight = '10px';


    scrollBox.style.marginRight = margRight;

    if (sBoxScrollHeight <= sBoxOffsetHeight) {
      scrollBar.hide();
      if (slider) {
        slider.setValue(0);
      }
      return;
    }

    if (!scrollBar.visible()) {
      scrollBar.show();
      if (slider) {
        slider.setValue(0);
      }
    }

    // vertical slider control
    if (!slider) {
      slider = new Control.Slider(scbarHandle, scbarTrack, {
        axis: 'vertical',
        onSlide: function(v) {
          scrollVertical(v, slider.scrollBox, slider);
        },
        onChange: function(v) {
          scrollVertical(v, slider.scrollBox, slider);
        }
      });
      slider.scrollBox = scrollBox;

      // Sliders in yoodget must be disabled if mouseup is performed after mouse has left the yoodget
      if ('yoodget' in window) {
        window.yoodget.wrapper.sliderCheck(slider);
      }

      // Slider in sidebar must be disabled if mouseup is performed after mouse has left the sidebar
      if (('ynSidebar' in window) && ('YEXTIF' in window.ynSidebar)) {
        var sbC
        if (!Prototype.Browser.IE)
          sbC = window.ynSidebar.YEXTIF.execFct('getSidebarContainer');
        if (!sbC) sbC = window;

        Event.observe(sbC, 'mouseout', function(evt) {
          var target = Event.element(evt);
          if ((sbC == target) && slider.dragging && slider.active) {
            slider.finishDrag(evt, true);
          }
        }, true);
      }

      if (Prototype.Browser.IE)
        Event.observe(wheelTarget.document, 'mousewheel', function(evt) {
          UTILS.wheeling(evt, slider)
        }, false);
      else
        Event.observe(wheelTarget, 'DOMMouseScroll', function(evt) {
          UTILS.wheeling(evt, slider)
        }, false);
    } else {
      slider.scrollBox = scrollBox;
      slider.handleLength = handleHt;
      slider.trackLength = scbarTrack.scrollHeight;
      slider.setValue(slider.value);
    }
    slider.scrollBar = scrollBar;

  	// scroll the element vertically based on its height and the slider maximum value
    function scrollVertical(value, element, slider) {
      element.scrollTop = Math.round(value / slider.maximum * (element.scrollHeight - element.offsetHeight));
    }
    return slider;
  },

  wheeling : function(evt, slider) {
    if (!slider) return;
    var elt = Event.element(evt);
    if ((elt != slider.scrollBox) && !Element.descendantOf(elt, slider.scrollBox)
            && !Element.descendantOf(elt, slider.scrollBar)) return;
    var direction;
    if (Prototype.Browser.IE) {
      direction = 0 - evt.wheelDelta / 120;
    } else {
      direction = evt.detail / 3;
    }

    // step - percentage / 100 (0.1 = 10% of height scrolled)
    var step = slider.handleLength / (3 * slider.trackLength);
    var val = direction * step;
    slider.setValueBy(val);
    Event.stop(evt);
    return false;
  },

  init : function() {
    var play = false;
    var currentImgElt = null;
    if(!document.all) {
      document.body.addClassName('notie');
    } else {
      var toto  = $(document.body);
    }
    if('indiceMenu' in window) {
      var menu = $('menu_' + indiceMenu);
      if(menu) menu.addClassName('menu-selected');
    }

    if(UTILS.isCookieSet('realisation_autoplay', true)) {
      play = true;
      document.body.addClassName('play');
    } else {
      document.body.addClassName('pause');
    }
    var scrollableElt = $('scrollable');
    try {
      slider = UTILS.updateScrollbar($('scrollable'), $('scbar'), $('scbarHandle'), $('scbarTrack'),null, window);
      var pos = UTILS.argItems('s')[0];
      if(pos && slider) {
        slider.setValue(pos);
      }
      var img = UTILS.argItems('i')[0];
      if(!img) {
        var pathElts = document.location.pathname.split('/');
        var file = decodeURIComponent(pathElts.pop());
        img = file.substr(0, file.length - 6);
        img = img.replace(/[ \.]/g, '_');
      }
      if(img) {
        currentImgElt = $(img);
        if(currentImgElt) {
          var h = scrollableElt.scrollHeight - currentImgElt.clientHeight;
          var y = currentImgElt.positionedOffset()[1];
          var scrollValue = y / h;
          if(slider)
            slider.setValue(scrollValue);
          currentImgElt.addClassName('selected');
        }
      }
    } catch(e) {}
    $('gauche').style.visibility = 'visible';
    var imageElt = $('image');
    if(imageElt)
    imageElt.style.visibility = 'visible';
    if(!document.all) {
      new Effect.Opacity('gauche', { from: 0, to: 1, duration: 0.3 });
      new Effect.Opacity(imageElt, { from: 0, to: 1, duration: 0.3 });
    } else {
    }
    if(play) {
      UTILS.playCpt = 8;
      $('auto').innerHTML = UTILS.playCpt;
      UTILS.playTimer = setTimeout(function() {UTILS.nextPic(currentImgElt)}, 1000);
    }

  },

  showImg : function (evt, img) {
    if(evt)
      Event.stop(evt);
    //document.location = '/realisations/test.shtml?s=' + slider.value;
    //document.location = '/realisations/' + img + '.shtml?i=' + encodeURIComponent(img);
    var dir = document.location.href;
    var dirBits = dir.split('/');
    dirBits[dirBits.length-1] = img + '.shtml';
    document.location = dirBits.join('/');
  },

  // next Picture
  nextPic : function(currentImgElt) {
    if(UTILS.playCpt != 1) {
      UTILS.playCpt --;
      $('auto').innerHTML = UTILS.playCpt;
      UTILS.playTimer = setTimeout(function() {UTILS.nextPic(currentImgElt)}, 1000);
      return;
    }
    $('auto').innerHTML = '0';
    var nextPic = null;
    if(!currentImgElt) {
      // Is there one selected ?
      currentImgElt = UTILS.getSelectedPic();
      if(!currentImgElt) {
        pics = $('scrollable').getElementsByTagName('IMG');
        if(pics && pics[0]) {
          nextPic = pics[0];
        } else {
          return;
        }
      } else {
        var picParent = $(currentImgElt.parentNode);
        var nextParent = picParent.next('A');
        if(nextParent)
          nextPic = nextParent.firstDescendant();
      }
    } else {
      var picParent = $(currentImgElt.parentNode);
      var nextParent = picParent.next('A');
      if(nextParent)
        nextPic = nextParent.firstDescendant();
    }

    if(! nextPic) {
      UTILS.next();
    } else {
      var nom = nextPic.readAttribute('nom');
      UTILS.showImg(null, nom);
    }
  },

  getSelectedPic : function() {
    var result = null;
    var selected = $('scrollable').select('.vignette.selected');
    if(selected && selected[0]) result = selected[0];
    return(result);
  },

  // next gallery
  next : function() {
    var galerie = $('galerie');
    var indice = parseInt(galerie.readAttribute('indice')) + 1;
    var next = $('menu_' + indice);
    if(!next)
      next = $('menu_1');
    var url = next.readAttribute('href');
    document.location = url;
  },

  // previous gallery
  previous : function() {
    var galerie = $('galerie');
    var indice = parseInt(galerie.readAttribute('indice')) - 1;
    var previous = null;
    if(0 == indice) {
      var lesMenus = $('menus');
      var lesLiens = lesMenus.getElementsByTagName('A');
      previous = lesLiens[lesLiens.length - 1];

    } else {
      previous = $('menu_' + indice);
    }

    var url = previous.readAttribute('href');
    document.location = url;
  },

  togglePlay : function (name) {
    if(UTILS.isCookieSet('realisation_autoplay', true)) {
      clearTimeout(UTILS.playTimer);
      UTILS.delCookie('realisation_autoplay');
      $('auto').innerHTML = '';
      document.body.removeClassName('play');
      document.body.addClassName('pause');
    } else {
      document.body.removeClassName('pause');
      document.body.addClassName('play');
      UTILS.setCookie('realisation_autoplay', true, null, '/');
      UTILS.playCpt = 1;
      UTILS.playTimer = setTimeout(function() {UTILS.nextPic(null)}, 500);
    }
  },

  isCookieSet : function (name, value) {
    var result = true;
    if(document.cookie.indexOf(name + "=" + value) == -1) {
      result = false;
    }
    return(result);
  },

  setCookie : function (name,value,expires,path,domain,secure) {
    document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "; path=") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
  },
  delCookie : function (name) {
    UTILS.setCookie(name, '', new Date(), '/') ;
  }
}

