/////////////////////////////
// FGLCOMMON JAVASCRIPT FUNCTION
// (c) 2003-2005 by Fifth Generation Systems, Inc., All Rights Reserved


// AddFields( baseform, fieldlist )
// alltrim( val )
// amax( a )
// ArrayInit( iRows, initVal )
// ArrayInit2d( iRows, iCols )
// CalculateAge( dob )
// cbCheck( obj )
// chrcount( char, str )
// ckerror( varname, msg )
// ClearError( varname )
// ClearSelection( )
// comma( Num, DecFlag )
// commas( Num )
// ConvertAmp( str )
// date( )
// DateDiff( pdate1, pdate2 )
// DateFormat( date, format )
// DateOffset( date, offset )
// DateTimeStamp( )
// DateToKey( dte )
// defbutton( btn )
// DisableControls( form )
// divPosition( obj, x, y )
// DollarFormat( str, DecFlag )
// _DollarFormat( amount )
// EnableControls( form )
// EnableField( obj, flag )
// EnableFieldX( obj, flag, OnColor, OffColor )
// GetProduct( prod )
// GetProductCarrier( prod )
// GetProductRegion( prod )
// GotoFirstError( formname )
// IFRAMEsize( name )
// IFRAMEsetheight( name, height )
// innerHTMLGet( var )
// innerHTMLSet( var, val )
// InitHiddenField( baseform, lbsource, destin, trigger )
// isAlpha(elm)
// isDigit( val )
// IsEmailAddress( addr )
// IsInteger( s )
// isNameSuffix( str )
// IsPhoneNumber( _num ) 
// isValidSSN( ssn )
// IsValidZip( zip )
// lbAdd( obj, value, text )
// lbckerror( varname, msg )
// lbCopy( oSource, oDestin )
// lbCurSelText( obj )
// lbCurSelValue( obj )
// lbDataToString( obj[, delim] )
// lbDeleteItem( obj, item )
// lbLink( obj1, obj2 );
// lbLookupText( obj, id )
// lbSearch( obj, str, SetFlag )
// lbSearchID( obj, str, SetFlag )
// lbSetEmpty( obj )
// lbSetFromArray( obj, a )
// lbSetFrom2dArray( obj, a )
// lbSum( formname, lbvars )
// lbTypeAhead( )
// lbUpdateX( lbobj, baseform, data )
// lbUpdateYN( obj1, obj2 )
// left( s, num )
// len( s )
// lower( str )
// mergetime( id, hours, minutes, ampm )
// NormalizeDate( dte, obj )
// NormalizeNumber( val )
// NormalizeNumberX( num )
// NormalizePositiveNumber( val )
// NormalizeSSN( ssn )
// NormalizeYear( year, lowerVal, upperVal )
// NormalizeZip( zip )
// OpenWindow( left, top, width, height, name, url, options )
// parseFirstName( name )
// parseLastName( name )
// parseMiddleName( name )
// PositionWindow( left, top, width, height )
// rbSelect( obj )
// rbSelectedValue( obj, Num )
// rbSelectedIndex( obj, Num )
// right( s, num )
// RoundDollars(num)
// RoundTo2dp( X )
// RunAjax( cmd )
// SetError( varname, msg )
// strat( str, str2 )
// strati( str, str2 )
// strcrop( str, len );
// strempty( val )
// strextract( str, delim, index )
// StringToNum( str )
// strswap(s, s1, s2)
// substr( s, start, num )
// TabTo( fld )
// TimeDiff( date1, date2 )
// UpdateHiddenField( lb, lbstr, baseform, varname )
// upper( str )
// ValidateData( varname, msg )
// ValidateDate( dte, obj, option )
// ValidatePhoneNumber( phonenum )
// ValidateRoutingNumber( s )
// ValidateTime( time, obj )
// webDecodeURL( str )
// webEncodeURL( str )

// ieObjectClickItFix( )
// TextAreaLimit( field, maxlimit )
// jsValidateType( path, type )
// getAnchorPosition( anchorname )
// getAnchorWindowPosition( anchorname )


function amax( a ) {
	var cnt, i, val=0;
	
	cnt = len( a );
	for ( i=0; i<cnt; i++ ) {
		if ( a[i] > val ) {
			val = a[i];
		}
	}
	return( val );
}

function NormalizeZip( zip ) { 
        zip = strswap( zip, "-", "" ); 
        if ( ! isDigit( zip ) ) { 
                return( "" ); 
        } 
        if ( len( zip ) != 5 && len( zip ) != 9 ) { 
                return( "" ); 
        } 
        if ( len( zip ) == 5 ) { 
                return( zip ); 
        } 

        return( left( zip, 5 ) + "-" + right( zip, 4 ) ) 
} 

function TimeDiff( date1, date2 ) {
	diff  = new Date();

	// sets difference date to difference of first date and second date

	diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
	timediff = diff.getTime();

	weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
	timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

	days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
	timediff -= days * (1000 * 60 * 60 * 24);

	hours = Math.floor(timediff / (1000 * 60 * 60)); 
	timediff -= hours * (1000 * 60 * 60);

	mins = Math.floor(timediff / (1000 * 60)); 
	timediff -= mins * (1000 * 60);

	secs = Math.floor(timediff / 1000); 
	timediff -= secs * 1000;

	return( right( "00" + hours, 2 ) + ":" + right( "00" + mins, 2 ) + ":" + right( "00" + secs, 2 ) );
}


function isValidSSN( ssn ) {
	var s = NormalizeSSN( ssn );
	if ( strempty( s ) || ( s != ssn ) ) {
		alert( "Invalid Social Security Number specified." );
		return( 0 );
	}
	return( 1 );
}


function NormalizeSSN( ssn ) {
	ssn = strswap( ssn, "-", "" );
	if ( ! isDigit( ssn ) ) {
		return( "" );
	}
	if ( len( ssn ) != 9 ) {
		return( "" );
	}
	
	return( left( ssn, 3 ) + "-" + substr( ssn, 4, 2 ) + "-" + right( ssn, 4 ) )
}

function parseFirstName( name ) {
	return( strextract( name, " ", 1 ) );
}

function parseMiddleName( name ) {
	var mname = strextract( name, " ", 2 );
	var lname = strextract( name, " ", 3 );
	var suffix = strextract( name, " ", 4 );
	if ( strempty( lname ) ) {
		return( "" );
	}
	if ( isNameSuffix( lname ) ) {
		return( "" );
	}
	return( mname );
}

