// Determine browser and version.

function Browser() 
{
	var ua, s, i;

	this.isIE    = false;
	this.isNS    = false;
	this.version = null;

	ua = navigator.userAgent;

	s = "MSIE";
	if ((i = ua.indexOf(s)) >= 0) 
	{
		this.isIE = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
	}

	s = "Netscape6/";
	if ((i = ua.indexOf(s)) >= 0) 
	{
		this.isNS = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
	}

	// Treat any other "Gecko" browser as NS 6.1.
	s = "Gecko";
	if ((i = ua.indexOf(s)) >= 0) 
	{
		this.isNS = true;
		this.version = 6.1;
		return;
	}
}
var browser = new Browser();

var dragObj=new Object();

function dragStart(event, id) 
{
	var el;
	var x, y;

	// If an element id was given, find it. Otherwise use the element being
	// clicked on.

	if (id)
		dragObj.elNode = document.getElementById(id);
	else 
	{
		if (browser.isIE)
		  dragObj.elNode = window.event.srcElement;
		if (browser.isNS)
		  dragObj.elNode = event.target;

		// If this is a text node, use its parent element.

		if (dragObj.elNode.nodeType == 3)
		  dragObj.elNode = dragObj.elNode.parentNode;
	}
  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}


function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

	dragTile(dragObj.elNode, dragObj.elStartLeft, dragObj.elStartTop, x - dragObj.cursorStartX, y - dragObj.cursorStartY);
/*
  dragObj.elNode.style.left =
    (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  =
    (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";
*/
  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();

}

function dragAdjust(dx, dy)
{
	dragObj.elStartLeft+=dx;
	dragObj.elStartTop+=dy;
	dragObj.cursorStartX+=dx;
	dragObj.cursorStartY+=dy;
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

	dragSnap(dragObj.elNode);
  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}


// Get named HTML object
function GetObject(name)
{
	var o=null;
	if(document.getElementById)
		o=document.getElementById(name);
	else if(document.all)
		o=document.all.item(name);
	else if(document.layers)
		o=document.layers[name];
	return o;
}

function medaltype(mv, mn, mx)
{
	if (mv==1000000) return 0;
	if (mv<=mn) return 3;
	if (mv>mx) return 1;
	return 2;
}

function score(mv, mn, mx)
{
	if (mv==1000000) return 0;
	if (mv<=mn) return 300;
	if (mv>=mx) return 100;
	var s=100+200*(mx-mv)/(mx-mn);
	s=5*Math.floor(s/5);
	return s;
}

// read cookie containing best moves
var bestmoves=new Array(); // array of integer times in seconds
function readcookie()
{
	bestmoves=new Array();
	var allcookies=document.cookie;
	var pos=allcookies.indexOf("bestmoves=");
	if (pos!=-1)
	{
		var start=pos+10;
		var end=allcookies.indexOf(";", start);
		if (end==-1) end=allcookies.length;
		var value=allcookies.substring(start, end);
		bestmoves=value.split(",");
	}
}

function updateMoves(pz,mv)
{
	if (mv<getMoves(pz))
	{
		bestmoves[pz]=mv;
		var b=bestmoves.join(",");
		var exp=new Date((new Date()).getTime()+365*24*60*60000); // expire in 1 year
		document.cookie="bestmoves="+b+"; expires="+exp.toGMTString();
	}
}

function clearcookie()
{
	var exp=new Date((new Date()).getTime()-365*24*60*60000); // 1 year ago
	document.cookie="username=<none>; expires="+exp.toGMTString(); 
	document.cookie="bestmoves=<none>; expires="+exp.toGMTString(); 
	readcookie();
}

function getMoves(pz)
{
	if (pz>=bestmoves.length || String(typeof(bestmoves[pz]))=="undefined")
	{
		return 1000000;
	}
	var n=parseInt(bestmoves[pz]);
	if (isNaN(n))
		n=1000000;
	return n;
}

function msg(m)
{
	var o=GetObject("msg");
	if (o)
	{
		o.innerHTML='\
			<TABLE style="position:relative; left:-5px; top:0px; border:4px #804000 solid;" BGCOLOR="#008000" WIDTH="201" \
			CELLSPACING="0" CELLPADDING="0">\
		<TR><TD class="msg" align="center"><FONT color="#FFFF00">'+m+'\
		</FONT></TD></TR>\
		</TABLE>';
	}
}

function clearscores(s)
{
	var o=GetObject("confirm");
	if (s==0)
	{
		o.style.left="-200px";
	}
	else if (s==1)
	{
		o.style.left="-10000px";
	}
	else if (s==2)
	{
		o.style.left="-10000px";
		location="default.asp?rst=1";
	}
}

function playSound(s) 
{
	if (document.all)
	{
		document.all.sound.src = "fx/fanfare"+s+".mid";
	}
}

function playClick() 
{
	if (document.all)
	{
		document.all.sound.src = "fx/click.wav";
	}
}

var imgcache=new Array();
var imgflags=new Array();
var imgidx=new Array();
function addimg(img)
{
	var x=imgcache.length;
	var idx=0;
	for (var i=0; i<x; i++)
	{
		// check if tail part of url is same
		if(imgcache[i].src.slice(-img.length)==img)
		{
			break;
		}
	}
	imgidx[imgidx.length]=i;
	if (i==x)
	{
		imgcache[x]=new Image();
		imgflags[x]=false;
		imgcache[x].onload=imgcache[x].onabort=imgcache[x].onerror=new Function("imgflags["+x+"]=true;");
		imgcache[x].src=img;
	}
}

// update display when all images loaded
function drawimgs()
{
	var nok=0;
	var tot=imgcache.length
	for (var i=0; i<tot; i++)
	{
		if (imgflags[i])
			nok++;
	}
	if (nok==tot)
	{
		for (var i=0; i<imgidx.length; i++)
		{
			var idx=imgidx[i];
			var o=GetObject("icache"+i);
			if (o) o.src=imgcache[idx].src;
		}
		var o=GetObject("loading");
		if (o)
			o.innerHTML="";
	}
	else
	{
		var pct=Math.floor(100*nok/tot);
		o=GetObject("loading");
		if (o)
		{
			o.innerHTML='\
			<TABLE style="position:relative; left:-75px; top:120px;" BGCOLOR="#008000" WIDTH="150" \
				BORDER="1" BORDERCOLOR="#C06000" CELLSPACING="0" CELLPADDING="0">\
			<TR><TD align="center">\
				<TABLE BORDER="0">\
				<TR><TD>\
					<FONT color="#FFFF00">Loading: '+pct+'%</FONT><BR>\
				</TD></TR>\
				</TABLE>\
			</TD></TR>\
			</TABLE>';
		}

		setTimeout("drawimgs();",200);
	}
}


readcookie();
