/*
Mark's JavaScript Library v3.05

Copyright 2005 by Mark Morley (mark@islandnet.com)

This library may be freely copied and used in both personal
and commercial sites as long as thie comment section is not
altered or removed.
*/

var mjlOK = false;
var mjlOO = null;
var mjlB = null;
var mjlE = null;

var mjlStatus = '';

var mjlMX = 0;
var mjlMY = 0;
var mjlMF = null;

var mjlShift = false;
var mjlKF = null;

var mjlDO = null;
var mjlDOP = 100;
var mjlTX = null;
var mjlTO = new Array();
var mjlTF = new Array();
var mjlTC = 0;

var mjlMT = null;
var mjlST = [ null ];

var mjlTipDiv = null;
var mjlTipHeader = '';
var mjlTipFooter = '';

var a = window.navigator.userAgent;
var isWin = a.indexOf( 'Windows' ) >= 0;
var isMac = a.indexOf( 'Mac' ) >= 0;
var isNS4 = document.layers ? true : false;
var isMSIE = a.indexOf( 'MSIE' ) >= 0;
var isOpera = a.indexOf( 'Opera' ) >= 0;

var cantFade = (isNS4 || isOpera);

if( typeof( window.onload ) == 'function' )
	mjlOO = window.onload;
window.onload = mjlOnload;


function mjlCookie( n )
{
	n = escape( n );
	var l = document.cookie.split( '; ' );
	for( var i = l.length - 1; i >= 0; i-- )
	{
		var c = l[i].split( "=" );
		if( c[0] == n )
			return unescape( c[1] );
	}
	return null;
}

function mjlSetCookie( n, v, t, p, d, s )
{
	v = escape( n ) + "=" + escape( v );
	if( t )
	{
		var x = new Date();
		x.setTime( x.getTime() + 1000 * t );
		v += ';expires=' + x.toGMTString();
	}
	if( p ) v += ';path=' + p;
	if( d ) v += ';domain=' + d;
	if( s ) v += ';secure';
	document.cookie = v;
	return true;
}

function mjlOpen( url, n, w, h, l, t, x )
{
	if( !x ) x = 'resizable=yes,scrollbars=yes';
	if( w ) x += ',width=' + w;
	if( h ) x += ',height=' + h;
	if( l ) x += ',left=' + l + ',screenX=' + l;
	if( t ) x += ',top=' + t + ',screenY=' + t;
	var z = window.open( url, n, "width=" + w + ",height=" + h + ",resizable" );
	if( z && !wn.opener ) z.opener = self;
	return z;
}

function mjlWSize( w )
{
	if( !w )
		w = window;
	if( w.innerWidth || w.innerHeight )
		return [ w.innerWidth, w.innerHeight ];
	if( mjlE && (mjlE.clientWidth || mjlE.clientHeight) )
		return [ mjlE.clientWidth, mjlE.clientHeight ];
	if( mjlB && (mjlB.clientWidth || mjlB.clientHeight) )
		return [ mjlB.clientWidth, mjlB.clientHeight ];
	return [ 0, 0 ];
}

function mjlWScroll( w )
{
	if( !w )
		w = window;
	if( typeof( w.pageXOffset ) == 'number' )
		return [ w.pageXOffset, w.pageYOffset ];
	if( mjlB && ( mjlB.scrollLeft || mjlB.scrollTop ) )
		return [ mjlB.scrollLeft, mjlB.scrollTop ];
	if( mjlE && (mjlE.scrollLeft || mjlE.scrollTop ) )
		return [ mjlE.scrollLeft, mjlE.scrollTop ];
	return [ 0, 0 ];
}

