/** map.js
  * Enchanted Mountains of Cattaraugus County
  * extended viewer
*/

//alert("browserInfo");
Event.observe(window,'load',beforeLoad, true);
//alert("beforeload");
Event.observe(window,'load',startUp, false);
//alert("load");
Event.observe(window,'load',tools_load, false);
//alert("resize");
Event.observe(window,'resize',fOnResize, false);
Event.observe(window,'unload', Event.unloadCache, false);
Event.observe(document,'mousemove',mouse_help_watch, false);

function startUp() {
    info("map.js:Start");
    browser = getBrowserInfo();
    bCookies = cookie_support();
    debug('Browser = '+browser.name);
    debug('Header Height = ' + Element.getStyle('header','height'));
    getServiceInfo();
    em_getPoints();
    toc_modify();
    
    //zoomboxes_modify();
    points_modify();
    fvlogger_modify();
    
    pointsContentModify();
    header_modify();
    Element.addClassName('mouse_help', 'hide');
    bMouseHelp_prev = false;
    if (Element.hasClassName('mouse_help','hide')) {
    	$('fld_lat_lon_visible').checked = false;
    } else {
    	$('fld_lat_lon_visible').checked = true;
    }
    
    /* png fix for IE 5.5 - 6 */
    var arVersion = navigator.appVersion.split("MSIE");
    var version = parseFloat(arVersion[1]);
    if ((version >= 5.5) && (document.body.filters)) {
    	for(var i=0; i<document.images.length; i++) {
    		var img = document.images[i]
    		var imgName = img.src.toUpperCase()
    		if (imgName.substring(imgName.length-3, imgName.length) == "PNG") {
    			fixPNG(imgName);
    		}
    	}
    }

}
function fOnResize() {
    setWH();
    setMapDivProperties(top,left,width,height,border,DivId);
    getMapWithCurrentExtent();
    em_getPoints();
    toc_modify();
    points_modify();
    fvlogger_modify();
    pointsContentModify();   
}

function beforeLoad() {
    modifyLoading();
    $('mapcontainer').style.top = top + "px";
    $('mapcontainer').style.left = left + "px";
    $('mapcontainer').style.width = width + "px";
    $('mapcontainer').style.height = height + "px";
    debug('mapcontainer = '+$('mapcontainer').style.height);
    $('maparea').style.width = width-(2*border) + "px";
    $('maparea').style.height = height-(2*border) + "px";
    $('maparea').style.top = 0;
    $('maparea').style.left = 0;
    setMapDivProperties(top,left,width,height,border,DivId);
    modifyZoomBoxDivs();
    
    /*
    if (isIE) {
    	debugger; // MS Script Debugger
    }
    */
}

function get_css_integer(tmpObject_name, tmpCSS_name) {
	var fTmp = null;
	var sTmp = Element.getStyle(tmpObject_name, tmpCSS_name);
	if(sTmp !== null){
		var tmpPOS_px = sTmp.indexOf("px");
		fTmp = parseFloat(sTmp.substring(0,tmpPOS_px));
	}
	return parseInt(fTmp!=null?fTmp:0);
}
function toc_modify(){
    //
    info("TOC Contain top="+Element.getStyle('toc_contain', 'top')+" Padding-top:"+Element.getStyle('toc_contain','padding-top'));
    info("TOC Contain2 w="+Element.getDimensions('toc_contain2').width+", h="+Element.getDimensions('toc_contain2').height);
    sTOC_contain_top = Element.getStyle('toc_contain', 'top');
    pos_px = sTOC_contain_top.indexOf("px");
    toc_contain_top = parseFloat(sTOC_contain_top.substring(0,pos_px));
    toc_contain_top = parseInt(toc_contain_top);
    
    sTOC_contain2_padding = Element.getStyle('toc_contain2', 'padding-top');
    pos_px = sTOC_contain2_padding.indexOf("px");
    toc_contain2_padding = parseFloat(sTOC_contain2_padding.substring(0,pos_px));
    toc_contain2_padding = parseInt(toc_contain2_padding);

    toc_contain2_border = 6;
    info("TOC Contain h="+$('toc_contain').style.height+", new h="+(height-toc_contain_top));
    $('toc_contain').style.height = (height-toc_contain_top);
    info("TOC Contain3 h="+$('toc_contain3').style.height+", new h="+(height-toc_contain_top-toc_contain2_padding-toc_contain2_border));
    $('toc_contain3').style.height = (height-toc_contain_top-toc_contain2_padding-toc_contain2_border);
}
function points_modify() {
	$('points').style.top = top + "px";
    $('points').style.left = left + "px";
    $('points').style.width = width + "px";
    $('points').style.height = height + "px";
	iPoint_zindex = parseInt(Element.getStyle('points', 'z-index') || 7) + 1;
	iPoint_zindex_x = iPoint_zindex;
	//alert("z-index="+iPoint_zindex);
}
function modifyLoading(){
    //
    $('loading').style.top = top + (height/2) - 12 + "px";
    $('loading').style.left = left + (width/2) - 80 + "px";
    $('loading').style.visibility = show;
}
function header_modify(){
    /*if (browser.name == 'msie'){
    	debug('Header height = ' + $('header').style.height);
        //$('header').style.height = 56 + "px";
        debug("IE modified #header height");
    }*/
    var oTmp = new Object();
    oTmp = Element.getDimensions('header');
    $('tools_move').style.left = parseInt(oTmp['width'] + 3) +"px";
}
function zoomboxes_modify(){
    $('zoombox_top').style.width = width/1.75 + "px";
    $('zoombox_bottom').style.width = width/1.75 + "px";
    $('zoombox_left').style.width = width/1.75 + "px";
    $('zoombox_right').style.width = width/1.75 + "px";
    $('zoombox_top').style.height = height/1.75 + "px";
    $('zoombox_bottom').style.height = height/1.75 + "px";
    $('zoombox_left').style.height = height/1.75 + "px";
    $('zoombox_right').style.height = height/1.75 + "px";
}
function fvlogger_modify() {
    var fvlogger_new_height = 168;
    $('fvlogger').style.top = height - fvlogger_new_height*1.1 + "px";
    $('fvlogger').style.height = fvlogger_new_height + "px";
 /*   new Draggable('fvlogger',{constraint:'horizontal',handle:'dt',
        *starteffect:function(element) {
        	element._opacity = Element.getOpacity(element);
        	new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
        },
        endeffect:function(element) {
        	var toOpacity = (typeof element._opacity == ‘number’ ? element._opacity : 1.0);
        	new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity});
        }*
    }
    ); */
}
function pointsContentModify() {

	var tmpTop = get_css_integer('header', 'top') + get_css_integer('header', 'height');
	//alert("height="+height+", tmpTop="+tmpTop+", padding-top="+get_css_integer('points_content_wrap', 'padding-top')+", padding-bottom="+get_css_integer('points_content_wrap', 'padding-bottom'));
	var tmpHeight = height - tmpTop - (isIE?0:parseInt(get_css_integer('points_content_wrap', 'padding-top')))-parseInt(get_css_integer('points_content_wrap', 'padding-bottom'));
	oPointsContentDim['top'] = tmpTop;
	oPointsContentDim['left'] = get_css_integer('points_content_wrap', 'left');
	oPointsContentDim['width'] = get_css_integer('points_content_wrap', 'width');
	//alert('width='+oPointsContentDim['width']);
	oPointsContentDim['height'] = tmpHeight;
	$('points_content_wrap').style.top = tmpTop + "px";
	$('points_content_wrap').style.height = tmpHeight+ "px";
	$('points_content_wrap').style.zIndex = 5;
	$('points_content').style.zIndex = 5;

	var aTmpNav = new Array();
	aTmpNav = Position.cumulativeOffset($('points_content_nav'));
	$('points_saved_wrap').style.top = parseInt(parseInt(aTmpNav[1])-parseInt($('points_content_wrap').style.top)+2 + parseInt(Element.getHeight('points_content_nav')))+"px";
	$('points_saved').style.top = $('points_saved_wrap').style.top;

	$('points_info_wrap').style.top = $('points_saved_wrap').style.top;
	//$('points_search_wrap').style.top = $('points_saved_wrap').style.top;

	Element.makePositioned('points_saved');
	Element.makePositioned('points_info');
	//Element.makePositioned('points_search');
	var aTmpSaved = new Array();
	aTmpSaved = Position.cumulativeOffset($('points_saved'));

	aTmpContentWrap = new Array();
	aTmpContentWrap = Position.cumulativeOffset('points_content_wrap');
	oTmpContentWrap = new Object();
	oTmpContentWrap = Element.getDimensions('points_content_wrap');

	$('points_saved').style.height = parseInt(parseInt(oTmpContentWrap['height']) - parseInt(parseInt($('points_saved').style.top)-parseInt(aTmpContentWrap[1]))-2-20) + 'px';
	$('points_info').style.height = $('points_saved').style.height;
	//$('points_search_wrap').style.height = $('points_saved').style.height;

	Element.undoPositioned('points_saved');
	Element.undoPositioned('points_info');
	//Element.undoPositioned('points_search');

	/*$('points_content_nav').innerHTML = '<li><span><a href="#screen" id="points_screen_show">On Screen</a></span></li>\n'+
		'<li><span><a href="#saved" id="points_saved_show">Saved</a></span></li>';
	*/
	if (bCookies==1) {
		//activate layer
		pointsContentNav('points_saved_show', 1);
	} else {
		//activate layer
		pointsContentNav('points_info_show', 1);
	}
	if (bLabels_info) {
		$('points_info_labels').checked = 'checked';
		$('points_info_labels_lbl').innerHTML = "Labels are <strong>shown</strong>";
	} else {
		$('points_info_labels_lbl').innerHTML = "Labels are <strong>hidden</strong>";
	}
	if (bLabels_saved) {
		$('points_saved_labels').checked = 'checked';
		$('points_saved_labels_lbl').innerHTML = "Saved Locations Labels are <strong>shown</strong>";
	} else {
		$('points_saved_labels_lbl').innerHTML = "Saved Locations Labels are <strong>hidden</strong>";
	}
}

