var messagesHideDelayId = 0;

function ShowMessage (messageString, replace, timeout) {
	var messageObj = document.getElementById ('messages');
	
	if (!(timeout)) {
		timeout = 8000;
	}
	
	if (messagesHideDelayId != 0) {
		window.clearInterval (messagesHideDelayId);
		messagesHideDelayId = 0;
	}

	RemoveClassName (messageObj, 'hidden');
	if (messageString != false) {
		if (replace == false) {
			messageObj.innerHTML += '<p class="message">' + messageString + '</p>';
		} else {
			messageObj.innerHTML = '<p class="message">' + messageString + '</p>';
		}
	}

	intMessageInterval = setTimeout ("HideMessage()", timeout);
}

function HideMessage (delay) {
	var messageObj = document.getElementById ('messages');
	
	if (delay) {

		if (messagesHideDelayId != 0) {
			window.clearInterval (messagesHideDelayId);
			messagesHideDelayId = 0;
		}
		messagesHideDelayId = setTimeout ("HideMessage()", delay);

	} else {

		AddClassName (messageObj, 'hidden');

	}
}

function getByInnerHTML (strSearch, node, tag) {
	var arrOutput = 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)"+strSearch+"(\\s|$)");

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

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 checkAll (object, value) {	for (i = 0; i != object.length; i++) {
		object[i].checked = value;
	}
	if (value == 1) {
		ShowMessage (object.length + ' items checked');
	} else {
		ShowMessage (object.length + ' items unchecked');
	}
}

function checkAllVisible (object, value) {
	var count = 0;
		for (i = 0; i != object.length; i++) {
		if (!(HasClassName (object[i].parentNode.parentNode, 'hidden'))) {
			if (object[i].checked != value) {
				count++;
			}
			object[i].checked = value;
		}
	}
	if (value == 1) {
		ShowMessage (count + ' items checked');
	} else {
		ShowMessage (count + ' items unchecked');
	}
}

function hideAll (objects) {	for (i = 0; i != objects.length; i++) {		AddClassName (objects[i], 'hidden');
	}
}

function showAll (objects, mode) {	for (i = 0; i != objects.length; i++) {		objects[i].style.display=mode;
	}
}

function LoadAsTop () {
	if (top.location != location) {
		top.location.href = document.location.href;
	}
}

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) { // 1 = "open"
					target.innerHTML = '<p class="message">Idle</p>';
				}
				if (xmlhttp.readyState == 1) { // 1 = "open"
					target.innerHTML = '<p class="message">Opening...</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 {
						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.");
	}
}

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);
}