/* New document created: 5.4.2007 17:13:51 */

var connect4 = {
	player: ['red','yellow'],
	data: [[],[],[],[],[],[],[]],
	cursor: 2,
	elm : {},
	init: function(place){
		with(connect4)
		{
			place.innerHTML = "";
			data = [[],[],[],[],[],[],[]];
			cursor = 0;
			
			ngame = document.createElement("button");
			ngame.innerHTML = "New Game";
			ngame.onclick = function(){ connect4.init(document.getElementById("connect4")); }
			place.appendChild(ngame);
			
			hr = document.createElement("hr");
			place.appendChild(hr);
			
			elm.text = document.createElement("center");
			place.appendChild(elm.text);
			elm.text.innerHTML = "<center><span style='background-color:#ffff00; color:#222;'>Computer</span> vs. <span style='background-color:#ff0000; color:#fff;'>You</span></center>";
			
			hr = document.createElement("hr");
			place.appendChild(hr);
			for(i=0; i<7; i++)
			{
				elm["cell"+i] = document.createElement("div");
				//elm["cell"+i].setAttribute("onclick","connect4.p("+i+")");
				elm["cell"+i].setAttribute(navigator.appName=="Microsoft Internet Explorer"?"className":"class","cell");
				place.appendChild(elm["cell"+i]);
				eval('elm["cell"+i].onclick = function(){ connect4.p('+i+') }');
			}
			var cb = document.createElement("div");
			place.appendChild(cb);
			cb.style.clear = "both";
			robot.p();
			
		}
	},
	p: function(x,pl)
	{
		pl = typeof pl=='number'?pl:0;
		with(connect4)
		{
			if(data[x].length>5 || cursor==pl || cursor==2)return false;
			
			var cell = document.createElement("div");
			cell.setAttribute(navigator.appName=="Microsoft Internet Explorer"?"className":"class",player[pl]);
			elm["cell"+x].appendChild(cell);
			cell.style.marginTop = ((5-data[x].length)*50)+"px";
			
			data[x].push(pl);
			cursor = pl;
			ch(nb(data[x].length-1,x),pl);
			robot.p();
		}
	},
	robot: {
		wr: function($)
		{
			with(connect4)
			{
				var nbd = connect4.nb(data[$].length+1,$,0);
				if( nbd[0]+nbd[4]>2 || nbd[1]+nbd[5]>2 || nbd[2]+nbd[6]>2 || nbd[3]+nbd[7]>2 )
					return false;
				return true;
			}
		},
		a2w: function($)
		{
			with(connect4)
			{
				var nbd = connect4.nb(data[$].length+1,$,1);
				if(nbd[2]+nbd[6]>1)
					if((data[$-1].length!=data[$].length && data[$-1][data[$-1].length-1]==0) && (data[$+1].length!=data[$].length && data[$+1][data[$+1].length-1]==0))
						return false;
				return true;
			}
		},
		f: function()
		{
			with(connect4)
			{

				for($ in data)
				{
					if(data[$].length==6)continue;
					var nbd = nb(data[$].length,$,1);
					if( nbd[0]+nbd[4]>2 || nbd[1]+nbd[5]>2 || nbd[2]+nbd[6]>2 || nbd[3]+nbd[7]>2 )
					return $;
				}
				for($ in data)
				{
					if(data[$].length==6)continue;
					var nbd = nb(data[$].length,$,0);
					if( nbd[0]+nbd[4]>2 || nbd[1]+nbd[5]>2 || nbd[2]+nbd[6]>2 || nbd[3]+nbd[7]>2 )
					return $;
				}
				
				for($ in data)
				{
					if(data[$].length==6)continue;
					var nbd = nb(data[$].length,$,1);
					if( nbd[0]+nbd[4]>1 || nbd[1]+nbd[5]>1 || nbd[2]+nbd[6]>1 || nbd[3]+nbd[7]>1 )
						if(robot.wr($) && robot.a2w($))
							return $;
				}
				
				for($ in data)
				{
					if(data[$].length==6)continue;
					var nbd = nb(data[$].length,$,0);
					if( nbd[0]+nbd[4]>1 || nbd[1]+nbd[5]>1 || nbd[2]+nbd[6]>1 || nbd[3]+nbd[7]>1 )
					if(robot.wr($))
							return $;
				}


				var rnd = [0,1,2,3,4,5,6,2,3,4,5][Math.round(Math.random()*10)];
				if(!robot.wr(rnd))
					rnd = [0,1,2,3,4,5,6,2,3,4,5][Math.round(Math.random()*10)];
				if(data[rnd].length<6)
					return rnd;
					
				for($ in data)
					if(data[$].length<6)
						return $;
			}
		},
		p: function()
		{
			if(connect4.cursor==0)
			with(connect4)
			{
				setTimeout(function(){ p(robot.f(),1); },300);
			}
		}
	},
	ch: function(d,pl)
	{
		with(connect4)
		{
			if( d[0]+d[4]>2 || d[1]+d[5]>2 || d[2]+d[6]>2 || d[3]+d[7]>2 )
			{
				cursor = 2;
				elm.text.innerHTML = "<span style='background-color:rgb(0,200,0); color:#fff;'>"+(pl?"Computer":"You")+" won!</span>";
	
			}
		}
	},
	nb: function(r,c,pl)
	{
		with(connect4)
		{
			r = parseInt(r);
			c = parseInt(c);
			pl = typeof pl == 'number'?pl:data[c][r];
			var nbd = [0,0,0,0,0,0,0,0];
			for(i=c+1; i<=6; i++)
				if(data[i][r+(i-c)]==pl)
					nbd[1]++;
				else
					break;

			for(i=c+1; i<=6; i++)
				if(data[i][r]==pl)
					nbd[2]++;
				else
					break;

			for(i=c+1; i<=6; i++)
				if(data[i][r-(i-c)]==pl)
					nbd[3]++;
				else
					break;

			for(i=r-1; i>=0; i--)
				if(data[c][i]==pl)
					nbd[4]++;
				else
					break;

			for(i=c-1; i>=0; i--)
				if(data[i][r-(c-i)]==pl)
					nbd[5]++;
				else
					break;

			for(i=c-1; i>=0; i--)
				if(data[i][r]==pl)
					nbd[6]++;
				else
					break;

			for(i=c-1; i>=0; i--)
				if(data[i][r+(c-i)]==pl)
					nbd[7]++;
				else
					break;
			
			return nbd;
		}
	}
}

window.onload = function(){ connect4.init(document.getElementById("connect4")); }