/*
 *=String Reverse
 *@Reverses a string
 */
function string_reverse(sIn) {
    var sOut;
    for (i = 0; i <= sIn.length; i++) {
      sOut = sIn.charAt(i) + sOut
    }
    return sOut;
}
/* the following is accredited to www.breakingpar.com */
function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1) {
      return false;
   } else {
      return true;
   }
}

function convert_latitude_longitude(latitude, longitude) {
	// Converts Map Coordinates to screen x, y coordinates relative to the current view
	/* minx, miny, maxx, maxy */
	
	/* example
	 * minx="1157693.06647532"
	 * miny="862216.0372816"
	 * maxx="1407275.37197047"
	 * maxy="973726.663681727"
	 * x="1162866.75027578" y="907484.269416659"
	 */	
	
	/* 
	 convertPixelToMap(px, py)
	 when you pass 0,0 to this you get
	 the minx and the maxy
	 the mapping coordinate system 0,0 originates from the bottom left
	 */
	
	debug("Latitude:"+latitude+", Longitude:"+longitude);
	var Envelope_Width = maxx - minx;
	var Envelope_Height = maxy - miny;
	debug('Env_W=' + Envelope_Width + ', Env_H=' + Envelope_Height + ', ratio=' + Envelope_Width/Envelope_Height);
	debug('W/H Ratio = ' + width/height);
	
	
	var tmpRelativeX = longitude - minx;
	var tmpRelativeY = maxy - latitude;
	debug('tmpRelX=' + tmpRelativeX + ', tmpRelY=' + tmpRelativeY);
	var tmpPointX = parseInt((tmpRelativeX*width)/Envelope_Width);
	var tmpPointY = parseInt((tmpRelativeY*height)/Envelope_Height);
	debug('Point X='+tmpPointX);
	debug('Point Y='+tmpPointY);
	return new Array(tmpPointX,tmpPointY);
}

