﻿
// == INPUT-BUILDER FUNCTIONS == //
function makeText(element, value) {
	//properties - width, maxLength, tabIndex, numbersOnly, className //
	var props = null;
	if (element.accessKey && element.accessKey != null)
		props = element.accessKey.split(",");
	else
		props = element.headers.split(",");
	var width = props[0];
	var maxLength = props[1];
	var tabIndex = props[2];
	if (props[3]) var numbersOnly = Boolean(props[3].replace(/False/, ""));
	if (!props[3]) var numbersOnly = false;
	var className = props[4];
	var s = "<input type=`text` id=`" + element.id + "`";
	if (!className) s += " class=`TextBox`";
	else s += " class=`" + className + "`";
	var sValue = value;
	if (!sValue) sValue = trim(element.innerText.replace("(blank)", ""));
	if (numbersOnly) {
		sValue = sValue.replace(/,/g, "");
		sValue = sValue.replace("$", "");
		sValue = sValue.replace(/ /g, "");
		sValue = sValue.replace(/%/g, "");
		s += " onkeypress=`javascript:return numbersonly(this, event);`";
	}
	s += " value=`" + sValue + "`";
	if (width) s += " style=`width:" + width + "px`";
	if (maxLength) s += " maxlength=" + maxLength;
	if (tabIndex) s += " tabindex=" + tabIndex;
	s += ">";
  s = s.replace(/`/g, String.fromCharCode(34));
	element.oldValue = element.innerText;
	element.oldInnerHTML = element.innerHTML;
	element.innerHTML = s;
	element.id = element.id + "_container";
}
function cancelInput(element, bUseElementValue) {
	var container = element;
	if (!element.id.contains("_container")) container = elm(element.id + '_container');
	var elementText = "";
	var elementValue = "";
	if (bUseElementValue) {
		if (element.tagName == "SELECT") {
			if (element.selectedIndex != -1) elementText = element.options[element.selectedIndex].text;
		}
		else if (element.tagName == "INPUT") {
			if (element.type.toLowerCase() == "password") elementText = "(hidden)";
			else elementText = element.value;
		}
		else elementText = element.value;
		elementValue = element.value;
	}
	container.cancelledInnerHTML = container.innerHTML;
	container.elementValue = elementValue;
	if (bUseElementValue)	container.innerHTML = elementText;
	else {
		container.innerHTML = container.oldInnerHTML;
		container.id = container.id.replace("_container", "");
	}
	if (container.oldBorder) container.style.border = container.oldBorder;
}
function uncancelInput(container) {
	container.innerHTML = container.cancelledInnerHTML;
	var element = elm(container.id.replace("_container", ""));
	element.value = container.elementValue
}
function endInput(container) {
	var value = "";
	var element = container.children[0];
	if (container.id.contains("cmb")) value = element.options[element.selectedIndex].text;
	else if (container.id.contains("txta")) {
		value = "<div style='height:" + element.style.height + ";";
		value += " width:" + element.style.width + "; border:solid #dedede 1px; padding:2px'>";
		value += element.value.replace(String.fromCharCode(13), "<br>");
		value += "</div>";
	}
	else value = element.value;
	container.innerHTML = value;
	container.id = container.id.replace("_container", "");
}
function makeCalendar(element, value) {
	var props = element.accessKey.split(",");
	var className = props[0];
	if (props[1]) var hideCombos = Boolean(props[1].replace(/False/, ""));
	if (!props[1]) var hideCombos = false;
	var hideCombosParent = props[2];
	var value = "";
	if (!value) value = trim(element.innerText);
	if (value.toLowerCase() == "never") value = "";
	var s = "<input type=text id='" + element.id + "'";
	if (!className) s += " class='TextBox'";
	else s += " class='" + className + "'";
	s += " style='width:90px' value='" + value + "'";
  s += " onfocus='javascript:CheckDate(this, true);' onblur='javascript:CheckDate(this, false);'>"
	s += "<img src='" + gAppPath + "/images/aux1.gif' align=absmiddle ID='cmdDateButton'";
	s += " class='Hand' ondblclick=this.onclick();";
	s += " onclick='javascript:swapCal(elm(`" + element.id + "`), this, " + hideCombos + ", `" + hideCombosParent + "`);'>"
	s = s.replace(/'/g, String.fromCharCode(34));
	s = s.replace(/`/g, "'");
	element.oldValue = element.innerText;
	element.oldInnerHTML = element.innerHTML;
	element.innerHTML = s;
	element.id = element.id + "_container";
}
function makeCombo(element, value, xmlData) {
	//properties - width, tabIndex, className, xmlData, onchangeFunction //
	var props = element.accessKey.split(",");
	var width = props[0];
	var tabIndex = props[1];
	var className = props[2];
	var onchange = props[4];
	var hasBlankOption = false;
	var options = "";
	if (!value) textValue = trim(element.innerText);
	var s = "<select id='" + element.id + "'";
	if (!className) s += " class='TextBox'";
	else s += " class='" + className + "'";
	if (width) s += " style='width:" + width + "px'";
	if (tabIndex) s += " tabindex=" + tabIndex;
	if (onchange) s += " onchange='javascript:" + onchange + ";'";
	s += ">";
	if (!xmlData) {
		executeCode("gXmlData = " + props[3]);
		xmlData = gXmlData;
	}
	for (var L = 0; L <= xmlData.getElementsByTagName("XMLData")[0].childNodes.length - 1; L++) {
		if (xmlData.getElementsByTagName("XMLData")[0].childNodes[L].childNodes(0).text == "") hasBlankOption = true;
	  options += "<option value='" + xmlData.getElementsByTagName("XMLData")[0].childNodes[L].childNodes(0).text + "'";
	  if (value == xmlData.getElementsByTagName("XMLData")[0].childNodes[L].childNodes[0].text) options += " selected";
	  if (textValue == xmlData.getElementsByTagName("XMLData")[0].childNodes[L].childNodes[1].text) options += " selected";
	  options += ">" + getXMLData(xmlData, L, xmlData.getElementsByTagName("XMLData")[0].childNodes[L].childNodes[1].nodeName) + "</option>";
	 }
	if (!hasBlankOption) options = "<option value=''></option>" + options;
	s += options
	s += "</select>";
	element.oldValue = element.innerText;
	element.oldInnerHTML = element.innerHTML;
	element.innerHTML = s;
	element.id = element.id + "_container";
}
function makeTextArea(element, value) {
	//properties - width, height, maxLength, tabIndex, className //
	var props = element.accessKey.split(",");
	var width = props[0];
	var height = props[1];
	var maxLength = props[2];
	var tabIndex = props[3];
	var className = props[4];
	var s = "<textarea id='" + element.id + "'";
	if (!className) s += " class='TextBox'";
	else s += " class='" + className + "'";
	var sValue = value;
	if (!sValue) sValue = trim(element.innerText.replace("(blank)", ""));
	s += " style='";
	if (width) {
		s += " width:" + width
		if (!width.contains("%")) s += "px";
		s += ";";
	}
	if (height) s += " height:" + height + "px;";
	s += "'";
	if (maxLength) s += " maxlength=" + maxLength;
	if (tabIndex) s += " tabindex=" + tabIndex;
	s += ">" + sValue + "</textarea>";
	s = s.replace(/'/g, String.fromCharCode(34));
	s = s.replace(/`/g, "'");
	element.oldValue = element.innerText;
	element.oldInnerHTML = element.innerHTML;
	element.innerHTML = s;
	element.id = element.id + "_container";
}


// == STRING & FORMAT FUNCTIONS == //
function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
function htmlDecode(string) {
	string = string.replace(/&lt;/g, "<");
	string = string.replace(/&gt;/g, ">");
	string = string.replace(/&amp;/g, "&");
	return string;
}
function getCurrentDate(bTime) {
	var d = new Date();
	var s = "";
	s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
	if (bTime) s += ' ' + d.getHours() + ':' + d.getMinutes();
	return s;
}


// == INPUT FUNCTIONS == //
function numbersonly(myfield, e, dec) {
	var key, keychar;
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27))
		return true;
	else if ((("0123456789.").indexOf(keychar) > -1))
		return true;
	else if (dec && (keychar == "."))	{
		myfield.form.elements[dec].focus();
		return false;
	}
	else
		return false;
}
function handleEnter(code, e) {
	//Send all but semi-colon in string
	if (!e) var e = window.event;
	if (!e) return;
	var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
	if (keyCode == 13) {
		if (window.execScript) {
			window.execScript(code.replace(/`/g, String.fromCharCode(34)));
		}
		else {
			eval(code.replace(/`/g, String.fromCharCode(34)));
		}
	}
}
function checkKeys() {
	if (window.event.ctrlKey == true && window.event.shiftKey == true && window.event.keyCode == 19) {
		if (gHotKeyMethod_S) gHotKeyMethod_S();
	}
	if (window.event.ctrlKey == true && window.event.shiftKey == true && window.event.keyCode == 14) {
		if (gHotKeyMethod_N) gHotKeyMethod_N();
	}
}
function linkRadios(option1, option2, changedFunction) {
	option1.onclick = function() { option2.checked = option1.checked; if (changedFunction) changedFunction(); }
	option1.onfocus = function() { option2.checked = option1.checked; if (changedFunction) changedFunction(); }
	option1.onblur = function() { option2.checked = option1.checked; if (changedFunction) changedFunction(); }
}

// == VALIDATION FUNCTIONS == //
function isValidEmail(elementValue){ 
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
	return emailPattern.test(elementValue); 
} 

// == RELATIONSHIP FUNCTIONS == //
function isChild(parentObj, childObj) {
	var i = 0;
	if (childObj.id == undefined)	return false;
	src = childObj;
	src = src.parentElement;
	do {
		if (src.id == parentObj.id) return true;
		src = src.offsetParent;
		if (src == null) return false;
	} while (i==0);
}


// == XML FUNCTIONS == //
function addNode(fieldName, value) {
	value = String(value);
	value = value.replace(/&/g, "*amp;");
	value = value.replace(/</g, "*lt;");
	value = value.replace(/>/g, "*gt;");
	var S = "<" + fieldName + ">";
	S += value;
	S += "</" + fieldName + ">";
	return S;
}


// == LOCATION ROUTINES == //
function getLocation(obj, XorY) {
	var loc = 0;
	while (obj) {
		if (XorY == "X") loc += obj.offsetLeft;
		if (XorY == "Y") loc += obj.offsetTop;
    obj = obj.offsetParent;
	}
	return loc;
}


// == VISIBILITY FUNCTIONS == //
function displayElementsByClassName(sClassName, bShow) {
	var elements = getElementsByClassName(sClassName);
	for (var L = 0; L <= elements.length - 1; L++) {
		if (!bShow)
			hideElement(elements[L]);
		else
			showElement(elements[L]);
	}
}
function displayElement(element, bShow) {
	if (bShow) {
		element.style.display = "";
		element.style.position = "";
		element.style.top = "";
		element.style.left = "";
		element.style.visibiilty = "";
		element.style.padding = "";
	}
	else {
		element.style.display = "none";
		element.style.position = "absolute";
		element.style.top = "-1000px";
		element.style.left = "-1000px";
		element.style.visibiilty = "hidden";
		element.style.height = "0px";
	}
}
function showElement(element) {
	element.style.display = "";
	element.style.position = "";
	element.style.top = "";
	element.style.left = "";
	element.style.visibiilty = "";
	element.hidden = false;
}
function hideElement(element) {
	element.style.display = "none";
	element.style.position = "absolute";
	element.style.top = "-1000px";
	element.style.left = "-1000px";
	element.style.visibiilty = "hidden";
	element.style.height = "0px";
	element.hidden = true;
}
function displayElementsByTagName(sTagName, oParent, bShow) {
	var cmbs, i, bIsChild;
	cmbs = document.getElementsByTagName(sTagName);
	for (i in cmbs) {
		if (cmbs[i].id != null) {
			bIsChild = true;
			if (oParent) bIsChild = isChild(oParent, cmbs[i]);
			if (bIsChild && bShow) cmbs[i].style.visibility = "visible";
			if (bIsChild && !bShow) cmbs[i].style.visibility = "hidden";
		}
	}
}


// == PAGING FUNCTIONS == //
function getPageCount(totalItems, pageSize) {
  if (totalItems == pageSize) return 1;
  var remainder = totalItems % pageSize;
  var quotient = (totalItems - remainder) / pageSize;
  var cnt = quotient;
  if (remainder != 0) cnt += 1;
  if (cnt == 0) cnt = 1;
  return cnt;
}


// == COMBO FUNCTIONS == //
function hideCombos(oParent) {
	var cmbs, i, bIsChild;
	cmbs = document.getElementsByTagName('select');
	for (i in cmbs) {
		if (cmbs[i].id != null) {
			if (cmbs[i].accessKey != "1") {
				bIsChild = isChild(oParent, cmbs[i]);
				if (bIsChild == true) cmbs[i].style.visibility = "hidden";
			}
		}
	}
}
function showCombos(sParent) {
	var cmbs,i,bIsChild;
	cmbs = document.getElementsByTagName('select');
	for (i in cmbs) {
		if (cmbs[i].id != null) {
			bIsChild = isChild(sParent, cmbs[i]);
			if (bIsChild == true) {
				cmbs[i].style.visibility = "visible";
			}
		}
	}
}
function addOption(oCombo, sValue, sText) {
	oCombo.options[oCombo.options.length] = new Option(sText, sValue);
}


// == ACTION FUNCTIONS == //
function setFunctions(element, actions, methods, className) {
	var aAction, aMethod;
	if (actions == "working" || actions == "loading") {
		element.innerHTML = "<img src='" + gAppPath + "/images/ajax_wait1.gif'>";
		return;
	}
	var s = "";
	aAction = actions.split("|");
	aMethod = methods.split("|");
	for (var L = 0; L < aAction.length; L++) {
		aMethod[L] = aMethod[L].replace(/'/g, "`");
		aMethod[L] = aMethod[L].replace(String.fromCharCode(34), "'");
		s += "&nbsp;&nbsp;";
		s += "<a href='javascript:void(0);'";
		if (className) s += " class='" + className + "'";
		else s += " class='LinkFunction'";
		if (aAction[L] == "Delete") s += " style='font-weight:normal'";
		s += " onclick='javascript:" + aMethod[L] + ";'>" + aAction[L] + "</a>";
	}
	s = s.replace(/'/g, String.fromCharCode(34));
	s = s.replace(/`/g, "'");
	element.innerHTML = s;
}


// == CORE FUNCTIONS == //
function el(sID) {
	return document.getElementById(sID);
}
function elm(sID) {
	return document.getElementById(sID);
}
function LCase(strInput) {
 return strInput.toLowerCase();
}
function executeCode(sCode) {
	if (eval) {
		eval(sCode);
	}
	else
		window.execScript(sCode);
}
function trim(str) {
	return str.replace(/^\s*|\s*$/g,"");
}
String.prototype.contains = function(t) { 
	return this.indexOf(t) >= 0 ? true : false 
}
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function setCursor(style) {
	//wait
	document.body.style.cursor = style;
}

function nullFunction() { }

//Backwards Compatibility
function ShowCombos(sParent) { showCombos(sParent); }
function HideCombos(sParent) { hideCombos(sParent); }
function AddNode(fieldName, value) { return addNode(fieldName, value); }
function displayElements(sTagName, oParent, bShow) { displayElementsByTagName(sTagName, oParent, bShow); }
function SetFunctions(sContainerID, sActions, sMethods) { return setFunctions(elm(sContainerID), sActions, sMethods); }
function SetFunctions_Working(sContainerID, sActions, sMethods) { return setFunctions(elm(sContainerID), "working", ""); }
function displayByClassName(sClassName, bShow) { displayElementsByClassName(sClassName, bShow); }