function cbCheck( obj ) {
	if ( ! obj.disabled ) {
		obj.checked = ( ! obj.checked );
	}
}


function parseLastName( name ) {
	var mname = strextract( name, " ", 2 );
	var lname = strextract( name, " ", 3 );
	if ( strempty( lname ) ) {
		return( mname );
	}
	if ( isNameSuffix( lname ) ) {
		return( mname );
	}
	return( lname );
	
}

function isNameSuffix( str ) {
	if ( strati( "JR", str ) ) {
		return( 1 );
	}
	if ( strati( "SR", str ) ) {
		return( 1 );
	}
	if ( strati( "II", str ) ) {
		return( 1 );
	}
	return( 0 );
}


function strat( str, str2 ) {
	return( str2.indexOf( str ) + 1 );
}

function strati( str, str2 ) {
	str = upper( str );
	str2 = upper( str2 );
	return( str2.indexOf( str ) + 1 );
}

function isDigit( val ) {
	var v = "" + val
	var s = "";
	var cnt = len( v );
	var c = "";
	var retval = 1;	
	for ( var i=0; i<cnt; i++ ) {
		c = v.charAt( i );
		switch ( c ) {
		  case "0":
		  case "1":
		  case "2":
		  case "3":
		  case "4":
		  case "5":
		  case "6":
		  case "7":
		  case "8":
		  case "9":
		  case "-":
		  case ".":
		  	s += c;
		  	break
		  default:
		  	retval = 0;
		}
		if ( ! retval ) {
			break
		}
	}
	
	return( retval );
}

function strswap(s, s1, s2) { 
	var p = 0; 
	while ( ( p = s.indexOf( s1, p ) ) > -1 ) { 
		s = s.substring( 0, p ) + s2 + s.substring( p + s1.length ); 
		p += s2.length; 
	} 
	return s; 
}

function isAlpha(elm) {
    if (elm.value == "") {
        return false;
    }
    for (var i = 0; i < elm.value.length; i++) {
        if ((elm.value.charAt(i) < "a" || elm.value.charAt(i) > "z") &&
           (elm.value.charAt(i) < "A" || elm.value.charAt(i) > "Z")) {
            return false; 
        }
    }
    return true;
}


function PositionWindow( left, top, width, height ) {
	if ( left < 0 ) {
		left = ( screen.availWidth - width ) / 2;
	}
	if ( top < 0 ) {
		top = ( screen.availHeight - height ) / 2;
	}
	self.moveTo( left, top );
	self.resizeTo( width, height );
}

function OpenWindow( left, top, width, height, name, url, options ) {

	if ( left < 0 ) {
		left = ( screen.availWidth - width ) / 2;
	}
	if ( top < 0 ) {
		top = ( screen.availHeight - height ) / 2;
	}
	
	if ( options == "" ) {
		options = "status=no, location=no, toolbar=no, scrollbars=yes, menubar=no, directories=no, resizable=no";
	}
	else if ( options == "POPUP" ) {
		options = "status=no, location=no, toolbar=no, scrollbars=yes, menubar=no, directories=no, resizable=yes";
	}
	else if ( options == "POPUPMENU" ) {
		options = "status=no, location=no, toolbar=no, scrollbars=yes, menubar=yes, directories=no, resizable=yes";
	}
	else if ( options == "PLAIN" ) {
		options = "status=no, location=no, toolbar=no, scrollbars=no, menubar=no, directories=no, resizable=no";
	}
	else if ( options == "NORMAL" ) {
		options = "status=yes, location=yes, toolbar=yes, scrollbars=yes, menubar=yes, directories=yes, resizable=yes";
	}

	var win = window.open( url, name, "left=" + left + ", top=" + top + ", width=" + width + ", height=" + height + " " + options );
	
	if ( win != null ) {
	  	win.focus( );
	}
	else {
		alert( "WARNING: Your popup-blocker may be interfering with the display of the requested age." );
	}
  	
  	return( win );
}

function strempty( val ) {
	val = alltrim( val );
	if ( ! val.length ) {
		return( 1 );
	}
	return( 0 );
}

function alltrim( val ) {
	if ( ! val.length ) {
		return( "" );
	}

	var cnt = len( val );

	for ( var x=0; x<cnt; x++ ) {
//		if ( substr( val, x+1, 1 ) != " " ) {
		if ( val.charAt( x ) != " " ) {
			break;
		}
	}
	for ( var y=cnt-1; y>0; y-- ) {
//		if ( substr( val, y+1, 1 ) != " " ) {
		if ( val.charAt( y ) != " " ) {
			break;
		}
	}

	if ( y > x ) {
		return( substr( val, x+1, y+1-x ) );
	}
	return( val );
}


function EnableField( obj, flag ) {
	if ( flag ) {
		obj.disabled = 0;
		obj.style.background = "#FFFFFF";
	}
	else {
		obj.disabled = 1;
		obj.style.background = "#E8E8E8";
	}
}

function EnableFieldX( obj, flag, OnColor, OffColor ) {
	if ( flag ) {
		obj.disabled = 0;
		if ( OnColor != -1 ) {
			obj.style.background = OnColor;
		}
	}
	else {
		obj.disabled = 1;
		if ( OffColor != -1 ) {
			obj.style.background = OffColor;
		}
	}
}

function rbSelectedValue( obj, Num ) {
	if ( typeof( Num ) != "number" ) {
		Num = obj.length;
	}

	for ( var i=0; i<Num; i++ ) {
//alert( "" + i + " " + obj[i].checked );
		if ( obj[i].checked ) {
			return( obj[i].value );
		}
	}
	return( "" );
}

function rbSelectedIndex( obj, Num ) {
	if ( typeof( Num ) != "number" ) {
		Num = obj.length;
	}

	for ( var i=0; i<Num; i++ ) {
//alert( "" + i + " " + obj[i].checked );
		if ( obj[i].checked ) {
			return( i );
		}
	}
	return( 0 );
}


function IsPhoneNumber( _num ) {
	var c, x=0;
	var cnt = len( _num );
	for ( var i=0; i<cnt; i++ ) {
		c = _num.charAt( i );
		switch ( c ) {
		  case "0":
		  case "1":
		  case "2":
		  case "3":
		  case "4":
		  case "5":
		  case "6":
		  case "7":
		  case "8":
		  case "9":
		  case "-":
		  case ".":
		  	break
		  default:
		  	x++;
		}
	}
	if ( x ) {
		return( 0 );
	}
	return( 1 );
}

