function addEvent(elm, evType, fn, useCapture){
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  }
}

function removeEvent(elm, evType, fn, useCapture){
  if (elm.removeEventListener){
    elm.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.detachEvent){
    var r = elm.detachEvent("on"+evType, fn);
    return r;
  }
}

function getObjPos(obj){
	var l=0;
	var t=0;
	while(obj.offsetParent){
		l+=obj.offsetLeft;
		t+=obj.offsetTop;
		obj=obj.offsetParent;
	}
	l+=obj.offsetLeft;
	t+=obj.offsetTop;
	return{x:l,y:t};
}

function getMousePos(ev){
	ev=ev||window.event;
	if(ev.pageX){
		return{x:ev.pageX,y:ev.pageY};
	}else{
		return{
			x:ev.clientX+document.documentElement.scrollLeft-document.body.clientLeft,
			y:ev.clientY+document.documentElement.scrollTop-document.body.clientTop
		};
	}
}

function getScroll() {
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    return {x:window.pageXOffset, y:window.pageYOffset};
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    return {x:document.body.scrollLeft, y:document.body.scrollTop };
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    return {x:document.documentElement.scrollLeft, y:document.documentElement.scrollTop };
  }
return {x:0,y:0};
}

function classAdd(obj,cls){
	obj.className+=' '+cls;
}

function classRem(obj,cls){
	var re=new RegExp(cls,"g");
	str=obj.className;
	bf=str;
	str=str.replace(re,'');
	str=str.replace(/  /g,' ');
	obj.className=str;
}

function $(what){
	return document.getElementById(what)||document.getElementsByName(what)[0];
}

function $S(what){
	return $(what).style;
}

function $H(what){
	return $(what).innerHTML;
}

function getQuery(){
	var args=new Array();
	var pairs=window.location.search.replace(/^\?/,'').split('&');
	for(var i=0;i<pairs.length;i++){
		pairs[i]=pairs[i];
		if(pairs[i].search(/^(.*?)=(.*)/)==0){
			var p=RegExp.$1;
			var v=RegExp.$2;
			args[p]=unescape(v);
		}
	}
	return args;
}

function scrollVisible(obj){
	if(arguments.length>1){
		// for elements at bottom of screen to clear
		scrollExtra=arguments[1];
	}else{
		scrollExtra=3;
	}
	var mytop=getObjPos(obj).y;
	var myheight=obj.offsetHeight;
	var myscroll=getScroll().y;
	var winheight=window.innerHeight;
	if(mytop+myheight>winheight+myscroll){
		if(myheight>winheight){
			document.documentElement.scrollTop=mytop-3;
		}else{
			document.documentElement.scrollTop=mytop+myheight-winheight+scrollExtra;
		}
	}else if(mytop<myscroll){
		document.documentElement.scrollTop=mytop-3;
	}
}

function dateVal(str){
	if(str.search(/^(\d{1,2})[\.\-\/](\d{1,2})[\.\-\/](\d{1,4})$/)==0){
		var mo=RegExp.$1;
		var da=RegExp.$2;
		var yr=RegExp.$3;
		//alert(mo+' - '+da+' - '+yr);
		if(mo<1 || mo>12) return false;
		if(da<1 || da>31) return false;
		if(yr<1) return false;
		return true;
	}else{
		return false;
	}
}

function prettyNum(numIn){
	var num=numIn.toString();
	while(num.match(/\d{4,}/)){
		num=num.replace(/(\d+)(\d{3})/,'$1,$2');
	}
	return num;
}

function trim(what){
	what=what.replace(/^\s*/,'');
	what=what.replace(/\s*$/,'');
	return what;
}

function httpPrefix(obj){
	var str=obj.value;
	if(str=='') return false;
	if(!str.match(/^http:\/\//)){
		str='http://'+str;
		obj.value=str;
	}
}
