var Core = {};

/* event handlers */

if (document.addEventListener) { // W3C DOM 2
Core.addEventListener = function(target, type, listener) {
target.addEventListener(type, listener, false); };
Core.removeEventListener = function(target, type, listener) { target.removeEventListener(type, listener, false); };
Core.preventDefault = function(event) { event.preventDefault(); };
Core.stopPropagation = function(event) { event.stopPropagation(); };
} else if (document.attachEvent) { // IE
Core.addEventListener = function(target, type, listener) {
// prevent adding the same listener twice
if (Core._findListener(target, type, listener)!=-1) return;
var listener2 = function() { var event = window.event;
if (Function.prototype.call) { listener.call(target, event); } else {
target._currentListener = listener;
target._currentListener(event)
target._currentListener = null; } };
target.attachEvent("on" + type, listener2);
var listenerRecord = {
target: target, type: type, listener: listener, listener2: listener2 };
var targetDocument = target.document||target;
var targetWindow = targetDocument.parentWindow;
// create a unique ID
var listenerId = "l" + Core._listenerCounter++;
// store a record of this listener in the window object
if (!targetWindow._allListeners) targetWindow._allListeners = {};
targetWindow._allListeners[listenerId] = listenerRecord;
// store this listener's ID in target
if (!target._listeners) target._listeners = [];
target._listeners[target._listeners.length] = listenerId;
// set up Core._removeAllListeners to clean up all listeners on unload
if (!targetWindow._unloadListenerAdded) {
targetWindow._unloadListenerAdded = true;
targetWindow.attachEvent("onunload", Core._removeAllListeners); } };
Core.removeEventListener = function(target, type, listener) {
// find out if the listener was actually added to target
var listenerIndex = Core._findListener(target, type, listener);
if (listenerIndex==-1) return;
// get a reference to the window object containing target
var targetDocument = target.document||target;
var targetWindow = targetDocument.parentWindow;
// obtain the record of the listener from the window object
var listenerId = target._listeners[listenerIndex];
var listenerRecord = targetWindow._allListeners[listenerId];
// remove the listener, and remove its ID from target
target.detachEvent("on" + type, listenerRecord.listener2);
target._listeners.splice(listenerIndex, 1);
// remove the record of the listener from the window object
delete targetWindow._allListeners[listenerId]; };
Core.preventDefault = function(event) { event.returnValue = false; };
Core.stopPropagation = function(event) { event.cancelBubble = true; };
Core._findListener = function(target, type, listener) {
// get the array of listener IDs added to target
var listeners = target._listeners; if (!listeners) return -1;
// get a reference to the window object containing target
var targetDocument = target.document||target;
var targetWindow = targetDocument.parentWindow;
// searching backward (to speed up onunload processing), find the listener
for (var i = listeners.length - 1; i >= 0; i--) {
// get the listener's ID from target
var listenerId = listeners[i];
// get the record of the listener from the window object
var listenerRecord = targetWindow._allListeners[listenerId];
// compare type and listener with the retrieved record
if (listenerRecord.type==type&&listenerRecord.listener==listener) { return i; } } return -1; };
Core._removeAllListeners = function() {
var targetWindow = this;
for (id in targetWindow._allListeners) {
var listenerRecord = targetWindow._allListeners[id];
listenerRecord.target.detachEvent(
"on" + listenerRecord.type, listenerRecord.listener2);
delete targetWindow._allListeners[id]; } };
Core._listenerCounter = 0; }

Core.getElementsByClass = function(theClass) {
var elementArray = [];
if (document.all) { elementArray = document.all; }
else { elementArray = document.getElementsByTagName("*"); }
var matchedArray = [];
var pattern = new RegExp("(^| )" + theClass + "( |$)");
for (var i = 0; i<elementArray.length; i++) {
if (pattern.test(elementArray[i].className)) {
matchedArray[matchedArray.length] = elementArray[i]; } }
return matchedArray; };

/* startup script */