function mjlObject( n, d )
{
	if( typeof( n ) == 'object' )
		return n;
	if( !d )
		d = window.document;
	if( d[n] )
		return d[n];
	if( d.all && d.all[n] )
		return d.all[n];
	if( d.getElementById && d.getElementById( n ) )
		return d.getElementById( n );
	if( d.forms )
	{
		var x = d.forms;
		for( var i = x.length - 1; i >= 0; i-- )
			if( x[i][n] )
				return x[i][n];
	}
	if( d.anchors )
	{
		var x = d.anchors;
		for( var i = x.length - 1; i >= 0; i-- )
			if( x[i].name == n )
				return x[i];
	}
	if( d.layers )
	{
		var x = d.layers;
		for( var i = x.length - 1; i >= 0; i-- )
		{
			var o = mjlObject( n, x[i].document );
			if( o )
			{
				o.P = x[i];
				return o;
			}
		}
	}
	if( window[n] )
		return window[n];
	return null;
}

function mjlNew( i, l, t, w, h, v, c, z, s )
{
	if( document.layers && window.Layer && document.classes )
	{
		var x = document.layers[i] = new Layer( w );
		x.visibility = v ? 'show' : 'hide';
		x.name = i;
		x.left = l;
		x.top = t;
		x.height = h;
		x.zIndex = z;
		if( c )
			x.bgColor = c;
		return x;
	}
	if( mjlB )
	{
		var x = "<" + (s ? "iframe" : "div") + " id=\"" + i + "\" style=\"position: absolute; left: " + l + "px; top: " + t + "px; width: " + w + "px; height: " + h + "px; background-color: #" + c + "; z-index: " + z + "; visibility: " + (v ? "visible" : "hidden") + "\"" + (s ? (" frameborder=0 src='" + s + "'") : "") + "></" + (s ? "iframe" : "div") + ">";
		if( mjlB.insertAdjacentHTML )
			mjlB.insertAdjacentHTML( 'beforeEnd', x );
		else if( typeof( mjlB.innerHTML ) != 'undefined' )
			mjlB.innerHTML += x;
	}
	return mjlObject( i );
}

function mjlClone( o )
{
	for( i in o )
	{
		if( typeof o[i] == 'object' )
			this[i] = new mjlClone( o[i] );
		else
			this[i] = o[i];
	}
}

function mjlOSize( o )
{
	if( !(o = mjlObject( o )) )
		return [ 0, 0 ];
	if( typeof( o.offsetWidth ) == 'number' )
		return [ o.offsetWidth, o.offsetHeight ];
	if( o.style )
		o = o.style;
	if( typeof( o.pixelWidth ) == 'number' )
		return [ o.pixelWidth, o.pixelHeight ];
	if( typeof( o.width ) == 'number' )
		return [ o.width, o.height ];
	if( o.clip && typeof( o.clip.width ) == 'number' )
	{
		o.width = o.clip.width;
		o.height = o.clip.height;
		return [ o.clip.width, o.clip.height ];
	}
	return [ 0, 0 ];
}

function mjlSetSize( o, w, h )
{
	var px = document.childNodes ? 'px' : 0;

	if( !(o = mjlObject( o )) )
		return false;
	if( o.U )
		mjlSetSize( o.U, w, h );
	if( o.resizeTo )
		o.resizeTo( w, h );
	if( o.style )
		o = o.style;
	o.width = w + px;
	o.height = h + px;
	o.offsetWidth = w;
	o.offsetHeight = h;
	o.pixelWidth = w;
	o.pixelHeight = h;
	return true;
}

function mjlDisplay( o, d )
{
	if( !(o = mjlObject( o )) )
		return false;
	if( o.style )
		o = o.style;
	o.display = d ? "block" : "none";
	return d;
}

function mjlVis( o, v )
{
	if( !(o = mjlObject( o )) )
		return false;
	if( o.style )
		o.style.visibility = v ? 'visible' : 'hidden';
	else
		o.visibility = v ? 'show' : 'hide';
	if( o.U )
		mjlVis( o.U, v );
	return v;
}

function mjlGetVis( o )
{
	if( !(o = mjlObject( o )) )
		return false;
	if( o.style && o.style.visibility )
		return o.style.visibility == 'visible';
	else if( typeof( o.visibility ) != 'undefined' )
		return o.visibility = 'show';
	return true;
}

