function getelement ( obj )
{
  if ( document.getElementById )
  {
    return ( document.getElementById ( obj ) );
  }
  else if ( document.all )
  {
    return ( document.all[obj] );
  }
  else if ( document.layers )
  {
    return ( document.layers[obj] );
  }
}


var oldtext = '';		// used to keep backup copy of text as swaptext ( ) is called..
var texttimeout;

// swaptext ( str objectname, str new_text, max_time_before_resetting )
function swaptext ( obj, newtext, maxtime ) {
	if ( maxtime && maxtime != 0 ) {
		clearTimeout ( texttimeout );
		texttimeout = setTimeout ( "resettext ( '" + obj + "' );", maxtime );
	}
	oldtext = getelement ( obj ).innerHTML;
	getelement ( obj ).innerHTML = newtext;
	//window.status = newtext;
	return true;
}

// resettext ( str objectname )
function resettext ( obj ) {
	clearTimeout ( texttimeout );
	getelement ( obj ).innerHTML = oldtext;
	//window.status = oldtext;
	return true;
}


// preloadimages ( array filenames )
function preloadimages ( ) {
	if ( document.images && (!document.plis)) {
		var i, args = preloadimages.arguments;
		document.plis = new Array ( );
		for ( i = 0; i < args.length; i++ ) {
			document.plis[i] = new Image;
			document.plis[i].src = args[i];
		}
	}
}


// Target date (edit it as GMT)..
var targyear		  = 2003;
var targmonth		  =   04;
var targday		  =   13;
var targhour		  =   09;
var targminute		  =   00;
var targsecond		  =   00;

// Guess..
var msgpassed		  = '<span class="latestparas" style="font-weight: bold">YaY!! Om du läser detta har 15 läbbiga månader i Boden förflutit, och rU 2003 kan mycket väl vara på ritbordet just nu..</span>';

// The names/ID´s of the elements holding the space where time left is to be displayed..
var objcommon		  = 'timeleft';
var objweeks		  = 'weeksleft';
var objdays		  = 'daysleft';
var objhours		  = 'hoursleft';
var objminutes		  = 'minutesleft';
var objseconds		  = 'secondsleft';

// Set this to 1 to force sync´ing with clock every second (useful if user would change time after script loaded)..
var synceverysecond	  = 1;

// Editing this is useful when, for example, one wants to display weeks followed by minutes, and in the number of minutes left not count the ones "inside" the weeks. One would then set MODMINUTES to 10080 (the number of minutes/week).
// Set to 0 to display full number of entities (?) left..
var MODDAYS		  = 7;		// Default:  7
var MODHOURS		  = 24;		//	    24
var MODMINUTES		  = 60;		//	    60
var MODSECONDS		  = 60;		//	    60

// Don't mind this..
var MSSECOND		  = 1000;
var MSMINUTE		  = 60 * MSSECOND;
var MSHOUR		  = 60 * MSMINUTE;
var MSDAY		  = 24 * MSHOUR;
var MSWEEK		  =  7 * MSDAY;

var now = new Date ( );
now.setHours ( now.getHours ( ) + now.getTimezoneOffset ( ) / 60 );		// Adjust to GMT..

var then = new Date ( targyear, targmonth - 1, targday, targhour, targminute, targsecond );

var diff = then - now;

var cdtimeout;

function countdown ( )
{
  cdtimeout = setTimeout ( 'countdown ( );', MSSECOND );

  if ( synceverysecond )
  {
    now = new Date ( );
    now.setHours ( now.getHours ( ) + now.getTimezoneOffset ( ) / 60 );	// Adjust to GMT..

    diff = then - now;
  }
  else
  {
    diff -= MSSECOND;
  }

  if ( diff < 0 && objcommon )
  {
    clearTimeout ( cdtimeout );

    if ( getelement ( objcommon ) )
    {
      getelement ( objcommon ).innerHTML = msgpassed;
    }
  }
  else
  {
    var left;

    if ( objweeks && getelement ( objweeks ) )
    {
      getelement ( objweeks ).innerHTML = Math.floor ( diff / MSWEEK );
    }
    if ( objdays && getelement ( objdays ) )
    {
      left = diff / MSDAY;
      getelement ( objdays ).innerHTML = Math.floor ( (MODDAYS > 0 ? left % MODDAYS : left) );
    }
    if ( objhours && getelement ( objhours ) )
    {
      left = diff / MSHOUR;
      getelement ( objhours ).innerHTML = Math.floor ( (MODHOURS > 0 ? left % MODHOURS : left) );
    }
    if ( objminutes && getelement ( objminutes ) )
    {
      left = diff / MSMINUTE;
      getelement ( objminutes ).innerHTML = Math.floor ( (MODMINUTES > 0 ? left % MODMINUTES : left) );
    }
    if ( objseconds && getelement ( objseconds ) )
    {
      left = diff / MSSECOND;
      getelement ( objseconds ).innerHTML = Math.floor ( (MODSECONDS > 0 ? left % MODSECONDS : left) );
    }
  }
}