function createHotSpot(pPoint, x, y, pName, pDebug) {
	//
	// in #points create add point layer
	// point_x
	//$('points').childNodes.length;
	
	// check if points are - numbers or outside of the boundaries of the current view
	if (x < 0 || x > mwidth) {
		return 0;
	}
	if (y < 0 || y > mheight) {
		return 0;
	}
	var strPoints = '';
	var pTop = y;
	var pLeft = x;
	
	strPoints += '\n<a href="#'+point_prefix + pPoint + '" id="'+point_prefix + pPoint + '"' + ' style="top:' + parseInt(y-pSquareSize/2) + ';'+
	    'left:' + parseInt(x-pSquareSize/2) + ';" class="point" title="'+pName+'">'+pName+'</a>';
	if (!isInteger(pPoint)){
		strPoints += '<div id="point_info_' + pPoint + '"' +
		' style="top:' + (pointLocatedVertically(pPoint)?parseInt(y-pSquareSize*1.5+1):parseInt(y+pSquareSize/2)-1) + '; left:' + parseInt(x-pSquareSize/2-5) + '" class="point_info pdebug"><div>' + pName;
	} else {	
	    var iTmpCookie = isPointCookie(aPoint_layer_id[pPoint], aPoint_arc_point_id[pPoint]);
		strPoints += '<div id="point_info_' + pPoint + '"' +
		' style="top:' + (pointLocatedVertically(pPoint)?parseInt(y-pSquareSize*1.5+1):parseInt(y+pSquareSize/2)-1) +
		'; left:' + parseInt(x-pSquareSize/2-5) + '" class="point_info">' +
		'<a href="#star_'+pName+'" id="star_'+pPoint+'" class="btn_star '+
	    (iTmpCookie?"star_on":"star_off") + '" title="'+(iTmpCookie?'Remove '+pName+' from your Saved locations':'Add '+pName+' to your Saved locations')+'">'+(iTmpCookie?'Saved':'Save this')+'</a>'+
	    '<a href="#close_' + pName + '" class="btn_pi_close" title="Close the information on ' + pName + '">Close</a>';
	    if (aPoint_hotlink[pPoint] != '') {
          strPoints += '<span class="more-info"><a href="'+link_repair(aPoint_hotlink[pPoint]) + '" title="Get more information on this location at EnchantedMountains.info" class="external">More Info</a></span>\n';
        }
        strPoints += '<div class="pi_wrap_1">'+
		'<div class="pi_wrap_2"><h4><a href="'+link_repair(aPoint_hotlink[pPoint])+ '" title="Get more information on ' + pName + '" class="external">' + pName + '</a></h4>';
		/*strPoints += '  <a href="#star_'+pName+'" id="star_'+pPoint+'" class="btn_star '+
		(iTmpCookie?"star_on":"star_off") +
		'" title="'+(iTmpCookie?'Remove '+pName+' from your Saved locations':'Add '+pName+' to your Saved locations')+'">Star</a>\n';
		strPoints += '  <a href="#close_' + pName + '" class="btn_pi_close" title="Close the information on ' + pName + '">Close</a>';
		*/
		strPoints += '<address>';
		if (aPoint_address[pPoint] != '') {
		    strPoints += aPoint_address[pPoint] + '<br/>';
		}
		if (aPoint_city[pPoint] != '') {
			strPoints += aPoint_city[pPoint] + ', ';
		}
		if (aPoint_state[pPoint] != '') {
			strPoints += aPoint_state[pPoint] + ' ' + aPoint_zip[pPoint];
		}
		strPoints += '</address>';
		if (aPoint_phone[pPoint] != '') {
			strPoints += '<p class="phone">'+aPoint_phone[pPoint]+'</p>';
		}
		strPoints += '<ul>\n';
		if ((aPoint_web_site[pPoint] != '') && (aPoint_web_site[pPoint] != null)) {
			strPoints += '<li><a href="'+link_repair(aPoint_web_site[pPoint])+
			'" class="external" title="Visit ' + pName + '&#39;s website">'+aPoint_web_site[pPoint]+'</a></li>';
		}
		
		strPoints += '  </ul>';

		if (aPoint_info[pPoint] != null) {
			strPoints += '<p>'+aPoint_info[pPoint].replace(/\n/g, "<br/>")+'</p>';
		}
		// coords need to be converted to LAT LONG
		var u = Math.pow(10,numDecimals);
		var uX = Math.round(aPoint_longitude[pPoint] * u) / u;
		var uY= Math.round(aPoint_latitude[pPoint] * u) / u;
		var aTmpLonLat = (convert_SP_to_LATLONG(uX,uY)).split('|');

		var tmpLon = (Math.round(aTmpLonLat[0] * 100000)) / 100000;
		var tmpLat = (Math.round(aTmpLonLat[1] * 100000)) / 100000;
		strPoints += '<p class="coords">Latitude: '+(bPointDebug?'['+aPoint_latitude[pPoint]+']':'')+tmpLat+'<br/>Longitude: '+(bPointDebug?'['+aPoint_longitude[pPoint]+']':'') + tmpLon + '</p>';
	}

	strPoints += '</div></div></div>';
	debug('Creating Point '+pPoint+', x='+x+',y='+y);
	new Insertion.Bottom($('points'), strPoints);
	if (isPointCookie(aPoint_layer_id[pPoint], aPoint_arc_point_id[pPoint])) {
		// label with letter
		var sTmpLabel = aLetters[cookies_saved_position(aPoint_layer_id[pPoint], aPoint_arc_point_id[pPoint])];
		point_insert_label(aPoint_layer_id[pPoint], aPoint_arc_point_id[pPoint],
		 parseInt(x-pSquareSize/2),
		 parseInt(y-pSquareSize/2),
		 'Label for Saved location letter '+sTmpLabel+' - '+aPoint_name[pPoint],
		 dir_label_letters+sTmpLabel+image_label_ext,
		 'letter');
	} else {
		// label with number
		point_insert_label(aPoint_layer_id[pPoint], aPoint_arc_point_id[pPoint],
		 parseInt(x-pSquareSize/2),
		 parseInt(y-pSquareSize/2),
		 'Label for location number '+pPoint+' - '+aPoint_name[pPoint],
		 dir_label_numbers+(pPoint)+image_label_ext,
		 'number');
	}
	return 1;
}

function link_repair(sTmpLink,sTmpDomain){
	/* should be improved to check for TLDs but this will work for now */
	if (sTmpLink.indexOf('http')>-1) {
		return sTmpLink;
	} else {
		if (sTmpLink.indexOf('www')>-1) {
			return 'http://'+sTmpLink;
		} else {
			if (sTmpLink.length == 0) {
				return null;
			}
			if (sTmpDomain == null) {
				return domain_target+sTmpLink; 
			} else {
				return sTmpDomain+sTmpLink;
			}
		}
	}
}
function link_remove_http(sTmpLink) {
	var sTmpFind = 'http://';
	var iTmpFindLen = sTmpFind.length;
	var iTmpPosHttp = sTmpLink.indexOf(sTmpFind);
	if (iTmpPosHttp>-1) {
		return sTmpLink.substring(iTmpFindLen);
	} else {
		return sTmpLink;
	}
}

function point_insert_label(tmpLayerID,tmpArcID,tmpX,tmpY,tmpName,tmpImg,tmpClass) {
	if (tmpClass=='number') {
		tmpClass += (!bLabels_info?' hide':'');
	} else {
		tmpClass += (!bLabels_saved?' hide':'');
	}
	if (tmpImg==null||tmpImg.length==0) {
		new Insertion.Bottom($('labels'),
		    '<div id="label_'+tmpLayerID+'_'+tmpArcID+'" class="plabel '+tmpClass+'" style="top:' + parseInt(tmpY) + ';'+
		    'left:' + parseInt(tmpX) + ';">'+
		    tmpName+'</div>\n');
	} else {
		new Insertion.Bottom($('labels'),
		    '<div id="label_'+tmpLayerID+'_'+tmpArcID+'" class="plabel '+tmpClass+'" style="top:' + parseInt(tmpY) + ';'+
		    'left:' + parseInt(tmpX) + ';">'+(isIE?'<div style="background-image:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+tmpImg+'\', sizingMethod=\'crop\')" id="pnt_img_'+tmpName+'">&nbsp;</div>':'<img src="'+tmpImg+'" alt="'+tmpName+'" />')
		    +'</div>\n');		
	}
}
function point_remove_label(tmpLayerID,tmpArcID) {
	Element.remove($('label_'+tmpLayerID+'_'+tmpArcID));
}
function point_labels_showhide(tmpClassName) {
	
}
function point_generate_id(){
	//
	var point_return_id = point_unique_id;
	point_unique_id += 1;
	return point_return_id;
}
function point_add(
    pLayer_id,
    pLatitude,
    pLongitude,
    pName,
    pAddress,
    pCity,
    pState,
    pZip,
    pPhone,
    pWeb_site,
    pArc_point_id,
    pHotlink,
    pInfo
    ){
	/* PASSED to this function
	 * latitude
	 * longitude
	 * name
	 * address
	 * city
	 * state
	 * zip
	 * phone
	 * web_site
	 * arc_point_id,
	 * hotlink to the Enchanted Mountains
	 * additional point info
	 */
	// generate unique point ID
	var tmpPoint_id = point_generate_id();
	aPoint_id[tmpPoint_id] = tmpPoint_id;
	aPoint_layer_id[tmpPoint_id] = pLayer_id;
	aPoint_latitude[tmpPoint_id] = pLatitude;
	aPoint_longitude[tmpPoint_id] = pLongitude;
	aPoint_name[tmpPoint_id] = pName;
	aPoint_address[tmpPoint_id] = pAddress;
	aPoint_city[tmpPoint_id] = pCity;
	aPoint_state[tmpPoint_id] = pState;
	aPoint_zip[tmpPoint_id] = pZip;
	if (pPhone == null) {
		aPoint_phone[tmpPoint_id] = '';
	} else {
		aPoint_phone[tmpPoint_id]= pPhone;
	}
	aPoint_web_site[tmpPoint_id] = pWeb_site;
	aPoint_arc_point_id[tmpPoint_id] = pArc_point_id;
	if (pHotlink == null) {
		aPoint_hotlink[tmpPoint_id] = '';
	} else {
		aPoint_hotlink[tmpPoint_id] = pHotlink;
	}
	aPoint_info[tmpPoint_id] = pInfo;
	
	// convert latitude and longitude to screen coords x,y
	var atmpScreen = convert_latitude_longitude(pLatitude, pLongitude);
	aPoint_x[tmpPoint_id] = atmpScreen[0];
	aPoint_y[tmpPoint_id] = atmpScreen[1];
	
	aPoint_show[tmpPoint_id] = 0;
	var bTmpCookie = isPointCookie(aPoint_layer_id[tmpPoint_id], aPoint_arc_point_id[tmpPoint_id]);
	aPoint_star[tmpPoint_id] = (bTmpCookie === null?0:bTmpCookie);
	aPoint_sort[tmpPoint_id] = -1;
}

