    function isIE() 
    {
        return (navigator.appName == 'Microsoft Internet Explorer');
    }
    
    function search()
    {
        document.forms['searchForm'].submit();
    }
    
    function setCity(cityName, countryID)
    {
        document.forms['searchForm'].city.value = cityName;
        //document.forms['searchForm'].country.value = countryID;
        var sel = document.forms['searchForm'].country;
        for(var i=0; i < sel.length; i++)
        {
            if( sel.options[i].value == countryID ) sel.selectedIndex = i;
        }
    }
    
    function setSearch(search)
    {
        document.forms['searchForm'].search.value = search + ' ' + document.forms['searchForm'].search.value;
    }
    
    function search(search)
    {
        document.forms['searchForm'].search.value = search;
        document.forms['searchForm'].submit();
    }
    
    function searchGoogle()
    {
        var address = document.forms['searchForm'].search.value;
        //alert("searching " + address);
        if( address != null && address.length != 0 ) showAddress(address, 13);
        
        return false;
    }
    
    function submit(offset)
    {
        document.forms['searchForm'].offset.value = offset;
        document.forms['searchForm'].submit();
    }

    function openRoutePlanner(loggedIn, trainingID) {
        if( !loggedIn ) {
            alert("You must be signed in to use this function because it stores routes in your profile. Signing up is free.");
            document.location.href = "/login.jsp";
            return;
        }

        var url = '/routePlanner/routePlanner.jsp';
        if( trainingID != null && trainingID > 0 ) url += "?trainingID=" + trainingID;
        window.open(url, '', 'scrollbars=no, status=no, resizable=yes, menubar=no, location=no, directories=no, menubar=no, toolbar=no');
    }

    function openRoutePlannerReadOnly(routeID) {
        var url = '/routePlanner/routePlanner.jsp?routeID=' + routeID;
        window.open(url, '', 'scrollbars=no, status=no, resizable=yes, menubar=no, location=no, directories=no, menubar=no, toolbar=no');
    }

    function openFullscreenLiveTracking(userName) {
        var url = '/live/';
        if( userName != null ) url += userName;
        window.open(url, '', 'scrollbars=no, status=no, resizable=yes, menubar=no, directories=no, toolbar=no');
    }

    function openRunGPSWebsite() {
        var url = 'http://www.RunGPS.net';
        window.open(url, '', 'scrollbars=yes, status=yes, resizable=yes, menubar=yes, location=yes, menubar=yes, toolbar=yes');
    }

    function formatLatLon(latLon)
    {
        latLon = Math.round(latLon * 1000000.0) / 1000000.0;
        return latLon.toString();
    }

    function formatDistanceKM(dist)
    {
        dist = Math.round(dist * 100.0) / 100.0;
        return dist.toString();
    }

    function formatDistanceMI(dist)
    {
        var distMI = dist * 0.621371;
        distMI = Math.round(distMI * 100.0) / 100.0;
        return distMI.toString();
    }

    function formatSpeedKMH(speed)
    {
        speed = Math.round(speed * 10.0) / 10.0;
        return speed.toString();
    }

    function formatSpeedMPH(speed)
    {
        speed = Math.round(speed  * 0.621371 * 10.0) / 10.0;
        return speed.toString();
    }

    function formatAltitudeM(altitude)
    {
        altitude = Math.round(altitude);
        return altitude.toString();
    }

    function formatAltitudeFT(altitude)
    {
        altitude = Math.round(altitude * 3.280948);
        return altitude.toString();
    }

    function formatTimeStopWatch(sec) {
        var min = Math.floor(sec / 60);
        sec = sec - (min * 60);
        var hrs = Math.floor(min / 60);
        min = min - (hrs * 60);
        var minStr = min.toString();
        if( minStr.length < 2 ) minStr = "0" + minStr;
        var secStr = sec.toString();
        if( secStr.length < 2 ) secStr = "0" + secStr;
        var hrsStr = hrs.toString();
        if( hrsStr.length < 2 ) hrsStr = "0" + hrsStr;
        return hrsStr + ":" + minStr + ":" + secStr;
        //return hrs + ":" + min + ":" + sec;
    }

    function formatTimeStopWatchShort(sec) {
        var min = Math.floor(sec / 60);
        sec = sec - (min * 60);
        var minStr = min.toString();
        if( minStr.length < 2 ) minStr = "0" + minStr;
        var secStr = sec.toString();
        if( secStr.length < 2 ) secStr = "0" + secStr;
        return minStr + ":" + secStr;
        //return hrs + ":" + min + ":" + sec;
    }

    function checkIfLoggedIn(loggedInUserName) {
        if( loggedInUserName == null || loggedInUserName.length == 0 || loggedInUserName == "null" ) {
            alert("You must be signed in to use this function. Signing up is free.");
            return false;
        }
        return true;
    }

    function trim(s) { 
        while (s.substring(0,1) == ' ') {
            s = s.substring(1,s.length);
        }
        while (s.substring(s.length-1,s.length) == ' ') {
            s = s.substring(0,s.length-1);
        }
        return s;
    }

    function removeEmptyLines(s) { 
        while (s.substring(0,1) == '\n') {
            s = s.substring(1,s.length);
        }
        while (s.substring(s.length-1,s.length) == '\n') {
            s = s.substring(0,s.length-1);
        }
        return s;
    }

    function ajaxPost(url, data, callback) 
    {

	     var passData = data;
	     var AJAX = null;
	     if (window.XMLHttpRequest) 
	     {
   		   AJAX=new XMLHttpRequest();
	     } 
	     else 
    	{
       		AJAX=new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	if (AJAX==null) 
    	{
       	    	return false
    	} 
    	else 
    	{
       		AJAX.open("POST", url, true);
       		AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       		AJAX.onreadystatechange = function() 
           {                      
          		if (AJAX.readyState==4 || AJAX.readyState=="complete") 
          		{ 
             		callback(AJAX.responseText, AJAX.status); 
          		}                               
       	  }                                  
       	    AJAX.send(passData);
       	    return true;
      }
    }


