addLoadListener(initSliders);

function initSliders() {
  var sliderReplacements = getElementsByAttribute("class", "slider");
  for (var i = 0; i < sliderReplacements.length; i++) {
    var container = document.createElement("div");
    var slider = document.createElement("div");
    var newInput = document.createElement("input");
    var sliderReplacementID = sliderReplacements[i].getAttribute("id");
    if (sliderReplacementID != null || sliderReplacementID != "") {
      container.setAttribute("id", sliderReplacementID + "SliderContainer");
    }

    container.className = "slidercontainer";
    slider.className = "sliderwidget";
    slider.style.left = sliderReplacements[i].getAttribute("value") + "px";
    slider.valueX = parseInt(sliderReplacements[i].getAttribute("value"), 10);

    try {
      newInput.setAttribute("id", sliderReplacements[i].getAttribute("id"));
      newInput.setAttribute("name", sliderReplacements[i].getAttribute("name"));
      newInput.setAttribute("type", "hidden");
      newInput.setAttribute("value", sliderReplacements[i].getAttribute("value"));
    }
    catch(error) {
      return false;
    }
    container.appendChild(slider);
    sliderReplacements[i].parentNode.insertBefore(container, sliderReplacements[i]);
    sliderReplacements[i].parentNode.replaceChild(newInput, sliderReplacements[i]);

    container.input = newInput;

    addEvent(slider, "mousedown", mousedownSlider, false);
  }

  return true;
}

function mousedownSlider(event) {
  if (typeof event == "undefined") {
    event = window.event;
  }
  var target = getEventTarget(event);

  while (!/(^| )sliderwidget( |$)/.test(target.className)) {
    target = target.parentNode;
  }

  document.currentSlider = target;
  target.originX = event.clientX;

  addEvent(document, "mousemove", mousemoveSlider, false);
  addEvent(document, "mouseup", mouseupSlider, false);

  stopDefaultAction(event);
  return true;
}

function mousemoveSlider(event) {
  if (typeof event == "undefined") {
    event = window.event;
  }

  var slider = document.currentSlider;
  var sliderLeft = slider.valueX;
  var increment = 10;

  if (isNaN(sliderLeft)) {
    sliderLeft = 0;
  }

  sliderLeft += event.clientX - slider.originX;

  if (sliderLeft < 10) {
    sliderLeft = 10;
  } else if (sliderLeft > (slider.parentNode.offsetWidth - slider.offsetWidth)-10) {
    sliderLeft = slider.parentNode.offsetWidth - slider.offsetWidth-10;
  } else {
    slider.originX = event.clientX;
  }
  slider.style.left = Math.round(sliderLeft / increment) * increment + "px";
  slider.parentNode.input.setAttribute("value", Math.round(sliderLeft / increment) * increment-10);
  slider.valueX = sliderLeft;

  stopDefaultAction(event);
  return true;
}

function mouseupSlider() {
  detachEventListener(document, "mousemove", mousemoveSlider, false);
  detachEventListener(document, "mouseup", mouseupSlider, false);
  return true;
}