function mjlSetPos( o, l, t, r )
{
	var px = document.childNodes ? 'px' : 0;

	if( !(o = mjlObject( o )) )
		return false;
	if( r == true )
		r = o;
	else if( r )
		r = mjlObject( r );
	if( r )
		var p = mjlOPos( r );
	else
		var p = [ 0, 0 ];
	p[0] += l;
	p[1] += t;
	if( o.U )
		mjlSetPos( o.U, p[0], p[1], false );
	if( o.style )
		o = o.style;
	o.left = p[0] + px;
	o.top = p[1] + px;
	return true;
}

function mjlOPos( o )
{
	if( !(o = mjlObject( o )) )
		return [ 0, 0 ];
	var l = 0;
	var t = 0;
	if( o.offsetParent )
	{
		while( o )
		{
			l += o.offsetLeft;
			t += o.offsetTop;
			o = o.offsetParent;
		}
		return [ l, t ];
	}
	if( typeof( o.x ) == 'number' )
	{
		l += o.x;
		t += o.y;
		while( typeof( o.P ) != 'undefined' && typeof( o.P.pageX ) == 'number' )
		{
			o = o.P;
			l += o.pageX;
			t += o.pageY;
		}
		return [ l, t ];
	}
	return [ 0, 0 ];
}

function mjlFade( o )
{
	if( !(o = mjlObject( o )) )
		return false;
	mjlOp( o, o.CO );
	mjlVis( o, o.CO > 0 );
	o.Steps--;
	if( o.Steps <= 0 )
	{
		clearInterval( o.TI );
		o.TI = null;
		o.OP = null;
		o.CO = o.TO;
		mjlOp( o, o.TO );
		mjlVis( o, o.TO > 0 );
		return true;
	}
	o.CO += o.DelOpac;
	if( o.U )
		mjlVis( o.U, false );
	return true;
}

function mjlWipe( o )
{
	if( !(o = mjlObject( o )) )
		return false;
	o.Steps--;
	if( o.Steps <= 0 )
	{
		clearInterval( o.TI );
		o.TI = null;
		mjlClip( o, o.TC[0], o.TC[1], o.TC[2], o.TC[3] );
		mjlSetPos( o, o.OP[0], o.OP[1], false );
		o.OP = null;
		mjlVis( o, o.Reveal );
		return true;
	}
	o.CP[0] -= o.DL;
	o.CP[1] -= o.DT;
	mjlSetPos( o, Math.round( o.CP[0] ), Math.round( o.CP[1] ), false );
	o.CC[0] += o.DC[0];
	o.CC[1] += o.DC[1];
	o.CC[2] += o.DC[2];
	o.CC[3] += o.DC[3];
	mjlClip( o, Math.round( o.CC[0] ), Math.round( o.CC[1] ), Math.round( o.CC[2] ), Math.round( o.CC[3] ) );
	mjlVis( o, true );
	return true;
}

