if (typeof($get) != 'function') function $get(e) { return document.getElementById(e); }

function isValidTSQLDate(s) {
	return s.match(/^(((((0[13578])|([13578])|(1[02]))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\-\/\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\-\/\s]?\d{4})(\s(((0[1-9])|([1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$/);
}
function isValidUri(s) {
	var ascii;
	var reserved = [ "!", "*", "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]" ];
	var unreserved = [ "-", "_", ".", "~" ];

	for (var i = 0, len = s.length; i < len; i++) {
		if (inArray(s.charAt(i), reserved)) return false;
		ascii = s.charCodeAt(i);
		if (!inArray(s.charAt(i), unreserved) && !((ascii > 47 && ascii < 58) || (ascii > 64 && ascii < 91) || (ascii > 96 && ascii < 123))) return false;
	}
	return true;
}
function inArray(needle, haystack) {
	for (var i = 0, len = haystack.length; i < len; i++) if (haystack[i] == needle) return true;
	return false;
}
function removeElement(id) { $get(id).parentNode.removeChild($get(id)); }
function removeAllChildren(obj) {
	while (obj.hasChildNodes()) obj.removeChild(obj.childNodes[0]);
}
function removeChildrenFrom(obj, num) {
	while (obj.childNodes[num]) obj.removeChild(obj.childNodes[num]);
}
function moveElement(element, dstElement) {
	dstElement.appendChild(element);
}
function moveSelectedOptions(srcID, dstID, sortFunc) {
	var src = $get(srcID);
	var dst = $get(dstID);
	var nodes = src.childNodes;

	var i = nodes.length;
	while (i > 0) {
		if (nodes[i - 1].selected) dst.appendChild(nodes[i - 1]);
		i--;
	}
	if (sortFunc != null) sortFunc(dstID);
}
function focusTextArea(ta) {
	if (ta.style.color == 'grey') {
		ta.value = "";
		ta.style.color = "#000000";
	}
}
function addToSelect(id, displayText, select) {
	var opt = document.createElement('option');
	opt.setAttribute('id', id);
	opt.innerHTML = opt.value = opt.title = displayText;
	$get(select).appendChild(opt);
}
function addToSelectWithValue(id, displayText, value, select) {
	var opt = document.createElement('option');
	opt.setAttribute('id', id);
	opt.innerHTML = displayText;
	opt.value = value;
	$get(select).appendChild(opt);
}
function getSelectedId(sel) {
	return sel.childNodes[sel.selectedIndex].id;
}
String.prototype.trimStart = trimStart;
function trimStart(char){
	var str = this;
	var i = 0;
	while(str.charAt(i) == char) i++;
	return str.substring(i);
}		
String.prototype.trimEnd = trimEnd;
function trimEnd(char){
	var str = this;
	// trim from end
	var j = str.length-1;
	while(str.charAt(j) == char) j--;
	return str.substring(0,j+1);
}		
String.prototype.trim = trim;
function trim(char){
	var str = this;
	return  this.trimStart(char).trimEnd(char);
}
function encodeHTML(s) {
	var d = document.createElement('div');
	d.appendChild(document.createTextNode(s));
	return d.innerHTML;
}
function upstreamEnc(s) {
	return encodeURIComponent(encodeHTML(s));
}
function displayDec(s) {
}
if (typeof vnglobals == 'undefined') var vnglobals = function() {
	return {
		getInnerHeight : function() {
			return (window.innerHeight) ? window.innerHeight : (document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.clientHeight;
		},
		getInnerWidth : function() {
			return (window.innerWidth) ? window.innerWidth : (document.body && document.body.clientWidth) ? document.body.clientWidth : document.documentElement.clientWidth;
		},
		getScrollY : function() {
			return (window.scrollY) ? window.scrollY : (document.documentElement) ? document.documentElement.scrollTop : 0;
		},
		getQS : function() {
			if (qs == null && typeof Querystring == 'function') qs = new Querystring();
			return qs;
		}
	};
}();

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
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);
};