var siteStarts = {
init: function() {
 // table row effects
var tables = Core.getElementsByClass("datatable");
for (var i = 0; i<tables.length; i++) {
var tbodys = tables[i].getElementsByTagName("tbody");
for (var j = 0; j<tbodys.length; j++) {
var rows = tbodys[j].getElementsByTagName("tr");
for (var k = 0; k<rows.length; k++) {
Core.addEventListener(rows[k], "mouseover", changeClass.classOn);
Core.addEventListener(rows[k], "mouseout", changeClass.classOff); } } }
 // confirm action
 var buttons = Core.getElementsByClass("confbutt");
for (var i = 0; i<buttons.length; i++) { buttons[i].onclick = confirmAction.makeChoice; }
// form validation
var forms = document.getElementsByTagName("form");
for (var i = 0; i<forms.length; i++) {
Core.addEventListener(forms[i], "submit", FormValidation.submitListener); }
} };

Core.start = function(runnable) { Core.addEventListener(window, "load", runnable.init); };

Core.start(siteStarts);

/* site functions */

var FormValidation = {
rules: {
required: /./,
requiredNotWhitespace: /\S/,
positiveInteger: /^\d*[1-9]\d*$/,
positiveOrZeroInteger: /^\d+$/,
integer: /^-?\d+$/,
decimal: /^-?\d+(\.\d+)?$/,
email: /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/,
telephone: /^(\+\d+)?( |\-)?(\(?\d+\)?)?( |\-)?(\d+( |\-)?)*\d+$/ },
errors: {
required: "Please do not leave a required field blank.",
requiredNotWhitespace: "Please fill in this required field.",
positiveInteger: "This field may only contain a positive whole number.",
positiveOrZeroInteger: "This field may only contain a non-negative whole number.",
integer: "This field may only contain a whole number.",
decimal: "This field may only contain a number.",
email: "Please enter a valid email address into this field.",
telephone: "Please enter a valid telephone number into this field." },
submitListener: function(event) {
var fields = this.elements;
for (var i = 0; i<fields.length; i++) {
var className = fields[i].className;
var classRegExp = /(^| )(\S+)( |$)/g;
var classResult;
while (classResult = classRegExp.exec(className)) {
var oneClass = classResult[2];
var rule = FormValidation.rules[oneClass];
if (typeof rule!="undefined") {
if (!rule.test(fields[i].value)) {
fields[i].focus();
alert(FormValidation.errors[oneClass]);
Core.preventDefault(event); return; } } } } } };

var changeClass = {
classOn: function(event) { oldclass = this.className; this.className = 'datatableRowOver'; },
classOff: function(event) { this.className = oldclass; } };

var confirmAction = {
makeChoice: function(event) { if (confirm("Sure? The action can\'t be undone!"))
return true; else return false; } };

function goToURL(newUrl) { window.location = newUrl; }

function showPic(imgName) { imgOn = ("" + imgName); document.mainpic.src = imgOn; }

function checkLength(obj) {
var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")):""
if (obj.getAttribute&&obj.value.length>mlength)
obj.value=obj.value.substring(0,mlength) }

function textCounter(field, countfield, maxlimit) {
if (field.value.length>maxlimit)
{field.value = field.value.substring(0, maxlimit); }
else { countfield.value = maxlimit - field.value.length; } }

function doPrint() { try { window.print(); } catch(err) { } }

function stopError() { return true; } window.onerror = stopError;

function popUp(URL) { day = new Date(); id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=2,location=0,statusbar=1,menubar=0,resizable=1,width=600,height=525,left = 100,top = 134');"); }
function popUpSmall(URL) { day = new Date(); id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=2,location=0,statusbar=1,menubar=0,resizable=0,width=300,height=300,left = 100,top = 134');"); }

function JumpToIt(list) { var newPage = list.options[list.selectedIndex].value; if (newPage!="") { location.href=newPage; } }

function stopRKey(evt) { // disable enter key
var evt = (evt)?evt:((event)?event:null);
var node = (evt.target)?evt.target:((evt.srcElement)?evt.srcElement:null);
if ((evt.keyCode==13)&&(node.type=="text")) { return false; }
} document.onkeypress = stopRKey;