function IsEmailAddress( addr ) {
	var i = chrcount( "@", addr );
	if ( ( i < 1 ) || ( i > 1 ) ) {
		return( 0 )
	}
	return( 1 );
}

function chrcount( char, str ) {
	var x=0;
	cnt = len( str );
	for ( var i=0; i<cnt; i++ ) {
		if ( str.charAt( i ) == char ) {
			x++;
		}
	}
	return( x );	
}

function right( s, num ) {
	var str = ""
	var cnt = s.length;
	var start = cnt - num;
	for ( var i=start; i<cnt; i++ ) {
		str += s.charAt( i );
	}
	return( str );
}
function left( s, num ) {
	var str = ""
	for ( var i=0; i<num; i++ ) {
		str += s.charAt( i );
	}
	return( str );
}

function substr( s, start, num ) {
	// start is 1 based
	var str = ""
	for ( var i=0,j=start-1; i<num; i++, j++ ) {
		str += s.charAt( j );
	}
	return( str );
}
function len( s ) {
	if ( typeof( s ) == "undefined" ) {
		return( 0 );
	}
	return( s.length );
}

function lower( str ) {
	var s = new String( str );
	return( s.toLowerCase( ) );
}
function upper( str ) {
	var s = new String( str );
	return( s.toUpperCase( ) );
}

function strextract( str, delim, index ) {
	var s = new String( str );
	var as = s.split( delim );
	if ( as.length < index ) {
		return( "" );
	}
	return( as[index-1] );
}


function GetProductCarrier( prod ) {
	return( left( prod, 2 ) );
}
function GetProductRegion( prod ) {
	return( substr( prod, 3, 2 ) );
}
function GetProduct( prod ) { 
	var cnt = len( prod );
	if ( cnt == 7 ) {
		return( right( prod, 3 ) );
	}
	return( right( prod, 4 ) );
}


function rbSelect( obj ) {
	if ( ! obj.disabled ) {
		obj.checked = true;
	}
}


function lbSetEmpty( obj ) {
	obj.length = 0;
	return;
}


function lbSetFromArray( obj, a ) {
	var cnt, i;
	obj.length = 0;
	cnt = a.length;
	for ( i=0; i<cnt; i++ ) {
		obj.options[i] = new Option( a[i], a[i] );
	}
}

function lbSetFrom2dArray( obj, a ) {
	var cnt, i;
	obj.length = 0;
	cnt = a.length;
	for ( i=0; i<cnt; i++ ) {
		obj.options[i] = new Option( a[i,1], a[i,2] );
	}
}

function ArrayInit( iRows, initVal ) { 
	var i, j;
   	var a = new Array( iRows ); 
   	for ( i=0; i<iRows; i++ ) { 
       	a[i] = initVal; 
   	} 
   	return( a ); 
} 

function ArrayInit2d( iRows, iCols ) { 
	var i, j;
   	var a = new Array( iRows ); 
   	for ( i=0; i<iRows; i++ ) { 
       	a[i] = new Array( iCols ); 
       	for ( j=0; j<iCols; j++ ) { 
           	a[i][j] = ""; 
       	} 
   	} 
   	return( a ); 
} 

function lbSetItem( obj, index, id, text ) {
	obj.options[index].value = id;
	obj.options[index].text = text;
}

function lbCurSelValue( obj ) {
	var i = obj.selectedIndex;
	if ( i < 0 ) {
		return( "" );
	}
	return( obj[ obj.selectedIndex ].value );
}

function lbCurSelText( obj ) {
	var i = obj.selectedIndex;
	if ( i < 0 ) {
		return( "" );
	}
	return( obj[ obj.selectedIndex ].text );
}

function lbSearch( obj, str, SetFlag ) {
	var cnt = obj.length;
	var s;
	for ( var i=0; i<cnt; i++ ) {
		s = obj.options[i].text;
		if ( s == str ) {
			if ( SetFlag ) {
				obj[i].selected = true;
			}
			return( i );
		}
	}
	return( -1 )
}

function lbAdd( obj, value, text ) {
	obj[ obj.length ] = new Option( text, value );
}

function lbCopy( oSource, oDestin ) {
	oDestin.length = 0;
	cnt = oSource.length;
	
	for ( i=0; i<cnt; i++ ) {
		oDestin[i] = new Option( oSource[i].text, oSource[i].value );
	}
	return( cnt );
}


function lbDataToString( obj, delim ) {
	var cnt, i, s="";

	if ( typeof( delim ) != "string" ) {
		delim = "|";
	}
	
	cnt = obj.length;
	for ( i=0; i<cnt; i++ ) {
		s += obj[i].value + delim;
	}
	return( s );
}

function lbDeleteItem( obj, item ) {
	var cnt, i;

	cnt = obj.length;
	if ( item < 0 || item >= cnt ) {
		return( 0 );
	}

	for ( i=item; i<cnt-1; i++ ) {
		obj[i] = new Option( obj[i+1].text, obj[i+1].value );
	}
	obj.length = cnt-1;
	return( 1 );
}

function lbSearchID( obj, str, SetFlag ) {
	var cnt = obj.length;
	var s;
	for ( var i=0; i<cnt; i++ ) {
		s = obj.options[i].value;
		if ( s == str ) {
			if ( SetFlag ) {
				obj[i].selected = true;
			}
			return( i );
		}
	}
	return( -1 )
}

function lbUpdateYN( obj1, obj2 ) {
	var val = obj1[ obj1.selectedIndex ].value;
	if ( val == "" ) {
//		obj1[obj1.selectedIndex].value = "";
		obj2.value = "";
	}
	else if ( val == "X" ) {
		obj2.value = "-";
	}
	else {
		obj2.value = "X";
	}
	return( 1 );
}


function lbUpdateX( lbobj, baseform, data ) {
	var cnt, i, obj

	cursel = lbobj.selectedIndex;

	cnt = chrcount( ";", data ) + 1
	for ( i=0; i<cnt; i++ ) {
		varname = strextract( data, ";", i+1 )
		if ( strempty( varname ) ) {
			continue;
		}
		obj = eval( baseform + "." + varname )
		if ( typeof( obj ) == "object" ) {
			if ( i == cursel ) {
				obj.value = "X";
			}
			else {
				obj.value = "-";
			}
		}
	}
	return;
}


