var root = 0;
var result = "";

function initTreeMenu() {
  renderTree(tree);
}

function setTree(t) {
  tree = t;
}

function TreeMenu() {
  this.id = Math.random();
  this.folders = new Array();
  this.hideRoot = true;

  this.addFolder = function(folder) {
     try {
       this.folders.push(folder);
       this.getFolderById(folder.parent_id).children.push(folder);
     } catch(e) {}
  }

  this.addRoot = function(folder) {
    this.folders.push(folder);
    this.root = folder;

    root = folder.level;
  }

  this.hasRoot = function() {
    return this.root != null;
  }

  this.getFolderById = function(id) {
    for(var i = 0; i < this.folders.length; i++) {
      if(this.folders[i].id == id) {
        return this.folders[i];
      }
    }
    return null;
  }

  this.reset = function() {
    tree = null;
    result = "";
    renderTree(this);
  }
}

function renderTree(t) {
  try {
    result = "";
    if(t.hasRoot()) {
      t.root.expanded = true;
      buildTree(t.root);
    }

    $("treemenu").innerHTML = result;
  } catch(err) {}
}

function Folder(id, parent_id, name, level, type) {
  this.id = id;
  this.parent_id = parent_id;
  this.name = name;
  this.children = new Array();
  this.level = level;
  this.type = type;
  this.expanded = false;

  this.toggle = function() {
    this.expanded = !this.expanded;
    storeTreeMenuState();
    renderTree(tree);
  }

  this.expand = function() {
    this.expanded = true;
    storeTreeMenuState();
    renderTree(tree);
  }

  this.collapse = function() {
    this.expanded = false;
    storeTreeMenuState();
    renderTree(tree);
  }
}

function checkTree(folder) {
  alert(folder.name);

  if(folder.expanded) {
    for(var i = 0; i < folder.children.length; i++)  {
      checkTree(folder.children[i]);
    }
  }
}

function buildTree(folder) {
  result += '<table class="item"><tr>';
  x = t.hideRoot ? root : root-1;

  for(var i = x; i < folder.level; i++) {

    if(i == folder.level-1) {

      if(folder != tree.root && folder.children.length > 0) {
        if(folder.expanded)
          result += '<td class="s_l_e" onclick="tree.getFolderById('+folder.id+').toggle()"></td>';
        else
          result += '<td class="s_l_c" onclick="tree.getFolderById('+folder.id+').toggle()"></td>';
      } 
      else {
        result += '<td class="s"></td>';
      }
    }
    else {
      result += '<td class="s"></td>';
    }
  }

   class_type =  "level"+folder.level;

   if (folder.level > x) {

    if (folder.children.length > 0) {
        result += '<td class="'+class_type+'"><a  class="'+class_type+'" href="#" \
                      id="'+folder.id+'" \
                      onclick="tree.getFolderById('+folder.id+').expand();">'+folder.name+'</a></td>';
    }
    else {
     result += '<td class="'+class_type+'"><a  class="'+class_type+'" href="#" \
                      id="'+folder.id+'" \
                      onclick="setSearchValue(\'search_field_service\',\''+folder.name+'\')">'+folder.name+'</a></td>';
    }
  }

  result += '</tr></table>';

  if(folder.expanded) {
    for(var j = 0; j < folder.children.length; j++)  {
      buildTree(folder.children[j]);
    }
  }
}

function storeTreeMenuState() {
  state = "";
  for(var i = 0; i < tree.folders.length; i++) {
      state += tree.folders[i].id + ":" + tree.folders[i].expanded + ";";
  }
  state = state.substring(0,state.length-1);
  //setCookie(mycontroller + "TreeMenuState", state);
  setCookie("VapaalleTreeMenuState", state);
}

function restoreTreeMenuState() {
  //state = getCookie(mycontroller + "TreeMenuState");
  state = getCookie("VapaalleTreeMenuState");
  
  if(!state) return;
  states = state.split(";");
  for(var i = 0; i < states.length; i++) {
    id = states[i].substring(0,states[i].indexOf(":"));
    state = states[i].substring(states[i].indexOf(":")+1);
    if (tree.getFolderById(id))
      tree.getFolderById(id).expanded = state == "true" ? true : false;
  }
}

function setCookie(name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
  ((expires) ? "; expires=" + expires.toGMTString() : "") +
  ((path) ? "; path=" + path : "") +
  ((domain) ? "; domain=" + domain : "") +
  ((secure) ? "; secure" : "");
}

function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}

function getCookie(name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break;
  }
  return null;
}