/*
 * Calls functions to create points on screen on the map and in the info layer
 */
function pointsScreenCreate() {
	//alert("creating points");
	var iTmpPointsNum = point_unique_id;
	for (var tmpPoint_id=0; tmpPoint_id<iTmpPointsNum;tmpPoint_id++) {
		if (aPoint_x[tmpPoint_id] > 0 && aPoint_y[tmpPoint_id] > 0 ) {
			pointsInfoAdd(
			    aPoint_id[tmpPoint_id],
			    aPoint_x[tmpPoint_id],
			    aPoint_y[tmpPoint_id],
			    aPoint_name[tmpPoint_id]);
			createHotSpot(
			    aPoint_id[tmpPoint_id],
			    aPoint_x[tmpPoint_id],
			    aPoint_y[tmpPoint_id],
			    aPoint_name[tmpPoint_id]);
		}
	}
}
/*
 *=points_info_add
 *
 */
function pointsInfoAdd(tmpPID, tmpX, tmpY, pName) {
	//
	//$('points_info').innerHTML = "<ul>\n"+points_info_content+"</ul>\n";
	//var tmpTxt = "<li>"+aPoint_id[tmpPID]+") "+aPoint_name[tmpPID]+"</li>\n";
	//var tmpNew = $('points_info').childNode[0].childNodes.length;
	//alert("Nodes "+$('points_info').childNodes.length);
	var iTmpCookie = isPointCookie(aPoint_layer_id[tmpPID], aPoint_arc_point_id[tmpPID]);
	var tmpLayerID = getLayerIndexByLayerID(aPoint_layer_id[tmpPID]);
	if (($('points_info').childNodes.length) == 0) {
		new Insertion.Bottom($('points_info'), '<ul>\n</ul>\n');
		new Insertion.Bottom($('points_info').childNodes[0], '<li id="pinfo_'+tmpPID+'">'+
		    '<img src="'+LayerSwatch[tmpLayerID].src+'" alt="Icon for '+LayerName[tmpLayerID]+' - '+aPoint_name[tmpPID]+'" />'+

		    aPoint_id[tmpPID]+') '+'<a class="pinfo_jump" id="point_info_jump_'+aPoint_id[tmpPID]+'" href="#'+aPoint_id[tmpPID]+'" title="Click to view more info about '+aPoint_name[tmpPID]+'">'+aPoint_name[tmpPID]+' ('+aPoint_city[tmpPID]+')'+'</a></li>\n');
		    /*'<div class="btn_star_info '+
		    (iTmpCookie?"star_on":"star_off")+'">'+
		    '<a href="#star_'+pName+'" id="star_info_'+tmpPID+'"' +
		    ' title="'+(iTmpCookie?'Remove '+pName+' from your Saved locations':'Add '+pName+' to your Saved locations')+'">Star</a></div>\n'+
		    */
		//alert("Nodes after insert "+$('points_info').childNodes.length);
	} else {
		//alert("NodeName="+$('points_info').childNodes[0].nodeName);
	    new Insertion.Bottom($('points_info').childNodes[0], '<li id="pinfo_'+tmpPID+'" '+(iPoints_info%2==0?'':' class="x"')+'>'+
	        '<img src="'+LayerSwatch[tmpLayerID].src+'" alt="Icon for '+LayerName[tmpLayerID]+' - '+aPoint_name[tmpPID]+'" />'+
	        
	        aPoint_id[tmpPID]+') '+'<a class="pinfo_jump" id="point_info_jump_'+aPoint_id[tmpPID]+'" href="#'+aPoint_id[tmpPID]+'" title="Click to view more info about '+aPoint_name[tmpPID]+'">'+aPoint_name[tmpPID]+' ('+aPoint_city[tmpPID]+')'+'</a></li>\n');
	        /*
	        '<div class="btn_star_info '+
		    (iTmpCookie?"star_on":"star_off")+'">'+
		    '<a href="#star_'+pName+'" id="star_info_'+tmpPID+'"' +
		    ' title="'+(iTmpCookie?'Remove '+pName+' from your Saved locations':'Add '+pName+' to your Saved locations')+'">Star</a></div>\n'+
	        */
	}
	iPoints_info++;
	
	/*
	aPoint_id[tmpPoint_id] = tmpPoint_id;
	aPoint_layer_id[tmpPoint_id] = pLayer_id;
	aPoint_latitude[tmpPoint_id] = pLatitude;
	aPoint_longitude[tmpPoint_id] = pLongitude;
	aPoint_name[tmpPoint_id] = pName;
	aPoint_address[tmpPoint_id] = pAddress;
	aPoint_city[tmpPoint_id] = pCity;
	aPoint_state[tmpPoint_id] = pState;
	aPoint_zip[tmpPoint_id] = pZip;
	if (pPhone == null) {
		aPoint_phone[tmpPoint_id] = '';
	} else {
		aPoint_phone[tmpPoint_id]= pPhone;
	}
	aPoint_web_site[tmpPoint_id] = pWeb_site;
	aPoint_arc_point_id[tmpPoint_id] = pArc_point_id;
	if (pHotlink == null) {
		aPoint_hotlink[tmpPoint_id] = '';
	} else {
		aPoint_hotlink[tmpPoint_id] = pHotlink;
	}
	aPoint_info[tmpPoint_id] = pInfo;
	aPoint_x[tmpPoint_id] = atmpScreen[0];
	aPoint_y[tmpPoint_id] = atmpScreen[1];
	aPoint_show[tmpPoint_id] = 0;
	aPoint_star[tmpPoint_id] = 0;
	aPoint_sort
	*/
}