function lbLookupText( obj, id ) {
	var cnt = obj.length;
	var s;
	for ( var i=0; i<cnt; i++ ) {
		s = obj.options[i].value;
		if ( s == id ) {
			return( obj.options[i].text );
		}
	}
	return( "" )
}

function RoundTo2dp( X ) { 
	return( Math.round(X*100)/100 );
}

function _DollarFormat( amount ) {
	if ( strempty( amount ) ) {
		return( "" );
	}
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return( commas( s ) );
}


function RoundDollars(num) { 
//    num = eval(num); 
    num *= 100; 
    num = Math.round(num)/100; 
//    num = "$" + num; 
    return num; 
}


function NormalizeNumberX( num ) {
	var s = "";
	var c;
	for ( var i=0; i<num.length; i++ ) {
		var c = num.charAt(i);
		if ( ( (c >= "0") && (c <= "9") ) || ( c == "." ) || ( c == "-" ) ) { 
			s += c;
		}
	}
	return( s )
}


function NormalizeYear( year, lowerVal, upperVal ) {
	var s = NormalizeNumber( year );
	if ( strempty( s ) ) {
		return( "" );
	}
	yr = parseInt( s );

	if ( upperVal == -1 ) {
		var dte = new Date( );
		upperVal = parseInt( "" + dte.getYear( ) );
	}

	if ( ( yr < lowerVal ) || ( yr > upperVal ) ) {
		return( "" );
	}
	return( "" + yr );	
}

function IsValidZip( zip ) {
	var x = len( zip );
	if ( x == 5 ) {
		if ( IsInteger( zip ) ) {
			return( 1 );
		}
		return( "" );
	}
	else if ( x == 10 ) {
//		var s = new String( zip );
		azip = zip.split( "-" );
		if ( len( azip[0] ) != 5 ) {
			return( 0 );
		}
		if ( ! IsInteger( azip[0] ) ) {
			return( 0 );
		}	
		if ( len( azip[1] ) != 4 ) {
			return( 0 );
		}
		if ( ! IsInteger( azip[1] ) ) {
			return( 0 );
		}	
		return( 1 );
	}
	return( 0 );
}

function IsInteger(s) {
	if ( typeof( s ) != "string" ) {
		return( false );
	}
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!((c >= "0") && (c <= "9"))) {
			return false;
		}
	}
	return true;
}

function AddFields( baseform, fieldlist ) {
	var i, cnt, varname, ttl=0;
	
	cnt = chrcount( ";", fieldlist ) + 1;
	for ( i=1; i<=cnt; i++ ) {
		varname = strextract( fieldlist, ";", i );
		if ( strempty( varname ) ) {
			break
		}
		obj = eval( baseform + "." + varname );
		if ( typeof( obj ) != "object" ) {
			continue;
		}
		if ( strempty( obj.value ) ) {
			continue;
		}
		if ( IsInteger( obj.value ) ) {
			ttl += parseInt( obj.value );
		}
	}
	return( ttl );
}


function DollarFormat( str, DecFlag ) {
	if ( strempty( str ) ) {
		return( "" );
	}
//	str = NormalizeNumber( str );
	return( comma( str, DecFlag ) );
}

function commas( Num ) {
	return( comma( Num, 0 ) );
}


function comma( Num, DecFlag ) {
  var newNum = "";
  var newNum2 = "";
  var count = 0;

  Num = NormalizeNumber( Num );

  //check for decimal number
  if (Num.indexOf('.') != -1){ //number ends with a decimal point
  if (Num.indexOf('.') == Num.length-1){
  Num += "00";
  }
  if (Num.indexOf('.') == Num.length-2){ //number ends with a single digit
  Num += "0";
  }

  var a = Num.split("."); 
  Num = a[0]; //the part we will commify
  var end = a[1] //the decimal place we will ignore and add back later
  }
  else {var end = "00";} 

  //this loop actually adds the commas 
  for (var k = Num.length-1; k >= 0; k--){
  var oneChar = Num.charAt(k);
  if (count == 3){
  newNum += ",";
  newNum += oneChar;
  count = 1;
  continue;
  }
  else {
  newNum += oneChar;
  count ++;
  }
  } //but now the string is reversed!

  //re-reverse the string
  for (var k = newNum.length-1; k >= 0; k--){
  var oneChar = newNum.charAt(k);
  newNum2 += oneChar;
  }

  newNum2 = "" + newNum2 + "." + end;
  if ( newNum2.charAt( 0 ) == "-" ) {
  	if ( newNum2.charAt( 1 ) == "," ) {
  		newNum2 = "-" + right( newNum2, len( newNum2 ) - 2 );
  	}
  }

  if ( ! DecFlag ) {
  	var s = newNum2.split( "." );
  	return( s[0] );
  }
  
  return( newNum2 );
}

function CalculateAge( dob ) {
	
	var sdte = new String( dob );
	var adte = sdte.split( "-" );
	
	var today = date( );
	var stoday = new String( today );
	var atoday = stoday.split( "-" );

	var age = parseInt( atoday[2] ) - parseInt( adte[2] );

	if ( adte[0] > atoday[0] ) {
		age--;
	}
	else if ( adte[0] == atoday[0] ) {
		if ( adte[1] > atoday[1] ) {
			age--;
		}
	}
	return( age );
}


function date( ) {
	var dte = new Date( );
	return( right( "0" + ( dte.getMonth( ) + 1 ), 2 ) + "-" + right( "0" + dte.getDate( ), 2 ) + "-" + dte.getYear( ) );
}


function DateToKey( dte ) {
	var d = NormalizeDate( dte );
	if ( strempty( d ) ) {
		return( dte );
	}
	dstr = d.split( "-" );
	return( dstr[2] + dstr[0] + dstr[1] );
}


function DateOffset( date, offset ) {
	// calc new date from days offset
	date = NormalizeDate( date );

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24
	
	var date1 = new Date( date );
    var date1_ms = date1.getTime( );

	var NewDate = new Date( date1_ms + ( offset * ONE_DAY ) );
	var y = NewDate.getYear( );
	var m = NewDate.getMonth( ) + 1;
	var d = NewDate.getDate( );

	return( right( "00" + m, 2 ) + "-" + right( "00" + d, 2 ) + "-" + y );
}