function mjlTrans( o, t, v, d )
{
	if( !(o = mjlObject( o )) )
		return false;
	if( o.TI )
		clearInterval( o.TI );
	if( o.OP )
		mjlSetPos( o, o.OP[0], o.OP[1], false );
	if( !t || t == 'none' || (cantFade && t == 'fade') )
		return mjlVis( o, v );
	mjlVis( o, !v );
	d *= 40;
	if( t == 'fade' )
	{
		if( v )
		{
			o.CO = 0;
			o.TO = 100;
		}
		else
		{
			o.CO = 100;
			o.TO = 0;
		}
		mjlOp( o, o.CO );
		o.DelOpac = (o.TO - o.CO) / d;
		o.Steps = Math.round( d );
		o.TI = setInterval( "mjlFade('" + o.id + "')", 25 ); 
		return true;
	}
	var s = mjlOSize( o );
	o.Reveal = v;
	o.CP = mjlOPos( o );
	o.OP = mjlOPos( o );
	o.CC = [ 0, s[0], s[1], 0 ];
	o.TC = [ 0, s[0], s[1], 0 ];
	o.DC = [ 0, 0, 0, 0 ];
	o.DL = 0;
	o.DT = 0;
	if( t == 'wipe-t' || t == 'slide-b' )
	{
		if( v )
			o.CC[2] = 0;
		else
			o.TC[2] = 0;
		o.DC[2] = (o.TC[2] - o.CC[2]) / d;
		if( t == 'slide-b' )
		{
			if( v )
				o.CP[1] += s[1];
			o.DT = o.DC[2];
		}
	}
	else if( t == 'wipe-r' || t == 'slide-l' )
	{
		if( v )
			o.CC[3] = s[0];
		else
			o.TC[3] = s[0];
		o.DC[3] = (o.TC[3] - o.CC[3]) / d;
		if( t == 'slide-l' )
		{
			if( v )
				o.CP[0] -= s[0];
			o.DL = o.DC[3];
		}
	}
	else if( t == 'wipe-b' || t == 'slide-t' )
	{
		if( v )
			o.CC[0] = s[1];
		else
			o.TC[0] = s[1];
		o.DC[0] = (o.TC[0] - o.CC[0]) / d;
		if( t == 'slide-t' )
		{
			if( v )
				o.CP[1] -= s[1];
			o.DT = o.DC[0];
		}
	}
	else if( t == 'wipe-l' || t == 'slide-r' )
	{
		if( v )
			o.CC[1] = 0;
		else
			o.TC[1] = 0;
		o.DC[1] = (o.TC[1] - o.CC[1]) / d;
		if( t == 'slide-r' )
		{
			if( v )
				o.CP[0] += s[0];
			o.DL = o.DC[1];
		}
	}
	else if( t == 'wipe-tl' || t == 'slide-br' )
	{
		if( v )
		{
			o.CC[2] = 0;
			o.CC[1] = 0;
		}
		else
		{
			o.TC[2] = 0;
			o.TC[1] = 0;
		}
		o.DC[2] = (o.TC[2] - o.CC[2]) / d;
		o.DC[1] = (o.TC[1] - o.CC[1]) / d;
		if( t == 'slide-br' )
		{
			if( v )
			{
				o.CP[0] += s[0];
				o.CP[1] += s[1];
			}
			o.DT = o.DC[2];
			o.DL = o.DC[1];
		}
	}
	else if( t == 'wipe-tr' || t == 'slide-bl' )
	{
		if( v )
		{
			o.CC[2] = 0;
			o.CC[3] = s[0];
		}
		else
		{
			o.TC[2] = 0;
			o.TC[3] = s[0];
		}
		o.DC[2] = (o.TC[2] - o.CC[2]) / d;
		o.DC[3] = (o.TC[3] - o.CC[3]) / d;
		if( t == 'slide-bl' )
		{
			if( v )
			{
				o.CP[0] -= s[0];
				o.CP[1] += s[1];
			}
			o.DT = o.DC[2];
			o.DL = o.DC[3];
		}
	}
	else if( t == 'wipe-br' || t == 'slide-tl' )
	{
		if( v )
		{
			o.CC[0] = s[1];
			o.CC[3] = s[0];
		}
		else
		{
			o.TC[0] = s[1];
			o.TC[3] = s[0];
		}
		o.DC[0] = (o.TC[0] - o.CC[0]) / d;
		o.DC[3] = (o.TC[3] - o.CC[3]) / d;
		if( t == 'slide-tl' )
		{
			if( v )
			{
				o.CP[0] -= s[0];
				o.CP[1] -= s[1];
			}
			o.DT = o.DC[0];
			o.DL = o.DC[3];
		}
	}
	else if( t == 'wipe-bl' || t == 'slide-tr' )
	{
		if( v )
		{
			o.CC[0] = s[1];
			o.CC[1] = 0;
		}
		else
		{
			o.TC[0] = s[1];
			o.TC[1] = 0;
		}
		o.DC[0] = (o.TC[0] - o.CC[0]) / d;
		o.DC[1] = (o.TC[1] - o.CC[1]) / d;
		if( t == 'slide-tr' )
		{
			if( v )
			{
				o.CP[0] += s[0];
				o.CP[1] -= s[1];
			}
			o.DT = o.DC[0];
			o.DL = o.DC[1];
		}
	}
	else if( t == 'split-v' )
	{
		if( v )
		{
			o.CC[3] = s[0] / 2;
			o.CC[1] = o.CC[3];
		}
		else
		{
			o.TC[3] = s[0] / 2;
			o.TC[1] = o.CC[3];
		}
		o.DC[3] = (o.TC[3] - o.CC[3]) / d;
		o.DC[1] = -o.DC[3];
	}
	else if( t == 'split-h' )
	{
		if( v )
		{
			o.CC[2] = s[1] / 2;
			o.CC[0] = o.CC[2];
		}
		else
		{
			o.TC[2] = s[1] / 2;
			o.TC[0] = o.CC[2];
		}
		o.DC[2] = (o.TC[2] - o.CC[2]) / d;
		o.DC[0] = -o.DC[2];
	}
	else if( t == 'box' )
	{
		if( v )
		{
			o.CC[2] = s[1] / 2;
			o.CC[0] = o.CC[2];
			o.CC[3] = s[0] / 2;
			o.CC[1] = o.CC[3];
		}
		else
		{
			o.TC[2] = s[1] / 2;
			o.TC[0] = o.TC[2];
			o.TC[3] = s[0] / 2;
			o.TC[1] = o.TC[3];
		}
		o.DC[2] = (o.TC[2] - o.CC[2]) / d;
		o.DC[0] = -o.DC[2];
		o.DC[3] = (o.TC[3] - o.CC[3]) / d;
		o.DC[1] = -o.DC[3];
	}
	else
		return false;
	if( o.DC[0] == 0 && o.DC[1] == 0 && o.DC[2] == 0 && o.DC[3] == 0 )
		return false;
	o.Steps = Math.round( d );
	if( !cantFade )
		mjlOp( o, 100 );
	o.TI = setInterval( "mjlWipe('" + o.id + "')", 25 ); 
	return true;
}

