function IS_getScriptVersion () { // returns current version of this file so PHP can use it.
	return '4.1.15';
}

function filterStringByValids (strInput, valids) {
	var txtFiltered;
	var strOutput = '';

	if (valids == undefined) valids = "0123456789abcdefghijklmnopqrstuvwxyz";

	for (i=0; i < strInput.length; i++) {
		if (valids.indexOf (strInput.charAt (i)) >= 0 ) {
			strOutput = strOutput + strInput.charAt (i);
		}
	}

	return strOutput;
}

function getByClass (searchClass, node, tag) {
	var classElements = new Array();

	if (tag==undefined) tag="*";

	if (!node) node = document;

	var els = node.getElementsByTagName(tag); // use "*" for all elements
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");

	for (i = 0,j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function HasClassName (objElement, strClass) {
	if (objElement.className) {
		var arrList = objElement.className.split(' ');
		var strClassUpper = strClass.toUpperCase();
	
		for (var i = 0; i < arrList.length; i++) {
			if (arrList[i].toUpperCase() == strClassUpper) {
				return true;
			}
		}
	
	}
	return false;
}

function AddClassName (objElement, strClass, blnMayAlreadyExist) {
	if (objElement instanceof Array) {
		for (var i in objElement) {
			AddClassName (objElement[i], strClass, blnMayAlreadyExist);
		}
	} else {
		if (objElement.className) {
			var arrList = objElement.className.split(' ');
			if (blnMayAlreadyExist) {
				var strClassUpper = strClass.toUpperCase();
				for (var i = 0; i < arrList.length; i++) {
					if (arrList[i].toUpperCase() == strClassUpper) {
						arrList.splice(i, 1);
						i--;
					}
				}
			}
			arrList[arrList.length] = strClass;
			objElement.className = arrList.join(' ');
		} else {
			objElement.className = strClass;
		}
	}
}

function RemoveClassName (objElement, strClass) {
	if (objElement instanceof Array) {
		for (var i in objElement) {
			RemoveClassName (objElement[i], strClass);
		}
	} else {
		if (objElement.className) {
			var arrList = objElement.className.split(' ');
			var strClassUpper = strClass.toUpperCase();
			for (var i = 0; i < arrList.length; i++) {
				if (arrList[i].toUpperCase() == strClassUpper) {
					arrList.splice(i, 1);
					i--;
				}
			}
			objElement.className = arrList.join(' ');
		}
	}
}

function ReplaceClassName (objElement, strClassFrom, strClassTo) {
	RemoveClassName (objElement, strClassFrom);
	AddClassName (objElement, strClassTo);
}

function getUrl (url, target, replace, parameters) {
	LoadURL (url, target, replace);
}

function postUrl (url, target, replace, parameters) {
	LoadURL (url, target, replace);
}

function escapeHTML(someText) {
  var div = document.createElement('div');
  var text = document.createTextNode(someText);
  div.appendChild(text);
  return div.innerHTML;
}

function LoadURL (url, target, replace) {
	var xmlhttp = null;
	
	try {
		xmlhttp = new XMLHttpRequest ();
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {
			target.innerHTML = '<p class="error">Error creating loader!</p>';
		}
	}

	if (xmlhttp != null) {
		if (target != false) {
			xmlhttp.onreadystatechange = function () {
				if (replace == true) {
					if (xmlhttp.readyState == 0) { // 0 = "idle"
						target.innerHTML = '<p class="message">Ready</p>';
					}
					if (xmlhttp.readyState == 1) { // 1 = "open"
						target.innerHTML = '<p class="message">Loading...</p>';
					}
					if (xmlhttp.readyState == 2) { // 2 = "sent"
						target.innerHTML = '<p class="message">Waiting...</p>';
					}
					if (xmlhttp.readyState == 3) { // 3 = "receiving"
						target.innerHTML = '<p class="message">Receiving...</p>';
					}
				}
				if (xmlhttp.readyState == 4) { // 4 = "loaded"
					if (xmlhttp.status == 200) { // 200 = OK
						if (replace == false) {
							target.innerHTML+= xmlhttp.responseText;
						} else {

//var newdiv = document.createElement("div");
//newdiv.innerHTML = xmlhttp.responseText;
//target.appendChild(newdiv);

							target.innerHTML = xmlhttp.responseText;
						}
					} else {
						if (replace == false) {
							target.innerHTML+= '<p class="error">Error '+ xmlhttp.status +': <a target="_blank" href="' + url + '">' + url +'</a></p>';
						} else {
							target.innerHTML = '<p class="error">Error '+ xmlhttp.status +': <a target="_blank" href="' + url + '">' + url +'</a></p>';
						}
					}
				}
			}
		}
		xmlhttp.open ('GET', url ,true);
		xmlhttp.send (null);
	} else {
		alert ("Your browser does not support this feature.");
	}
}