function DateDiff( pdate1, pdate2 ) {
	pdate1 = NormalizeDate( pdate1 );
	pdate2 = NormalizeDate( pdate2 );

	var date1 = new Date( pdate1 );
	var date2 = new Date( pdate2 );

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime( );
    var date2_ms = date2.getTime( );

    // Calculate the difference in milliseconds
    var difference_ms = date2_ms - date1_ms;
    
    // Convert back to days and return
    return( Math.round( difference_ms / ONE_DAY ) );
}


function NormalizePositiveNumber( val ) {
	if ( val < 0 ) {
		return( val * -1 );
	}
	return( val );
}


function ValidateTime( time, obj ) {
	var h, m, ampm;
	
	if ( strempty( time ) ) {
		return( 1 );
	}
	
	h = 0 + strextract( time, ":", 1 )
	m = 0 + strextract( strextract( time, ":", 2 ), " ", 1 )
	ampm = upper( strextract( time, " ", 2 ) );

	if ( ( h < 1 ) || ( h > 12 ) || ( m < 0 ) || ( m > 59 ) || ( ( ampm != "AM" ) && ( ampm != "PM" ) ) ) {
		alert( "Time format must be: HH:MM am, or HH:MM pm." );
		if ( typeof( obj ) == "object" ) {
			obj.focus( );
		}
	}
	return( 1 );
}

function ValidateDate( dte, obj, option ) {
	var today, stoday, x;
	

	switch ( upper( option ) ) {
	  case "NOFUTURE":
		today = date( );
		stoday = new String( today );
		x = DateDiff( stoday, dte );
		if ( x > 0 ) {
			alert( "Cannot enter a future date." )
			obj.focus( )
			return( 0 )
		}
		break
		
	  default:
	    NormalizeDate( dte, obj );
	    break
	}
	
	return( 1 )
}

function NormalizeDate( dte, obj ) {
	var newdte;

	if ( strempty( dte ) ) {
		return( "" );
	}

	// find separation character
	var cnt = len( dte );
	var c = "";
	
	var ExitFlag = 0;
	for ( var i=0; i<cnt; i++ ) {
		c = dte.charAt( i );
		switch ( c ) {
		  case "0":
		  case "1":
		  case "2":
		  case "3":
		  case "4":
		  case "5":
		  case "6":
		  case "7":
		  case "8":
		  case "9":
		  	break
		  default:
		  	ExitFlag = 1;
		}
		if ( ExitFlag ) {
			break
		}
	}

	if ( ! ExitFlag ) {

		switch ( len( dte ) ) {
		  case 6:
		  case 8:
			break
		  default:
			alert( "Invalid date format specified.\nPlease use mm-dd-yyyy." );
			if ( typeof( obj ) == "object" ) {
				obj.focus( );
			}
			return( "" );
		}

		newdte = Array( );
		newdte[0] = left( dte, 2 );
		newdte[1] = substr( dte, 3, 2 );
		newdte[2] = right( dte, 2 );
	}
	else {
		var sdte = new String( dte );
		newdte = sdte.split( c );
	}

	if ( ! IsInteger( newdte[0] ) ) {
		alert( "Invalid date format specified.\nPlease use mm-dd-yyyy." );
		if ( typeof( obj ) == "object" ) {
			obj.focus( );
		}
		return( "" );
	}
	if ( ! IsInteger( newdte[1] ) ) {
		alert( "Invalid date format specified.\nPlease use mm-dd-yyyy." );
		if ( typeof( obj ) == "object" ) {
			obj.focus( );
		}
		return( "" );
	}
	if ( ! IsInteger( newdte[2] ) ) {
		alert( "Invalid date format specified.\nPlease use mm-dd-yyyy." );
		if ( typeof( obj ) == "object" ) {
			obj.focus( );
		}
		return( "" );
	}

	var m = right( "0" + newdte[0], 2 );
	var d = right( "0" + newdte[1], 2 );

	var curyr = new Date( );
	curyr = parseInt( "" + curyr.getYear( ) ) - 1999;

	_m = (+m)
//	if ( ( parseInt( m ) > 12 ) || ( parseInt( m ) < 1 ) ) {
	if ( ( _m > 12 ) || ( _m < 1 ) ) {
//		alert( "Invalid month specified (" + _m + " " + parseInt( m ) + ")" );
		alert( "Invalid month specified" );
		if ( typeof( obj ) == "object" ) {
			obj.focus( );
		}
		return( "" );
	}

	var daysinMonth = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
//	var month = parseInt( m );
	var month = _m;
	var mDays = daysinMonth[ month-1 ];

	var y = parseInt( newdte[2] );

	// acount for leap year
	if ( month == 2 ) {
		if ( ! ( y % 4 ) ) {
			mDays = 29;
		}
	}

//	if ( parseInt( d ) > mDays ) {
	if ( ( +d ) > mDays ) {
		alert( "Invalid day specified" );
		if ( typeof( obj ) == "object" ) {
			obj.focus( );
		}
		return( "" );
	}
	

	if ( y > 99 ) {
		y = newdte[2];
	}
	else if ( y > curyr ) {
		y = "19" + right( "0" + newdte[2], 2 );
	}
	else {
		y = "20" + right( "0" + newdte[2], 2 );
	}

	return( m + "-" + d + "-" + y );
}


function NormalizeNumber( val ) {
	var v = "" + val
	var s = "";
	var cnt = len( v );
	var c = "";
	
	for ( var i=0; i<cnt; i++ ) {
		c = v.charAt( i );
		switch ( c ) {
		  case "0":
		  case "1":
		  case "2":
		  case "3":
		  case "4":
		  case "5":
		  case "6":
		  case "7":
		  case "8":
		  case "9":
		  case "-":
		  case ".":
		  	s += c;
		}
	}
	
	return( s );
}


function StringToNum( str ) {
	var s = "";
	var val;
	var FloatFlag = 0;
	
	for ( i=0; i<str.length; i++ ) {
		val = str.charAt(i);
		switch ( val ) {
		  case '0':
		  case '1':
		  case '2':
		  case '3':
		  case '4':
		  case '5':
		  case '6':
		  case '7':
		  case '8':
		  case '9':
		  	s += val;
		  	break
		  case '.':
			FloatFlag = 1;
		  	s += val;
			break
		}
	}
	
	if ( FloatFlag ) {
		return( parseFloat( s) );
	}
	return( parseInt( s ) );
}