function mjlSlide( o )
{
	if( !(o = mjlObject( o )) )
		return false;
	o.SP[0] += o.DL;
	o.SP[1] += o.DT;
	if( (o.DL < 0 && o.SP[0] <= o.ST[0]) || (o.DL > 0 && o.SP[0] >= o.ST[0]) || (o.DT < 0 && o.SP[1] <= o.ST[1]) || (o.DT > 0 && o.SP[1] >= o.ST[1]) )
	{
		o.SP[0] == o.ST[0];
		o.SP[1] == o.ST[1];
		mjlSetPos( o, Math.floor( o.SP[0] ), Math.floor( o.SP[1] ), false );
		clearInterval( o.SI );
		o.SI = null;
	}
	else
		mjlSetPos( o, Math.floor( o.SP[0] ), Math.floor( o.SP[1] ), false );
	return true;
}

function mjlSlideTo( o, l, t, d, r )
{
	if( !(o = mjlObject( o )) )
		return false;
	clearInterval( o.SI );
	o.SP = mjlOPos( o );
	if( r )
	{
		l += o.SP[0];
		t += o.SP[1];
	}
	o.ST = [ l, t ];
	d *= 40;
	o.DL = (l - o.SP[0]) / d;
	o.DT = (t - o.SP[1]) / d;
	o.SI = setInterval( "mjlSlide('" + o.id + "')", 25 ); 
	return true;
}

function mjlClip( o, t, r, b, l )
{
	var px = document.childNodes ? 'px' : 0;

	if( !(o = mjlObject( o )) )
		return false;
	if( o.U )
		mjlClip( o.U, t, r, b, l );
	if( o.clip )
	{
		o.clip.top = t;
		o.clip.right = r;
		o.clip.bottom = b;
		o.clip.left = l;
	}
	else if( o.style )
		o.style.clip = 'rect(' + t + 'px ' + r + 'px ' + b + 'px ' + l + 'px)';
	return true;
}

