// This file is part of Tasks Pro
// Copyright (c) 2002-2006 Alex King, King Design
// 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.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) {
	parent.document.getElementById('task_children_' + loadTaskId).innerHTML = document.body.innerHTML;
}

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";
	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.com/blog_this.pyra?t=" + encodeURIComponent(document.edit.task_notes.value)
				+ "&n=" + encodeURIComponent(document.edit.task_title.value);
			break;
		case 'livejournal':
			URL += "http://www.livejournal.com/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() {
	document.getElementById('password').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.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.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.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) {
	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_access.options[thisForm.task_access.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 == '')
	    ) {
		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) {
	var valid = validateSelectedTasks(thisId);
	if (valid != true) {
		alert(valid);
		return false;
	}
	else {
		var URL = 'screen=' + screen;
		eval('var thisForm = document.form' + thisId + ';');
		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);
	}
}

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 + ';');
	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++;
			thisForm.select_all.checked = false;
		}
	}
	if (isUnChecked == 0) {
		thisForm.select_all.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 = '<nobr><input type="text" name="task_URLs[]" '
			         + 'value="" id="task_URL_##COUNTER##" class="one_pixel_border" style="width: 95%;" '
			         + 'onchange="setConfirmNav();" />'
			         + '<a href="javascript:visitURL(document.getElementById(\'task_URL_##COUNTER##\').value);">'
			         + '<img src="images/icon_visit_url.gif" class="icon_visit_url" alt="'
			         + sVisitURL + '" title="' + sVisitURLTip + '" /></a></nobr>'
			         ;
	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;
}
