function trimmStringl(sString) 
{
	while (sString.substring(0,1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}


function isJavaEnabled()
{
	return navigator.javaEnabled();
}

var g_RenderedBrowserInfoAppletBrowserInfoAppletHtml = false;
function renderBrowserInfoAppletHtml()
{
	var htmlToWrite = '';
	htmlToWrite = '<APPLET \r\n' + 
			  'CODEBASE = "' + g_ctx + '"\r\n' + 
  			  'CODE     = "BrowserInfoApplet.class"\r\n' + 
  			  'NAME     = "BrowserInfoApplet"\r\n' + 
  			  'WIDTH    = 1\r\n' +  
  			  'HEIGHT   = 1\r\n' + 
                    'HSPACE   = 0\r\n' + 
                    'VSPACE   = 0\r\n' + 
                    'ALIGN    = middle\r\n' + 
                    'MAYSCRIPT = true>\r\n' + 
                    '</APPLET>\r\n';
	document.write(htmlToWrite);
	g_RenderedBrowserInfoAppletBrowserInfoAppletHtml = true;
}

function isBrowserInfoAppletReady()
{
	var browserInfoAppletElement = document.getElementById("BrowserInfoApplet");
	var returnValue = false;

	if (browserInfoAppletElement.readyState == 4)
	{
		returnValue = true;
	}
	
	return returnValue;
}

function getJavaTimeZoneId()
{
	var browserInfoAppletElement = document.getElementById("BrowserInfoApplet");
	return browserInfoAppletElement.getJavaTimeZoneId();
}

function getJVMVersion()
{
	var browserInfoAppletElement = document.getElementById("BrowserInfoApplet");
	return browserInfoAppletElement.getJVMVersion();
}

/**
* getTimeZoneOffset is broken in IE so I wrote my own
* all the web sites I've seen say it returned the wrong
* sign in IE 3 but now its fixed well its not fixed in IE 6.0
* anyway I decided its better to write my own
*/
function getTimeZoneOffset(theDate)
{
	var daysInMonth = new Array();
	var iCounter = 0;
	var totalDays = 0;
	var totalMinutes = 0;
	var gmtMinutes = 0;

	daysInMonth[0] = 31; //jan
	daysInMonth[1] = 28; //feb
	daysInMonth[2] = 31; //mar
	daysInMonth[3] = 30; //april
	daysInMonth[4] = 31; //may
	daysInMonth[5] = 30; //june
	daysInMonth[6] = 31; //july
	daysInMonth[7] = 31; //Aug
	daysInMonth[8] = 30; //Sept
	daysInMonth[9] = 31; //Oct
	daysInMonth[10] = 30; //Nov
	daysInMonth[11] = 31; //Dec

	totalDays = 365*(theDate.getFullYear() - 1970);

	//Add in leap days
	totalDays = totalDays  + Math.floor((theDate.getFullYear() - 1972 - 1)/4) + 1;

	//Add up all the days in this year
	for (iCounter = 0; iCounter < theDate.getMonth(); iCounter ++)
	{
		//If the its a leap year and the counter represents 
		//feb
		if (theDate.getYear()%4 == 0 &&
			iCounter == 1 )
		{
			//alert("adding leap day");
			totalDays = totalDays + 29;
		}
		else
		{
			totalDays = totalDays + daysInMonth[iCounter];
		}
	}

	totalDays  = totalDays  + theDate.getDate() - 1;

	totalMinutes = theDate.getHours()*60 + theDate.getMinutes();

	totalMinutes = totalMinutes + totalDays*24*60;

	gmtMinutes = theDate.getTime()/(1000*60);
	gmtMinutes = Math.floor(gmtMinutes);

	return totalMinutes - gmtMinutes;
}

var g_GMTOffsetDate = null;

function getGMTOffsetMinutes()
{   
    if (g_GMTOffsetDate == null)
    {
    	g_GMTOffsetDate = new Date();
    }
    
	return getTimeZoneOffset(g_GMTOffsetDate);
}

function getGMTOffsetTime()
{
	if (g_GMTOffsetDate == null)
    {
    	g_GMTOffsetDate = new Date();
    }
    
    return g_GMTOffsetDate.getTime();
}

function appendParams(myUrl, paramNames , paramValues)
{
	var returnValue = myUrl;
	var iCounter = 0;
	var paramName = "";
	var paramValue = "";
	var isJavaScriptURL = false;

	if (myUrl.toLowerCase().indexOf("javascript") != -1)
      {
		isJavaScriptURL = true;
      }

	if (!isJavaScriptURL)
      {
		for(iCounter = 0; iCounter < paramNames.length; iCounter++)
		{
			paramName = paramNames[iCounter];
			paramValue = paramValues[iCounter];

			if (paramValue != null)
        		{
				//If the link is a query string
				if (returnValue.indexOf("?") != -1 )
				{
					returnValue = returnValue + 
								"&" + paramName + "=" + paramValue ;
				}
				else
				{
					returnValue = returnValue + 
								"?" + paramName + "=" + paramValue ;
				}
        		}
		}
      }

	return returnValue;
}

function tryToPopulateLinksWithClientInfo()
{
	var done = false;
	var javaEnabled = false;
	var javaTimeZoneId = null;
	var jVMVersion = null;
	var gMTOffsetMinutes = null;
	var gMTOffsetTime = null;
	var iCounter = 0;
   	var link = null;
	var form = null;
 	var paramNames = null;
    var paramValues = null;
	
	/////////////////////////////////////////
	//Try to find out stuff about the client
	////////////////////////////////////////
	
	javaEnabled = false;
	//javaEnabled = isJavaEnabled();
	
	if (javaEnabled)
	{
		if (!g_RenderedBrowserInfoAppletBrowserInfoAppletHtml)
		{
			renderBrowserInfoAppletHtml();
			done = false;
		}
		else if (isBrowserInfoAppletReady())
        {        	
			done = true;
			javaTimeZoneId = getJavaTimeZoneId();
			jVMVersion = getJVMVersion();
			gMTOffsetMinutes = getGMTOffsetMinutes();
			gMTOffsetTime = getGMTOffsetTime();
		}
		else
	    {
			gMTOffsetMinutes = getGMTOffsetMinutes();
			gMTOffsetTime = getGMTOffsetTime();
			done = false;
        }
	}
	else
	{
		gMTOffsetMinutes = getGMTOffsetMinutes();
		gMTOffsetTime = getGMTOffsetTime();
		done = true;
	}
	
	//If we are done
	if (done)
	{
		//Set up the params to append
		paramNames = new Array();
		paramValues = new Array();

		//We are gettingBrowserInfo
		paramNames[0] = "gettingBrowserInfo";
		paramValues[0] = true;

		//javaEnabled
		paramNames[1] = "javaEnabled";
		paramValues[1] = javaEnabled;

		//javaTimeZoneId 
		paramNames[2] = "javaTimeZoneId";
		paramValues[2] = javaTimeZoneId;

		//jVMVersion 
		paramNames[3] = "jVMVersion";
		paramValues[3] = jVMVersion;

		//gMTOffsetMinutes
		paramNames[4] = "gMTOffsetMinutes";
		paramValues[4] = gMTOffsetMinutes;
		
		//gMTOffsetTime
		paramNames[5] = "gMTOffsetTime";
		paramValues[5] = gMTOffsetTime;

		//for all the links on the page
		for(iCounter = 0; iCounter < document.links.length; iCounter++)
		{
			link = document.links[iCounter];

			//Ok the if statement below must seem really weird but
			//its to work around an IE bug
			//for example I had a link <a href="www.goergepriest.com">www.goergepriest.com</a>
		      //this code would cause all the appended stuff to display on the screen without
			//the if below.

			//If the href does not contain the innner text 
			if (	link.innerText == null ||
				link.innerText == "" ||
				link.href.indexOf( trimmStringl(link.innerText) ) == -1)
			{
				link.href = appendParams(link.href, paramNames, paramValues);
			}
		}

		//for all the forms on the page
		/*
		This doesn't seem to work
		Should add a way to insert hidden elements
		for (iCounter = 0; iCounter < document.forms.length; iCounter++)
            {
			form = document.forms[iCounter];
			form.action = appendParams(form.action, paramNames, paramValues);
		}
		*/
	}
	
	//Should try again
	if (!done)
	{
		setTimeout("tryToPopulateLinksWithClientInfo()", 100);
	}
}

tryToPopulateLinksWithClientInfo();