function mjlGetClip( o )
{
	if( !(o = mjlObject( o )) )
		return [ 0, 0, 0, 0 ];
	if( o.clip )
		return [ o.clip.top, o.clip.right, o.clip.bottom, o.clip.left ];
	if( o.style && o.style.clip )
	{
		var x = o.style.clip.split( 'rect(' )[1].split( ' ' );
		return [ parseInt( x[0] ), parseInt( x[1] ), parseInt( x[2] ), parseInt( x[3] ) ];
	}
	var s = mjlOSize( o );
	return [ 0, s[0], s[1], 0 ];
}

function mjlSetZ( o, z )
{
	if( !(o = mjlObject( o )) )
		return false;
	if( o.style )
		o = o.style;
	o.zIndex = z;
	return true;
}

function mjlSetStyle( o, a, v )
{
	if( !(o = mjlObject( o )) )
		return false;
	if( o.style )
		o = o.style;
	eval( "o." + a + " = '" + v + "'" );
	return true;
}

function mjlOp( o, v )
{
	if( !(o = mjlObject( o )) )
		return null;
	if( v == null )
	{
		if( !isMac && o.filters && o.filters.alpha && typeof( o.filters.alpha.opacity ) == 'number' )
			return o.filters.alpha.opacity;
		else if( o.style )
		{
			if( typeof( o.style.MozOpacity ) == 'number' )
				return o.style.MozOpacity * 100;
			else if( typeof( o.style.KhtmlOpacity ) == 'number' )
				return o.style.KhtmlOpacity * 100;
			else if( typeof( o.style.opacity ) == 'number' )
				return o.style.opacity * 100;
		}
		return 100;
	}
	else
	{
		if( cantFade )
			return mjlVis( o, v > 0 );
		if( !isMac && o.filters )
		{
			if( typeof( o.filters.alpha ) != 'undefined' )
				o.filters.alpha.opacity = v;
			else
				o.style.filter += "alpha(opacity=" + v + ");";
		}
		else if( o.style )
		{

 			if( typeof( o.style.MozOpacity ) != 'undefined' )
				o.style.MozOpacity = (v == 100 ? 0.999 : (v / 100));
 			else if( typeof( o.style.KhtmlOpacity ) != 'undefined' )
				o.style.KhtmlOpacity = v / 100;
 			else if( typeof( o.style.opacity ) != 'undefined' )
				o.style.opacity = v / 100;
		}
	}
}

function mjlWrite( o, c )
{
	if( !(o = mjlObject( o )) )
		return null;
	if( typeof( o.innerHTML ) != 'undefined' )
		o.innerHTML = c;
	else
	{
		o.document.open();
		o.document.write( c );
		o.document.close();
	}
	return o;
}

function mjlBackground( o, c )
{
	if( !(o = mjlObject( o )) )
		return null;
	if( o.document && typeof( o.document.bgColor ) != 'undefined' )
		o.document.bgColor = c;
	else if( o.style )
		o.style.backgroundColor = c;
	return true;
}

function mjlShow( n, l, delay, relto, xpos, ypos, transin, tin, transout, tout )
{
	if( !mjlOK )
		return null;
	if( !(o = mjlObject( n )) )
		return false;
	clearInterval( o.TI );
	clearTimeout( mjlMT );
	if( mjlST[l] )
		delay = 0;
	mjlHideMenus( l );
	mjlST[l] = o;
	var s = mjlOSize( o );
	if( relto )
	{
		var p = mjlOPos( relto );
		xpos += p[0];
		ypos += p[1];
		if( typeof( relto.x ) == "number" && l )
		{
			xpos += mjlST[l - 1].x;
			ypos += mjlST[l - 1].y;
		}
		mjlSetPos( o, xpos, ypos, false );
	}
	else
		mjlSetPos( o, xpos, ypos, true );
	mjlSetZ( o, l * 3 + 3 );
	if( isMSIE && !isOpera && !isMac && !mjlST[l].U )
		o.U = mjlNew( "U" + o.id, xpos, ypos, s[0], s[1], false, null, l * 3 + 1, "/blank2.html" );
	o.Trans = transout;
	o.TransOut = tout;
	if( transin )
		var cmd = "mjlTrans( mjlST[" + l + "], \"" + transin + "\", true, " + tin + " );";
	else
		var cmd = "mjlVis( mjlST[" + l + "], true );";
	if( delay > 0 )
		mjlMT = setTimeout( cmd, delay );
	else
		eval( cmd );
	return true;
}

