var dragObj;
var posx=0,posy=0;
if(window.addEventListener){ //Firefox
	window.addEventListener("mousemove",getMousePos,false);
}
else if(document.attachEvent){ //Internet Explorer
	document.attachEvent("onmousemove",getMousePos);
}
function getMousePos(e){
	if(!e)var e=window.event||window.Event;
	if("undefined"!=typeof e.pageX){
		posx=e.pageX;
		posy=e.pageY;
	}else{
		posx=e.clientX+document.body.scrollLeft;
		posy=e.clientY+document.body.scrollTop;
	}
	if(dragObj){fn_Msmv();}
}
function trim(stringToTrim){
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function getRandomNumber(max){return Math.floor(Math.random()*max);}
//alert('ssss');
function getXmlHttpRequestObject() {
	if(window.XMLHttpRequest){return new XMLHttpRequest();}
	else if(window.ActiveXObject){return new ActiveXObject("Microsoft.XMLHTTP");}
	else{alert('Status: Cound not create XmlHttpRequest Object.  Consider upgrading your browser.');}
}
function CheckNumericKeyInfo($char, $mozChar) {
	if($mozChar != null) { // Look for a Mozilla-compatible browser
		if(($mozChar >= 48 && $mozChar <= 57) || $mozChar == 0 || $char ==
		8 || $mozChar == 13 || $mozChar == 46 || $mozChar == 45) $RetVal = true;
		else {
			$RetVal = false;
			alert('Please enter a numeric value.');
		}
	}else { // Must be an IE-compatible Browser
		if(($char >= 48 && $char <= 57) || $char == 13 || $char == 46 || $char == 45) $RetVal = true;
		else {
			$RetVal = false;
			alert('Please enter a numeric value.');
		}
	}
	return $RetVal;
}
function format(expr, decplaces){
	var str= "" +Math.round(eval(expr)*Math.pow(10,decplaces));
	while (str.length <=decplaces) {
		str= "0" + str;
	}
	var decpoint=str.length-decplaces;
	var prereturn=str.substring(decpoint,str.length);
	if(decplaces>0){prereturn="."+prereturn;}
	return str.substring(0,decpoint)+prereturn;
}
function getElementsByTagNames(list,obj) {
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) {
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++) {
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (!testNode) return [];
	if (testNode.sourceIndex) {
		resultArray.sort(function (a,b) {
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition) {
		resultArray.sort(function (a,b) {
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}
function getElementLeft(id) {
	var elem = document.getElementById(id);
	xPos = elem.offsetLeft;
	tempEl = elem.offsetParent;
	while (tempEl != null) {
		xPos += tempEl.offsetLeft;
		tempEl = tempEl.offsetParent;
	}
	return xPos;
}
function getElementTop(id) {
	var elem = document.getElementById(id);
	yPos = elem.offsetTop;
	tempEl = elem.offsetParent;
	while (tempEl != null) {
		yPos += tempEl.offsetTop;
		tempEl = tempEl.offsetParent;
	}
	return yPos;
}
function getLatLongDistance(lat1,lon1,lat2,lon2){
	var R = 6371; // km
	R = R / 1.609344 * 5280; //feet (from miles)
	var dLat = toRad(lat2-lat1);
	var dLon = toRad(lon2-lon1);
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2);
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = R * c;
	return d;
}
function getAzimuth(lat1, lon1, lat2, lon2){
	lat1 = parseFloat(lat1);
	lon1 = parseFloat(lon1);
	lat2 = parseFloat(lat2);
	lon2 = parseFloat(lon2);
	if(!isNaN(lat1) && !isNaN(lon1) && !isNaN(lat2) && !isNaN(lon2)){
		var deltalat = getLatLongDistance(lat1,lon1,lat2,lon1);
		var deltalon = getLatLongDistance(lat2,lon2,lat2,lon1); //was originally in miles; is now in feet
		var delta;
		if(deltalon != 0){
			delta = deltalat/deltalon;
		}else{
			delta = 0;
		}
		var tempTan = toDeg(Math.atan(delta));
		var az1;
		if(tempTan==0){
			az1 = 0;
		}else if(lat1 >= lat2){
			if(lon1 >= lon2){az1 = 270-tempTan;}//3
			else{az1 = tempTan + 90;}//2
		}else{
			if(lon1 >= lon2){az1 = 270 + tempTan;}//4
			else{az1 = 90-tempTan;}//1
		}
		if(az1!=0){
			//az1 = 180 - az1;
			if(az1<0){az1 = 360 + az1;}
		}
		return az1;
	}else{
		return -1;
	}
}
function getAzimuthPixel(y1,x1,y2,x2){
	y1 = parseFloat(y1);
	x1 = parseFloat(x1);
	y2 = parseFloat(y2);
	x2 = parseFloat(x2);
	if(!isNaN(y1) && !isNaN(x1) && !isNaN(y2) && !isNaN(x2)){
		var deltax = Math.abs(x2 - x1);
		var deltay = Math.abs(y2 - y1);
		var delta;
		if(deltax != 0){delta = deltay/deltax;}
		else{delta = 0;}
		var tempTan = toDeg(Math.atan(delta));
		var az1;
		if(tempTan==0){
			az1=0;
		}else if(y1 >= y2){
			if(x1 >= x2){az1 = 270-tempTan;}//3
			else{az1 = tempTan + 90;}//2
		}else{
			if(x1 >= x2){az1 = 270 + tempTan;}//4
			else{az1 = 90-tempTan;}//1
		}
		if(az1!=0){
			az1 = 180 - az1;
			if(az1<0){az1 = 360 + az1;}
		}
		return az1;
	}else{
		return -1;
	}
}
function giveLatLonDistAzGetLatLon(inLat,inLon,dist,az){
	/*
	outLon = inLon + Sin((az*0.0174533)) * dist/(69.0933*cos(inLon*0.0174533))
	outLat = inLat + Cos((az*0.0174533)) * dist/(69.0933)
	*/
	az = parseInt(az);
	inLat = parseFloat(inLat);
	inLon = parseFloat(inLon);
	dist = parseFloat(dist);
	var outLon = inLon + Math.sin(toRad(az)) * dist/(69.0933*Math.cos(toRad(inLat)));
	var outLat = inLat + Math.cos(toRad(az)) * dist/(69.0933);
	return outLat+","+outLon;
}
function toRad(num){return num * Math.PI / 180;}
function toDeg(num){return num * 180 / Math.PI;}
function checkForEsc(e){
	if(!e) e = window.event || window.Event;
	var kC  = e.keyCode;
	var Esc = 27;
	if(kC==Esc){return true;}
	else{return false;}
}
function mouseWithinBorders(useElement){
	var compareTop = getElementTop(useElement);
	var compareBottom = getElementTop(useElement) + document.getElementById(useElement).offsetHeight;
	var compareLeft = getElementLeft(useElement);
	var compareRight = getElementLeft(useElement) + document.getElementById(useElement).offsetWidth;
	if(posx <= compareRight && posx >= compareLeft && posy >= compareTop && posy <= compareBottom){
		return true;
	}else{return false;}
}
function languageFilter(text){
	text = text.replace(/shit/ig,"****");
	text = text.replace(/fuck/ig,"****");
	text = text.replace(/cunt/ig,"****");
	text = text.replace(/bitch/ig,"*****");
	text = text.replace(/piss/ig,"****");
	text = text.replace(/tits/ig,"****");
	text = text.replace(/cocksucker/ig,"**********");
	text = text.replace(/bastard/ig,"*******");
	text = text.replace(/asshole/ig,"*******");
	return text;
}
function removeHTML(text){
	text = text.replace(/</g,"&lt;");
	text = text.replace(/>/g,"&gt;");
	return text;
}
function jsSafe(text){
	text = text.replace(/'/g,"\'");
	return text;
}
/*
to create leak-free inline functions
usage:
function attach()
{
  var element = document.getElementById("my-element");
  element.attachEvent("onclick", function()
    {
      alert("Clicked: " + this.innerHTML);
    }.closure(element));
}
*/
Function.prototype.closure = function(obj)
{
  // Init object storage.
  if (!window.__objs)
  {
    window.__objs = [];
    window.__funs = [];
  }

  // For symmetry and clarity.
  var fun = this;

  // Make sure the object has an id and is stored in the object store.
  var objId = obj.__objId;
  if (!objId)
    __objs[objId = obj.__objId = __objs.length] = obj;

  // Make sure the function has an id and is stored in the function store.
  var funId = fun.__funId;
  if (!funId)
    __funs[funId = fun.__funId = __funs.length] = fun;

  // Init closure storage.
  if (!obj.__closures)
    obj.__closures = [];

  // See if we previously created a closure for this object/function pair.
  var closure = obj.__closures[funId];
  if (closure)
    return closure;

  // Clear references to keep them out of the closure scope.
  obj = null;
  fun = null;

  // Create the closure, store in cache and return result.
  return __objs[objId].__closures[funId] = function ()
  {
    return __funs[funId].apply(__objs[objId], arguments);
  };
};