﻿var blank = "";

/******** Array Prototype Routines ********/

if (!Array.indexOf) {
    Array.prototype.indexOf = function (obj) {
        for (var i = 0; i < this.length; i++) {
            if (((this [i].equals) && (this [i].equals (obj))) || (this [i] == obj)) return i;
        }// for;
        return -1;
    }// indexOf;
}// if;

/********/

if (!Array.value) {
	Array.prototype.value = function (name) {
		for (var i = 0; i < this.length; i++) {
			if (this [i].name.equals (name)) return this [i].value;
		}// for;
		return blank;
	}// value;
}// if;

/********/

if (!Array.remove) {
	Array.prototype.remove = function (index) {
		this.splice (index, 1);
	}// remove;
}// if;

/******** Date Prototype Routines ********/

if (!Date.set_date) {
	Date.prototype.set_date = function (date_string) {
		this.setTime (Date.parse (date_string));
	}// set_date;
}// if;

/********/

if (!Date.add_days) {
	Date.prototype.add_days = function (days) {
		this.setUTCDate (this.getUTCDate () + days);
	}// add_days;
}// if;

/********/

if (!Date.add_months) {
	Date.prototype.add_months = function (months) {
		this.setUTCMonth (this.getUTCMonth () + months);
	}// add_months;
}// if;

/********/

if (!Date.add_years) {
	Date.prototype.add_years = function (years) {
		this.setUTCFullYear (this.getUTCFullYear () + years);
	}// add_years;
}// if;

/******** String Prototype Routines ********/

if (!String.trim) {
	String.prototype.trim = function () {
		if (this == null) return this;
		return this.replace(/^\s+|\s+$/g, '');
	}// trim;
}// String.trim;

/********/

if (!String.equals) {
	String.prototype.equals = function (value) {
		return (this.trim ().toLowerCase () == value.trim ().toLowerCase ());
	}// equals;
}// if;

/******** Integer Prototype Routines ********/

if (!Number.equals) {
	Number.prototype.equals = function (value) {
		return (this == value);
	}// equals;
}// if;

/******** Common Functions ********/

function change_page (target, parameters) {
	var transfer_form = document.createElement ("form");
	document.body.appendChild (transfer_form);
	transfer_form.action = target;
	transfer_form.method = "post";
	if (parameters != undefined) {
		for (var i = 0; i < parameters.length; i++) {
			var hidden_parameter = document.createElement("input");
			hidden_parameter.type = "hidden";
			hidden_parameter.id = parameters[i].name;
			hidden_parameter.value = parameters[i].value;
			hidden_parameter.name = hidden_parameter.id;
			transfer_form.appendChild(hidden_parameter);
		} // for;
	}// if;
	transfer_form.submit ();
	return false;
}// change_page;

/********/

function get_field_value (element) {
	if (!element.type) return null;
	switch (element.type.toLowerCase ()) {
		case "text": return element.value;
		case "password": return element.value;
		case "textarea": return element.innerText;
		case "hidden": return element.value;
		case "checkbox": return element.checked;
		case "radio": return get_radio_value (element);
		case "select-one": return element.value;
		// put other form types in here
	}// switch;
	return blank;
}// get_field_value;

/********/

function lowercase (string) {
	try {
		return string.toLowerCase ();
	} catch (exception) {
		return string;
	}// try;
}// lowercase;

/********/

function isundefined (object) {
	return ((object == null) || (object == undefined) || (object == blank));
}// isundefined;

/********/

function isnumeric (object) {
	return (!isNaN (object));
}// isnumeric;

/********/

function add_event (object, name, handler) {
	if (object.addEventListener != undefined) {
		if (name.indexOf ("on") > -1) name = name.substring (2);
		object.addEventListener (name, handler, true);
		return;
	}// if;
	if (!object.handlers) {
		object.handlers = {};
		object.attachEvent (name, function () {
			for (var i = 0; i < object.handlers [name].length; i++) {
				object.handlers [name] [i] ();
			}// for;
		});
	}// if;
	if (object.handlers [name] == undefined) object.handlers [name] = new Array;
	object.handlers [name].push (handler);
}// add_event;

/********/

function remove_event (object, name, handler) {
	if (object.removeEventListener != undefined) {
		if (name.indexOf ("on") > -1) name = name.substring (2);
		object.removeEventListener (name, handler, true);
		return;
	}// if;
	if ((object.handlers == undefined) || (object.handlers [name] == undefined)) return;
	for (var i = 0; i < object.handlers [name].length; i++) {
		if (object.handlers [name] [i].toString () == handler.toString ()) {
			object.handlers [name].splice (i, 1);
			return;
		}// if;
	}// for;
}// remove_event;

/********/

function create_event_handler (name) {
	if (document.all == undefined) {
		HTMLElement.prototype [name] = function () { eval (this.getAttribute (name)); }
	} else {
		add_event (window, "onload", function () { 
			for (var i = 0; i < document.all.length; i++) {
				if (document.all [i].getAttribute (name) == undefined) continue;
				var command = document.all [i].getAttribute (name);
				document.all [i] [name] = function () { eval (command); }
			}// for;
		});
	}// if;
}// create_event_handler;

/********/

function create_event (name, attribute, property, value) {
	create_event_handler (name);
	if (document.addEventListener != undefined) {
		document.addEventListener ("DOMAttrModified", function (parameters) {
			var properties = parameters.newValue.split (";");
			for (var i = 0; i < properties.length; i++) {
				var parts = properties [i].split (":");
				if (!parts [0].equals (property)) continue;
				if (parts [1].equals (value)) eval (parameters.target [name]);
			}// for;
		}, true);
	} else {
		add_event (window, "onload", function () {
			for (var i = 0; i < document.all.length; i++) {
				if (document.all [i] [name] == undefined) continue;
				var command = document.all [i] [name];
				add_event (document.all [i], "onpropertychange", function () { 
					var parts = event.propertyName.split (".");
					if (!parts [0].equals (attribute)) return;
					if ((parts.length > 1) && (!parts [1].equals (property))) return;
					switch (isundefined (property)) {
						case true: if (!event.srcElement [attribute].equals (value)) return; break;
						case false: if (!event.srcElement [attribute] [property].equals (value)) return;
					}// switch;
					command ();
				});
			}// for;
		});// add_event;
	}// if;
}// create_event;

/********/


