
var dmTime = new Date();
var dmUpdate = 1;
var dmLastUpdate = dmTime.getTime() / 1000;
var dmRequested = 0;
var dmLastRequest = 0;
var dmWaitingRequest = 1;
var dmLastRequestKey = "KAKUSUU";

var dmRequestFrequency = 3;
var dmForcedFrequency = 4;

var tCount = 0;
var lTimeBegin = 0;

var ajaxPageRequest = null;



function dmTick()
{
	d = new Date();

	if( ( d.getTime() / 1000 ) - dmLastRequest > dmRequestFrequency )
	{
		dmLastUpdate = d.getTime() / 1000;
		dmWaitingRequest = 0;
		dmRequestUpdate();
	}
	else
	{
		dmWaitingRequest = 1;
	}

	delete d;
}


function dmRequestUpdate()
{
dmsg( "dmRequestUpdate() " + dmUpdate + " " + dmRequested );

	if( dmUpdate == 1 )
	{
		if( dmRequested == 0 )
		{
			var d = new Date();
			dmLastRequest = d.getTime() / 1000;

			// window.ksUpdate.document.updateProcess.submit();			
			ajax_asyncRequestPage( "ajax_update/" + dmLastRequestKey + "/" + dmLastRequest + "/", "ajax_updateResponse", "ajax_timeoutEvent", 15000 );
			
			dmRequested = 1;

			// delete d;
		}
		// else we're already updating, so let's ignore this
	}
}


function getTimeStr( a, t, c )
{
	var p = t * 2;

	if( c != 1 )
		p++;

	if( a == 1 )
		return lLongTime[ p ];
	else
		return lShortTime[ p ];
}


function pad( v, l, c )
{
	var p = v + "";

	while( p.length < l )
	{
		p = c + p;
	}

	return p;
}


function updateBid( nm, bID, bUT, bType  )
{
	var d = new Date();
	// d.setTime( bUT * 1000 );

	var el = document.getElementById( nm );

	if( el == null )
		return;

	// var sl = new Number( bUT - ( d.getTime() / 1000 ) );
	// var sl = new Number( bUT - lTimestamp );

	var sl = new Number( bUT - ( lTimestamp + ( d.getTime() / 1000 ) - lTimeBegin ) );


	var tStr = "";

	switch( bType )
	{
	default:
	case 0: // seconds
		tStr = sl.toFixed( 0 );
		break;

	case 1: // hour counter
		if( bUT == 0 )
		{
			tStr = lLongTime[ 11 ];
		}
		else
		{
			var l = sl.toFixed( 0 );

			if( l >= 0 )
			{
				var hours = Math.floor( l / ( 60 * 60 ) );

				l -= ( hours * 60 * 60 );
				var minutes = Math.floor( l / 60 );

				l -= ( minutes * 60 );
				var seconds = Math.floor( l );

				if( hours > 0 )
					tStr += hours + " " + getTimeStr( 1, 2, hours ) + " ";

				if( ( minutes > 0 ) || ( hours > 0 ) )
					tStr += minutes + " " + getTimeStr( 1, 1, minutes ) + " ";

				if( hours < 1 )
					tStr += seconds + " " + getTimeStr( 1, 0, seconds );
			}
			else
			{
				dmTick();
				tStr = lLongTime[ 8 ];
			}
		}
		break;


	case 2: // day counter
		if( bUT == 0 )
		{
			tStr = lShortTime[ 11 ];
		}
		else
		{
			var l = sl.toFixed( 0 );

			if( l >= 0 )
			{
				var days = Math.floor( l / ( 60 * 60 * 24 ) );

				l -= ( days * 60 * 60 * 24 );
				var hours = Math.floor( l / ( 60 * 60 ) );

				l -= ( hours * 60 * 60 );
				var minutes = Math.floor( l / 60 );

				l -= ( minutes * 60 );
				var seconds = Math.floor( l );

				tStr = days + getTimeStr( 2, 3, days ) + ", " + hours + getTimeStr( 2, 2, hours ) + ", " +
						minutes + getTimeStr( 2, 1, minutes ) + ", " + seconds + getTimeStr( 2, 0, seconds );
			}
			else
			{
				tStr = lShortTime[ 8 ];
			}
		}
		break;


	case 10: // sleeping
		var l = bUT;
		tStr = lLongTime[ 10 ] + " ";

		var hours = Math.floor( l / ( 60 * 60 ) );

		l -= ( hours * 60 * 60 );
		var minutes = Math.floor( l / 60 );

		l -= ( minutes * 60 );
		var seconds = Math.floor( l );

		if( hours > 0 )
			tStr += hours + " " + getTimeStr( 1, 2, hours ) + " ";

		if( ( minutes > 0 ) || ( hours > 0 ) )
			tStr += minutes + " " + getTimeStr( 1, 1, minutes ) + " ";

		if( hours < 1 )
			tStr += seconds + " " + getTimeStr( 1, 0, seconds );

		break;


	case 20: // opening in...
		// do nothing
		break;


	case 99: // closed
		tStr = lShortTime[ 9 ];
		break;
	}


	if( tStr != "" )
	{
		el.innerHTML = tStr;
	}

	delete d;
}


