//
// Log output to a div entititled "gm_log" somewhere on the page
// Suggest a tag created like: <div id='gm_log' style='display:none;border:1px solid red;padding:5px;float:right;width:100%;height:200px;overflow:scroll'></div>
function gm_log( str )
{
	var logEl = document.getElementById("gm_log");
	if( logEl == null )
	{
		return;
	}
	logEl.style.display = "block";
	logEl.innerHTML += str + "<br>";
}



function gm_secsDiff( dt, dt2 )
{
	if( dt.getTime() < dt2.getTime() )
		return ( dt2.getTime() - dt.getTime() ) / 1000;
	else
		return ( dt.getTime() - dt2.getTime() ) / 1000;
}


function gm_getDateForURL( dt )
{
	return encodeURIComponent( dt.getUTCDate() + " " + Date.monthNames[ dt.getUTCMonth() ] + " " + dt.getUTCFullYear() );
}

function gm_getTimeForURL( dt )
{
	return encodeURIComponent( dt.getUTCHours() + ":" + dt.getUTCMinutes() );
}


function gm_isEmailValid( email )
{
	var reValidEmail = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
	if( email.length && email.match( reValidEmail ) )
	{
		return true;
	}
	return false;
}


function gm_px( num ) { return ( String( num ) + "px" ); }


String.prototype.trim = function()
{
	// Invoke this trim method thus:
	//		var ns = new String( "     hellop da ds     blah    " );
	//		alert( "#" + ns.trim() + "#" );
	
	var s = this.replace( /^( |\s|\t|\n)*/g, "" );
	s = s.replace( /( |\s|\t|\n)*$/g, "" );
	return s;
}


function gm_decToHex( dec )
{
	var hexStr = "0123456789ABCDEF";
	var low = dec % 16;
	var high = (dec - low)/16;
	hex = hexStr.charAt(high) + hexStr.charAt(low);
	return hex;
}


function gm_getWindowCenterX()
{
	return( document.body.clientWidth / 2 );
}

function gm_getWindowCenterY()
{
	getInnerHeight = function()
	{
		var y = 0;
		if( self.innerHeight )
		{
			// all except Explorer
			y = self.innerHeight;
		}
		else if( document.documentElement && document.documentElement.clientHeight )
		{
			// Explorer 6 Strict Mode
			y = document.documentElement.clientHeight;
		}
		else if( document.body )
		{
			// other Explorers
			y = document.body.clientHeight;
		}

		return y;
	}

	getScrollOffset = function()
	{
		var y = 0;
		if( self.pageYOffset )
		{
			// all except Explorer
			y = self.pageYOffset;
		}
		else if ( document.documentElement && document.documentElement.scrollTop )
		{
			// Explorer 6 Strict
			y = document.documentElement.scrollTop;
		}
		else if( document.body )
		{
			// all other Explorers
			y = document.body.scrollTop;
		}
		return y;
	}

	return this.getScrollOffset() + ( this.getInnerHeight() / 2 );
}



function gm_getElementHeight(id) {
//	if (ns4) {
//		var elem = getObjNN4(document, Elem);
//		return elem.clip.height;
//	} else {
		if(document.getElementById) {
			var elem = document.getElementById(id);
		} else if (document.all){
			var elem = document.all[id];
		}
//		if (op5) { 
//			xPos = elem.style.pixelHeight;
//		} else {
			xPos = elem.offsetHeight;
//		}
		return xPos;
//	} 
}

function gm_getElementWidth(id) {
//	if (ns4) {
//		var elem = getObjNN4(document, Elem);
//		return elem.clip.width;
//	} else {
		if(document.getElementById) {
			var elem = document.getElementById(id);
		} else if (document.all){
			var elem = document.all[id];
		}
//		if (op5) {
//			xPos = elem.style.pixelWidth;
//		} else {
			xPos = elem.offsetWidth;
//		}
		return xPos;
//	}
}



function gm_getCookie (name)
{
	this.getCookieVal = function(offset)
	{
		var endstr = document.cookie.indexOf (";", offset);
		if (endstr == -1)
			endstr = document.cookie.length;
		return unescape(document.cookie.substring(offset, endstr));
	}

	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return this.getCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}

function gm_setCookie (name,value)
{
	var argv = gm_setCookie.arguments;
	var argc = gm_setCookie.arguments.length;

	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;

  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

function gm_deleteCookie (name)
{
	var exp = new Date();
	exp.setTime (exp.getTime() - 1);  // This cookie is history
	var cval = gm_getCookie (name);
	document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}