﻿
function isArray(obj) {
  if (typeof obj == 'object') {
    var test = obj.constructor.toString().match(/array/i);
    return (test != null);
  } 
  return false;
}

function setDocumentCSS(css, id) {
	var style = document.createElement("style");
	if (id) {
		$('head').children().remove("style[id=" + id + "]");
		style.setAttribute("id", id);
	}
	style.setAttribute("type", "text/css");
	if (style.styleSheet) //IE
		style.styleSheet.cssText = css;
	else {
		var cssText = doc.createTextNode(css);
		style.appendChild(cssText);
	}
	document.getElementsByTagName("head")[0].appendChild(style);
}

function addDocumentCSSFile(file, id) {
	var cssFile = document.createElement("link");
	if (id) {
		$('head').children().remove("style[id=" + id + "]");
		cssFile.setAttribute("id", id);
	}
	cssFile.setAttribute("rel", "stylesheet");
	if (gDevelopmentMode) file += "?dt=" + new Date();
	cssFile.setAttribute("href", file);
	document.getElementsByTagName("head")[0].appendChild(cssFile);
}




// == MISC 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) {
		executeCode(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(); }
}

// == RELATIONSHIP FUNCTIONS == //
//function isChild(parentObj, childObj) {
//	var i = 0;
//	if (childObj.id == undefined) return false;
//	if (childObj.tagName == "HTML") return false;
//	src = childObj.parentElement;
//	do {
//		if (src.id == parentObj.id) return true;
//		src = src.offsetParent;
//		src = src.parentElement;
//		if (src == null) return false;
//	} while (i==0);
//}

function isChild(parentObj, childObj) {
	var s = childObj;
	while (s) {
		if (s == parentObj)	return true;
		s = s.parentNode;
	}
	return false;
}

function getParentForm(obj) {
	var formElement = document.getElementsByTagName("FORM");
	for (var L = 0; L <= formElement.length - 1; L++) {
		if (isChild(formElement[L], obj)) {
			return formElement[L];
		}
	}
}


// == 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;
}



// == ACTION FUNCTIONS == //
function setFunctions(element, actions, methods, className) {
	var aAction, aMethod;
	if (actions.toLowerCase() == "working" || actions.toLowerCase() == "loading") {
		element.innerHTML = "<img src='" + gAppPath + "/elexiajax/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" || aAction[L] == "Remove") s += " style='font-weight:normal'";
		s += " onclick='javascript:" + aMethod[L] + ";'>"
		if (aAction[L] == "Edit")
			s += "<img src='" + gAppPath + "/elexiajax/images/icons/ico_Edit.png' align=middle title='" + aAction[L] + "'>"
		else if (aAction[L] == "Delete" || aAction[L] == "Remove")
			s += "<img src='" + gAppPath + "/elexiajax/images/icons/ico_Trash.png' align=middle title='" + aAction[L] + "'>"
		else if (aAction[L] == "Save")
			s += "<img src='" + gAppPath + "/elexiajax/images/icons/ico_Save.png' align=middle title='" + aAction[L] + "'>"
		else if (aAction[L] == "Cancel")
			s += "<img src='" + gAppPath + "/elexiajax/images/icons/ico_Cancel.png?6' align=middle title='" + aAction[L] + "'>"
		else {
			s += aAction[L];
		}
		s += "</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) {
	try {
		return document.getElementById(sID);
	}
	catch (error) {
		if (error.description.contains("Object Required")) {
			addAlert("Element Not Found - " + sID);
		}
	}
}
function LCase(strInput) {
 return strInput.toLowerCase();
}
function fixQuoteChars(s) {
	s = s.replace(/'/g, String.fromCharCode(34));
	s = s.replace(/`/g, "'");
	return s;
}
function executeCode(sCode) {
	//alert(sCode);
	if (!window.ActiveXObject) {
		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) {
	document.body.style.cursor = style;
}

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;
}


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); }