function UpdateHiddenField( lb, lbstr, baseform, varname ) {
	var targetsel, cursel, obj, txtobj
	targetsel = lbSearch( lb, lbstr, 0 );
	cursel = lb.selectedIndex;
	obj = eval( baseform + "." + varname );
	if ( typeof( obj ) != "object" ) {
		return;
	}
	txtobj = window.document.all.item( "th" + varname );

	if ( targetsel == cursel ) {
		if ( strempty( obj.value ) ) {
			obj.style.background = "#FFE8E8";
		}
		else {
			obj.style.background = "#FFFFFF";
		}
		obj.style.visibility = "visible";
		txtobj.style.visibility = "visible";
	}
	else {
		obj.value = "";
		obj.style.visibility = "hidden";
		txtobj.style.visibility = "hidden";
	}
	
	return;
}

function InitHiddenField( baseform, lbsource, destin, trigger ) {
	var lb;
	
	lb = eval( baseform + "." + lbsource );
	UpdateHiddenField( lb, trigger, baseform, destin );
	return;
}



function webEncodeURL( str ) {
	var s = "";
	var i;
	var chr;
	var obj = new String( str );
	
	for ( i=0; i<obj.length; i++ ) {
		chr = obj.charAt(i);
		switch ( chr ) {
		  case "/":
			chr = "%2f";
			break
		  case "?":
			chr = "%3f";
			break

		  case "&":
			chr = "%26";
			break
		  case "#":
		  	chr = "%23";
		  	break
		  case " ":
		  	chr = "+";
		  	break
		  case "+":
		  	chr = "%2b";
		  	break
		  case "'":
		  	chr = "%27";
		  	break
		  case "\"":
		  	chr = "%22";
		  	break
		  case "-":
		    chr = "%2d";
		    break
		  case "=":
		  	chr = "%3d";
		  	break
		  case "(":
		  	chr = "%28";
		  	break
		  case ")":
		  	chr = "%29";
		  	break
		  case "|":
		  	chr = "%7c";
		  	break
		  case "@":
		  	chr = "%40";
		  	break
		  case "~":
		  	chr = "%7e";
		  	break
		  case "%":
		  	chr = "%25";
		  	break
		  case ":":
		  	chr = "%3a";
		  	break
		  case ",":
		  	chr = "%2c";
		  	break

		  case "<":
		  	chr = "%3C";
		  	break
		  case ">":
		  	chr = "%3E";
		  	break
		  case "!":
		  	chr = "%21";
		  	break
		  case "\r":
		  	chr = "%0D";
		  	break
		  case "\n":
		  	chr = "%0A";
		  	break

		}

		s += chr;		
	}
	
	return( s );
}


function webDecodeURL( str ) {
	var s = "";
	var i;
	var chr, flag;
	var obj = new String( str );
	
	for ( i=0; i<obj.length; i++ ) {
		chr = obj.charAt(i);
		
		if ( chr == "+" ) {
			chr = " ";
		}
		else if ( chr == "%" ) {
		
			if ( i + 3  > obj.length ) {
				break;
			}
		
			chr += obj.charAt(i+1);
			chr += obj.charAt(i+2);
			
			chr = chr.toUpperCase( );

			flag = 1;		

			switch ( chr ) {
			  case "%2F":
				chr = "/";
				break
			  case "%3F":
				chr = "?";
				break

			  case "%26":
				chr = "&";
				break
			  case "%23":
			  	chr = "#";
			  	break
			  case "+":
			  	chr = " ";
			  	break
			  case "%2B":
			  	chr = "+";
			  	break
			  case "%27":
			  	chr = "'";
			  	break
			  case "%22":
			  	chr = "\"";
			  	break
			  case "%2D":
			    chr = "-";
			    break
			  case "%3D":
			  	chr = "=";
			  	break
			  case "%28":
			  	chr = "(";
			  	break
			  case "%29":
			  	chr = ")";
			  	break
			  case "%7C":
			  	chr = "|";
			  	break
			  case "%40":
			  	chr = "@";
			  	break
			  case "%7E":
			  	chr = "~";
			  	break
			  case "%25":
			  	chr = "%";
			  	break
			  case "%3A":
			  	chr = ":";
			  	break
			  case "%2C":
			  	chr = ",";
			  	break

			  case "%3C":
			  	chr = "<";
			  	break
			  case "%3E":
			  	chr = ">";
			  	break
			  case "%21":
			  	chr = "!";
			  	break
			  case "%0D":
			  	chr = "\r";
			  	break
			  case "%0A":
			  	chr = "\n";
			  	break


			  default:
			  	flag=0;
			}
			if ( flag ) {
				i += 2;
			}
		}
		s += chr;
	}
	
	return( s );
}



function ConvertAmp( str ) {

	var obj = new String( str );
	while ( 1 ) {
		x = obj.indexOf( "&amp;" )
		if ( x < 0 ) {
			break;
		}
		obj = new String( obj.substr( 0, x + 1 ) + obj.substr( x + 5, obj.length - ( x + 5 ) ) );
//		obj = new String( obj.substr( 0, x + 1 ) );
	}
//	alert( obj.toString( ) );

	return( obj.toString( ) );
}

//
///////////////////////////////



function taLimit( ) {
	var taObj=event.srcElement;
    if (taObj.value.length==taObj.maxLength*1) return false;
}

////////////////////
// typeahead stuff
/////////////////////
// http://www.oreillynet.com/pub/a/javascript/2003/09/03/dannygoodman.html
/////////////////////

// global storage object for type-ahead info, including reset() method
var typeAheadInfo = {last:0, 
                     accumString:"", 
                     delay:1500,
                     timeout:null, 
                     reset:function() {this.last=0; this.accumString=""}
                    };