/*
 *=point Show Close
 */
function pointShowClose(elementID) {
	//
	//alert("elementID="+elementID);
	var aTmp = elementID.split("_");
	var pointID = aTmp[1];
	var elementInfoID = aTmp[0] + "_info_" + aTmp[1];
	if (aPoint_show[pointID] == 0) {
		// expand the point info layer
		element_zIndexPrevious = iPoint_zindex;
		iPoint_zindex_x += 2;
		//alert("iPoint_zindex_x="+iPoint_zindex_x);
		
		$(elementID).style.zIndex = parseInt(iPoint_zindex_x); //increase the point layer's zindex
		$(elementInfoID).style.zIndex = parseInt(iPoint_zindex_x-1); //increase the point information layer's zindex
		
		$(elementInfoID).style.display = 'block';
		
		//alert("z-index: "+$(elementID).style.zIndex+" wrap z-index: "+$('points_content_wrap').style.zIndex+" content z-index: "+$('points_content').style.zIndex);
		if (pointLocatedVertically(pointID)) {
			// expand upwards
			//alert("Expand Upwards");
			/*
			var tmpTop = parseFloat(Element.getStyle(elementInfoID,'top')  || 0) - 150 - point_padding_tb;
			var tmpLeft = parseFloat(Element.getStyle(elementInfoID,'left') || 0);
			var tmpWidth = parseFloat(Element.getStyle(elementInfoID,'width') || 0) + 150;
			var tmpHeight = parseFloat(Element.getStyle(elementInfoID,'height') || 0) + 150 + point_padding_tb;
			*/
			//alert('Expand Upwards = '+parseFloat(Element.getStyle(elementInfoID,'top') || 0) +' - ' + point_info_expand_height +' + ' + (point_info_close_height));
			var tmpTop = parseFloat(Element.getStyle(elementInfoID,'top')  || 0) - point_info_expand_height + point_info_close_height;
			var tmpLeft = parseFloat(Element.getStyle(elementInfoID,'left') || 0);
			var tmpWidth = point_info_expand_width;
			var tmpHeight = point_info_expand_height;
			//alert('Expand Top'+tmpTop+', Left'+tmpLeft+', Width'+tmpWidth+', Height'+tmpHeight);
			new Effect.Parallel(
			    [ new Effect.MoveAndResizeTo(elementInfoID, tmpTop, tmpLeft, tmpWidth, tmpHeight,
			    {
				    afterFinish:function() {
				    	var tmpElem = $(elementInfoID);
				    	for (var x=0;x<tmpElem.childNodes.length;x++)
				    	{
				    		// note: tag names for javascript comparisons must be in UPPERCASE!
				    		if (tmpElem.childNodes[x].tagName == 'DIV') {
				    			Element.show(tmpElem.childNodes[x]);
				    		}
				    	}
				    	//alert("show after - z-index Info:"+parseInt(Element.getStyle(elementInfoID, 'z-index'))+", Point:"+parseInt(Element.getStyle(elementID, 'z-index')));
				    }
			    }
			    ),
			    new Effect.Opacity(
			        elementInfoID,
			        { sync: true, to: 0.9, from: 0.0 }
			    ),
			    new Effect.Opacity(
			        elementID,
			        { sync: true, to: 0.9, from: 0.0 }
			    )
			    ],
			    {
				duration: 0.5,
			    beforeStart: function(effect)
			        {
			        	/*
			        	Element.removeClassName(effect.effects[0].element, 'pborder_off');
			        	Element.addClassName(effect.effects[0].element, 'pborder_on');
			        	*/
			        	if (!Element.hasClassName(elementID, 'arrowtop')) {
			        		Element.addClassName(elementID, 'arrowtop');
			        		Element.addClassName(elementInfoID, 'pi_bg');
			        		$(elementInfoID).style.visibility = show;
			        	}
			        	//alert("show - z-index Info:"+Element.getStyle(elementInfoID, 'z-index')+" Point:"+Element.getStyle(elementID, 'z-index'));
			        }
			}
			);
			aPoint_show[pointID] = 1;
		} else {
			// expand downwards
			//alert("Expand Downwards");
			var tmpTop = parseInt(Element.getStyle(elementInfoID,'top')  || 0);
			var tmpLeft = parseInt(Element.getStyle(elementInfoID,'left') || 0);
			var tmpWidth = parseInt(Element.getStyle(elementInfoID,'width') || 0) + point_info_expand_width - point_info_close_width;
			var tmpHeight = point_info_expand_height;
			new Effect.Parallel(
			[ new Effect.MoveAndResizeTo(elementInfoID, tmpTop, tmpLeft, tmpWidth, tmpHeight,
			{
				afterFinish:function() {
			    		var tmpElem = $(elementInfoID);
			    		for (var x=0;x<tmpElem.childNodes.length;x++)
			    		{
			    			// note: tag names for javascript comparisons must be in UPPERCASE!
			    			if (tmpElem.childNodes[x].tagName == 'DIV') {
			    				Element.show(tmpElem.childNodes[x]);
			    			}
			    		}
			    		//alert("show after - z-index Info:"+parseInt(Element.getStyle(elementInfoID, 'z-index'))+", Point:"+parseInt(Element.getStyle(elementID, 'z-index')));
			        }
			    }
			    ),
			    new Effect.Opacity(
			        elementInfoID,
			        { sync: true, to: 0.9, from: 0.0 }
			    ),
			    new Effect.Opacity(
			        elementID,
			        { sync: true, to: 0.9, from: 0.0 }
			    )
			    ],
			    {
			    	duration: 0.5,
			    	beforeStart: function(effect)
			    	{
			    		/*
			    		Element.removeClassName(effect.effects[0].element, 'pborder_off');
			    		Element.addClassName(effect.effects[0].element, 'pborder_on');
			    		*/
			    		if (!Element.hasClassName(elementID, 'arrowbottom')) {
			    			Element.addClassName(elementID, 'arrowbottom');
			    			$(elementInfoID).style.display = 'block';
			    			/*var tmpStr = elementInfoID+" childNodes="+$(elementInfoID).childNodes.length;
			    			for (var x=0;x<$(elementInfoID).childNodes.length;x++) {
			    				if ($(elementInfoID).childNodes[x].nodeType == 3){
			    					
			    					tmpStr += "\n Text node - "+$(elementInfoID).childNodes[x].nodeValue.length;

			    				} else {
			    					var tmpElem = $(elementInfoID).childNodes[x];
			    					tmpStr += "\n"+tmpElem.nodeName+" "+tmpElem.childNodes.length;
			    					for (var yyy=0;yyy<tmpElem.childNodes.length;yyy++) {
			    				        tmpStr += "\n-"+tmpElem.childNodes[yyy].nodeName;
			    					}
			    				}
			    			}
			    			alert(tmpStr);
			    			*/
			        		Element.addClassName(elementInfoID, 'pi_bg');
			    			$(elementInfoID).style.visibility = show;
			    		}
			    		//alert("show - z-index Info:"+parseInt(Element.getStyle(elementInfoID, 'z-index'))+" Point:"+parseInt(Element.getStyle(elementID, 'z-index')));
			    	}
			    }
			    );
			aPoint_show[pointID] = 1;
		}
	} else {
		// collapse the point layer
		$(elementID).style.zIndex = element_zIndexPrevious; //restore the point layer's original zindex
		$(elementInfoID).style.zIndex = element_zIndexPrevious-2; //restore the point information layer's original zindex
		if (pointLocatedVertically(pointID)) {
			// collapse downwards
			//alert("Collapse down");
			var tmpTop = parseFloat(Element.getStyle(elementInfoID,'top') || 0) + (point_info_expand_height - point_info_close_height);
			var tmpLeft = parseFloat(Element.getStyle(elementInfoID,'left') || 0);
			var tmpWidth = point_info_close_width;
			var tmpHeight = point_info_close_height;
			//alert('Collapse Top'+tmpTop+', Left'+tmpLeft+', Width'+tmpWidth+', Height'+tmpHeight+', closewidth'+point_info_close_width+', closeheight'+point_info_close_height);
			new Effect.Parallel(
			    [
			    new Effect.MoveAndResizeTo(elementInfoID, tmpTop, tmpLeft, tmpWidth, tmpHeight,
			    {
			    	beforeStart: function() {
			    		var tmpElem = $(elementInfoID);
			    		for (var x=0;x<tmpElem.childNodes.length;x++) {
			    			// note: tag names for javascript comparisons must be in UPPERCASE!
			    			if (tmpElem.childNodes[x].tagName == 'DIV') {
			    				Element.hide(tmpElem.childNodes[x]);
			    			}
			    		}
			    		Element.removeClassName(elementInfoID, 'pi_bg');
			        }
			    }
			    ),
			    new Effect.Opacity(
			        elementInfoID,
			        { sync: true, to: 0.0, from: 0.9 }
			    ),
			    new Effect.Opacity(
			        elementID,
			        { sync: true, to: 0.0, from: 0.9 }
			    )
			    ],
			    {
				    duration: 1,
			        afterFinish: function(effect)
			        {
			    		if (Element.hasClassName(elementID, 'arrowtop')) {
			    			Element.removeClassName(elementID, 'arrowtop');
			    			$(elementInfoID).style.visibility = hide;
			    		}
			    		$(elementInfoID).style.display = 'none';
			    		//alert("hide - "+Element.getStyle(elementInfoID, 'display')+", z-index Info:"+parseInt(Element.getStyle(elementInfoID, 'z-index'))+" Point:"+parseInt(Element.getStyle(elementID, 'z-index')));
			    	}
			    }
			);
			aPoint_show[pointID] = 0;
		} else {
			// collapse upwards
			//alert("Collapse Upwards");
			var tmpTop = parseInt(Element.getStyle(elementInfoID,'top')  || 0);
			var tmpLeft = parseInt(Element.getStyle(elementInfoID,'left') || 0);
			var tmpWidth = parseInt(Element.getStyle(elementInfoID,'width') || 0) - point_info_expand_width + point_info_close_width;
			var tmpHeight = point_info_close_height;
			new Effect.Parallel(
			    [
			    new Effect.MoveAndResizeTo(elementInfoID, tmpTop, tmpLeft, tmpWidth, tmpHeight,
			    {
			    	beforeStart: function() {
			    		var tmpElem = $(elementInfoID);
			    		for (var x=0;x<tmpElem.childNodes.length;x++)
			    		{
			    			// note: tag names for javascript comparisons must be in UPPERCASE!
			    			if (tmpElem.childNodes[x].tagName == 'DIV') {
			    				Element.hide(tmpElem.childNodes[x]);
			    			}
			    		}
			    		Element.removeClassName(elementInfoID, 'pi_bg');
			        }
			    }
			    ),
			    new Effect.Opacity(
			        elementInfoID,
			        { sync: true, to: 0.0, from: 0.9 }
			    ),
			    new Effect.Opacity(
			        elementID,
			        { sync: true, to: 0.0, from: 0.9 }
			    )
			    ],
			    {
				    duration: 1,
			        afterFinish: function(effect)
			            {
			            	if (Element.hasClassName(elementID, 'arrowbottom')) {
			            		Element.removeClassName(elementID, 'arrowbottom');
			            		$(elementInfoID).style.visibility = hide;
			            	}
			            	//alert("hide - z-index Info:"+parseInt(Element.getStyle(elementInfoID, 'z-index'))+" Point:"+parseInt(Element.getStyle(elementID, 'z-index')));
			            	$(elementInfoID).style.display = 'none';
			            }
			    }
			    );
			    aPoint_show[pointID] = 0;
		}
	}
}
/*
 * =Points Clear
 * @clears all point arrays
 */