function tick()
{
	var d = new Date();
	tCount++;
	var i = 0;

	if( dmUpdate == 1 )
		if( ( ( d.getTime() / 1000 ) - dmLastUpdate > dmForcedFrequency ) || ( dmWaitingRequest == 1 ) )
			dmTick();


	for( i = 0; i < ni; i++ )
	{
		var nm = "tCounter_" + iID[ i ];
		updateBid( nm, iID[ i ], iUT[ i ], iType[ i ] );
	}

	if( useHL == 1 )
		updateBid( "hlCounter_" + hlID, hlID, hlUT, hlType );

	delete d;
}


function initTick()
{
	var d = new Date();
	var sl = new Number( d.getTime() / 1000 );
	lTimeBegin = sl.toFixed( 0 );

	tick();
	setInterval( "tick()", 1000 );
}


function formConfirm( question, url )
{
	if( confirm( question ) )
	{ 
		document.location = url;
	}
}


function dmsg( msg )
{
	// left empty on purpose
}


function ajax_asyncRequestPage( url, callbackFunction, timeoutFunction, timeoutInterval )
{
	dmsg( "ajax_asyncRequestPage( " + url + ")" ); 

	ajaxPageRequest = ajax_createHttpRequest();


	var ajTmOut = setTimeout( 
							function()
							{ 
								eval( timeoutFunction + "( ajaxPageRequest );" );
							}, 
							timeoutInterval 
						);

	
	ajaxPageRequest.onreadystatechange = function()
	{
		if( ajaxPageRequest.readyState == 4 )
		{
			if( ajaxPageRequest.status == 200 )
			{
				eval( callbackFunction + '( url, ajaxPageRequest, ajTmOut );' );
			}
			else
			{
				eval( timeoutFunction + "( ajaxPageRequest );" );
			}		
		}
	};
		
		
	ajaxPageRequest.open( "GET", url, true );
	ajaxPageRequest.send( null );
}


function ajax_createHttpRequest()
{
	if( typeof XMLHttpRequest == "undefined" )
	{
		XMLHttpRequest = function()
		{
		    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {}
		    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {}
		    try { return new ActiveXObject("Msxml2.XMLHTTP") }     catch(e) {}
		    try { return new ActiveXObject("Microsoft.XMLHTTP") }  catch(e) {}
		    throw new Error( "This browser does not support XMLHttpRequest or XMLHTTP." )
		};
	}
	
	return new XMLHttpRequest();
}


function ajax_timeoutEvent( request )
{
dmsg( "ajax_timeoutEvent()\n" );

	if( request != null )
		request.abort();
		
	if( ajaxPageRequest != null )
		ajaxPageRequest.abort();

	request = null;
	ajaxPageRequest = null;

	var d = new Date();
	dmLastUpdate = d.getTime() / 1000;
	dmRequested = 0;
	dmWaitingRequest = 0;
	
	// delete d;	
}