// function invoked by select element's onkeydown event handler
function lbTypeAhead( ) {

//alert( window.event.keyCode );
   if ( window.event.keyCode == 8 ) {
   	window.event.returnValue = false;
   	return( false );	
   }

   if (window.event && !window.event.ctrlKey) {
      var now = new Date();
      if (typeAheadInfo.accumString == "" || now - typeAheadInfo.last < typeAheadInfo.delay) {
         var evt = window.event;
         var selectElem = evt.srcElement;
         var charCode = evt.keyCode;
         if ( charCode == 8 ) {
			clearTimeout(typeAheadInfo.timeout);
		    typeAheadInfo.reset();
			return( true );
         }

         if ( charCode == 9 ) {
			clearTimeout(typeAheadInfo.timeout);
		    typeAheadInfo.reset();
			return( true );
         }
         var newChar =  String.fromCharCode(charCode).toUpperCase();
         typeAheadInfo.accumString += newChar;
         var selectOptions = selectElem.options;
         var txt, nearest;
         for (var i = 0; i < selectOptions.length; i++) {
            txt = selectOptions[i].text.toUpperCase();
            if ( strempty( txt ) ) {
            	continue;
            }
            nearest = (typeAheadInfo.accumString > 
                       txt.substr(0, typeAheadInfo.accumString.length)) ? i : nearest;
            if (txt.indexOf(typeAheadInfo.accumString) == 0) {
               clearTimeout(typeAheadInfo.timeout);
               typeAheadInfo.last = now;
               typeAheadInfo.timeout = setTimeout("typeAheadInfo.reset()", typeAheadInfo.delay);
               selectElem.selectedIndex = i;
               evt.cancelBubble = true;
               evt.returnValue = false;
               return false;   
            }            
         }
         if (nearest != null) {
//            selectElem.selectedIndex = nearest;
         }
      } else {
         clearTimeout(typeAheadInfo.timeout);
      }
      typeAheadInfo.reset();
   }
   return true;
}

function mergetime( id, hours, minutes, ampm ) {
	id = document.getElementById( id );
	id.value = "" + hours + ":" + minutes + " " + ampm;
}


var FirstError = null;

function SetError( varname, msg ) {
	if ( typeof( msg ) != "string" ) {
		msg = "";
	}
	varname.style.background = "#FFE8E8";
	if ( FirstError == null ) {
		FirstError = varname;
	}
	if ( strempty( msg ) ) {
		return( "" );
	}
	return( msg + "\r\n" );
}

function ClearError( varname, clr ) {
	if ( typeof( clr ) != "string" ) {
		clr = "#FFFFFF";
	}
	varname.style.background = clr;
}


function ValidateData( varname, msg ) {
	if ( strempty( varname.value ) ) {
		varname.style.background = "#FFE8E8";
		if ( FirstError == null ) {
			FirstError = varname;
		}
		return( msg + "\r\n" );
	}
	varname.style.background = "#FFFFFF";
	return( "" );
}

function GotoFirstError( formname ) {
//alert( typeof( FirstError ) );
	if ( typeof( FirstError ) != "object" ) {
		return;
	}
	FirstError.focus( );
	FirstError = null;
}


function ValidatePhoneNumber( obj, phonenum ) {
	var num, rval;

	if ( strempty( phonenum ) ) {
		return( "" );
	}

	num = strswap( NormalizeNumber( phonenum ), "-", "" );
	rval = phonenum;

	x = len( num );
	if ( x == 7 ) {
		alert( "Must specify an area code." )
	}
	else if ( x == 10 ) {
		rval = left( num, 3 ) + "-" + substr( num, 4, 3 ) + "-" + right( num, 4 );
		return( rval );	
	}
	else if ( x == 11 ) {
		if ( left( num, 1 ) != "1" ) {
			alert( "Invalid country code specified." );
		}
		else {
			rval = left( num, 1 ) + "-" + substr( num, 2, 3 ) + "-" + substr( num, 5, 3 ) + "-" + right( num, 4 );
			return( rval );	
		}
	}
	else {
		alert( "Invalid phone number specified. Use XXX-XXX-XXXX format." );
	}

	obj.focus( );

	return( rval );	
}


function DisableControls( form ) {
	for ( var i=0; i < form.elements.length; i++ ) {
		if ( form.elements[i].type == "text"
				|| form.elements[i].type == "button" 
				|| form.elements[i].type == "textarea" 
				|| form.elements[i].type == "select-one" 
				|| form.elements[i].type == "radio" 
				|| form.elements[i].type == "checkbox" ) {
			form.elements[i].disabled = true;
		}
	}
	return( 1 );
}

function EnableControls( form ) {
	for ( var i=0; i < form.elements.length; i++ ) {
		if ( form.elements[i].type == "text"
				|| form.elements[i].type == "button" 
				|| form.elements[i].type == "textarea" 
				|| form.elements[i].type == "select-one" 
				|| form.elements[i].type == "radio" 
				|| form.elements[i].type == "checkbox" ) {
			form.elements[i].disabled = false;
		}
	}
	return( 1 );
}


function TabTo( fld ) { 
	if ( event.keyCode == 9 ) { 
		document.getElementById(fld).focus(); 
		return false; 
	} 
	return true; 
} 


function ValidateRoutingNumber( s ) {

  var i, n, t;

  // First, remove any non-numeric characters.

  t = "";
  for (i = 0; i < s.length; i++) {
    c = parseInt(s.charAt(i), 10);
    if (c >= 0 && c <= 9)
      t = t + c;
  }

  // Check the length, it should be nine digits.

  if (t.length != 9)
    return false;

  // Now run through each digit and calculate the total.

  n = 0;
  for (i = 0; i < t.length; i += 3) {
    n += parseInt(t.charAt(i),     10) * 3
      +  parseInt(t.charAt(i + 1), 10) * 7
      +  parseInt(t.charAt(i + 2), 10);
  }

  // If the resulting sum is an even multiple of ten (but not zero),
  // the aba routing number is good.

  if (n != 0 && n % 10 == 0)
    return true;
  else
    return false;
}


function addZero(vNumber){ 
  return ((vNumber < 10) ? "0" : "") + vNumber 
} 

function DateTimeStamp( ) {
	var dte = new Date( );
	return( DateFormat( dte, "MM-dd-yyyy hh:mm:ss" ) )
}
      
function DateFormat( vDate, vFormat ) { 
  var vDay                      = addZero(vDate.getDate()); 
  var vMonth            = addZero(vDate.getMonth()+1); 
  var vYearLong         = addZero(vDate.getFullYear()); 
  var vYearShort        = addZero(vDate.getFullYear().toString().substring(3,4)); 
  var vYear             = (vFormat.indexOf("yyyy")>-1?vYearLong:vYearShort) 
  var vHour             = addZero(vDate.getHours()); 
  var vMinute           = addZero(vDate.getMinutes()); 
  var vSecond           = addZero(vDate.getSeconds()); 
  var vDateString       = vFormat.replace(/dd/g, vDay).replace(/MM/g, vMonth).replace(/y{1,4}/g, vYear) 
  vDateString           = vDateString.replace(/hh/g, vHour).replace(/mm/g, vMinute).replace(/ss/g, vSecond) 
  return( vDateString );
} 

