Logo  

Home - Old Man Programmer

Displaying webapps/scheduler/main.js

var _tabs = new Array();
var _body, _active = null;
var disable_flag = new Boolean(false);

function startup() {
  _body = document.getElementById("body");
  _tabs[0] = new schedule_class("Main");
  var e = new schedule_event();
  for(var d = 1; d < 6; d++) e.day[d] = 1;
  add_event(_tabs[0], e);
  refresh_body(_tabs[0]);
  for(var i = 0; i < 5; i++) {
    if (localStorage.getItem("schedule"+i+"data") == undefined) {
      localStorage.setItem("schedule"+i+"data", "");
      localStorage.setItem("schedule"+i+"name", "");
      localStorage.setItem("schedule"+i+"date", "");
    }
  }
}

function save_tab() {
  if (_active == null) return;
  var sc = _active;
  sc.description = document.getElementById(sc.id + "desc").value;
  sc.color = document.getElementById(sc.id + "color").value;
}

function switch_tab(id) {
  if(disable_flag == true) return;
  save_tab();
  var tabs = document.getElementById("tabs");
  for(var c = 0; c < tabs.children.length; c++) {
    if (tabs.children[c].className = "activetab")
      tabs.children[c].setAttribute("class", "tab");
  }
  var t = document.getElementById(id);
  t.setAttribute("class", "activetab");
  for(var i=0; i < _tabs.length; i++) {
    if (_tabs[i].id == id) {
      refresh_body(_tabs[i]);
      break;
    }
  }
}

function refresh_body(sc) {
  var t = new Array();
  var row;
  _body.innerHTML = "Description: ";
  _body.appendChild(el("input", null, {type:'textbox', id:sc.id + "desc", size: 30, value:sc.description}));
  _body.appendChild(el("input", null, {class:"color", id:sc.id + "color", size: 6, value: sc.color}));

  for(var i = 0; i < sc.events.length; i++) {
    if (i % 3 == 0) {
      if (i) t.push(el("tr", row));
      row = new Array();
    }
    row.push(el("td", [ make_event_table(sc.events[i]) ]));
  }
  if (i && row.length) {
    t.push(el("tr", row));
  }
  _body.appendChild(el("table", t));
  _body.appendChild(el("button", null, {id:sc.id+"add", innerHTML:"+", onclick: "newevent();", style: "margin-left:123px;"}));
  jscolor.bind();
  _active = sc;
}

function make_event_table(e) {
  var cl = "event" + ((e.end.hour < e.start.hour || (e.end.hour == e.start.hour && e.end.min <= e.start.min))? " alert" : "");

  var t = el("table", [
    el("tr", [
      el("td", null, {innerHTML: "Start:"}),
      el("td", [hoursel(e.start.hour, e, 0)]),
      el("td", null, {innerHTML:":"}),
      el("td", [minsel(e.start.min, e, 0)]),
      el("td", [el("button", null, {innerHTML: "X", onclick: "delevent('"+e.id+"');"})], {rowspan: 2})
    ]),
    el("tr", [
      el("td", null, {innerHTML: "End:"}),
      el("td", [hoursel(e.end.hour, e, 1)]),
      el("td", null, {innerHTML:":"}),
      el("td", [minsel(e.end.min, e, 1)])
    ]),
    el("tr", [
      el("td", [
	el("button", null, {innerHTML: "S", id: e.id+"day0", onclick:"day(0,'"+e.id+"');", class: e.day[0]? "on" : "off"}),
	el("button", null, {innerHTML: "M", id: e.id+"day1", onclick:"day(1,'"+e.id+"');", class: e.day[1]? "on" : "off"}),
	el("button", null, {innerHTML: "T", id: e.id+"day2", onclick:"day(2,'"+e.id+"');", class: e.day[2]? "on" : "off"}),
	el("button", null, {innerHTML: "W", id: e.id+"day3", onclick:"day(3,'"+e.id+"');", class: e.day[3]? "on" : "off"}),
	el("button", null, {innerHTML: "T", id: e.id+"day4", onclick:"day(4,'"+e.id+"');", class: e.day[4]? "on" : "off"}),
	el("button", null, {innerHTML: "F", id: e.id+"day5", onclick:"day(5,'"+e.id+"');", class: e.day[5]? "on" : "off"}),
	el("button", null, {innerHTML: "S", id: e.id+"day6", onclick:"day(6,'"+e.id+"');", class: e.day[6]? "on" : "off"})
      ],{colspan: 5})
    ]),
  ], {id: e.id, class:cl});
  return t;
}

