var acceleration = 1.5;
var imageloading = false;
var mouseovernext = false;
var mouseoverprev = false;

function nextItemMouseOver(id)
{
  mouseovernext = true;
  window.setTimeout("nextItemMouseOverLoop("+id+")", 200);
}

function nextItemMouseOverLoop(id)
{
  if(mouseovernext) {
    nextItem(id);
    window.setTimeout("nextItemMouseOverLoop("+id+")", 2000);
  }
}

function prevItemMouseOver(id)
{
  mouseoverprev = true;
  window.setTimeout("prevItemMouseOverLoop("+id+")", 200);
}

function prevItemMouseOverLoop(id)
{
  if(mouseoverprev) {
    previousItem(id);
    window.setTimeout("prevItemMouseOverLoop("+id+")", 2000);
  }
}

function movePrev(data)
{
  var acc = acceleration * -1;
  var div = document.getElementById("item-wrapper");
  var nodes = div.getElementsByTagName("img");

  var newEl = createElement(data["href"], data["filename"], data["name"], data["width"], data["height"]);
  newEl.style.left = String(-parseInt(div.offsetWidth) + nodes[0].offsetWidth)+"px";

  div.insertBefore(newEl, nodes[0].parentNode);
  setTimeout("moveLoop("+acc+",0,1)", 1);
}

function moveNext(data)
{
  var acc = acceleration;
  var div = document.getElementById("item-wrapper");
  var nodes = div.getElementsByTagName("img");

  var newEl = createElement(data["href"], data["filename"], data["name"], data["width"], data["height"]);
  newEl.style.left = String(2*parseInt(div.offsetWidth) - nodes[1].offsetWidth - parseInt(newEl.firstChild.style.width))+"px";

  div.appendChild(newEl);
  setTimeout("moveLoop("+acc+",0,1)", 1);
}

function createElement(href, src, name, width, height)
{
  var newA = document.createElement("a");
  newA.setAttribute("href", href);
  newA.style.position = "absolute";

  var newImg = document.createElement("img");
  newImg.setAttribute("name", name);
  newImg.setAttribute("src", src);

  newImg.style.height = String(height)+"px";
  newImg.style.width = String(width)+"px";

  newA.appendChild(newImg);

  return newA;
}

function moveLoop(acc, vel, interval)
{
  var dx = Math.round(vel*interval);
  var div = document.getElementById("item-wrapper");
  var anc = div.getElementsByTagName("a");
  var img = div.getElementsByTagName("img");

  if(acc > 0) {
    var left = 1;
    var desc = 0;
    var sign = 1;
  } else {
    var left = 0;
    var desc = 2;
    var sign = -1;
  }

  if((anc[left].offsetLeft - dx)*sign < 0) {
    dx = anc[left].offsetLeft;
  }


  for(i=0;i<anc.length;i++) {
    anc[i].style.left = String(anc[i].offsetLeft - dx)+"px";
  }

  if(anc[left].offsetLeft < parseInt(img[desc].offsetWidth/2)) {
    vel -= acc*interval*sign;
  } else {
    vel += acc*interval*sign;
  }

  interval = Math.max(1,Math.round(1/vel));

  if(anc[left].offsetLeft*sign > 0) {
    setTimeout("moveLoop("+acc+","+vel+","+interval+")", interval);
  } else {
    div.removeChild(anc[desc]);
    imageloading = false;
  }
}

var cache = new Array();

function getTags(order)
{
  var nextTags = new Array();
  var prevTags = new Array();

  nextTags['a'] = document.getElementById('item-wrapper').getElementsByTagName("a")[1];
  nextTags['img'] = nextTags['a'].getElementsByTagName('img')[0];

  prevTags['a'] = document.getElementById('item-wrapper').getElementsByTagName("a")[0];
  prevTags['img'] = prevTags['a'].getElementsByTagName('img')[0];

  if(order=="next") {
    return new Array(prevTags, nextTags);
  }

  return new Array(nextTags, prevTags);
}

function nextItem(id)
{
  var tags = getTags("next");
  var num = parseInt(tags[1]['img'].name) + 1;

  requestNewPicture(id, num, tags, "next");
}

function previousItem(id)
{
  var tags = getTags("prev");
  var num = parseInt(tags[1]['img'].name) - 1;

  requestNewPicture(id, num, tags, "prev");
}

function requestNewPicture(id, num, tags, direction)
{
		if(imageloading) {
		  return;
		}
		imageloading = true;

  if('undefined' != (typeof cache[num])) {
    cache[num]['name'] = 2*parseInt(tags[1]['img'].name) - parseInt(tags[0]['img'].name);
    if(direction == "next") {
      moveNext(cache[num]);
    } else {
      movePrev(cache[num]);
    }
    return;
  }

  var url = '/ajax/item/relateditem/id/' + id + '/num/' + num;
  var params = new Array();
  params["tags"] = tags;
  params["direction"] = direction;

  request(url, 'get', '', updateThumbnailsCallback, params);
}

function updateThumbnailsCallback(req, params)
{
  if(req.responseText == "NULL") {
    return;
  }

  eval("data=" + req.responseText);
  data["name"] =  2*parseInt(params["tags"][1]['img'].name) - parseInt(params["tags"][0]['img'].name);
  cache[data['name']] = data;

  if(params["direction"] == "next") {
    moveNext(data);
  } else {
    movePrev(data);
  }
}

function vote(rating, id)
{
  if(window.locked) {
    return false;
  }

  window.locked = true;

  var qs = 'rating='+rating+'&id='+id;
  request('/ajax/item/add-rating/', 'POST', qs, onVoteComplete, id);

  return false;
}

function onVoteComplete(req, id)
{
  var data = eval('('+req.responseText+')');

  if(!data.vote_average) {
    return;
  }

  node = document.getElementById('vote_count');
  node.innerHTML = data.vote_count + " abgegebene Stimmen";

  node = document.getElementById('vote_average');
  node.innerHTML = data.vote_average;

  node = document.getElementById('vote').getElementsByTagName('fieldset')[0];

  node.style.fontWeight = "bold";
  node.style.fontSize = "10pt";
  node.innerHTML = "Vielen Dank für deine Bewertung!";

  window.setTimeout('clearStatus()', 3000);
}

function clearStatus()
{
  document.getElementById('vote').style.display = "none";
}

function quote(id)
{
  request('/ajax/item/quoteComment/comment_id/'+id, 'POST', '', onQuoteComplete);
  return false;
}

function onQuoteComplete(req)
{
  var data = eval('('+req.responseText+')');
  document.getElementById("form-text").value = "[quote from=\""+data.username+"\"]\n"+data.text+"\n[/quote]\n";
  document.getElementById("form-text").focus();
}

function toggleNotice()
{
  var div = document.getElementById("comment_notice");
  if(div.style.display != "none") {
    div.style.display = "none";
  } else {
    div.style.display = "block";
  }
}

function ajaxAddComment(itemId)
{
	showLoadingIcon();
	var text = document.getElementById('write_comment').getElementsByTagName('textarea')[0].value;
	request('/ajax/item/add-comment/item_id/'+itemId, 'POST', 'text='+encodeURI(text), ajaxAddCommentCallback, 'comments');
}

function ajaxAddCommentCallback(req, id)
{
	hideLoadingIcon();
	
  if(req.responseText == "NULL") {
    return;
  }
  
  eval(req.responseText);
  
  if(showMessageBox == true) {
  	messagebox(message);
  } else {
  	document.getElementById('write_comment').getElementsByTagName('textarea')[0].value = "";
  	document.getElementById(id).innerHTML = content;
  }
}