function ajax_updateResponse( url, response, timeoutTimer )
{ 
dmsg( "ajax_updateResponse( " + url + ")" );
var j, i, s, cmd, nm, el, d;
var cl = response.responseText.split( "\n" );
var up_iID, up_iUT, up_iType, up_iName, up_iBid;
var up_hlID, up_hlUT, up_hlType, up_hlName, up_hlBid;
var oldType, oldName, oldUT;
var up_lTimestamp;
var hlUpdated = 0;
var found;
var wantRefresh = 0;
var processedCount = 0;
var iLastUT = iUT.slice( 0 );
var hlLastUT = hlUT;

	clearTimeout( timeoutTimer );
	
	
	if( response.responseText.replace( /^\s+|\s+$/g, '' ) == "NOUPDATE" )
	{
		dmsg( "ajax_updateResponse -- NOUPDATE" );
		
		d = new Date();
		dmLastUpdate = d.getTime() / 1000;
		dmRequested = 0;
		dmWaitingRequest = 0;

		// delete d;		
	}
	else
	{
		dmsg( "ajax_updateResponse -- REALUPDATE" );


		for( i = 0; i < cl.length; i++ )
		{
			// s = cl[ i ].trim();
			s = cl[ i ];
			
			if( s.length > 0 )
			{
				cmd = s.split( "\t" );
				
				switch( cmd[ 0 ] )
				{
					case "TK":
						dmLastRequestKey = cmd[ 1 ];
						break;
				
					case "TS":
						up_lTimestamp = parseInt( cmd[ 1 ] );
						break;
						
					case "HL":
						if( useHL == 1 )
						{
							up_hlID = parseInt( cmd[ 1 ] );
							up_hlUT = parseInt( cmd[ 2 ] );
							up_hlType = parseInt( cmd[ 3 ] );
							up_hlName = cmd[ 4 ];
							up_hlBid = cmd[ 5 ];						
							
							if( hlID == up_hlID )
							{
								oldName = hlName;
								oldType = hlType;
								oldUT = hlUT;					
								hlUpdated = 1;
								
								hlUT = up_hlUT;
								hlType = up_hlType;
								hlName = up_hlName;
								hlBid = up_hlBid;
					
								nm = "hlCurBidder_" + up_hlID;
								el = document.getElementById( nm );
					
								if( el != null )
								{
									el.innerHTML = up_hlName;
					
									nm = "hlCurBid_" + up_hlID;
									el = document.getElementById( nm );
									el.innerHTML = up_hlBid;
								}
	
								// if( ( up_hlName != oldName ) || ( up_hlUT != oldUT ) )
								//	event_hlNewBid();
									
								// if( up_hlType != oldType )
								//	event_hlNewType();
							}
							else
							{
								// wantRefresh = 1;
							}
						}
						break;
				
					case "B":
						up_iID = parseInt( cmd[ 1 ] );
						up_iUT = parseInt( cmd[ 2 ] );
						up_iType = parseInt( cmd[ 3 ] );
						up_iName = cmd[ 4 ];
						up_iBid = cmd[ 5 ];
						found = 0;
						processedCount++;
	
					
						for( j = 0; j < ni; j++ )
						{
							if( iID[ j ] == up_iID )
							{
								found = 1;
								oldName = iName[ j ];
								oldType = iType[ j ];
								oldUT = iUT[ j ];
								
								iUT[ j ] = up_iUT;
								iType[ j ] = up_iType;
								
								iName[ j ] = up_iName;
								iBid[ j ] = up_iBid;
					
								nm = "tCurBidder_" + up_iID;
								el = document.getElementById( nm );
					
								if( el != null )
								{
									el.innerHTML = up_iName;
					
									nm = "tCurBid_" + up_iID;
									el = document.getElementById( nm );
									el.innerHTML = up_iBid;
								}
	
								
								// if( ( up_iName != oldName ) || ( up_iUT != oldUT ) )
								//	event_auctionNewBid( j );
								//	
								// if( up_iType != oldType )
								//	event_auctionNewType( j ); 
								
								if( useHL == 1 ) 
								{
									if( ( hlUpdated == 0 ) && ( hlID == up_iID ) )
									{
										oldName = hlName;
										oldType = hlType;								
										oldUT = hlUT;
											
										hlUpdated = 1;
										
										hlUT = up_iUT;
										hlType = up_iType;
										hlName = up_iName;
										hlBid = up_iBid;
					
										nm = "hlCurBidder_" + up_iID;
										el = document.getElementById( nm );
					
										if( el != null )
										{
											el.innerHTML = up_iName;
					
											nm = "hlCurBid_" + up_iID;
											el = document.getElementById( nm );
											el.innerHTML = up_iBid;
										}
										
										// if( ( oldName != up_iName ) || ( oldUT != up_iUT ) )
										//	event_hlNewBid();									
										//
										// if( oldType != up_iType )
										//	event_hlNewType(); 
									}
								}
								break;
							}
						}
					
						if( ( found == 0 ) && ( ( up_iType == 0  ) || ( up_iType == 1 ) || ( up_iType == 2 ) || ( up_iType == 10 ) ) )
						{
							wantRefresh = 1;
						}
						break;				
				}		
			} 	
		}



		d = new Date();
		dmLastUpdate = d.getTime() / 1000;
		dmRequested = 0;
		dmWaitingRequest = 0;
	
		dmsg( "ajax_updateResponse -- DM " + dmRequested + " " + dmWaitingRequest );

		lTimestamp = up_lTimestamp;
	
	
		var sl = new Number( d.getTime() / 1000 );
		lTimeBegin = sl.toFixed( 0 );
	
		for( i = 0; i < ni; i++ )
		{
			if( iType[ i ] != 10 ) // paused / sleeping
			{
				if( iLastUT[ i ] != iUT[ i ] )
				{
					var nm = "tCounter_" + iID[ i ];
					updateBid( nm, iID[ i ], iUT[ i ], iType[ i ] /*, 1, iLastBid[ i ] */ );
				}
			}
		}
	
		if( useHL == 1 )
			if( hlType != 10 ) // paused / sleeping
				if( hlLastUT != hlUT )
					updateBid( "hlCounter_" + hlID, hlID, hlUT, hlType /*, 0, hlLastBid */ );
		
	
		
		// if( ( wantRefresh == 1 ) && ( useForcedRefresh == 1 ) && ( processedCount > 0 ) )
		//	timedReload();
	
		// delete d;
	}
	
	ajaxPageRequest.abort();
	ajaxPageRequest = null;
}










