// AutoDirector JavaScript
var run="";
var form;
var loaded=false;
var errorsfound;

// ________________________________________________________
// run on page load
function start() {
	loaded=true;
	if (run!="") { return eval(run); }
}

// ________________________________________________________
// string trimming
String.prototype.Trim = function() { return this.replace(/^\s*|\s*$/g, ""); }

// string cleaning
String.prototype.Clean = function() { return this.replace(/[^\w|\s|@|&|.|,|!|%|(|)|+|-]/g, "").replace(/_/g, " ").replace(/\s+/g, " ").trim(); }

// ________________________________________________________
// highlight row
function rowColour(id, cssname) {
	if (loaded && document.getElementById) {
		var i=1;
		do {
			document.getElementById(id+"_"+i).className=cssname;
			i++;
		}
		while (document.getElementById(id+"_"+i));
	}
}

// ________________________________________________________
// table sort
function tablesort(column, order) {
	if (loaded) {
		form.sortby.value=column;
		form.sorttype.value=order;
		form.page.value="";
		form.submit();
	}
}

// ________________________________________________________
// jump to another page
function jumppage(pagenum) {
	if (loaded && pagenum!=0) {
		form.pagenum.value=pagenum;
		form.submit();
	}
}

// ________________________________________________________
// edit a record. Pass ID for editing, or blank for new entry
function edititem(id) {
	if (loaded) {
		form.editrecord.value=id;
		form.page.value="edit";
		form.submit();
	}
}

// ________________________________________________________
// delete selected records
function deleteselected() {

	if (loaded) {

		var dellist = "";
		var delcount = 0;

		for (var i=0; i<form.elements.length; i++) {
			if (form.elements[i].type=="checkbox") {
				if (form.elements[i].checked) {
					if (dellist!="") dellist += ",";
					dellist += form.elements[i].name;
					delcount++;
				}
			}
		}

		if (delcount==0) {
			alert("You have not selected any items to delete.");
		}
		else {
			dellist = dellist.replace(/car/gi, "");
			var msg="Are you sure you want to delete ";
			if (delcount==1) {
				msg+="this record?";
			}
			else {
				msg+="these "+delcount+" records?";
			}
			if (confirm(msg)) {
				form.page.value="delete";
				form.delrecords.value=dellist;
				form.submit();
			}
		}

	}

}

// ________________________________________________________
// cancel changes
function cancelUpdate() {
	if (loaded) {
		if (window.confirm("Are you sure you want to cancel all changes?")) {
			form.page.value = "canceledit";
			form.submit();
		}
	}
}

// ________________________________________________________
// show error message and highlight a form element
function error(fieldname, errmessage) {
	if (loaded && !errorsfound) {
		alert(errmessage);
		if (form.elements[fieldname].type=="text" || form.elements[fieldname].type=="textarea" || form.elements[fieldname].type=="password") {
			form.elements[fieldname].select();
			form.elements[fieldname].focus();
		}
	}
	errorsfound=true;
}

// ________________________________________________________
// toggle the value of a checkbox option
function toggleCheckbox(field) {
	window.focus();
	if (loaded) {
		form.elements[field].checked=!(form.elements[field].checked);
	}
}

// ________________________________________________________
// select a radio option (run from a link)
function selectradio(field, chosen) {
	window.focus();
	if (loaded) {
		if (chosen>=1 && chosen<=radiosize(field) && radiosize(field)>1) {
			form.elements[field][chosen-1].checked = true;
		}
	}
}

// ________________________________________________________
// fetch number of radio options (handles if zero, one, or more)
function radiosize(field) {

	var ret=0;
	if (loaded) {
		if (form.elements[field]) {
			ret = form.elements[field].length;
			if (isNaN(ret)) { ret = 1; }
		}
	}
	return ret;
}

// ________________________________________________________
// convert to formatted integer
function format_integer(intconv) {
	intconv=toInt(intconv);
	if (intconv==0) { intconv=""; }
	else { intconv=addCommas(intconv); }
	return intconv;
}

// ________________________________________________________
// convert to formatted year
function format_year(intconv) {
	intconv=toInt(intconv);
	if (intconv<100 && intconv>20) { intconv+=1900; }
	if (intconv<=20) { intconv+=2000; }
	return intconv;
}

// ________________________________________________________
// convert to formatted currency
function format_currency(curconv) {
	curconv=format_integer(curconv);
	if (curconv!="") { curconv=cursymbol+curconv; }
	return curconv;
}

// ________________________________________________________
// verify that the value entered is an integer
function verify_integer(num) {
	var ret="";
	num = String(num);
	num = num.replace(/,/g, "");
	if (!isNaN(num)) { ret = String(toInt(num)); }
	return ret;
}

// ________________________________________________________
// verify that the value entered is a currency
function verify_currency(num) {
	var ret="";
	num = String(num);
	num = num.replace(/[^0-9.]/g, "");
	if (!isNaN(num)) { ret = String(toInt(num)); }
	return ret;
}

// ________________________________________________________
// verify that the value entered is a valid email address
function verify_email(email) {
	email = email.Trim().toLowerCase();
	if (email != "") if (email.replace(/^.+@[a-z0-9]+([_\.\-]{0,1}[a-z0-9]+)*([\.]{1}[a-z0-9]+)+$/, "") != "") email = "";
	return email;
}

// ________________________________________________________
// converts a string to a decimal integer
function toInt(str) {
	var ret=0;
	var state=1;
	// clean string
	str = String(str);
	str = str.replace(/[^0-9-.]/g, "");
	// is this a negative value?
	if (str.charAt(0) == "-") {
		state = -1;
		str = str.replace(/-/g, "");
	}
	// if numeric
	if (!isNaN(str)) {
		// remove leading zeros
		str = str.replace(/^0+/g, "");
		// find integer and convert to correct state
		ret = Math.round(parseFloat(str) * state);
		if (isNaN(ret)) { ret=0; }
	}
	return ret;
}

// ________________________________________________________
// convert value to comma delimited
function addCommas(num) {
	var ret=String(toInt(num));
	var old;
	do {
		old=ret;
		ret=ret.replace(/(\d+)(\d{3})/g, "$1,$2");
	} while (ret!=old);
	return ret;
}