function points_clear(){
	// clear arrays
	aPoint_id.length = 0;
	aPoint_layer_id.length = 0;
	aPoint_latitude.length = 0;
	aPoint_longitude.length = 0;
	aPoint_name.length = 0;
	aPoint_address.length = 0;
	aPoint_city.length = 0;
	aPoint_state.length = 0;
	aPoint_zip.length = 0;
	aPoint_phone.length = 0;
	aPoint_web_site.length = 0;
	aPoint_arc_point_id.length = 0;
	aPoint_info.length = 0;
	aPoint_x.length = 0;
	aPoint_y.length = 0;
	aPoint_hotlink.length = 0;
	aPoint_show.length = 0;
	aPoint_star.length = 0;
	aPoint_sort.length = 0;
	// re-initialize counter
	point_unique_id = 1;
	iPoints_info = 0;
	// clear points_info layer
	while($('points_info').firstChild) {
		$('points_info').removeChild($('points_info').firstChild);
	}
	// clear points layer
	while($('points').firstChild) {
		$('points').removeChild($('points').firstChild);
	}
	while($('labels').firstChild) {
		$('labels').removeChild($('labels').firstChild);
	}
}

/*
 * =Point Located Vertically
 * @method to determine if point is in the top or bottom half of the screen
 * returns 0 for TOP, 1 for BOTTOM
 */
function pointLocatedVertically(pointID) {
	/* globals used
	 * heightWin
	 * aPoint_y
	 */
	if ((heightWin/2) < aPoint_y[pointID]) {
		return 1; // bottom
	} else {
		return 0; // top
	}
}

/*
 * =Points Content Nav
 * @Shows/Hides a Nav Layer
 */
function pointsContentNav(tmpID, tmpBool) {
	// points_screen_show, points_saved_show
	var aTmpNav = $$('#points_content_nav li span a');
	for(var m=0, tmp=aTmpNav.length;m<tmp;m++) {
		Element.removeClassName($(aTmpNav[m].id).parentNode.parentNode,'cur');
		var aTmpName = (aTmpNav[m].id).split('_');
		Element.hide((aTmpName[0]+'_'+aTmpName[1]+'_'+'wrap'));
	}
	Element.addClassName($(tmpID).parentNode.parentNode,'cur');
	aTmpName = tmpID.split('_'); // reassign+reuse aTmpName
	Element.show(aTmpName[0]+'_'+aTmpName[1]+'_'+'wrap');
}


