
var sc_realscore = 0;

function sc_td2pos(td) {
	var cells = td.parentNode.getElementsByTagName("td");
	var rows = td.parentNode.parentNode.getElementsByTagName("tr");
	var x, y;
	for(x=0; x<cells.length; x++)
	  if(cells[x] == td)
	    break;
	for(y=0; y<rows.length; y++)
  	  if(rows[y] == td.parentNode)
	    break;

    var result = new Object();
    result.x = x;
    result.y = y;
    return result;
}

function sc_pos2td(table, x, y) {
	var rows = table.getElementsByTagName("tr");
	var cells = rows[y].getElementsByTagName("td");
	return cells[x];
}

function sc_fill(td, cname) {
	if(td.innerHTML == "")
	  return;
	var pos = sc_td2pos(td);
    sc_dofill(td.parentNode.parentNode, pos.x, pos.y, cname, td.innerHTML);
}

function sc_dofill(table, x, y, cname, html) {
	if(x<0 || y<0 || x>14 || y>14)
	  return;
	var cell = sc_pos2td(table, x, y);
	if(cell.innerHTML == html && cell.className != cname)
	  cell.className = cname;
	else
	  return;
    sc_dofill(table, x-1, y, cname, html);
    sc_dofill(table, x+1, y, cname, html);
    sc_dofill(table, x, y-1, cname, html);
    sc_dofill(table, x, y+1, cname, html);
}

function sc_click(td) {
	sc_fill(td, '');
	sc_hidescore();
	var pos = sc_td2pos(td);
	var score = sc_score(td.parentNode.parentNode, pos.x, pos.y, td.innerHTML);
	if(score == 1)
		return;
	sc_realscore += score;
	sc_updatescore();
	sc_doclick(td.parentNode.parentNode, pos.x, pos.y, td.innerHTML);
	sc_scroll(td.parentNode.parentNode);
	sc_gameover(td);
}

function sc_doclick(table, x, y, html) {
	if(x<0 || y<0 || x>14 || y>14)
	  return;
	var cell = sc_pos2td(table, x, y);
	if(cell.innerHTML == html)
	  cell.innerHTML = "";
	else
	  return;
	sc_doclick(table, x-1, y, html);
	sc_doclick(table, x+1, y, html);
	sc_doclick(table, x, y-1, html);
	sc_doclick(table, x, y+1, html);
}

function sc_scroll(table) {
	var x, y, yy, flag;
	do {
		flag = false;
		for(x=0; x<15; x++) {
			for(y=14; y>0; y--) {
				var cell = sc_pos2td(table, x, y);
				var cell_ = sc_pos2td(table, x, y-1);
				if(cell.innerHTML == "" && cell_.innerHTML != "") {
					for(yy=y; yy>0; yy--) {
						var cell_down = sc_pos2td(table, x, yy);
						var cell_up = sc_pos2td(table, x, yy-1);
						cell_down.innerHTML = cell_up.innerHTML;
						if(cell_up.innerHTML != "")
						  flag = true;
					}
					var cell_top = sc_pos2td(table, x, 0);
					cell_top.innerHTML = "";
				}
			}
		}
	} while(flag == true);
}

function sc_score(table, x, y, html) {
	if(html == "")
		return 1;
	var xx, yy;
	var rows = table.getElementsByTagName("tr");
	for(yy=0; yy<rows.length; yy++) {
		var cells = rows[yy].getElementsByTagName("td");
		for(xx=0; xx<cells.length; xx++)
			cells[xx].tagged = 0;
	}
	var dots = sc_doscore(table, x, y, html);
	return Math.floor((dots * (dots+1)) / 2);
}

function sc_doscore(table, x, y, html) {
	if(x<0 || y<0 || x>14 || y>14)
	  return 0;
	var dots = 0;
	var cell = sc_pos2td(table, x, y);
	if(cell.innerHTML != html || cell.tagged == 1)
	  return 0;
	cell.tagged = 1;
	dots += sc_doscore(table, x-1, y, html, 0);
	dots += sc_doscore(table, x+1, y, html, 0);
	dots += sc_doscore(table, x, y-1, html, 0);
	dots += sc_doscore(table, x, y+1, html, 0);

	return dots + 1;
}

function sc_alignscore(td, e) {
	var pos = sc_td2pos(td);
	var score = sc_score(td.parentNode.parentNode, pos.x, pos.y, td.innerHTML);
	var cscore = document.getElementById("cscore");
	if(score == 1) {
		cscore.style.visibility = "hidden";
		return;
	}
	cscore.innerHTML = score;
	var posx, posy;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
		cscore.style.left = (posx+20) + "px";
		cscore.style.top = (posy+20) + "px";
		cscore.style.visibility = "visible";
}

function sc_hidescore() {
	var cscore = document.getElementById("cscore");
	cscore.style.visibility = "hidden";
}

function sc_updatescore() {
	var realscore = document.getElementById("realscore");
	realscore.innerHTML = sc_realscore;
}

function sc_gameover(td) {
	var table = td.parentNode.parentNode;
	var x, y;
	for(y=0; y<15; y++)
		for(x=0; x<15; x++) {
			var cell = sc_pos2td(table, x, y);
			if(sc_score(table, x, y, cell.innerHTML) > 1)
				return false;
		}

	alert("Game Over");
	return true;
}

function initpage() {
	if(document.all) {
		var sctable = document.getElementById("skypoclicktable");
		var x, y;
		var rows = sctable.getElementsByTagName("tr");
		for(y=0; y<rows.length; y++) {
			var cells = rows[y].getElementsByTagName("td");
			for(x=0; x<cells.length; x++)
				cells[x].innerHTML = cells[x].innerHTML;
		}
	}
}
