var categoriesInit = true;
var categoriesItemWidth = 78;
var categoriesItemsLeft = 0;
var categoriesMinItemsLeft = 0;
var categoriesCount = 0;
var categoriesOnScreen = 0;
var categoriesInterval = 0;
var categoriesItemsPos = 0;

function doToggleCategoriesNav(id, enabled) {
  var button = document.getElementById("categories-nav-" + id);
  if (enabled) {
    button.className = "";
  } else {
    button.className = "disabled";
  };
};

function doCategoriesScroll() {
  if (categoriesItemsPos != categoriesItemsLeft) {
    delta = Math.round(Math.sqrt(Math.abs(categoriesItemsPos - categoriesItemsLeft)));
    if (categoriesItemsPos < categoriesItemsLeft) {
      if (delta == 0) delta = 1;
    } else {
      if (delta == 0) delta = -1;
      else delta *= -1;
    };
    categoriesItemsPos += delta;
    var items = document.getElementById("categories-items");
    items.style.left = categoriesItemsPos + "px";
  } else {
    clearInterval(categoriesInterval);
    categoriesInterval = 0;
  };
};

function doStartCategoriesScroll() {
  if ((categoriesItemsPos != categoriesItemsLeft) && (categoriesInterval == 0)) {
    categoriesInterval = setInterval('doCategoriesScroll()', 20);
  };
}

function doCategoriesNav(direction) {
  var items = document.getElementById("categories-items");
  if (categoriesInit) {
    var o = items.getElementsByTagName("tr")[0];
    var tds = o.getElementsByTagName("td");
    
    categoriesCount = tds.length;
    if (categoriesCount > 0) {
      categoriesItemWidth = tds[0].getElementsByTagName("a")[0].offsetWidth;
      categoriesOnScreen = Math.round(document.getElementById("categories-window").offsetWidth / categoriesItemWidth);
      categoriesMinItemsLeft = categoriesCount - categoriesOnScreen;
    };
    categoriesInit = false;
  };

  var delta = 1;
  if (direction == "right") delta = -1;

  if (((delta < 0) && (categoriesItemsLeft > (- categoriesMinItemsLeft * categoriesItemWidth))) || ((delta > 0) && (categoriesItemsLeft < 0))) {
    categoriesItemsLeft += categoriesItemWidth * delta;
    doStartCategoriesScroll();
  };
  doToggleCategoriesNav('left', (categoriesItemsLeft < 0));
  doToggleCategoriesNav('right', (categoriesItemsLeft > (-categoriesMinItemsLeft * categoriesItemWidth)));
};







function findIndex(a, value){
  var ctr = "";
  for (var i=0; i < a.length; i++) {
    if (a[i] == value) {
      return i;
    }
  }
  return ctr;
};

function doUpDown(sender, delta) {
  var upDownTarget = undefined;
  var siblings = sender.parentNode.children;
  for(var i = 0; i < siblings.length; i++) {
    var cnames = siblings[i].className.split(' ');
    var idx = findIndex(cnames, 'updown-target');
    if (idx != "") {
      upDownTarget = siblings[i];
      break;
    };
  };
  if ((upDownTarget != undefined) && (upDownTarget.tagName.toUpperCase() == 'INPUT')) {
    var v = parseInt(upDownTarget.value);
    v+=delta;
    if (v >= 1) {
      upDownTarget.value = v.toFixed(0);
    };
  };
};

function doUp(sender) { 
  doUpDown(sender, 1);
};

function doDown(sender) { 
  doUpDown(sender, -1);
};


function makeSelectedCategoryVisible() {
  var table = document.getElementById("categories-items");
  var categories = table.getElementsByTagName("tr")[0].getElementsByTagName("td");
  var iSelectedPos = 0;
  categoriesCount = categories.length;
  if (categoriesCount > 0) {
    categoriesItemWidth = categories[0].getElementsByTagName("a")[0].offsetWidth;
    categoriesOnScreen = Math.round(document.getElementById("categories-window").offsetWidth / categoriesItemWidth);
    categoriesMinItemsLeft = categoriesCount - categoriesOnScreen;

    for(var i = 0; i < categories.length; i++) {
      if (categories[i].childNodes[0].className == "selected") {
        iSelectedPos = i;
        break;
      };
    };
    iSelectedPos++;
    if (iSelectedPos >= categories.length) {
      iSelectedPos--;
    };
    if (iSelectedPos >= categoriesOnScreen) {
      var scrollRightCount = iSelectedPos - categoriesOnScreen + 1;
      categoriesItemsLeft = -(scrollRightCount * categoriesItemWidth);
      categoriesItemsPos = categoriesItemsLeft;
      table.style.left = categoriesItemsPos + "px";
      doToggleCategoriesNav('left', (categoriesItemsLeft < 0));
      doToggleCategoriesNav('right', (categoriesItemsLeft > (-categoriesMinItemsLeft * categoriesItemWidth)));
    };
  };
};

initStack.push("makeSelectedCategoryVisible();");