var timer;

function updateSearchTotal(data, xhr)
{
  for (var i=0; i < xhr.args.target.length; i++)
  {
    dojo.byId(xhr.args.target[i]).innerHTML = data;
  }

  hideLoadingMessage();
}

function delayedUpdateSearchTotal () {
  clearTimeout(timer);
  timer = setTimeout("requestUpdateSearchTotal('"+this.formName+"',true);", 2000); // 2 seconds
}

function showLoadingMessage()
{
  dojo.byId('loadingMessage').style.display = 'block';
  if(dojo.byId('loadingTopMessage')) dojo.byId('loadingTopMessage').style.display = 'block';
  
  dojo.byId('foundMessage').style.display = 'none';
  if(dojo.byId('foundTopMessage')) dojo.byId('foundTopMessage').style.display = 'none';
}

function hideLoadingMessage()
{
  dojo.byId('loadingMessage').style.display = 'none';
  if(dojo.byId('loadingTopMessage')) dojo.byId('loadingTopMessage').style.display = 'none';

  dojo.byId('foundMessage').style.display = 'inline';
  if(dojo.byId('foundTopMessage')) dojo.byId('foundTopMessage').style.display = 'inline';
}


function requestUpdateSearchTotal(formToUpdate,usePost)
{
  if (usePost === undefined) usePost = false;
  
  if (typeof formToUpdate == "undefined" || typeof formToUpdate == "object")
  {
    var form = dojo.byId(this.formName);
  }
  else
  {
    var form = dojo.byId(formToUpdate);
  }

  showLoadingMessage();

  if (usePost) 
  {
    dojo.xhrPost({
    	url: form.updateLink,
    	form: form,
    	target: form.totalNames,
    	load: updateSearchTotal
    });
  } else {
    dojo.xhrGet({
    	url: form.updateLink,
    	form: form,
    	target: form.totalNames,
    	load: updateSearchTotal
    });
  }
}

function buildInputUpdater(updateLink, formName, totalNames)
{
  dojo.byId(formName).totalNames = new Array();
  for (var i=0; i < totalNames.length; i++)
  {
    dojo.byId(formName).totalNames[i] = totalNames[i];
  }
  dojo.byId(formName).updateLink = updateLink;

  var inputs = dojo.byId(formName).getElementsByTagName("INPUT");
  for(var i = 0; i < inputs.length; ++i)
  {
    inputs[i].formName = formName;
    dojo.connect(inputs[i], "onclick", delayedUpdateSearchTotal);
    inputs[i].forcechange = delayedUpdateSearchTotal;
  }

  var inputs = dojo.byId(formName).getElementsByTagName("SELECT");
  for(var i = 0; i < inputs.length; ++i)
  {
    inputs[i].formName = formName;
    dojo.connect(inputs[i], "onclick", delayedUpdateSearchTotal);
  }
}

function sliderUpdate(e, setSelector)
{
  var count = this.slider.count;

  if(e)
  {
    var pos = dojo.coords(this);
    var posx = (e.pageX) ? e.pageX - pos.x : e.offsetX;

    count = Math.floor((posx - this.slider.offset) / (this.slider.size / 10)) + 1;
    if (count > 10) count = 10;
    if (count < 0) count = 0;
  }

  var size = ((count * (this.slider.size / 10)) + this.slider.offset)  + 'px';

  this.slider.indicator.style.width = size;
  this.slider.display.innerHTML = (count);

  if (setSelector)
  {
    this.slider.count = count;
    this.slider.selector.style.left = size;
    this.slider.input.value = (count / 2);
  }
}

function sliderReset(e)
{
  if (!e) var e = window.event;
  var originalTarget;
  if (dojo.isIE) {
     originalTarget = e.srcElement;
  }
  else {
    originalTarget = e.originalTarget;
  }

  if (this.id == originalTarget.id)
  {
	this.update(null, false);
  }
}

function sliderHover(e)
{
  if (!e) var e = window.event;
  this.update(e, false);
}

function sliderSelect(e)
{
  if (!e) var e = window.event;
  this.update(e, true);
  this.change();
}

function buildSliderControl(formName, sliderName, indicatorName, selectorName, displayName, inputName, offset, size)
{
  selector = dojo.byId(sliderName);
  selector.slider = new Array();
  selector.slider.offset = offset;
  selector.slider.size = size;
  selector.slider.indicator = dojo.byId(indicatorName);
  selector.slider.selector = dojo.byId(selectorName);
  selector.slider.display = dojo.byId(displayName);
  selector.slider.input = dojo.byId(inputName);
  selector.slider.count = 0;

  selector.formName = formName;
  selector.change = delayedUpdateSearchTotal;

  selector.update = sliderUpdate;

  selector.onmousemove = sliderHover;
  selector.onmouseout = sliderReset;
  selector.onclick = sliderSelect;
}

function updateSoortSlider(slider)
{
	slider.display.left.className = (slider.display.index <= 0) ? "control disabled" : "control";
	slider.display.right.className = ((slider.display.index + slider.display.count) >= slider.display.limit) ? "control disabled" : "control";

	for(var i = 0; i < slider.display.limit; ++i)
	{
		slider.display.tags[i].className = (slider.display.tags[i].link.checked) ? "selected" : "";
		slider.display.tags[i].style.display = ((i >= slider.display.index) && (i < slider.display.index + slider.display.count)) ? "block" : "none";
	}
}

function slideSoortRight()
{
	if ((this.slider.display.index + this.slider.display.count) >= this.slider.display.limit)
		return;

	++this.slider.display.index;
	updateSoortSlider(this.slider);
}

function slideSoortLeft()
{
	if (this.slider.display.index <= 0)
		return;

	--this.slider.display.index;
	updateSoortSlider(this.slider);
}

function toggleSoortCheckbox()
{
	this.link.click();
}

function toggleSoortByCheckbox()
{
	this.link.className = (this.checked) ? "selected" : "";
}

function buildSoortSlider(sliderName, checklistName, displaycount, leftbuttonName, rightbuttonName)
{
	var slider = dojo.byId(sliderName);
	slider.display = new Array();
	slider.display.index = 0;
	slider.display.count = displaycount;
	slider.display.left = dojo.byId(leftbuttonName);
	slider.display.right = dojo.byId(rightbuttonName);

	var checks = dojo.byId(checklistName).getElementsByTagName("INPUT");
	slider.display.tags = slider.getElementsByTagName("LI");
	slider.display.limit = slider.display.tags.length;

	slider.display.left.onclick = slideSoortLeft;
	slider.display.left.slider = slider;
	slider.display.right.onclick = slideSoortRight;
	slider.display.right.slider = slider;

	for(var i = 0; i < slider.display.limit; ++i)
	{
		slider.display.tags[i].link = checks[i];
		slider.display.tags[i].onclick = toggleSoortCheckbox;

		checks[i].link = slider.display.tags[i];
		dojo.connect(checks[i], "onchange", toggleSoortByCheckbox);
	}

	updateSoortSlider(slider);
}
