// This file is part of Tasks Pro
// Copyright (c) 2002-2007 Alex King, Crowd Favorite, Ltd.
// see LICENSE.txt for more information

function openTreeNode(id) {
  if (document.getElementById('task_children_' + id)) {
    document.getElementById('tree_icon_' + id).src = "images/tree_open.gif";
    document.getElementById('task_children_' + id).style.display = "block";
    if (document.getElementById('icon_forms_' + id)) {
      document.getElementById('icon_forms_' + id).style.display = "block";
      document.getElementById('task_children_summary_' + id).style.display = "none";
    }
  }
  addOpenNode(id);
}

function closeTreeNode(id) {
  if (document.getElementById('task_children_' + id)) {
    document.getElementById('tree_icon_' + id).src = "images/tree_closed.gif";
    document.getElementById('task_children_' + id).style.display = "none";
    if (document.getElementById('icon_forms_' + id)) {
      document.getElementById('icon_forms_' + id).style.display = "none";
      document.getElementById('task_children_summary_' + id).style.display = "block";
    }
  }
  removeOpenNode(id);
}

function toggleTreeNode(id) {
  thisDiv = document.getElementById('task_children_' + id);

  if (thisDiv) {
    if (thisDiv.style.display == "none") {
      openTreeNode(id);
    }
    else {
      closeTreeNode(id);
    }
  }
}

function toggleTreeNodes(id, taskChildren) {
  formsDiv = document.getElementById('task_body_' + id);
//  formsImage = document.getElementById('forms_icon_' + id);

  if (formsDiv) {
    if (formsDiv.style.display == "none") {
      openTreeNode(id);
      openForm(id);
      for (i = 0; i < taskChildren.length; i++) {
        openForm(taskChildren[i]);
        theseChildren = document.getElementById('task_children_summary' + id);
        if (theseChildren) {
          openTreeNode(taskChildren[i]);
        }
      }
//      formsImage.src = "images/forms_open.gif";
    }
    else {
      for (i = 0; i < taskChildren.length; i++) {
        closeForm(taskChildren[i]);
      }
//      formsImage.src = "images/forms_closed.gif";
      closeTreeNode(id);
      closeForm(id);
    }
  }
}

function toggleForm(id, notes, persist) {
  thisDiv = document.getElementById('task_body_' + id);
  if (thisDiv) {
    if (thisDiv.style.display == "none") {
      openForm(id, persist);
    }
    else {
      closeForm(id, notes, persist);
    }
  }
}

function toggleForms(theseForms, thisId) {
  var thisImg = document.getElementById('icon_forms_' + thisId);
  if (thisImg.src.indexOf("images/forms_closed.gif") != -1) {
    for (i = 0; i < theseForms.length; i++) {
      openForm(theseForms[i], 0);
    }
    thisImg.src = "images/forms_open.gif";
  }
  else {
    for (i = 0; i < theseForms.length; i++) {
      if (document.getElementById('task_notes_' + theseForms[i])) {
        closeForm(theseForms[i], 1, 0);
      }
      else {
        closeForm(theseForms[i], 0, 0);
      }
    }
    thisImg.src = "images/forms_closed.gif";
  }
}

function openForm(id, persist) {
  thisImage = document.getElementById('form_icon_' + id);
  thisDiv = document.getElementById('task_body_' + id);
  if (thisDiv) {
    thisDiv.style.display = "block";
    thisImage.src = "images/form_open.gif";
  }
  if (persist == 1) {
    addOpenForm(id);
  }
}

function closeForm(id, notes, persist) {
  thisImage = document.getElementById('form_icon_' + id);
  thisDiv = document.getElementById('task_body_' + id);
  if (thisDiv) {
    thisDiv.style.display = "none";
    if (notes > 0) {
      thisImage.src = "images/form_closed_notes.gif";
    }
    else {
      thisImage.src = "images/form_closed.gif";
    }
  }
  if (persist == 1) {
    removeOpenForm(id);
  }
}

function hideCompletedTasks() {
  location.href = document.page.current.value + "&show_completed_tasks=0";
}

function showCompletedTasks() {
  location.href = document.page.current.value + "&show_completed_tasks=1";
}

function displayCompletedTasks(doThis) {
  if (doThis == "hide") {
    hideCompletedTasks();
  }
  else {
    showCompletedTasks();
  }
}

function increaseNotesHeight(thisTextarea, add) {
  if (thisTextarea) {
    newHeight = parseInt(thisTextarea.style.height) + add;
    thisTextarea.style.height = newHeight + "px";
  }
  if (document.getElementById('notes_height')) {
    document.getElementById('notes_height').value = newHeight;
  }
}

function decreaseNotesHeight(thisTextarea, subtract) {
  if (thisTextarea) {
    if ((parseInt(thisTextarea.style.height) - subtract) > 30) {
      newHeight = parseInt(thisTextarea.style.height) - subtract;
      thisTextarea.style.height = newHeight + "px";
    }
    else {
      newHeight = 30;
      thisTextarea.style.height = "30px";
    }
  }
  if (document.getElementById('notes_height')) {
    document.getElementById('notes_height').value = newHeight;
  }
}

function save() {
  if (document.edit && saveEnabled == true) {
    document.edit.submit();
  }
}

function verifyParentIsSet() {
  if (document.edit.task_parent.value == "") {
    alert(parentRequired);
    return false;
  }
}

function verifyDateDueIsSet() {
  var day = document.edit.task_day[document.edit.task_day.selectedIndex].value;
  var month = document.edit.task_month[document.edit.task_month.selectedIndex].value;
  var year = document.edit.task_year[document.edit.task_year.selectedIndex].value;
  if (day == "" || month == "" || year == "") {
    alert(errDateDueRequired);
    return false;
  }
  else {
    return true;
  }
}

function viewTask(taskId) {
  var mode = taskId.substring(0,4);
  taskId = parseInt(taskId.substring(4));
  if (taskId > 0) {
    if (mode == "view") {
      location.href = "index.php?screen=focus&root=" + taskId;
    }
    else {
      location.href = "index.php?screen=edit&id=" + taskId + "&root=" + taskId;
    }
  }
}

function updateBreadcrumbs() {
  if (document.getElementById('current_breadcrumb')) {
    if (document.edit.task_title.value.length > 25) {
      var breadcrumb = document.edit.task_title.value.substr(0,25) + "...";
    }
    else {
      var breadcrumb = document.edit.task_title.value;
    }
    document.getElementById('current_breadcrumb').innerHTML = encodeHTML(breadcrumb);
    document.title = "Tasks Pro: " + breadcrumb;
  }
}

function encodeHTML(str) {
  return str.replace('<', '&lt;');
}


function duplicateTask() {
  if (document.edit.root.value == document.edit.task_id.value) {
    document.edit.root.value = "";
    document.edit.task_id.value = "";
  }
  else {
    document.edit.task_id.value = "";
  }
  document.edit.submit();
}

function confirmNav(nav) {
  if (!nav) {
    if (document.edit && document.edit.changed) {
      if (document.edit.changed.value == 1) {
        if (confirm(abandonChanges)) {
          return true;
        }
        else {
          return false;
        }
      }
      else {
        return true;
      }
    }
  }
  if (document.edit && document.edit.changed) {
    if (document.edit.changed.value == 1) {
      if (confirm(abandonChanges)) {
        eval(nav);
      }
    }
    else {
      eval(nav);
    }
  }
  else {
    eval(nav);
  }
}

function setConfirmNav() {
  if (document.edit && document.edit.changed) {
    document.edit.changed.value = 1;
  }
}

function uRailLoad(loadTaskId, ids) {
  parent.document.getElementById('task_children_' + loadTaskId).innerHTML = document.body.innerHTML;
  if (typeof ids != 'undefined') {
    parent.uRailCreateYAC(ids);
  }
}

function uRailCreateYAC(ids) {
  for (var i = 0; i < ids.length; i++) {
    var id = ids[i];
    var elem = document.createElement('div');
    elem.id = 'yac_container_' + id;
    elem.className = 'yac_list';
    document.getElementById('pte_tags_edit_' + id).getElementsByTagName('div')[0].appendChild(elem);
    eval('yac_' + id + ' = new YAHOO.widget.AutoComplete("pte_tags_edit_field_' + id + '","yac_container_' + id + '", yac_tags);');
    eval('yac_' + id + '.delimChar = " ";');
    eval('yac_' + id + '.maxResultsDisplayed = 20;');
    eval('yac_' + id + '.queryDelay = 0;');
  }
}

function uRailToggleTreeNode(taskId, color, root, screen, show, completed) {
  var URL = "u_rail.php?id=" + taskId + "&color=" + color + "&show=" + show + "&root=" + root + "&screen=" + screen + "&show_completed_tasks=" + completed;
  if (document.getElementById('task_children_' + taskId).innerHTML == loadingText) {
    document.getElementById('uRail').src = URL;
// for some reason, using multiple iframes causes refresh problems
// the browser seems to forget that the client side expanded tree nodes
// have been expanded after it loads a second level branch.
// this is seen on IE and *zilla
// because of this, we have to allow only one train at a time on the underground railroad
//    document.getElementById('uRail').innerHTML = document.getElementById('uRail').innerHTML + '<iframe src="' + URL + '" height="1" width="1"></iframe>';
  }
  toggleTreeNode(taskId);
}