function display_event(e) {
  _body.appendChild(make_event_table(e));
}

function add_event(sc, evnt) {
    sc.events.push(evnt);
}

function schedule_class(name) {
  this.name = name;
  this.id = newid();
  this.color = "";
  this.description = "";
  this.events = new Array();

  var tabs = document.getElementById("tabs");
  for(var c = 0; c < tabs.children.length; c++) {
    if (tabs.children[c].className = "activetab")
      tabs.children[c].setAttribute("class", "tab");
  }
  tabs.appendChild(el("div", null, {id:this.id, class:'activetab',innerHTML:name, onclick:'switch_tab("'+this.id+'");'}));
  refresh_body(this);
}

function get_event(id) {
  for(var i = 0; i < _active.events.length; i++)
    if (_active.events[i].id == id) return _active.events[i];
}

function delevent(id) {
  if(disable_flag == true) return;
  var e = get_event(id);
  if (_active.name == "Main" && _active.events.length == 1) {
    window.alert("You cannot delete the last event in the Main tab.");
    return;
  }
  for(var i=0; i< _active.events.length; i++) {
    if (_active.events[i] == e) {
      _active.events.splice(i,1);
      refresh_body(_active);
      if(!_active.events.length)
        deltab(_active.id);
      return;
    }
  }
}

function day(d, id) {
  if(disable_flag == true) return;
  var e = get_event(id);
  e.day[d] = (e.day[d]+1) % 2;
  document.getElementById(e.id+"day"+d).setAttribute("class", e.day[d]? "on" : "off");
}

function updatehour(id, what) {
  var e = get_event(id);
  var v = document.getElementById(e.id+"hour-"+(what?"end":"start")).value;
  if (what) {
    e.end.hour = parseInt(v);
  } else {
    e.start.hour = parseInt(v);
  }
  if (e.end.hour < e.start.hour || (e.end.hour == e.start.hour && e.end.min <= e.start.min)) {
    document.getElementById(e.id).setAttribute("class","event alert");
  } else {
    document.getElementById(e.id).setAttribute("class","event");
  }
}

function updatemin(id, what) {
  var e = get_event(id);
  var v = document.getElementById(e.id+"min-"+(what?"end":"start")).value;
  if (what) {
    e.end.min = parseInt(v);
  } else {
    e.start.min = parseInt(v);
  }
  if (e.end.hour < e.start.hour || (e.end.hour == e.start.hour && e.end.min <= e.start.min)) {
    document.getElementById(e.id).setAttribute("class","event alert");
  } else {
    document.getElementById(e.id).setAttribute("class","event");
  }
}

function newevent() {
  if(disable_flag == true) return;
  var e = new schedule_event();
  save_tab();
  add_event(_active,e);
  refresh_body(_active);
}

function schedule_event() {
  this.id = newid();
  this.start = {hour: 8, min:00};
  this.end = {hour: 16, min: 30};
  this.day = new Array(0,0,0,0,0,0,0);
}

function addtab() {
  if(disable_flag == true) return;
  var add = document.getElementById("add");
  var name = add.value;
  if (name == "") return;
  save_tab();
  for(var i = 0; i<_tabs.length; i++)
    if (_tabs[i].name == name) return;
  var sc = new schedule_class(name);
  add_event(sc, new schedule_event());
  _tabs.push(sc);
  refresh_body(sc);
  add.value = "";
}

function deltab(id) {
  if(disable_flag == true) return;
  for(var i = 0; i<_tabs.length; i++) 
    if(_tabs[i].id == id) {
      switch_tab(_tabs[i-1].id);
      _tabs.splice(i,1);
      break;
    }
  var tab = document.getElementById(id);
  tab.parentNode.removeChild(tab);
  return;
}