// Code to convert from map units to decimal degrees.
// Code based on asp code from Gerry Daumiller, Montana State Library 8-23-02 email. ASP code on web at http://nris.state.mt.us/gis/projection/projection.html.  Translated to javascript by Jeff Miller, Jefferson County, WA.
// The formulae this program is based on are from "Map Projections,
// A Working Manual" by John P. Snyder, U.S. GeoLogical Survey
// Professional Paper 1395, 1987, pages 295-298
// Set up the coordinate system parameters.  Need to edit these based on state plane zone.  This for NYW and US Survey Feet.
function convert_SP_to_LATLONG(uX,uY) {
	var a = 20925604.48;   		//major radius of ellipsoid, map units (NAD 83)
	var ec = 0.08181905782;  		//eccentricity of ellipsoid (NAD 83)
	var angRad = 0.01745329252;  	//number of radians in a degree
	var pi4 = Math.PI / 4;  		//Pi / 4
	var p0 = 40 * angRad; 	 	//latitude of origin
	var p1 = 40.55 * angRad;  		//latitude of first standard parallel
	var p2 = 42.520542 * angRad;  	//latitude of second standard parallel
	var m0 = -78.583333 * angRad;  	//central meridian
	var x0 = 1148291.666667; 		//False easting of central meridian, map units

	// Calculate the coordinate system constants.
	with (Math) {
		var m1 = cos(p1) / sqrt(1 - (pow(ec,2)) * pow(sin(p1),2));
		var m2 = cos(p2) / sqrt(1 - (pow(ec,2)) * pow(sin(p2),2));
		var t0 = tan(pi4 - (p0 / 2));
		var t1 = tan(pi4 - (p1 / 2));
		var t2 = tan(pi4 - (p2 / 2));
		t0 = t0 / pow(((1 - (ec * (sin(p0)))) / (1 + (ec * (sin(p0))))),ec/2);
		t1 = t1 / pow(((1 - (ec * (sin(p1)))) / (1 + (ec * (sin(p1))))),ec/2);
		t2 = t2 / pow(((1 - (ec * (sin(p2)))) / (1 + (ec * (sin(p2))))),ec/2);
		var n = log(m1 / m2) / log(t1 / t2);
		var f = m1 / (n * pow(t1,n));
		var rho0 = a * f * pow(t0,n);

		// Convert the coordinate to Latitude/Longitude.

		// Calculate the Longitude.
		var uX = uX - x0;
		var pi2 = pi4 * 2;

		var rho = sqrt(pow(uX,2) + pow((rho0 - uY),2));
		var theta = atan(uX / (rho0 - uY));
		var txy = pow((rho / (a * f)),(1 / n));
		var lon = (theta / n) + m0;
		uX = uX + x0;

		// Estimate the Latitude
		var lat0 = pi2 - (2 * atan(txy));

		// Substitute the estimate into the iterative calculation that
		// converges on the correct Latitude value.
		var part1 = (1 - (ec * sin(lat0))) / (1 + (ec * sin(lat0)));
		var lat1 = pi2 - (2 * atan(txy * pow(part1,(ec/2))));

		while ((abs(lat1 - lat0)) > 0.000000002) {
			lat0 = lat1;
			part1 = (1 - (ec * sin(lat0))) / (1 + (ec * sin(lat0)));
			lat1 = pi2 - (2 * atan(txy * pow(part1,(ec/2))));
		}

		// Convert from radians to degrees.
		var Lat = lat1 / angRad;
		var Lon = lon / angRad;

		return Lon + "|" + Lat;

	}
}
//End of Code for converting map units to decimal degrees.


function convert_LATLONG_to_SP(tmpLat,tmpLon) {
	/* See http://nris.state.mt.us/gis/projection/projection.html
	geostate.asp    Gerry Daumiller  2/8/99 (Perl version) - 4/17/2002
	// Converts from latitude/Longitude to Montana State Plane Coordinates.
	// This program assumes that the coordinate is
	// in the Western Hemisphere.

	// The formulae this program is based on are from "Map Projections,
	// A Working Manual" by John P. Snyder, U.S. Geological Survey
	// Professional Paper 1395, 1987, pages 295-298
	*/

	// Set up the coordinate system parameters.
	var a = 20925604.48;   		//major radius of ellipsoid, map units (NAD 83)
	var e = 0.08181905782;  		//eccentricity of ellipsoid (NAD 83)
	var angRad = 0.01745329252;  	//number of radians in a degree
	var pi4 = Math.PI / 4;  		//Pi / 4
	var p0 = 40 * angRad; 	 	//latitude of origin
	var p1 = 40.55 * angRad;  		//latitude of first standard parallel
	var p2 = 42.520542 * angRad;  	//latitude of second standard parallel
	var m0 = -78.583333 * angRad;  	//central meridian
	var x0 = 1148291.666667;

	with (Math){
		// Calculate the coordinate system constants.
		var m1 = cos(p1) / sqrt(1 - (pow(e,2) * pow(sin(p1),2)));
		var m2 = cos(p2) / sqrt(1 - (pow(e,2) * pow(sin(p2), 2)));
		var t0 = tan(pi4 - (p0 / 2));
		var t1 = tan(pi4 - (p1 / 2));
		var t2 = tan(pi4 - (p2 / 2));
		t0 = t0 / pow(((1 - (e * (sin(p0)))) / (1 + (e * (sin(p0))))), (e / 2));
		t1 = t1 / pow(((1 - (e * (sin(p1)))) / (1 + (e * (sin(p1))))), (e / 2));
		t2 = t2 / pow(((1 - (e * (sin(p2)))) / (1 + (e * (sin(p2))))), (e / 2));
		var n = log(m1 / m2) / log(t1 / t2);
		var f = m1 / (n * pow(t1, n));
		var rho0 = a * f * pow(t0, n);

		// Convert the latitude/longitude to a coordinate.
		var lat = tmpLat * angRad;
		var lon = tmpLon * angRad;
		var t = tan(pi4 - (lat / 2));
		t = t / pow(((1 - (e * (sin(lat)))) / (1 + (e * (sin(lat))))), (e / 2));
		var rho = a * f * pow(t, n);
		var theta = n * (lon - m0);
		var tmpX = (rho * sin(theta)) + x0;
		var tmpY = rho0 - (rho * cos(theta));

		//lat = lat / angRad;
		//lon = lon / angRad;

		// Round the coordinates
		tmpX = (Math.round(tmpX * 100)) / 100;
		tmpY = (Math.round(tmpY * 100)) / 100;
		//lat = (Math.round(lat * 100000)) / 100000;
		//lon = (Math.round(lon * 100000)) / 100000;
		// return the coordinates for the projection
		//return 'm1='+m1+' m2='+m2+' t0='+t0+' t1='+t1+' t2='+t2+' n='+n+' f='+f+' rho0='+rho0+' t='+t+' rho='+rho+' theta='+theta;
		return tmpX+'|'+tmpY;
	}
}

