// The JavaScript Junkyard
// interesting and semi-useful JS snippets
// from scottandrew.com/junkyard/js/
// copyright 2001 scott andrew lepera, damn you!
// addEvent and removeEvent
// cross-browser event handling for IE5+, NS6 and Mozilla
function addEvent(elm, evType, fn, useCapture)
{
if (elm.addEventListener) { // dom standard
elm.addEventListener(evType, fn, useCapture);
return true;
}
else if (elm.attachEvent) { // ie
var r = elm.attachEvent("on" + evType, fn);
return r;
}
else {
alert("Handler could not be added");
}
}
function removeEvent(elm, evType, fn, useCapture)
{
if (elm.removeEventListener) {
elm.removeEventListener(evType, fn, useCapture);
return true;
}
else if (elm.detachEvent) {
var r = elm.detachEvent("on" + evType, fn);
return r;
}
else {
alert("Handler could not be removed");
}
}
/** End JavaScript Junkyard */
// checks for specific browser version, variable and dom support
this.ver = navigator.appVersion;
this.agent = navigator.userAgent
this.dom = document.getElementById?1:0
this.ie8 = (this.ver.indexOf("MSIE 8") > -1 && this.dom)?1:0;
this.ie7 = (this.ver.indexOf("MSIE 7") > -1 && this.dom)?1:0;
this.ie5 = (this.ver.indexOf("MSIE 5") > -1 && this.dom)?1:0;
this.ie6 = (this.ver.indexOf("MSIE 6") > -1 && this.dom)?1:0;
this.ie4 = (document.all && !this.dom)?1:0;
this.ie = this.ie4 || this.ie5 || this.ie6 || this.ie7 || this.ie8
this.mac = this.agent.indexOf("Mac") > -1
this.opera5 = this.agent.indexOf("Opera 5") > -1
this.ns6 = (this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4 = (document.layers && !this.dom)?1:0;
this.bw = (this.ie8 ||this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5 || this.dom)
/**
* Safely copy value into an existing field.
*/
function safeCopyValue(element, value) {
if (document.forms[0].elements[element])
document.forms[0].elements[element].value = value;
}
/**
* Clear and give focus to the specified lookup field. Lookup fields must conform to the following name convention:
* [field]Name (example: personName)
* [field]Id (example: personId)
*/
function clearLookupField(field) {
safeCopyValue(field + "Id", "");
safeCopyValue(field + "Name", "");
if (document.forms[0].elements[field + "Name"])
document.forms[0].elements[field + "Name"].focus();
}
/**
* Make use of the add element cross browser function with multiples
* elements of the same type.
*/
function addEventByNames(tagName, evType, fn, useCapture) {
elements = document.getElementsByTagName(tagName);
for (var i = 0; i < elements.length; i++) {
addEvent(elements[i], evType, fn, useCapture);
}
}
/**
* Submit current form on ENTER key press event.
*/
function doSaveOnEnter(evt) {
var code = 0;
if (evt) // dom
code = evt.keyCode;
else if (window.event && window.event.keyCode) // ie
code = window.event.keyCode;
if (code == 13) { // ENTER KEY = 13
doSave();
}
else {
return true;
}
}
/**
* Submit form.
*/
function doSave() {
safeCopyValue("action", "save");
document.forms[0].submit();
}
function doSaveAndCancel(id) {
safeCopyValue("action", "cancel");
var changed = "N";
try {
changed = document.forms[0].elements["changed"].value;
} catch(e) {
// ignore
}
if (changed == "Y") {
if (confirm("???uOttawaegms.globals.messages.changeAware???")) {
safeCopyValue("action", "saveAndCancel");
}
}
document.forms[0].submit();
}
function doCancel() {
safeCopyValue("action", "cancel");
document.forms[0].submit();
}
/**
* Hide selected element.
*/
function hideElement(element) {
var obj = (typeof element == "string") ? document.getElementById(element) : element;
obj.style.display = "none";
}
function hideSection(event, element) {
var strName;
if (element != null) {
strName = element;
}
else {
strName = getTargetElement(event).name;
}
for (var i = 1; i < 12; i++) {
if (document.getElementById(strName + "Container" + i))
hideElement(strName + "Container" + i);
}
}
function putHideTriggerYesNo(element) {
var obj = (typeof element == "string") ? document.getElementById(element) : element;
if (obj == null) return;
addEvent(obj, "click", hideSection, false);
// hide section on loading when option checked
if (obj.checked) {
var strName = obj.name;
strName = strName.replace("No");
strName = strName.replace("Yes");
hideSection(null, strName);
}
}
/**
* Show selected element.
*/
function showElement(element) {
var obj = (typeof element == "string") ? document.getElementById(element) : element;
obj.style.display = "";
}
function showSection(event, element) {
var strName;
if (element != null) {
strName = element;
}
else {
strName = getTargetElement(event).name;
}
for (var i = 1; i < 15; i++) {
if (document.getElementById(strName + "Container" + i))
showElement(strName + "Container" + i);
}
}
function putShowTriggerYesNo(element) {
var obj = (typeof element == "string") ? document.getElementById(element) : element;
if (obj == null) return;
addEvent(obj, "click", showSection, false);
// hide section on loading when option checked
if (obj.checked) {
var strName = obj.name;
strName = strName.replace("No");
strName = strName.replace("Yes")
showSection(null, strName);
}
}
/**
* Compatibility function to get event target element.
*/
function getTargetElement(event) {
if (event != null)
return event.target || event.srcElement;
else return null;
}
/**
* Open a new browser window.
*/
function doPopup(url) {
newwindow = window.open(url, '', 'width=800,height=750,resizable=true,scrollbars=true,toolbar=false,location=false,status=true,directories=false');
}
/**
* Add a new array file input to a zone in the web page named Container. The
* count for the array must be held in a hidden input named Counter.
*/
function addArrayFileInput(element) {
if (!dom) return;
// grab the dom container in which we must add the file input
var container = document.getElementById(element + 'Container');
// grab the dom counter and make sure its initialized
var counter = document.getElementById(element + 'Counter');
if (!counter.value)
counter.setAttribute("value", "0");
// prepare the dom structure
var arrayName = element + "[" + counter.value + "]";
var divInput = document.createElement("div");
var space = document.createTextNode(" ");
var removeLink = document.createElement("a");
removeLink.setAttribute("href", "javascript:removeArrayFileInput('" + arrayName + "')");
var removeLinkText = document.createTextNode("remove");
removeLink.appendChild(removeLinkText);
// create the file input
var fileInput = document.createElement("input");
fileInput.setAttribute("type", "file");
fileInput.setAttribute("name", arrayName);
fileInput.setAttribute("id", arrayName);
// append the file input and link into the prepared div into to the container
divInput.appendChild(fileInput);
divInput.appendChild(space);
divInput.appendChild(removeLink);
container.appendChild(divInput);
// increment counter for next
counter.value = parseInt(counter.value) + 1;
}
/**
* Remove the array file input element from the document dom.
*/
function removeArrayFileInput(arrayElement) {
if (!dom) return;
// grab the file input dom element
var fileInput = document.getElementById(arrayElement);
// grab the container's parent and remove the child
var container = fileInput.parentNode;
var containerParent = container.parentNode;
containerParent.removeChild(container);
}
/**
* Call delete attachments service with an array of ids. Attachments to delete must
* be named Delete and checkboxes. This function differs to deleteDocumentStudies
* as it calls specific deleteDocumentXxx actions, it always delete the same attachment
* type in the same form.
*/
function deleteDocuments(element, url) {
if (!dom) return;
var newUrl = url;
// grap all elements named Delete
var elements = document.getElementsByName(element + "Delete");
var params = "";
// build params with the checked attachments to delete
for (var i = 0; i < elements.length; i++) {
var attachmentToDelete = elements[i];
if (attachmentToDelete.checked == true) {
newUrl = addParameter(newUrl, "id", attachmentToDelete.value);
}
}
// call delete attachments service
window.location = newUrl;
}
/**
* Add a parameter to an url.
*/
function addParameter(url, parameterName, parameterValue) {
var newUrl;
var parameterString = url.replace(/.*\?(.*)/, "$1");
var parameterTokens = parameterString.split("&");
if (url.indexOf("?") != -1) {
newUrl = url + "&";
} else {
newUrl = url + "?";
}
newUrl = newUrl + parameterName + "=" + parameterValue;
return newUrl;
}