/* copyright 2006-2008 FitLink.com */
var exercises = [];
var tasks = 0;
var task;

function add_item(ul,e) {
  var li = E('li');
  C(li,e);
  C(ul,li);
}
function store_exercises() {
  var str = '';
  for (var i=0; i<exercises.length; i++) {
    if (str!='') str = str + ',';
    str = str + exercises[i];
  }
  document.cookie = "exercises=" + str;
}
function remove_exercise(id, row) {
  row.parentNode.removeChild(row);
  for (var i=0; i<exercises.length; i++) {
    if (exercises[i]==id) {
      show('exercise_' + id);
      exercises.splice(i,1);
      break;
    }
  }
  if (exercises.length==0) exercise_disable();
  store_exercises();
}
function clear_exercises() {
  for (var i=0; i<exercises.length; i++) {
    show('exercise_' + exercises[i]);
  }
  exercises.length = 0;
  store_exercises();
  var node = $('selected');
  while ( node.hasChildNodes() ) {
    node.removeChild( node.firstChild );
  }
  exercise_disable();
}
function select_exercise(id,name,style) {
  if (array_contains(exercises,id)) return;
  if (window.location.search.indexOf("activity=")<0) hide('exercise_' + id);
  exercises.push(id);
  store_exercises();
  var li = E('li');
  li.className = style;
  li.innerHTML = "<a onclick='remove_exercise(" + id + ", this.parentNode); return false;'><img src='\/style\/blue\/button\/delete.jpg' alt='Delete' title='Delete "+ name +"'><\/a>" + name;
  $('selected').appendChild(li);
  exercise_enable();
}
function exercise_enable() {
  show('done','inline');
  show('clear');
  hide('exercise_help');
}
function exercise_disable() {
  hide('done');
  hide('clear');
  show('exercise_help');
}
function rename(node,prev,row) {
  A(node,'id','row' + row);
  replace('input',node,prev,row);
  replace('select',node,prev,row);
  replace('a',node,prev,row);
}
function replace(tag,node,prev,row) {
  var list = node.getElementsByTagName(tag);
  for (var i=0; i<list.length; i++) {
    var e = list.item(i);
    var attr = e.getAttribute('id');
    if (attr) {
      A(e,'id',attr.replace(prev,row));
    }
    var attr = e.getAttribute('name');
    if (attr) {
      A(e,'name',attr.replace(prev,row));
    }
  }
}
function move(row) {
  if (row<=1) return;
  var d = $('builder');
  var p = $('row' + (row-2)); var pc = p ? p.parentNode : null; var pt = pc ? pc.className : null;
  var t = $('row' + (row-1)); var tc = t.parentNode; var tt = tc.className;
  var b = $('row' + row); var bc = b.parentNode; var bt = bc.className;
  var n = $('row' + (row+1)); var nc = n ? n.parentNode : null; var nt = nc ? nc.className : null;
  if (bt==tt) {
    tc.insertBefore(b,t);
  } else if ((tt==nt) || (bt==pt)) {
    if (tt==nt) {
      nc.insertBefore(t,n);
      if (tc.childNodes.length<2) d.removeChild(tc);
    }
    if (bt==pt) {
      C(pc,b);
      if (bc.childNodes.length<2) d.removeChild(bc);
    }
  } else if ((tt==pt || bt==nt)) {
    var uc = build_container(bt);
    C(uc,b);
    if (bc.childNodes.length<2) d.removeChild(bc);
    var lc = build_container(tt);
    C(lc,t);
    if (tc.childNodes.length<2) d.removeChild(tc);
    if (nc) {
      d.insertBefore(lc,nc);
      d.insertBefore(uc,lc);
    } else {
      C(d,uc);
      C(d,lc);
    }
  } else {
    d.insertBefore(bc,tc);
  }
  rename(t,row-1,tasks+1);
  rename(b,row,row-1);
  rename(t,tasks+1,row);
}
function remove(row) {
  var e = $('row' + row); var ec = e.parentNode;
  if (ec.childNodes.length<=2) {
    ec.parentNode.removeChild(ec);
    var i = row+1;
    var p = $('row' + (row-1)); var pc = p ? p.parentNode : null; var pt = pc ? pc.className : null;
    var n = $('row' + i); var nc = n ? n.parentNode : null; var nt = nc ? nc.className : null;
    while (nt && pt==nt) {
      C(pc,n);
      if (nc.childNodes.length<=1) nc.parentNode.removeChild(nc);
      n = $('row' + (++i)); nc = n ? n.parentNode : null; nt = nc ? nc.className : null;
    }
  } else {
    ec.removeChild(e);
  }
  for (var i=row+1; i<=tasks; i++) {
    rename($('row' + i),i,i-1);
  }
  task = --tasks;
  toggle_help();
}
function build_container(type) {
  var e = E('ul');
  e.className = type;
  C(e,labels(type));
  return e;
}
function add_row(id,type,style,name) {
  task = ++tasks;
  eval('exercise' + tasks + ' = id');
  var div = $('builder');
  var container = div.lastChild;
  if (!container || container.className.indexOf(type)<0) C(div,container = build_container(type));
  var li = E('li');
  A(li,'id','row' + tasks);
  li.className = 'box ' + style;
  li.innerHTML = "<a id='up_" + tasks + "' href='#' onclick=\"move(new Number(this.parentNode.getAttribute('id').substr(3))); return false;\"><img src='\/style\/blue\/button\/moveUp.jpg' title='Move up' alt='Up' \/><\/a>";
  C(li,control_label(null,name));
  var fields = E('ul');
  fields.className = 'fields';
  add_item(fields,exercise_control(tasks));
  var to_add = null;
  switch (type) {
    case 'route' :
      add_item(fields,reps_control(tasks));
      var d = E('li');
      C(fields,d);
      C(d,distance_control(tasks));
      C(d,distance_unit_control(tasks));
      add_item(fields,duration_control(tasks));
      to_add = E('li');
      var r = eval('typeof(route_name' + tasks + ")=='undefined' ? 'Select' : route_name" + tasks);
      to_add.innerHTML = "<br/><label>Route:&nbsp;</label><a id='select_" + tasks + "' href='#' onclick=\"select_route(new Number(this.parentNode.parentNode.parentNode.getAttribute('id').substr(3))); return false;\">" + r + "<\/a>";
      C(d,route_control(tasks));
      break;
    case 'distance' :
      var d = E('li');
      C(fields,d);
      C(d,distance_control(tasks));
      C(d,distance_unit_control(tasks));
      add_item(fields,duration_control(tasks));
      break;
    case 'timed' :
      add_item(fields,reps_control(tasks));
      add_item(fields,duration_control(tasks));
      break;
    case 'duration' :
      add_item(fields,duration_control(tasks));
      break;
    case 'weight' :
      add_item(fields,sets_control(tasks));
      add_item(fields,reps_control(tasks));
      var w = E('li');
      C(fields,w);
      C(w,weight_control(tasks));
      eval('if (!weight_unit' + tasks + ') weight_unit' + tasks + " = 'lbs'");
      C(w,weight_unit_control(tasks));
      break;
    case 'count' :
      add_item(fields,sets_control(tasks));
      add_item(fields,reps_control(tasks));
      break;
    case 'color' :
      add_item(fields,sets_control(tasks));
      add_item(fields,reps_control(tasks));
      add_item(fields,color_control(tasks));
      break;
    default :
      add_item(fields,detail_control(tasks,1,25));
      break;
  }
  var item = E('li');
  item.innerHTML = "<a id='remove_" + tasks + "' href='#' onclick=\"remove(new Number(this.parentNode.parentNode.parentNode.getAttribute('id').substr(3))); return false;\"><img src='\/style\/blue\/button\/delete.jpg' alt='Delete' title='Delete " + name +"' \/><\/a>";
  C(fields,item);
  if (to_add) C(fields,to_add);
  C(li,fields);
  C(container,li);
  toggle_help();
}
function clear_rows() {
  var div = $('builder');
  while (div.firstChild) div.removeChild(div.firstChild);
  tasks = 0;
  toggle_help();
}
function toggle_help() {
  if (tasks>0) { show('clear_button'); hide('add_help'); }
  else { hide('clear_button'); show('add_help'); }
}
function labels(type) {
  var labels = E('li');
  labels.className = 'labels';
  var ul = E('ul');
  C(labels,ul);
  switch (type) {
    case 'route' :
      add_item(ul,control_label(null,'Reps \240'));
      add_item(ul,control_label(null,'Distance (units)'));
      add_item(ul,control_label(null,'Hour\240 : \240Min\240 : \240Sec'));
      break;
    case 'distance' :
      add_item(ul,control_label(null,'Distance (units)'));
      add_item(ul,control_label(null,'Hour\240 : \240Min\240 : \240Sec'));
      break;
    case 'timed' :
      add_item(ul,control_label(null,'Reps'));
      add_item(ul,control_label(null,'Hour\240 : \240Min\240 : \240Sec'));
      break;
    case 'duration' :
      add_item(ul,control_label(null,'Hour\240 : \240Min\240 : \240Sec'));
      break;
    case 'weight' :
      add_item(ul,control_label(null,'Sets'));
      add_item(ul,control_label(null,'Reps'));
      add_item(ul,control_label(null,'Weight (units)'));
      break;
    case 'count' :
      add_item(ul,control_label(null,'Sets'));
      add_item(ul,control_label(null,'Reps'));
      break;
    case 'color' :
      add_item(ul,control_label(null,'Sets'));
      add_item(ul,control_label(null,'Reps'));
      add_item(ul,control_label(null,'Color'));
      break;
    default :
      add_item(ul,control_label(null,'Detail'));
      break;
  }
  return labels;
}
function select_route(row) {
  task = row;
  var r = $('route' + row);
  r = r && r.value ? ('?route=' + r.value) : '';
  dialog('/parts/routeFind' + r,'Select Route',null);
}
function set_route(id,name,distance) {
  var l = $('select_' + task);
  if (l) {
    l.innerHTML = is_empty(name) ? 'Select' : name;
    set_value('route' + task,id);
    set_value('distance' + task,distance);
    set_option('distance_unit' + task,is_empty(name) ? '' : 'miles');
  }
}