function lat_long_display(mouseX, mouseY) {
	//LAT-LONG DISPLAY

	var xDistance = Math.abs(maxx - minx);
	var yDistance = Math.abs(maxy - miny);
	
	// convert to NAD83
	pixelX = xDistance / mwidth;
	mapX = pixelX * mouseX + minx;
	var theY = mheight - mouseY;
	pixelY = yDistance / mheight;
	mapY = pixelY * theY + miny;
		
	var u = Math.pow(10,numDecimals);
	var uX = Math.round(mapX * u) / u
	var uY= Math.round(mapY * u) / u
	// convert to LATLONG
	var latLonDdStr = convert_SP_to_LATLONG(uX,uY);
	var ll = latLonDdStr.split("|");
	var LonDD = ll[0];
	var LatDD = ll[1];
	LatDD = (Math.round(LatDD * 100000)) / 100000;
	LonDD = (Math.round(LonDD * 100000)) / 100000;
	
	//return "Latitude = ["+uY+"] " + LatDD + "<br/>" + "Longitude = ["+uX+"]" + LonDD +'<br/>'+ tmpStr;
	
	return "Latitude = " + LatDD + "<br/>" + "Longitude = " + LonDD;
}


function mouse_help_watch(e) {
	var x = Event.pointerX(e);
	var y = Event.pointerY(e);
	if (x < 0){x=0;}
	if (y < 0){y=0;}
	if ((heightWin/2) > y) {
		$('mouse_help').style.top = parseInt(y);
	} else {
		$('mouse_help').style.top = parseInt(y-46);
	}
	if ((widthWin/2) > x) {
		$('mouse_help').style.left = parseInt(x+10);
	} else {
		$('mouse_help').style.left = parseInt(x-166);
	}
	$('mouse_help').innerHTML = lat_long_display(x,y);
}

function mouse_help () {
	
}


/*
function usr_point_form_show() {
var lat = Request("Lat")
var lon = Request("Lon")
dLat = Request("Dlat")
mLat = Request("Mlat")
sLat = Request("Slat")
dLon = Request("Dlon")
mLon = Request("Mlon")
sLon = Request("Slon")

// If decimal latitude was entered, convert it to degrees, minutes, and
// seconds.  If latitude was entered in degrees, minutes, and seconds,
// convert to decimal degrees.
If lat <> "" Then
  dLat = Int(lat)
  mLat = 60 * (lat - dLat)
  sLat = 60 * (mLat - Int(mLat))
  mLat = int(mLat)
ElseIf dLat <> "" Then
  If mLat = "" Then mLat = 0
  If sLat = "" Then sLat = 0
  lat = dLat + (mLat / 60) + (sLat / 3600)
Else
  Response.Write "No latitude entered</title><body bgcolor=#ffffff>" & vbCrLf
  Response.Write "<h2>No value was entered for latitude</h2>" & vbCrLf
  Response.Write "</body></html>"
  Response.End
End If

// If decimal longitude was entered, convert it to degrees, minutes, and
// seconds.  If longitude was entered in degrees, minutes, and seconds,
// convert to decimal degrees.
If lon <> "" Then
  If lon < 0 Then lon = 0 - lon
  dLon = Int(lon)
  mLon = 60 * (lon - dLon)
  sLon = 60 * (mLon - int(mLon))
  mLon = int(mLon)
  lon = 0 - lon
  dLon = 0 - dLon
ElseIf dLon <> "" Then
  If dLon > 0 Then dLon = 0 - dLon
  If mLon = "" Then mLon = 0
  If sLon = "" Then sLon = 0
  lon = dLon - (mLon / 60) - (sLon / 3600)
Else
  Response.Write "No longitude entered</title><body bgcolor=#ffffff>" & vbCrLf
  Response.Write "<h2>No value was entered for longitude</h2>" & vbCrLf
  Response.Write "</body></html>"
  Response.End
End If

//Round the seconds of latitude and longitude
sLat = (CLng(sLat * 100)) / 100
sLon = (CLng(sLon * 100)) / 100
}*/

function usr_point_click_select(e) {
	var x = Event.pointerX(e);
	var y = Event.pointerY(e);
	if (x < 0){x=0;}
	if (y < 0){y=0;}
	var sTmp = lat_long_display(x,y);
	$('txt_lat_lon').innerHTML = sTmp;
}

function usr_point_form_process (tmpLat, tmpLon) {
	//convert back to projection test
	var sTmp = convert_LATLONG_to_SP(tmpLat, tmpLon);
}

function isInteger(s) {
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!((c >= "0") && (c <= "9"))) {
			return false;
		}
	}
	return true;
}

function labels_toggle(sTmpToggle, bTmpActive) {
	if (sTmpToggle == 'saved') {
		bLabels_saved = (bTmpActive==null?!(bLabels_saved):bTmpActive);
		var el = $('points_saved_labels');
		if (bTmpActive!=null) {
			el.checked = bTmpActive;
		}
		var aTmpLabels = $$('#labels div.letter');
		if (bLabels_saved) {
			$(el.id+'_lbl').innerHTML = "Saved Locations Labels are <strong>shown</strong>";
			aTmpLabels.each( function(tmpLabel){
				Element.removeClassName($(tmpLabel), 'hide');
				Element.show(tmpLabel);
			});
		} else {
			$(el.id+'_lbl').innerHTML = "Saved Locations Labels are <strong>hidden</strong>";
			aTmpLabels.each( function(tmpLabel){
				Element.addClassName($(tmpLabel), 'hide');
				Element.hide(tmpLabel);
			});
		}
	} else {
		// (sTmpToggle == 'info')
		bLabels_info = (bTmpActive==null?!(bLabels_info):bTmpActive);
		var el = $('points_info_labels');
		if (bTmpActive!=null) {
			el.checked = bTmpActive;
		}
		var aTmpLabels = $$('#labels div.number');
		if (bLabels_info) {
			$(el.id+'_lbl').innerHTML = "Labels are <strong>shown</strong>";
			aTmpLabels.each( function(tmpLabel){
				Element.removeClassName($(tmpLabel), 'hide');
				Element.show(tmpLabel);
			});
		} else {
			$(el.id+'_lbl').innerHTML = "Labels are <strong>hidden</strong>";
			aTmpLabels.each( function(tmpLabel){
				Element.addClassName($(tmpLabel), 'hide');
				Element.hide(tmpLabel);
			});
		}
	}
}

/*
Correctly handle PNG transparency in Win IE 5.5 & 6.
http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.

Use in <HEAD> with DEFER keyword wrapped in conditional comments:
<!--[if lt IE 7]>
<script defer type="text/javascript" src="pngfix.js"></script>
<![endif]-->
*/
function fixPNG(myImage) 
{
    if ((version >= 5.5) && (version < 7) && (document.body.filters)) 
    {
       var imgID = (myImage.id) ? "id='" + myImage.id + "' " : ""
	   var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : ""
	   var imgTitle = (myImage.title) ? 
		             "title='" + myImage.title  + "' " : "title='" + myImage.alt + "' "
	   var imgStyle = "display:inline-block;" + myImage.style.cssText
	   var strNewHTML = "<span " + imgID + imgClass + imgTitle
                  + " style=\"" + "width:" + myImage.width 
                  + "px; height:" + myImage.height 
                  + "px;" + imgStyle + ";"
                  + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
                  + "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>"
	   myImage.outerHTML = strNewHTML	  
    }
}

//alert("map.js");