function uRailToggleFavNode(taskId, color, root, screen, show, completed) {
  var URL = "u_rail.php?id=" + taskId + "&color=" + color + "&type=fav&show_completed_tasks=0";
  if (document.getElementById('task_children_' + taskId).innerHTML == loadingText) {
    document.getElementById('uRail').src = URL;
  }
  toggleTreeNode(taskId);
}

function getParentGroups(parentID) {
  if (parentID != '' && confirm(sGetParentGroups)) {
    document.getElementById('uRail').src = 'u_rail.php?parent=' + parentID;
  }
  else {
    saveEnabled = true;
  }
}

function uRailSetParentGroups(parentGroups) {
  parent.toggleTaskGroups('none');
  for (i = 0; i < parentGroups.length; i++) {
    var state = parent.toggleTaskGroupCheckbox(parentGroups[i]);
    parent.taskGroup(state);
  }
  parent.saveEnabled = true;
}

function annotate(user) {
  now = new Date;
  if (now.getMinutes() < 10) {
    var minutes = "0" + now.getMinutes();
  }
  else {
    var minutes = now.getMinutes();
  }
  if (now.getHours() < 10) {
    var hours = "0" + now.getHours();
  }
  else {
    var hours = now.getHours();
  }
  var add = "-----  " + dateFormat + " @ " + hours + ":" + minutes
          + "  ---------------------\n\n"
          + user + ": "
          + "\n\n------------------------------------------------\n\n";
  document.edit.task_notes.value = add + document.edit.task_notes.value;
  if (document.edit.task_notes.selectionStart ||
      document.edit.task_notes.selectionStart == '0') {
    document.edit.task_notes.focus();
    document.edit.task_notes.selectionStart = 52 + user.length;
    document.edit.task_notes.selectionEnd = 52 + user.length;
  }
}

function pickParent(taskId, target, form) {
  if (target == "edit") {
    window.opener.document.edit.task_parent.value = taskId;
    window.opener.setConfirmNav();
    window.close();
  }
  else if (target == "search") {
    window.opener.document.search.search_parent.value = taskId;
    window.close();
  }
  else if (target == "search_under") {
    window.opener.document.search.search_under.value = taskId;
    window.close();
  }
  else if (target == "modify") {
    eval('window.opener.document.' + form + '.task_parent.value = taskId;');
    window.close();
  }
}

function showPicker(type, date, form) {
// date is expected in YYYY-MM-DD format
  if (!form) {
    form = '';
  }
  var URL;
  var stats;
  URL = "picker.php?type=" + type + "&date=" + date + "&form=" + form;

  if (type.indexOf("parent") != -1) {
    stats = "height=500, width=450, scrollbars=yes, toolbar=no, location=no, status=yes";
  }
  else if (type.indexOf("date") != -1) {
    var height = (150 * calMonths) + 160;
    stats = "height=" + height + ", width=315, scrollbars=yes, toolbar=no, location=no, status=yes";
    displayPopup('date', height, URL);
    return true;
  }
  else {
    stats = "height=500, width=500, scrollbars=yes, toolbar=no, location=no, status=yes";
  }
  window.open(URL, "picker", stats);
}

function pickDate(thisYear, thisMonth, thisDay, target, form) {
  if (!form) {
    form = '';
  }
  if (target == "edit") {
    setSelectToValue(parent.document.edit.task_month, thisMonth);
    setSelectToValue(parent.document.edit.task_day, thisDay);
    setSelectToValue(parent.document.edit.task_year, thisYear);
    parent.setConfirmNav();
    parent.hidePopup();
  }
  else if (target == "modify") {
    eval('setSelectToValue(parent.document.' + form + '.task_date_due_month, thisMonth);');
    eval('setSelectToValue(parent.document.' + form + '.task_date_due_day, thisDay);');
    eval('setSelectToValue(parent.document.' + form + '.task_date_due_year, thisYear);');
    parent.hidePopup();
  }
  else {
    if (eval('parent.document.' + form + '.' + target + '_month')) {
      eval('setSelectToValue(parent.document.' + form + '.' + target + '_month, thisMonth);');
      eval('setSelectToValue(parent.document.' + form + '.' + target + '_day, thisDay);');
      eval('setSelectToValue(parent.document.' + form + '.' + target + '_year, thisYear);');
      if (form == 'edit') {
        parent.setConfirmNav();
      }
      parent.hidePopup();
    }
  }
}

function selectedDate(formName, prefix) {
  var selectedYear;
  var selectedMonth;
  var selectedDay;
  eval("selectedYear = document." + formName + "." + prefix + "_year.options[document." + formName + "." + prefix + "_year.selectedIndex].value;");
  eval("selectedMonth = document." + formName + "." + prefix + "_month.options[document." + formName + "." + prefix + "_month.selectedIndex].value;");
  eval("selectedDay = document." + formName + "." + prefix + "_day.options[document." + formName + "." + prefix + "_day.selectedIndex].value;");
  if ((selectedYear == "" || selectedMonth == "" || selectedDay == "") && (selectedYear != "" || selectedMonth != "" || selectedDay != "")) {
    return "";
  }
  else {
    return selectedYear + "-" + selectedMonth + "-" + selectedDay;
  }
}

function toggleGroupBackground(thisDiv, prefix) {
  var i;
  for (i = 0; document.getElementById(prefix + i); i++) {
    document.getElementById(prefix + i).className = "group";
  }
  thisDiv.className = "groupActive";
}

function postToBlog(type, URL) {
  switch (type) {
    case 'b2':
      URL += "?task_title=" + encodeURIComponent(document.edit.task_title.value)
        + "&task_notes=" + encodeURIComponent(document.edit.task_notes.value);
      break;
    case 'wp':
      URL += "?post_title=" + encodeURIComponent(document.edit.task_title.value)
        + "&content=" + encodeURIComponent(document.edit.task_notes.value);
      break;
    case 'mt':
      URL += "?is_bm=1&bm_show=allow_comments,convert_breaks,category,keywords,excerpt,text_more&__mode=view&_type=entry&link_title=&link_href=&title="
        + encodeURIComponent(document.edit.task_title.value) + "&text="
        + encodeURIComponent(document.edit.task_notes.value);
      break;
    case 'drupal':
      URL += "?edit[title]=" + encodeURIComponent(document.edit.task_title.value)
        + "&edit[body]=" + encodeURIComponent(document.edit.task_notes.value);
      break;
    case 'blogger':
      URL += "http://www.blogger.c0m/blog_this.pyra?t=" + encodeURIComponent(document.edit.task_notes.value)
        + "&n=" + encodeURIComponent(document.edit.task_title.value);
      break;
    case 'livejournal':
      URL += "http://www.livejournal.c0m/update.bml?mode=full"
        + "&subject=" + encodeURIComponent(document.edit.task_title.value)
        + "&event=" + encodeURIComponent(document.edit.task_notes.value);
      break;
    default:
      return false;
      break;
  }
  setSelectToValue(document.edit.task_status, '100');
  window.open(URL, 'post_to_' + type, 'height=550, width=500, scrollbars=yes, toolbar=no, location=no, status=yes');
}

function toggleHTMLToolbar() {
  if (document.getElementById('html_toolbar_div') && document.getElementById('html_toolbar')) {
    if (document.getElementById('html_toolbar_div').style.display == "block") {
      document.getElementById('html_toolbar').value = 1;
    }
    else {
      document.getElementById('html_toolbar').value = 0;
    }
  }
}

function sortTasks(thisSelect) {
  location.href = document.page.current.value + '&'
                + thisSelect.name + '='
                + thisSelect.options[thisSelect.selectedIndex].value;
}

function hideChangePasswordFields() {
  document.getElementById('password').style.display = 'none';
  if (document.getElementById('change_password')) {
    document.getElementById('change_password').style.display = 'block';
  }
}

function showChangePasswordFields() {
  var fields = '<input type="password" name="password_field" value="" maxlength="50" class="one_pixel_border" autocomplete="off" onchange="setConfirmNav();" /> <input type="password" name="password_confirm_field" value="" maxlength="50" class="one_pixel_border" autocomplete="off" onchange="setConfirmNav();" /> <input type="hidden" name="password" autocomplete="off" value="" /> <input type="hidden" name="password_confirm" autocomplete="off" value="" />';
  var passwords = document.getElementById('password');
  passwords.innerHTML = passwords.innerHTML.replace('#####', fields);
  passwords.style.display = 'block';
  if (document.getElementById('change_password')) {
    document.getElementById('change_password').style.display = 'none';
  }
  document.edit.password_field.focus();
}