function IFRAMEsize( name ) {
	var coordinates, x, y

	coordinates = new Object();
	x=0,y=0;

//	if ( document.getElementById && !( document.all ) ) {
		x = document.getElementById( name ).contentDocument.body.scrollWidth;
		y = document.getElementById( name ).contentDocument.body.scrollHeight;
//	}
//	else if (document.all ) {
//		x = document.frames( name ).document.body.scrollWidth;
//		y = document.frames( name ).document.body.scrollHeight;
//	}

	coordinates.x=x;
	coordinates.y=y;

	return( coordinates );
}

function IFRAMEsetheight( name, height ) {
//	if ( document.getElementById && !( document.all ) ) {
		document.getElementById( name ).style.height = height;
//	}
//	else {
//		eval( "document.all." + name + ".style.height" ) = height;
//	}
}


function strcrop( str, num ) {
	var l;

	if ( typeof( str ) != "string" ) {
		return( str );
	}

	l = len( str );
	if ( num >= l ) {
		return( "" );
	}
	
	return( left( str, l - num ) );
}

function ClearSelection( ) {
	document.selection.empty( );
}

function lbLink( obj1, obj2 ) {
	// take value of obj1 and set it to value of obj2
	var val = lbCurSelValue( obj1 );
	lbSearchID( obj2, val, 1 );
}


function defbutton( btn ) {
	// onKeyDown="defbutton( DefButton )"
	if ( event.keyCode == 13 ) {
        event.returnValue = false;
        event.cancel = true;
        btn.click( );
    }
}

function innerHTMLSet( varname, val ) {
	var c = document.all.item( varname );
	if ( typeof( c ) == "object" ) {
		c.innerHTML = val;
	}
}

function innerHTMLGet( varname ) {
	var c = document.all.item( varname );
	return( c.innerHTML );
}


function RunAjax( cmd ) {
	if ( typeof( parent.ajax ) == "object" ) {
		parent.ajax.location = cmd;
	
	}
	else {
		alert( "AJAX not available under this configuration!" );
	}
}


function lbSum( formname, lbvars ) {
	// takes lbvars in var1;var2;... format and sums up their selected values
	var a, cnt, i, x=0;

	a = lbvars.split( ";" );
	cnt = len( a );
	for ( i=0; i<cnt; i++ ) {
		obj = eval( formname + "." + a[i] );
		x += parseInt( lbCurSelValue( obj ) );
	}
	return( x );	
}


function ckerror( varname, msg ) {
	if ( strempty( varname.value ) ) {
		return( SetError( varname, msg ) )
	}
	ClearError( varname );
	return( "" )
}
function lbckerror( varname, msg ) {
	if ( strempty( lbCurSelValue( varname ) ) ) {
		return( SetError( varname, msg ) )
	}
	ClearError( varname );
	return( "" )
}


function jsValidateType( path, type ) {
	var cnt, i, s="", buf;
	
	cnt = chrcount( ".", path ) + 1;
	for ( i=1; i<=cnt; i++ ) {
		buf = strextract( path, ".", i )
		if ( i == cnt ) {
			if ( strempty( s ) ) {
				str = "typeof(" + buf + ") == '" + type + "'";
			}
			else {
				str = "typeof(" + ( s + "." + buf ) + ") == '" + type + "'";
			}
			return( eval( str ) );
		}
		if ( i > 1 ) {
			s += ".";
		}
		s += buf;
		if ( eval( "typeof(" + s + ") != 'object'" ) ) {
			return( 0 ) ;
		}
	}
	return( 0 );
}


function TextAreaLimit( field, maxlimit ) {
	// used to limit the size of textbox
	// use as: onkeypress="TextAreaLimit( this, 255 )"
	if ( field.value.length > maxlimit ) {
    	field.value = field.value.substring( 0, maxlimit );
	    return false;
	}
}


function ieObjectClickItFix( ) {
	theObjects = document.getElementsByTagName( "object" );
	for ( var i=0; i<theObjects.length; i++ ) {
		theObjects[i].outerHTML = theObjects[i].outerHTML;
	}
}




//////
// window.js functions
/////

function getAnchorPosition(anchorname) {
	// This function will return an Object with x and y properties
	var useWindow=false;
	var coordinates=new Object();
	var x=0,y=0;

	// Browser capability sniffing
	var use_gebi=false, use_css=false, use_layers=false;
	if (document.getElementById) { use_gebi=true; }
	else if (document.all) { use_css=true; }
	else if (document.layers) { use_layers=true; }
	// Logic to find position
 	if (use_gebi && document.all) {
		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		}
	else if (use_gebi) {
		var o=document.getElementById(anchorname);
		x=AnchorPosition_getPageOffsetLeft(o);
		y=AnchorPosition_getPageOffsetTop(o);
		}
 	else if (use_css) {
		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		}
	else if (use_layers) {
		var found=0;
		for (var i=0; i<document.anchors.length; i++) {
			if (document.anchors[i].name==anchorname) { found=1; break; }
			}
		if (found==0) {
			coordinates.x=0; coordinates.y=0; return coordinates;
			}
		x=document.anchors[i].x;
		y=document.anchors[i].y;
		}
	else {
		coordinates.x=0; coordinates.y=0; return coordinates;
		}
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
	}

// getAnchorWindowPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the window
function getAnchorWindowPosition(anchorname) {
	var coordinates=getAnchorPosition(anchorname);
	var x=0;
	var y=0;
	if (document.getElementById) {
		if (isNaN(window.screenX)) {
			x=coordinates.x-document.body.scrollLeft+window.screenLeft;
			y=coordinates.y-document.body.scrollTop+window.screenTop;
			}
		else {
			x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
			y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
			}
		}
	else if (document.all) {
		x=coordinates.x-document.body.scrollLeft+window.screenLeft;
		y=coordinates.y-document.body.scrollTop+window.screenTop;
		}
	else if (document.layers) {
		x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
		y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
		}

	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
	}

// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft (el) {
	var ol=el.offsetLeft;
	while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
	return ol;
	}
function AnchorPosition_getWindowOffsetLeft (el) {
	return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
	}	
function AnchorPosition_getPageOffsetTop (el) {
	var ot=el.offsetTop;
	while((el=el.offsetParent) != null) { ot += el.offsetTop; }
	return ot;
	}
function AnchorPosition_getWindowOffsetTop (el) {
	return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
	}


function divPosition( obj, x, y ) {
	if ( typeof( obj ) != "object" ) {
		obj = document.getElementById( obj );
	}
	obj.style.left = x;
	obj.style.top = y;
}