function mjlOver( l )
{
	if( !mjlOK )
		return null;
	clearTimeout( mjlMT );
	mjlHideMenus( l + 1 );
	return true;
}

function mjlOut( delay )
{
	if( !mjlOK )
		return null;
	clearTimeout( mjlMT );
	mjlMT = setTimeout( "mjlHideMenus(0)", delay );
	return true;
}

function mjlHideMenus( l )
{
	if( !mjlOK )
		return null;
	for( var i = l; mjlST[i]; i++ )
	{
		mjlTrans( mjlST[i], mjlST[i].Trans, false , mjlST[i].TransOut );
		mjlST[i] = null;
	}
	return true;
}

function mjlTrackKeyboard( enable, f )
{
	if( enable )
	{
		if( document.captureEvents && Event.KEYDOWN )
			document.captureEvents( Event.KEYDOWN | Event.KEYUP );
		if( f )
			mjlKF = f;
		document.onkeydown = mjlKeyboardHandler;
		document.onkeyup = mjlKeyboardHandler;
	}
	else
	{
		if( document.releaseEvents )
			document.releaseEvents( Event.KEYDOWN | Event.KEYUP );
		document.onkeydown = null;
		document.onkeyup = null;
		mjlKF = null;
	}
	return true;
}

function mjlKeyboardHandler( e )
{
	if( !e )
		e = window.event;
	if( !e )
		return true;
	if( typeof( e.which ) == 'number' )
		var k = e.which;
	else if( typeof( e.keyCode ) == 'number' )
		var k = e.keyCode;
	else if( typeof( e.charCode ) == 'number' )
		var k = e.charCode;
	else
		return true;
	if( k == 16 )
		mjlShift = e.type == 'keydown';
	return true;
}

function mjlTrackMouse( enable, f )
{
	if( enable )
	{
		if( document.captureEvents && Event.MOUSEMOVE )
			document.captureEvents( Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP );
		if( f )
			mjlMF = f;
		document.onmousemove = mjlMouseHandler;
		document.onmousedown = mjlMouseHandler;
		document.onmouseup = mjlMouseHandler;
	}
	else
	{
		document.onmousemove = null;
		mjlMF = null;
		if( document.releaseEvents )
			document.releaseEvents( Event.MOUSEMOVE );
	}
	return true;
}