function passwordCreation(type) {
  switch (type) {
    case "auto":
      setSelectedRadioButton(document.edit.password_creation, 'auto');
      document.getElementById('icon_required_password').style.display = 'none';
      document.getElementById('icon_required_email').style.display = '';
      hideChangePasswordFields();
      break;
    case "manual":
      setSelectedRadioButton(document.edit.password_creation, 'manual');
      showChangePasswordFields();
      document.getElementById('icon_required_password').style.display = '';
      document.getElementById('icon_required_email').style.display = 'none';
      break;
  }
}

function iconRequiredError(imgId) {
  if (document.getElementById('icon_required_' + imgId)) {
    document.getElementById('icon_required_' + imgId).src = 'images/icon_required_error.gif';
  }
}

function filterList(thisValue) {
  var filter = document.getElementById('show_owner');
  var thisValue = filter.options[filter.selectedIndex].value;
  if (thisValue != "") {
    location.href = document.page.current.value + '&show_owner=' + thisValue;
  }
}

function validateSearchCriteria() {
  var errors = new Array();
  var day;
  var month;
  var year;
  if (document.search.search_ID.value && (isNaN(document.search.search_ID.value) || document.search.search_ID.value < 0)) {
    errors[errors.length] = errSearchIdInvalid;
  }
  if (document.search.search_parent.value && (isNaN(document.search.search_parent.value) || document.search.search_parent.value < 0)) {
    errors[errors.length] = errSearchParentInvalid;
  }
  if (document.search.search_status[0].value == "range" && document.search.search_status[0].checked == true) {
    if (document.search.search_status_more.value && (isNaN(document.search.search_status_more.value) || document.search.search_status_more.value > 100 || document.search.search_status_more.value < 0)) {
      errors[errors.length] = errSearchStatusMore;
    }
    if (document.search.search_status_less.value && (isNaN(document.search.search_status_less.value) || document.search.search_status_less.value > 100 || document.search.search_status_less.value < 0)) {
      errors[errors.length] = errSearchStatusLess;
    }
    if ((document.search.search_status_more.value && !isNaN(document.search.search_status_more.value)) && (document.search.search_status_less.value && !isNaN(document.search.search_status_less.value)) && document.search.search_status_more.value > document.search.search_status_less.value) {
      errors[errors.length] = errSearchStatusRange;
    }
  }
  else {
    if (document.search.search_status_exact.value && (isNaN(document.search.search_status_exact.value) || document.search.search_status_exact.value > 100 || document.search.search_status_exact.value < 0)) {
      errors[errors.length] = errSearchStatusExact;
    }
  }
  if (document.search.search_date_due[0].value == "range" && document.search.search_date_due[0].checked == true) {
    day = document.search.search_date_due_after_day[document.search.search_date_due_after_day.selectedIndex].value;
    month = document.search.search_date_due_after_month[document.search.search_date_due_after_month.selectedIndex].value;
    year = document.search.search_date_due_after_year[document.search.search_date_due_after_year.selectedIndex].value;
    if (day != "" || month != "" || year != "") {
      var validDateAfter = new Date(parseFloat(year), parseFloat(month)-1, parseFloat(day));
      if (validDateAfter.getDate() != day || validDateAfter.getMonth() != (month - 1) || validDateAfter.getFullYear() != year) {
        errors[errors.length] = errSearchDateAfter;
      }
    }
    day = document.search.search_date_due_before_day[document.search.search_date_due_before_day.selectedIndex].value;
    month = document.search.search_date_due_before_month[document.search.search_date_due_before_month.selectedIndex].value;
    year = document.search.search_date_due_before_year[document.search.search_date_due_before_year.selectedIndex].value;
    if (day != "" || month != "" || year != "") {
      var validDateBefore = new Date(parseFloat(year), parseFloat(month)-1, parseFloat(day));
      if (validDateBefore.getDate() != day || validDateBefore.getMonth() != (month - 1) || validDateBefore.getFullYear() != year) {
        errors[errors.length] = errSearchDateBefore;
      }
    }
    if (validDateAfter && validDateBefore && (validDateAfter >= validDateBefore)) {
      errors[errors.length] = errSearchDateRange;
    }
  }
  else {
    day = document.search.search_date_due_day[document.search.search_date_due_day.selectedIndex].value;
    month = document.search.search_date_due_month[document.search.search_date_due_month.selectedIndex].value;
    year = document.search.search_date_due_year[document.search.search_date_due_year.selectedIndex].value;
    if (day != "" || month != "" || year != "") {
      var exactDate = new Date(parseFloat(year), parseFloat(month)-1, parseFloat(day));
      if (exactDate.getDate() != day || exactDate.getMonth() != (month - 1) || exactDate.getFullYear() != year) {
        errors[errors.length] = errSearchDateExact;
      }
    }
  }

  if (errors.length > 0) {
    var errorString = errSearchErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    return true;
  }
}

function validateEditData() {
  var errors = new Array();
  var day = '';
  var month = '';
  var year = '';
  if (document.edit.task_owner && document.edit.task_owner.options &&
      getSelectedRadioButton(document.edit.task_access) == 'private' &&
      cookieUser != document.edit.task_owner.options[document.edit.task_owner.selectedIndex].value) {
    var found = 0;
    for (i = 0; i < groups.length; i++) {
      if (document.getElementById('task_groups_' + groups[i][0]).checked) {
        for (o = 0; o < groups[i][1].length; o++) {
          if (groups[i][1][o] == document.edit.task_owner.options[document.edit.task_owner.selectedIndex].value) {
            found++;
          }
        }
      }
    }
    if (found == 0) {
      if (!confirm(warnUserNotInGroups)) {
        return false;
      }
    }
  }
  if (document.edit.task_type.value == '0') {
    day = document.edit.task_day[document.edit.task_day.selectedIndex].value;
    month = document.edit.task_month[document.edit.task_month.selectedIndex].value;
    year = document.edit.task_year[document.edit.task_year.selectedIndex].value;
    if (day != "" || month != "" || year != "") {
      var editDate = new Date(parseFloat(year), parseFloat(month)-1, parseFloat(day));
      if (editDate.getDate() != day || editDate.getMonth() != (month - 1) || editDate.getFullYear() != year) {
        errors[errors.length] = errEditDate;
      }
    }
    if (document.edit.task_minutes.value && (isNaN(document.edit.task_minutes.value) ||
      document.edit.task_minutes.value < 0 || document.edit.task_minutes.value > 59)) {
      errors[errors.length] = errEditMinutes;
    }
    if (document.edit.task_hours.value &&
      (isNaN(document.edit.task_hours.value) || document.edit.task_hours.value < 0)) {
      errors[errors.length] = errEditHours;
    }
  }
  if (document.edit.task_parent.value &&
      (isNaN(document.edit.task_parent.value) || document.edit.task_parent.value < 0)) {
    errors[errors.length] = errEditParent;
  }
  if (document.edit.task_title.value == '') {
    errors[errors.length] = errNoTitle;
  }
  if (document.edit.task_type.value == '0' && document.edit.recurring_task && document.edit.recurring_task.checked) {
    if (!getSelectedRadioButton(document.edit.recur_type)) {
      errors[errors.length] = errRecurTypeRequired;
    }
    if (getSelectedRadioButton(document.edit.recur_type) == 1) {
      if (document.edit.recur_offset.value == '') {
        errors[errors.length] = errRecurOffsetRequired;
      }
      else if (isNaN(document.edit.recur_offset.value) || document.edit.recur_offset.value < 1) {
        errors[errors.length] = errRecurOffsetInvalid;
      }
    }
    if (day == "" || month == "" || year == "") {
      errors[errors.length] = errDateDueRequired;
    }
    day = document.edit.recur_end_day[document.edit.recur_end_day.selectedIndex].value;
    month = document.edit.recur_end_month[document.edit.recur_end_month.selectedIndex].value;
    year = document.edit.recur_end_year[document.edit.recur_end_year.selectedIndex].value;
    if (day == "" || month == "" || year == "") {
      errors[errors.length] = errRecurEndDateRequired;
    }
    else {
      var endDate = new Date(parseFloat(year), parseFloat(month)-1, parseFloat(day));
      if (endDate.getDate() != day || endDate.getMonth() != (month - 1) || endDate.getFullYear() != year) {
        errors[errors.length] = errRecurEndDateInvalid;
      }
      else if (editDate && editDate >= endDate) {
        errors[errors.length] = errRecurEndDateEarly;
      }
    }
  }
  if (document.edit.recur_prompt && document.edit.recur_prompt.value == 1) {
    if (confirm(changeFutureTasks)) {
      document.edit.recur_change.value = 1;
    }
  }
  if (errors.length > 0) {
    var errorString = errEditErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  if (document.edit.task_access && document.edit.task_access.checked == false && !taskGroupsSelected()) {
    if (confirm(noTaskGroupsSelected)) {
      return true;
    }
    else {
      return false;
    }
  }
  return true;
}

function validatePreferencesData() {
  var errors = validateUserFormData();
  if (errors != true) {
    var errorString = errPrefsErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    if (document.edit.password_field &&
      document.edit.password_confirm_field &&
      document.edit.password_field.value != '' &&
        document.edit.password_confirm_field.value != '' &&
        document.edit.password_field.value ==
          document.edit.password_confirm_field.value) {
      document.edit.password.value = MD5(document.edit.password_field.value);
      document.edit.password_confirm.value = MD5(document.edit.password_confirm_field.value);
      document.edit.password_field.value = '';
      document.edit.password_confirm_field.value = '';
    }
    return true;
  }
}

function validateGroupData() {
  var errors = new Array();
  if (document.edit.name.value == '') {
    errors[errors.length] = errGroupNameRequired;
    iconRequiredError('name');
  }
  if (errors.length > 0) {
    var errorString = errGroupErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    return true;
  }
}

function validateTemplateData() {
  var errors = new Array();
  if (document.edit.name.value == '') {
    errors[errors.length] = errTemplateNameRequired;
    iconRequiredError('name');
  }
  if (errors.length > 0) {
    var errorString = errTemplateErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    return true;
  }
}

function validateMailboxData() {
  var errors = new Array();
  if (document.edit.server.value == '') {
    errors[errors.length] = errMailboxServerRequired;
    iconRequiredError('server');
  }
  if (document.edit.username.value == '') {
    errors[errors.length] = errMailboxUsernameRequired;
    iconRequiredError('username');
  }
  if (document.edit.password.value == '') {
    errors[errors.length] = errMailboxPasswordRequired;
    iconRequiredError('password');
  }
  if (document.edit.task_parent.value &&
      (isNaN(document.edit.task_parent.value) || document.edit.task_parent.value < 0)) {
    errors[errors.length] = errMailboxTasksParent;
  }
  if (document.edit.task_date_due_offset.value &&
      (isNaN(document.edit.task_date_due_offset.value) || document.edit.task_date_due_offset.value < 0)) {
    errors[errors.length] = errMailboxTasksDateDueOffset;
  }
  if (errors.length > 0) {
    var errorString = errMailboxErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    return true;
  }
}

function validateUserData() {
  var errors = new Array();
  if (document.edit.username.value == '') {
    errors[errors.length] = errUserUsernameRequired;
    iconRequiredError('username');
  }
  if (document.edit.password_creation &&
      getSelectedRadioButton(document.edit.password_creation) == 'auto') {
      if (document.edit.email.value == '') {
      errors[errors.length] = errNoEmailToNotify;
      iconRequiredError('email');
    }
  }
  else if (!document.edit.id &&
           (!document.edit.password_field.value ||
            !document.edit.password_confirm_field.value)) {
    errors[errors.length] = errPrefsNewPassword;
    iconRequiredError('password');
  }
  var userErrors = validateUserFormData();
  if (userErrors != true) {
    for (i = 0; i < userErrors.length; i++) {
      errors[errors.length] = userErrors[i];
    }
  }
  if (errors.length > 0) {
    var errorString = errUserErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    if (document.edit.password_field &&
      document.edit.password_confirm_field &&
      document.edit.password_field.value != '' &&
        document.edit.password_confirm_field.value != '' &&
        document.edit.password_field.value ==
          document.edit.password_confirm_field.value) {
      document.edit.password.value = MD5(document.edit.password_field.value);
      document.edit.password_confirm.value = MD5(document.edit.password_confirm_field.value);
      document.edit.password_field.value = '';
      document.edit.password_confirm_field.value = '';
    }
    return true;
  }
}

function validateUserFormData() {
  var errors = new Array();
  if (document.edit.name.value == '') {
    errors[errors.length] = errUserNameRequired;
    iconRequiredError('name');
  }
  if (document.edit.password_field && document.edit.password_field.value != document.edit.password_confirm_field.value) {
    errors[errors.length] = errPrefsPassword;
  }
  var dateFormat = document.edit.date_format.value.toLowerCase();
  if (dateFormat.indexOf('y') == -1 || dateFormat.indexOf('m') == -1 || dateFormat.indexOf('d') == -1 ||
      dateFormat.replace('y', '').indexOf('y') != -1 ||
      dateFormat.replace('m', '').indexOf('m') != -1 ||
      dateFormat.replace('d', '').indexOf('d') != -1) {
    errors[errors.length] = errPrefsDateFormat;
  }
  if (isNaN(document.edit.upcoming_days.value) ||
      document.edit.upcoming_days.value < 1) {
    errors[errors.length] = errPrefsUpcomingDays;
  }
  if (isNaN(document.edit.server_time_difference.value) ||
      document.edit.server_time_difference.value < -23 ||
      document.edit.server_time_difference.value > 23) {
    errors[errors.length] = errPrefsServerTimeDifference;
  }
  if (isNaN(document.edit.ical_days_before.value) ||
      document.edit.ical_days_before.value < 0) {
    errors[errors.length] = errPrefsiCalDaysBefore;
  }
  if (isNaN(document.edit.ical_days_after.value) ||
      document.edit.ical_days_after.value < 0) {
    errors[errors.length] = errPrefsiCalDaysAfter;
  }
  if (errors.length > 0) {
    return errors;
  }
  else {
    return true;
  }
}

function validateConfigData() {
  var errors = new Array();
  if (isNaN(document.edit.recur_limit.value) || document.edit.recur_limit.value < 1) {
    errors[errors.length] = errRecurLimit;
  }
  if (errors.length > 0) {
    var errorString = errConfigErrors + "\n\n";
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    return true;
  }
}

function validatePermissionData() {
  var errors = new Array();
  var check = 0;
  if (document.edit.changed.value == 0) {
    errors[errors.length] = errNoModifications;
  }
  if (errors.length > 0) {
    var errorString = errGroupErrors;
    for (i = 0; i < errors.length; i++) {
      errorString += errors[i] + "\n";
    }
    return errorString;
  }
  else {
    return true;
  }
}


function toggleMonoFont() {
  var fixed = " fixed"; // name of class that sets the fixed with font
  if (document.edit.task_notes.className.indexOf(fixed) == -1) {
    document.edit.task_notes.className += fixed;
  }
  else {
    document.edit.task_notes.className = document.edit.task_notes.className.replace(fixed, "");
  }
}

function activatePrefsTab(id) {

  var tabs = Array('profile'
          ,'permissions'
          ,'team'
          ,'general'
          ,'ical'
          ,'blog'
          );

  for (i = 0; i < tabs.length; i++) {
    if (document.getElementById(tabs[i])) {
      if (id == 'init') {
        var sURL = location.href;
        var anchorLocation = sURL.indexOf('#');
        if (anchorLocation > -1) {
          var tab = sURL.substring((anchorLocation + 1), sURL.length);
          if (tab == 'top') {
            tab = 'all';
          }
          activatePrefsTab(tab);
          i = tabs.length;
        }
      }
      else if (id == 'all') {
        document.getElementById('prefs_tab_' + tabs[i]).className = "";
        document.getElementById('prefs_tab_all').className = "active";
        document.getElementById(tabs[i]).style.display = "block";
        document.getElementById(tabs[i] + '_top').style.display = "block";
        document.getElementById('bottom_toolbar').style.display = "block";
      }
      else if (id == tabs[i]) {
        document.getElementById('prefs_tab_all').className = "";
        document.getElementById('prefs_tab_' + tabs[i]).className = "active";
        document.getElementById(tabs[i]).style.display = "block";
        document.getElementById(tabs[i] + '_top').style.display = "none";
        document.getElementById('bottom_toolbar').style.display = "none";
      }
      else {
        document.getElementById('prefs_tab_all').className = "";
        document.getElementById('prefs_tab_' + tabs[i]).className = "";
        document.getElementById(tabs[i]).style.display = "none";
        document.getElementById('bottom_toolbar').style.display = "none";
      }
    }
  }
}

function visitURL (thisURL) {
  if (thisURL) {
    if (thisURL.substr(0, 7) != 'http://' &&
        thisURL.substr(0, 8) != 'https://' &&
        thisURL.substr(0, 6) != 'ftp://' &&
        thisURL.substr(0, 7) != 'file://' &&
        thisURL.substr(0, 7) != 'mailto:' &&
        thisURL.substr(0, 11) != 'javascript:' &&
        thisURL.substr(1, 2) != ':\\') {
      thisURL = 'http://' + thisURL;
    }
    window.open(thisURL);
  }
}

function highlightTask(thisDiv, action) {
  var thisDiv = document.getElementById(thisDiv);
  if (action == "on") {
    thisDiv.className += ' task_highlight';
  }
  else {
    thisDiv.className = thisDiv.className.replace(/task_highlight/g, '');
  }
}

function highlightButton(thisButton, action) {
  if (action == 'over') {
    thisButton.style.borderBottom = '1px solid #999';
    thisButton.style.borderLeft = '1px solid #ccc';
    thisButton.style.borderRight = '1px solid #999';
    thisButton.style.borderTop = '1px solid #ccc';
  }
  else if (action == 'down') {
    thisButton.style.borderBottom = '1px solid #ccc';
    thisButton.style.borderLeft = '1px solid #999';
    thisButton.style.borderRight = '1px solid #ccc';
    thisButton.style.borderTop = '1px solid #999';
  }
  else if (action == 'out') {
    thisButton.style.borderBottom = '1px solid #e8e8e8';
    thisButton.style.borderLeft = '1px solid #e8e8e8';
    thisButton.style.borderRight = '1px solid #e8e8e8';
    thisButton.style.borderTop = '1px solid #e8e8e8';
  }
}

function selectTasks(thisId, action) {
  var checkboxes = document.getElementsByTagName('input');
  for (i = 0; i < checkboxes.length; i++) {
    if (checkboxes[i].type == 'checkbox' && checkboxes[i].name != 'task_access' && checkboxes[i].id.indexOf(thisId) != -1) {
      eval('checkboxes[i].checked = ' + action);
    }
  }


  eval('var thisForm = document.form' + thisId + ';');
  for (i = 0; i < thisForm.elements.length; i++) {
    if (thisForm.elements[i].type == 'checkbox' && thisForm.elements[i].name != 'task_access') {
      eval('thisForm.elements[i].checked = ' + action);
    }
  }
}

function validateSelectedTasks(thisId) {
  var isChecked = 0;
  eval('var thisForm = document.form' + thisId + ';');
  for (i = 0; i < thisForm.elements.length && isChecked == 0; i++) {
    if (thisForm.elements[i].name != 'select_all' && thisForm.elements[i].checked) {
      isChecked++;
      return true;
    }
  }
  if (isChecked == 0) {
    return errNoSelectedTasks;
  }
}

function validateModifyData(thisId) {
  eval('var thisForm = document.form' + thisId + ';');
  eval("var theseGroups = document.getElementById('task_groups_" + thisId + "');");
// check for changes
  var selected = new Array();
  if (theseGroups) {
    for (var i = 0; i < theseGroups.length; i++) {
      if (theseGroups[i].selected && theseGroups[i].value != '') {
        selected[selected.length] = theseGroups[i].value;
      }
    }
  }
  if (selected.length == 0 &&
      thisForm.task_owner.options[thisForm.task_owner.options.selectedIndex].value == '' &&
      thisForm.task_status.options[thisForm.task_status.options.selectedIndex].value == '' &&
      thisForm.task_priority.options[thisForm.task_priority.options.selectedIndex].value == '' &&
      thisForm.task_parent.value == '' &&
      thisForm.task_container.options[thisForm.task_container.options.selectedIndex].value == '' &&
      thisForm.task_type.options[thisForm.task_type.options.selectedIndex].value == '' &&
      thisForm.task_notes.value == '' &&
      thisForm.date_due_extend.value == '' &&
      getSelectedRadioButton(thisForm.date_change) == 'none' &&
    (!thisForm.task_billable || thisForm.task_billable.options[thisForm.task_billable.options.selectedIndex].value == '') &&
    (!thisForm.task_minutes || thisForm.task_minutes.value == '') &&
      (!thisForm.task_favorite || thisForm.task_favorite.options[thisForm.task_favorite.options.selectedIndex].value == '') &&
      (!thisForm.task_tags || thisForm.task_tags.value == '') &&
      (!thisForm.tags_change || thisgetSelectedRadioButton(thisForm.tags_change) == 'none')
      ) {
    alert(errNoModifications);
    return false;
  }
// if date is set, make sure it is valid
  day = thisForm.task_date_due_day[thisForm.task_date_due_day.selectedIndex].value;
  month = thisForm.task_date_due_month[thisForm.task_date_due_month.selectedIndex].value;
  year = thisForm.task_date_due_year[thisForm.task_date_due_year.selectedIndex].value;
  if (day != "" || month != "" || year != "") {
    var exactDate = new Date(parseFloat(year), parseFloat(month)-1, parseFloat(day));
    if (exactDate.getDate() != day || exactDate.getMonth() != (month - 1) || exactDate.getFullYear() != year) {
      alert(errInvalidModifyDate);
      return false;
    }
  }
  return true;
}

function modifySelectedTasks(thisId) {
  var valid = validateSelectedTasks(thisId);
  if (valid != true) {
    alert(valid);
    return false;
  }
  else {
    document.getElementById(thisId).style.display = 'block';
  }
}

function completeSelectedTasks(thisId, screen, popup) {
  var valid = validateSelectedTasks(thisId);
  if (valid != true) {
    alert(valid);
    return false;
  }
  else {
    eval('var thisForm = document.form' + thisId + ';');
    var URL = 'screen=' + screen;
    if (popup == 1) {
      for (i = 0; i < thisForm.elements.length; i++) {
        if (thisForm.elements[i].name != 'select_all' && thisForm.elements[i].checked) {
          URL += '&tasks[]=' + thisForm.elements[i].value;
        }
      }
      displayPopup('complete_selected', 350, URL);
    }
    else {
      for (i = 0; i < thisForm.elements.length; i++) {
        if (thisForm.elements[i].name != 'select_all' && thisForm.elements[i].checked) {
          URL += '&selected_tasks[]=' + thisForm.elements[i].value;
        }
      }
      location.href = 'index.php?action=complete_tasks&' + URL;
    }
  }
}

function deleteSelectedTasks(thisId) {
  var valid = validateSelectedTasks(thisId);
  if (valid != true) {
    alert(valid);
    return false;
  }
  else {
    if (confirm(deleteTasksConfirm)) {
      eval('var thisForm = document.form' + thisId);
      thisForm.action.value = "delete_tasks";
      thisForm.submit();
    }
  }
}

function changedTaskSelection(thisId) {
  var isUnChecked = 0;
  eval('var thisForm = document.form' + thisId + ';');
  var selectAll = document.getElementById(thisId + '_select_all');
  for (i = 0; i < thisForm.elements.length && isUnChecked == 0; i++) {
    if (thisForm.elements[i].type == 'checkbox' && thisForm.elements[i].checked == false &&
        thisForm.elements[i].name != 'select_all' && thisForm.elements[i].name != 'task_access') {
      isUnChecked++;
      selectAll.checked = false;
    }
  }
  if (isUnChecked == 0) {
    selectAll.checked = true;
  }
}

function toggleSearchOptions(action) {
  if (action == 'init') {
    var sURL = location.href;
    var anchorLocation = sURL.indexOf('#');
    if (anchorLocation > -1) {
      var anchor = sURL.substring((anchorLocation + 1), sURL.length);
      if (anchor == 'more') {
        document.getElementById('search_more').style.display = 'block';
      }
    }
  }
  else {
    toggleDiv('search_more');
  }
  if (document.getElementById('search_more').offsetHeight > 0) {
    document.getElementById('search_more_toggle').style.display = 'none';
    document.getElementById('search_less_toggle').style.display = 'block';
  }
  else {
    document.getElementById('search_less_toggle').style.display = 'none';
    document.getElementById('search_more_toggle').style.display = 'block';
  }
}

function updateTaskGroupsBanner() {
  var selectedGroups = new Array();
  var banner = '';
  for (i = 0; i < document.edit.elements.length; i++) {
    if (document.edit.elements[i].type == 'checkbox' &&
        document.edit.elements[i].name.indexOf('task_groups') != -1 &&
        document.edit.elements[i].checked == true) {
        selectedGroups[selectedGroups.length] = document.edit.elements[i].value;
    }
  }
  for (i = 0; i < selectedGroups.length; i++) {
    for (o = 0; o < taskGroups.length; o++) {
      if (selectedGroups[i] == taskGroups[o][0]) {
        banner += taskGroups[o][1] + ', ';
        o = taskGroups.length;
      }
    }
  }
  if (banner == '') {
    banner = sNone;
    setSelectedRadioButton(document.edit.task_access, 'private');
  }
  else {
    banner = banner.substring(0, (banner.length - 2));
  }
  document.getElementById('task_group_access').innerHTML = banner;
}

function toggleTaskGroupCheckbox(thisValue) {
  for (i = 0; i < document.edit.elements.length; i++) {
    if (document.edit.elements[i].type == 'checkbox' &&
        document.edit.elements[i].name.indexOf('task_groups') != -1 &&
        document.edit.elements[i].value == thisValue) {
        document.edit.elements[i].checked = !(document.edit.elements[i].checked);
        if (document.edit.elements[i].checked == true) {
        if (document.edit.task_access) {
          setSelectedRadioButton(document.edit.task_access, 'public');
        }
        }
        return true;
    }
  }
  return false;
}

function toggleTaskGroups(type) {
  if (type == true) {
    type = 'none';
  }
  switch (type) {
    case "my":
      toggleTaskGroups('none');
      for (i = 0; i < document.edit.elements.length; i++) {
        if (document.edit.elements[i].type == 'checkbox' &&
          document.edit.elements[i].name.indexOf('task_groups') != -1) {
          for (o = 0; o < myGroups.length; o++) {
            if (document.edit.elements[i].value == myGroups[o]) {
              document.edit.elements[i].checked = true;
              o = myGroups.length;
            }
          }
        }
      }
      if (document.edit.task_access) {
        setSelectedRadioButton(document.edit.task_access, 'public');
      }
      setConfirmNav();
      updateTaskGroupsBanner();
      break;
    case "all":
      for (i = 0; i < document.edit.elements.length; i++) {
        if (document.edit.elements[i].type == 'checkbox' &&
          document.edit.elements[i].name.indexOf('task_groups') != -1) {
          document.edit.elements[i].checked = true;
        }
      }
      if (document.edit.task_access) {
        setSelectedRadioButton(document.edit.task_access, 'public');
      }
      setConfirmNav();
      updateTaskGroupsBanner();
      break;
    case "none":
      setSelectedRadioButton(document.edit.task_access, 'private');
      for (i = 0; i < document.edit.elements.length; i++) {
        if (document.edit.elements[i].type == 'checkbox' &&
          document.edit.elements[i].name.indexOf('task_groups') != -1) {
          document.edit.elements[i].checked = false;
        }
      }
      setConfirmNav();
      updateTaskGroupsBanner();
      break;
  }
}

function toggleTaskGroupArea(label) {
  toggleDiv('task_groups');
  document.getElementById('task_group_toggle').innerHTML = label;
}

function taskGroup(checked) {
  if (checked && document.edit.task_access) {
    setSelectedRadioButton(document.edit.task_access, 'public');
  }
  setConfirmNav();
  updateTaskGroupsBanner();
}

function showTaskGroups() {
  if (getSelectedRadioButton(document.edit.task_access) == 'public' &&
      document.getElementById('task_groups').style.display == 'none') {
    document.getElementById('task_groups').style.display = 'block';
  }
}

function taskAccess() {
  if (document.edit.task_access) {
    if (getSelectedRadioButton(document.edit.task_access) == 'private') {
      var status = true;
    }
    else {
      var status = false;
    }
  }
  toggleTaskGroups(status);
  setConfirmNav();
  updateTaskGroupsBanner();
}

function modifyTaskGroups(thisId) {
  eval('var thisForm = document.form' + thisId + ';');
  eval("var theseGroups = document.getElementById('task_groups_" + thisId + "');");
  var selected = new Array();
  for (var i = 0; i < theseGroups.length; i++) {
    if (theseGroups[i].selected && theseGroups[i].value != '') {
      selected[selected.length] = theseGroups[i].value;
    }
  }
  if (selected.length > 0) {
    setSelectToValue(thisForm.task_access, 'public');
  }
}

function taskGroupsSelected() {
  if (document.edit) {
    $found = 0;
    for (i = 0; i < document.edit.elements.length; i++) {
      if (document.edit.elements[i].type == 'checkbox' &&
        document.edit.elements[i].name.indexOf('task_groups') != -1) {
        if (document.edit.elements[i].checked == true) {
          return true;
        }
        else {
          $found++;
        }
      }
    }
    if ($found == 0) {
      return true;
    }
    else {
      return false;
    }
  }
}

function convertTo(thisType) {
  document.edit.task_type.value = thisType;
  if (thisType == 1 || thisType == 3) {
    document.getElementById('convert_to_note').style.display = 'none';
    document.getElementById('convert_to_task').style.display = 'block';
    if (document.getElementById('delete_task')) {
      document.getElementById('delete_task').style.display = 'none';
      document.getElementById('delete_note').style.display = 'block';
    }
    document.getElementById('form_title').className = 'form_title_note';
    document.getElementById('form_body').className = 'form_note';
    if (document.getElementById('post_save')) {
      document.getElementById('post_save').className = 'note';
    }
    document.getElementById('side_properties_1').style.display = 'none';
    document.getElementById('side_properties_2').style.display = 'none';
    document.getElementById('side_properties_3').style.display = 'none';
    document.getElementById('date_due').style.display = 'none';
    document.getElementById('date_due_buttons').style.display = 'none';
    document.getElementById('date_due_label').style.display = 'none';
  }
  else if (thisType == 0 || thisType == 2) {
    document.getElementById('convert_to_task').style.display = 'none';
    document.getElementById('convert_to_note').style.display = 'block';
    if (document.getElementById('delete_task')) {
      document.getElementById('delete_note').style.display = 'none';
      document.getElementById('delete_task').style.display = 'block';
    }
    document.getElementById('form_title').className = 'form_title_task';
    document.getElementById('form_body').className = 'form_task';
    if (document.getElementById('post_save')) {
      document.getElementById('post_save').className = 'task';
    }
    document.getElementById('side_properties_1').style.display = 'block';
    document.getElementById('side_properties_2').style.display = 'block';
    document.getElementById('side_properties_3').style.display = 'block';
    document.getElementById('date_due').style.display = 'block';
    document.getElementById('date_due_buttons').style.display = 'block';
    document.getElementById('date_due_label').style.display = 'block';
  }
}

function addFile() {
  newForm = document.createElement('div');
  newForm.className = 'file_upload_form';
// Safari breaks if there is no space between the textarea tags
  newForm.innerHTML = '  <h1>' + sAddFile + '</h1>'
               + '  <p><input type="file" name="file_##COUNTER##" '
               + 'class="one_pixel_border" onchange="setConfirmNav();" /></p>'
               + '  <p><span class="label">' + sDescription
               + '</span><br /><textarea name="file_notes_##COUNTER##" '
               + 'class="one_pixel_border" style="width: 95%;" onchange="setConfirmNav();"> </textarea></p>'
               ;
  if (document.getElementById('file_upload').innerHTML == '') {
    document.getElementById('add_file').className = 'add_file';
    document.getElementById('add_file').style.paddingTop = '5px';
    newForm.id = 'file_upload_' + 0;
    newForm.innerHTML = newForm.innerHTML.replace(/##COUNTER##/g, '0');
    document.getElementById('file_upload').appendChild(newForm);
// remove the space between the textarea tags
    document.edit.file_notes_0.value = "";
  }
  else {
    for (i = 0; i < 100 && document.getElementById('file_upload_' + i); i++) {
      var count = i;
    }
    newForm.id = 'file_upload_' + i;
    newForm.innerHTML = newForm.innerHTML.replace(/##COUNTER##/g, i);
    document.getElementById('file_upload').appendChild(newForm);
// remove the space between the textarea tags
    eval('document.edit.file_notes_' + i + '.value = "";');
  }
}

function deleteFile(thisId, confirmMsg) {
  if (document.edit.files_to_delete && confirm(confirmMsg)) {
    if (document.edit.files_to_delete.value != '') {
      document.edit.files_to_delete.value += ',' + thisId;
    }
    else {
      document.edit.files_to_delete.value = thisId;
    }
    document.getElementById('file_' + thisId + '_t').style.display = "none";
    document.getElementById('file_' + thisId + '_d').style.display = "none";
    setConfirmNav();
  }
}

function addURL() {
  newURL = document.createElement('p');
  newURL.className = 'task_URL';
  newURL.innerHTML = '<input type="text" name="task_URLs[]" value="" id="task_URL_##COUNTER##" class="one_pixel_border" style="width: 100%;" onchange="setConfirmNav();" />';
  if (!document.getElementById('task_URL_0')) {
    if (document.getElementById('add_file')) {
      document.getElementById('add_file').style.paddingTop = '5px';
    }
    var count = 0;
  }
  else {
    for (i = 0; i < 100 && document.getElementById('task_URL_' + i); i++) {
      var count = i + 1;
    }
  }
  newURL.id = 'p_task_URL_' + count;
  newURL.innerHTML = newURL.innerHTML.replace(/##COUNTER##/g, count);
  document.getElementById('URLs').appendChild(newURL);
  var id = 'task_URL_' + count;
  document.getElementById(id).focus();
}

function addTime(minutes) {
  if (minutes && !isNaN(minutes) && minutes > 0) {
    var duration = parseInt(minutes)
           + (parseInt(document.edit.task_hours.value) * 60)
           + parseInt(document.edit.task_minutes.value)
           ;
    document.edit.task_hours.value = Math.floor(duration / 60);
    document.edit.task_minutes.value = duration % 60;
  }
}

function addTimeInput() {
  var addMinutes = prompt(addTimePrompt, '');
  if (addMinutes && addMinutes != '') {
    if (isNaN(addMinutes) || addMinutes < 0) {
      alert(errAddTime);
      addTimeInput();
    }
    else {
      addTime(addMinutes);
    }
  }
}

function setTime(minutes) {
  if (minutes && !isNaN(minutes) && minutes > 0) {
    document.edit.task_hours.value = Math.floor(minutes / 60);
    document.edit.task_minutes.value = minutes % 60;
  }
}

function timer() {
  setConfirmNav();
  if (document.edit.timer_start.value == '0000-00-00 00:00:00') {
    var start = new Date();
    var timer_string = start.getFullYear() + '-'
                     + zeros((parseInt(start.getMonth()) + 1)) + '-'
                     + zeros(start.getDate()) + ' '
                     + zeros(start.getHours()) + ':'
                     + zeros(start.getMinutes()) + ':'
                     + zeros(start.getSeconds())
                     ;
    document.edit.timer_start.value = timer_string;
    document.getElementById('timer').innerHTML = '00:00:00';
    taskTimer = 0;
    timerUpdate = window.setTimeout('incrementTimer(1);', 1000);
    document.getElementById('timer').style.display = 'block';
    document.edit.timer_button.value = sStop;
  }
  else {
    var duration = getDuration();
    addTime(duration);
    document.edit.timer_start.value = '0000-00-00 00:00:00';
    if (timerUpdate) {
      window.clearTimeout(timerUpdate);
    }
    document.getElementById('timer').style.display = 'none';
    document.edit.timer_button.value = sStart;
  }
}

function initTimer() {
  taskTimer = getDuration('seconds');
  incrementTimer(1);
  document.getElementById('timer').style.display = 'block';
}

function getDuration(type) { // returns the duration in seconds
  var start = new Date();
  start.setFullYear(parseInt(document.edit.timer_start.value.substr(0,4)));
  if (document.edit.timer_start.value.substr(5,1) == '0') {
    start.setMonth(parseInt(document.edit.timer_start.value.substr(6,1) - 1));
  }
  else {
    start.setMonth(parseInt(document.edit.timer_start.value.substr(5,2) - 1));
  }
  if (document.edit.timer_start.value.substr(8,1) == '0') {
    start.setDate(parseInt(document.edit.timer_start.value.substr(9,1)));
  }
  else {
    start.setDate(parseInt(document.edit.timer_start.value.substr(8,2)));
  }
  if (document.edit.timer_start.value.substr(11,1) == '0') {
    start.setHours(parseInt(document.edit.timer_start.value.substr(12,1)));
  }
  else {
    start.setHours(parseInt(document.edit.timer_start.value.substr(11,2)));
  }
  if (document.edit.timer_start.value.substr(14,1) == '0') {
    start.setMinutes(parseInt(document.edit.timer_start.value.substr(15,1)));
  }
  else {
    start.setMinutes(parseInt(document.edit.timer_start.value.substr(14,2)));
  }
  if (document.edit.timer_start.value.substr(17,1) == '0') {
    start.setSeconds(parseInt(document.edit.timer_start.value.substr(18,1)));
  }
  else {
    start.setSeconds(parseInt(document.edit.timer_start.value.substr(17,2)));
  }

  var stop = new Date();

  if (type == 'seconds') {
    return Math.ceil((stop.valueOf() - start.valueOf()) / 1000);
  }
  else {
    return Math.ceil((stop.valueOf() - start.valueOf()) / (1000 * 60));
  }
}

function incrementTimer(amount) {
  taskTimer = parseInt(taskTimer) + amount;
  var internalTimer = parseInt(taskTimer);
  var hours = 0;
  var minutes = 0;
  var seconds = 0;
  if (taskTimer >= 3600) {
    hours = Math.floor(internalTimer / 3600);
    internalTimer = internalTimer % 3600;
  }
  if (taskTimer >= 60) {
    minutes = Math.floor(internalTimer / 60);
    internalTimer = internalTimer % 60;
  }
  seconds = internalTimer % 60;
  document.getElementById('timer').innerHTML = zeros(hours) + ':' + zeros(minutes) + ':' + zeros(seconds);
  timerUpdate = window.setTimeout('incrementTimer(1);', 1000);
}

function zeros(thisStr, digits) {
  if (!digits) {
    digits = 2;
  }
  thisStr += '';
  if (thisStr.length < digits) {
    for (i = thisStr.length; i < digits; i++) {
      thisStr = '0' + thisStr;
    }
  }
  return thisStr;
}

function displayPopup(type, height, URL) {
  var winW = 630, winH = 460;
  if (navigator.appName=="Netscape") {
    winW = window.innerWidth;
    winH = window.innerHeight;
  }
  if (navigator.appName.indexOf("Microsoft")!=-1) {
    winW = document.body.offsetWidth;
    winH = document.body.offsetHeight;
    self.scrollTo(0, 0);
    document.getElementById('popup').style.position = 'absolute';
  }
  else {
    document.getElementById('popup').style.position = 'fixed';
  }

  switch (type) {
    case "favorites":
      URL = 'popup.php?type=favorites' + URL;
      if (document.getElementById('popup').src != URL) {
        document.getElementById('popup').src = URL;
      }
      var pos = winW - 400;
      if (pos < 0) {
        pos = 0;
      }
      document.getElementById('popup').style.left = (pos / 2) + 'px';
      document.getElementById('popup').style.height = '450px';
      document.getElementById('popup').style.width = '400px';
      break;
    case "date":
      if (document.getElementById('popup').src != URL) {
        document.getElementById('popup').src = URL;
      }
      var pos = winW - 351;
      if (pos < 0) {
        pos = 0;
      }
      document.getElementById('popup').style.left = (pos / 2) + 'px';
      document.getElementById('popup').style.top = '50px';
      document.getElementById('popup').style.height = height + 'px';
      document.getElementById('popup').style.width = '315px';
      break;
    case "complete":
      URL = 'popup.php?type=complete&' + URL;
      if (document.getElementById('popup').src != URL) {
        document.getElementById('popup').src = URL;
      }
      var pos = winW - 400;
      if (pos < 0) {
        pos = 0;
      }
      document.getElementById('popup').style.left = (pos / 2) + 'px';
      document.getElementById('popup').style.height = '350px';
      document.getElementById('popup').style.width = '400px';
      break;
    case "complete_popup":
      location.href = 'popup.php?type=complete&' + URL;
      break;
    case "complete_selected":
      URL = 'popup.php?type=complete_selected&' + URL;
      if (document.getElementById('popup').src != URL) {
        document.getElementById('popup').src = URL;
      }
      var pos = winW - 400;
      if (pos < 0) {
        pos = 0;
      }
      document.getElementById('popup').style.left = (pos / 2) + 'px';
      document.getElementById('popup').style.height = '350px';
      document.getElementById('popup').style.width = '400px';
      break;
    case "deploy_template":
      URL = 'popup.php?type=deploy_template&parent=' + URL;
      if (document.getElementById('popup').src != URL) {
        document.getElementById('popup').src = URL;
      }
      var pos = winW - 400;
      if (pos < 0) {
        pos = 0;
      }
      document.getElementById('popup').style.left = (pos / 2) + 'px';
      document.getElementById('popup').style.height = '450px';
      document.getElementById('popup').style.width = '400px';
      break;
  }
  document.getElementById('popup').style.display = 'block';
}

function hidePopup() {
  document.getElementById('popup').src = 'loading.php';
  document.getElementById('popup').style.display = 'none';
}

function setCookie(name, value, expires, path, domain) {
  document.cookie= name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "");
}

function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return false;
  }
  else {
    begin += 2;
  }
  var end = document.cookie.indexOf(";", begin);
  if (end == -1) {
    end = dc.length;
  }
  return unescape(dc.substring(begin + prefix.length, end));
}

function getOpenNodes() {
  return getCookie('tp_open_nodes_' + cookieUser);
}

function addOpenNode(taskId) {
  var openNodes = getOpenNodes();
  if (openNodes) {
    var openNodesArray = openNodes.split(',');
    for (i = 0; i < openNodesArray.length; i++) {
      if (openNodesArray[i] == taskId) {
        return true;
      }
    }
    setCookie('tp_open_nodes_' + cookieUser, openNodes + ',' + taskId, cookieExpire, cookiePath, cookieDomain);
  }
  else {
    setCookie('tp_open_nodes_' + cookieUser, taskId, cookieExpire, cookiePath, cookieDomain);
  }
}

function removeOpenNode(taskId) {
  var openNodes = getOpenNodes();
  if (openNodes) {
    var openNodesArray = openNodes.split(',');
    openNodes = '';
    for (i = 0; i < openNodesArray.length; i++) {
      if (openNodesArray[i] != taskId) {
        openNodes += openNodesArray[i] + ',';
      }
    }
    openNodes = openNodes.substring(0, openNodes.length - 1);
    setCookie('tp_open_nodes_' + cookieUser, openNodes, cookieExpire, cookiePath, cookieDomain);
  }
}

function getOpenForms() {
  return getCookie('tp_open_forms_' + cookieUser);
}

function addOpenForm(taskId) {
  var openForms = getOpenForms();
  if (openForms) {
    var openFormsArray = openForms.split(',');
    for (i = 0; i < openFormsArray.length; i++) {
      if (openFormsArray[i] == taskId) {
        return true;
      }
    }
    setCookie('tp_open_forms_' + cookieUser, openForms + ',' + taskId, cookieExpire, cookiePath, cookieDomain);
  }
  else {
    setCookie('tp_open_forms_' + cookieUser, taskId, cookieExpire, cookiePath, cookieDomain);
  }
}

function removeOpenForm(taskId) {
  var openForms = getOpenForms();
  if (openForms) {
    var openFormsArray = openForms.split(',');
    openForms = '';
    for (i = 0; i < openFormsArray.length; i++) {
      if (openFormsArray[i] != taskId) {
        openForms += openFormsArray[i] + ',';
      }
    }
    openForms = openForms.substring(0, openForms.length - 1);
    setCookie('tp_open_forms_' + cookieUser, openForms, cookieExpire, cookiePath, cookieDomain);
  }
}

function toggleNotify() {
  if (document.getElementById('notify').checked) {
    document.getElementById('notify_form').style.display = 'block';
  }
  else {
    document.getElementById('notify_form').style.display = 'none';
  }
}

function selectNotifyUsers(groupId) {
  for (var i = 0; i < notifyGroups.length; i++) {
    if (notifyGroups[i][0] == groupId || groupId == 'all') {
      for (var o = 0; o < notifyGroups[i][1].length; o++) {
        document.getElementById('notify_user_' + notifyGroups[i][1][o]).checked = true;
      }
    }
    else if (groupId == 'none') {
      for (var o = 0; o < notifyGroups[i][1].length; o++) {
        document.getElementById('notify_user_' + notifyGroups[i][1][o]).checked = false;
      }
    }
  }
}

function deployTemplate(URL) {
  if (document.getElementById('inherit_groups') && document.getElementById('inherit_groups').checked) {
    URL += '&inherit_groups=1';
  }
  top.location.href = URL;
}

function toggleRecurringForm() {
  if (document.getElementById('recurring_task')) {
    if (document.getElementById('recurring_task').checked) {
      document.getElementById('recurring_task_form').style.display = 'block';
      if (!getSelectedRadioButton(document.edit.recur_type)) {
        setSelectedRadioButton(document.edit.recur_type, 1);
        document.edit.recur_offset.focus();
      }
    }
    else {
      document.getElementById('recurring_task_form').style.display = 'none';
    }
  }
}

function recurChanged() {
  if (document.edit.recur_prompt) {
    document.edit.recur_prompt.value = 1;
  }
}

function openPHPiCalendar(type, URL) {
  switch (type) {
    case 'URL':
      var username = prompt(sEnterUsername, '');
      if (username) {
        var password = prompt(sEnterPassword, '');
        if (password) {
          URL += '&username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password);
          window.open(URL,'tasks_calendar');
        }
      }
      break;
    case '401':
      window.open(URL,'tasks_calendar');
      break;
    case 'none':
      window.open(URL,'tasks_calendar');
      break;
  }
  return false;
}

function purgeObsoleteTasks() {
  if (confirm(confirmPurgeObsoleteTasks)) {
    location.href = 'index.php?action=purge_obsolete_tasks';
  }
}

function testMailboxLogin() {
  testMailboxLoginStatus('testing');
  if (document.getElementById('ssl').checked) {
    var ssl = 1;
  }
  else {
    var ssl = 0;
  }
  if (document.getElementById('ssl_valid_cert').checked) {
    var ssl_valid_cert = 1;
  }
  else {
    var ssl_valid_cert = 0;
  }
  var URL = 'u_rail.php?action=test_mailbox'
    + '&server='
    + encodeURIComponent(document.getElementById('server').value)
    + '&username='
    + encodeURIComponent(document.getElementById('username').value)
    + '&password='
    + encodeURIComponent(document.getElementById('password').value)
    + '&server_type='
    + encodeURIComponent(document.getElementById('server_type').options[document.getElementById('server_type').options.selectedIndex].value)
    + '&ssl=' + ssl
    + '&ssl_valid_cert=' + ssl_valid_cert;
  document.getElementById('uRail').src = URL;
}

function testMailboxLoginStatus(action) {
  switch (action) {
    case 'testing':
      var msg = mailboxLoginStatusTesting;
      var msgClass = 'mailbox_test_status_testing';
      break;
    case 'success':
      var msg = mailboxLoginStatusSuccess;
      var msgClass = 'mailbox_test_status_success';
      break;
    case 'fail':
      var msg = mailboxLoginStatusFail;
      var msgClass = 'mailbox_test_status_fail';
      break;
    default:
      return;
      break;
  }
  document.getElementById('mailbox_test_status').className = msgClass;
  document.getElementById('mailbox_test_status').innerHTML = msg;
}

function showTagTasks(tag) {
  var URL = 'u_rail.php?action=load_tag_tasks&tag=' + encodeURIComponent(tag);
  document.getElementById('uRail').src = URL;
  document.getElementById('tag_tasks_list').innerHTML = '<span class="loading">' + loadingText + '</span>';
}

function loadTagTasks(list, ids) {
  document.getElementById('tag_tasks_list').innerHTML = list;
  if (typeof ids != 'undefined') {
    parent.uRailCreateYAC(ids);
  }
}

function showItemTagsForm(id) {
  document.getElementById('pte_tag_form_' + id).style.display = 'block';
  document.getElementById('tags_edit_icon_' + id).style.visibility = 'hidden';
  pte.item_tag_view(id, 'edit');
}

function showTagEditIcon(id) {
  if (document.getElementById('tags_edit_icon_' + id) && document.getElementById('pte_tag_form_' + id).offsetHeight == 0) {
    document.getElementById('tags_edit_icon_' + id).style.visibility = 'visible';
  }
}

function hideTagEditIcon(id) {
  if (document.getElementById('tags_edit_icon_' + id)) {
    document.getElementById('tags_edit_icon_' + id).style.visibility = 'hidden';
  }
}

function selectTag(tag) {
// highlight tag in list
  var elements = document.getElementById('pte_tags_list_all').getElementsByTagName('LI');
  for (var i = 0; i < elements.length; i++) {
    elements[i].className = elements[i].className.replace('selected', '');
  }
  document.getElementById('pte_tag_' + tag).className += ' selected';
// set current URL
  var current = document.getElementById('current').value;
  var tagPosition = current.indexOf('&tag=');
  if (tagPosition > 0) {
    current = current.substring(0, tagPosition);
  }
  current += '&tag=' + tag;
  document.getElementById('current').value = current;
// set iCalendar URL
  if (document.getElementById('external_ical')) {
    var ical = document.getElementById('external_ical');
    current = ical.href;
    tagPosition = current.indexOf('&tag=');
    if (tagPosition > 0) {
      current = current.substring(0, tagPosition);
    }
    current += '&tag=' + tag;
    ical.href = current;
  }
// set RSS URL
  if (document.getElementById('external_rss')) {
    var rss = document.getElementById('external_rss');
    current = rss.href;
    tagPosition = current.indexOf('&tag=');
    if (tagPosition > 0) {
      current = current.substring(0, tagPosition);
    }
    current += '&tag=' + tag;
    rss.href = current;
  }
  document.getElementById('external').style.visibility = 'visible';
}

function showTagNameIcons(tag) {
  if (document.getElementById('tag_name_icon_edit_' + tag)) {
    document.getElementById('tag_name_icon_edit_' + tag).style.visibility = 'visible';
    document.getElementById('tag_name_icon_delete_' + tag).style.visibility = 'visible';
  }
}

function hideTagNameIcons(tag) {
  if (document.getElementById('tag_name_icon_edit_' + tag)) {
    document.getElementById('tag_name_icon_edit_' + tag).style.visibility = 'hidden';
    document.getElementById('tag_name_icon_delete_' + tag).style.visibility = 'hidden';
  }
}

function tagNameEdit(tag) {
  document.getElementById('tag_name_view_' + tag).style.display = 'none';
  document.getElementById('tag_name_edit_' + tag).style.display = 'block';
  document.getElementById('new_tag_' + tag).focus();
}

function tagNameEditCancel(tag) {
  document.getElementById('tag_name_edit_' + tag).style.display = 'none';
  document.getElementById('tag_name_view_' + tag).style.display = 'block';
  document.getElementById('new_tag_' + tag).value = document.getElementById('old_tag_' + tag).value;
}

function validateTagNameEdit(tag) {
  var new_tag = document.getElementById('new_tag_' + tag).value;
  var old_tag = document.getElementById('old_tag_' + tag).value;
  if (old_tag == new_tag) {
    tagNameEditCancel(tag);
    return false;
  }
  else if (new_tag.replace(/\s/g, '') == '') {
    return false;
  }
  else {
    return true;
  }
}

function tagNameDelete(tag) {
  if (confirm(tagDeletePrompt + tag)) {
    pte.pipe(
      'u_rail.php?pte_action=delete_tag&tag=' + encodeURIComponent(tag)
      ,tagNameDeleteHandler
    );
  }
}

function tagNameDeleteHandler() {
  if (pte.req.readyState == 4) {
    if (pte.req.status == 200) {
      var result = pte.req.responseXML.getElementsByTagName('result')[0];
      if (result.getAttribute('success') == 'y' && result.getAttribute('action') == 'delete_tag') {
        var tag = result.getElementsByTagName('tag')[0].firstChild.nodeValue;
        var tagNode = document.getElementById('pte_tag_' + tag);
        tagNode.parentNode.removeChild(tagNode);
      }
    }
  }
}

function editTaskEditTags() {
  document.getElementById('task_tags_view').style.display = 'none';
  document.getElementById('task_tags').style.display = 'block';
  document.getElementById('task_tags').focus();
}

function editTaskEditURL(id) {
  document.getElementById('task_URL_link_' + id).style.display = 'none';
  document.getElementById('task_URL_' + id).style.display = 'block';
  document.getElementById('task_URL_' + id).focus();
}