function mjlMouseHandler( e )
{
	mjlMX = 0;
	mjlMY = 0;
	if( !e )
		e = window.event;
	if( !e )
		return true;
	if( typeof( e.pageX ) == 'number' )
	{
		mjlMX = e.pageX;
		mjlMY = e.pageY;
	}
	else if( typeof( e.clientX ) == 'number' )
	{
		mjlMX = e.clientX;
		mjlMY = e.clientY;
		if( !( isOpera || (window.ScriptEngine && ScriptEngine().indexOf( 'InScript' ) + 1) || window.navigator.vendor == 'KDE' ) )
		{
			if( mjlB && (mjlB.scrollTop || mjlB.scrollLeft) )
			{
				mjlMX += mjlB.scrollLeft;
				mjlMY += mjlB.scrollTop;
			}
			else if( mjlE && (mjlE.scrollTop || mjlE.scrollLeft) )
			{
				mjlMX += mjlE.scrollLeft;
				mjlMY += mjlE.scrollTop;
			}
		}
	}

	if( mjlTipDiv )
		mjlSetPos( mjlTipDiv, mjlMX + 10, mjlMY + 10 );

	if( mjlDO )
	{
		if( mjlShift )
		{
			var o = mjlDO.id.substring( 1 );
			var p = mjlOPos( o );
			var x = mjlMX - p[0];
			var y = mjlMY - p[1];
			mjlSetSize( o, x < 1 ? 1 : x, y < 1 ? 1 : y );
			window.status = "Resize: " + x + "," + y;
		}
		else
		{
			mjlSetPos( mjlDO, mjlMX - mjlDOX, mjlMY - mjlDOY );
			window.status = "Position: " + mjlMX + "," + mjlMY;
		}
		if( e.type == 'mouseup' )
		{
			mjlShift = false;
			mjlOp( mjlDO, mjlDOP );
			var o = mjlDO.id.substring( 1 );
			for( var i = mjlTC - 1; i >= 0; i-- )
			{
				var p = mjlOPos( mjlTO[i] );
				if( mjlMX >= p[0] && mjlMY >= p[1] )
				{
					var s = mjlOSize( mjlTO[i] );
					if( mjlMX < p[0] + s[0] && mjlMY < p[1] + s[1] )
					{
						mjlSetStyle( mjlDO, "cursor", mjlTP );
						mjlDO = null;
						window.status = mjlStatus;
						mjlTF[i]( o, mjlTO[i] );
						i = -99;
					}
				}
			}
			if( i == -1 && mjlTX )
			{
				var s = mjlWSize( null );
				var c = mjlWScroll( null );
				s[0] += c[0];
				s[1] += c[1];
				if( mjlMX < c[0] )
					mjlTX( o, "LEFT" );
				else if( mjlMX >= s[0] )
					mjlTX( o, "RIGHT" );
				else if( mjlMY < c[1] )
					mjlTX( o, "TOP" );
				else if( mjlMY >= s[1] )
					mjlTX( o, "BOTTOM" );
				else
					mjlTX( o, null );
			}
			mjlSetStyle( mjlDO, "cursor", mjlTP );
			mjlDO = null;
			window.status = mjlStatus;
		}
		return false;
	}
	if( e.type == 'mousedown' )
	{
		mjlStatus = window.status;
		if( e.button )
			var b = e.button;
		else if( e.which )
			var b = e.which;
		if( b == 3 )
			b = 2;
		if( b == 1 )
		{
			if( e.srcElement )
				mjlDO = e.srcElement.id;
			else if( e.target )
				mjlDO = e.target.name;
			if( mjlDO )
				mjlDO = mjlObject( "D" + mjlDO );
			if( mjlDO )
			{
				mjlDOP = mjlOp( mjlDO, null );
				mjlOp( mjlDO, mjlDOP * 0.75 );
				var p = mjlOPos( mjlDO );
				mjlDO.StartPos = p;
				mjlDOX = mjlMX - p[0];
				mjlDOY = mjlMY - p[1];
				mjlTP = mjlDO.style.cursor;
				if( mjlShift )
					mjlSetStyle( mjlDO, "cursor", "nw-resize" );
				else
					mjlSetStyle( mjlDO, "cursor", "move" );
				return false;
			}
		}
	}
	if( mjlMF )
		mjlMF( e );
	return true;
}

function mjlTarget( o, f )
{
	if( o == null )
		mjlTX = f;
	else
	{
		mjlTO[mjlTC] = o;
		mjlTF[mjlTC] = f;
		mjlTC++;
	}
}

function mjlGetVar( n )
{
	if( window.location.search.charAt( 0 ) == '?' )
	{
		var l = window.location.search.substr( 1 ).split( "&" );
		for( var i = l.length - 1; i >= 0; i-- )
		{
			var v = l[i].split( "=" );
			if( v[0] == n )
				return unescape( v[1] );
		}
	}
	return null;
}

function mjlInitTip( header, footer )
{
	mjlTipHeader = header;
	mjlTipFooter = footer;
}

function mjlTip( contents )
{
	if( mjlTipDiv == null )
		mjlTipDiv = mjlNew( "TIP", mjlMX, mjlMY, 1, 1, false, null, 1, null );
	if( contents )
	{
		mjlWrite( mjlTipDiv, mjlTipHeader + contents + mjlTipFooter );
		mjlVis( mjlTipDiv, true );
	}
	else
		mjlVis( mjlTipDiv, false );
}

function mjlOnload()
{
	if( mjlOO )
		mjlOO();
	mjlOK = true;
	mjlB = document.body;
	mjlE = document.documentElement;
}
