/*
	System:     Calculate Pond Volume
	Version:    1.11
	Copyright:  2009 (c) Fred's Konsult
	                     Fredrik Jacobsson

	All JavaScript-code in this file are the property of
	Fred's Konsult. You are not allowed to copy, modify or
	distribute any portion of it without permission.

	Website:   http://www.pump-demo.com
	E-mail:    info@pump-demo.com			
*/


var allponds = 
[
"--------------------- --------------------- ----111111111111----- ---11111111111111---- --1111122222211111--- --1111222222221111--- --1112223333222111--- --1112233333322111--- --1112233333322111--- --1112223333222111--- --1111222222221111--- --1111122222211111--- ---11111111111111---- ----111111111111----- --------------------- ---------------------",
"--------------------- --------------------- ------11111111------- ----111111111111----- ---11112222221111---- --1111222222221111--- --1112222332222111--- -111122233332221111-- -111122233332221111-- --1112222332222111--- --1111222222221111--- ---11112222221111---- ----111111111111----- ------11111111------- --------------------- ---------------------",
"--------------------- --------11111-------- ------111111111------ -----1111111111------ ----111122221111----- ----111222222111----- ---11122233222111---- ---11122333322111---- ---11122333322111---- ---11122233222111---- ----111222222111----- ----111122221111----- -----1111111111------ ------11111111------- --------1111--------- ---------------------",
"--------------------- ------11111---------- ----111111111-------- ---111111111111------ --111122211111111---- --1112222211111111--- -111222322211111111-- -1112233322111111111- -1112223222111111111- --11122222111111111-- --1111222111111------ ---1111111111-------- ----1111111---------- ------111------------ --------------------- ---------------------",
"--------------------- --------11111-------- ------111111111------ ----1111111111111---- ---111112222211111--- --1111122232221111--- --11112223332221111-- -1111222223222221111- -1111122222222211111- -111111111111111111-- --11111111111111111-- --1111111--1111111--- ---1111------1111---- ----1----------1----- --------------------- ---------------------",

"--------------------- ------111111111------ ---11111111111111---- --1111122222211111--- -111112222222211111-- -111122223322221111-- -1111222333322211111- -1111223333332211111- --111222333322211111- --11122223322221111-- --11112222222211111-- --1111122222211111--- --111111111111111---- ---111111111111------ --------------------- ---------------------",
"--------------------- -------111111-------- ----11111111111------ --11111111111111----- -11111122221111111--- -111112222221111111-- --111122232221111111- ---1112233322111111-- ---11122232211111---- ---11112222111111---- ----1111221111111---- ----111111111111----- -----111111111------- -------1111---------- --------11----------- ---------------------",
"--------------------- -------1111---------- -----1111111--------- ---111-222-11-------- --111-22222-111------ -111-2222222-1111---- -111222-33-22-1111--- -111222333322211111-- --11-22-33-22-11111-- ---11-222222-11111--- ---111-2222-11111---- ----1111111111------- -----1111111--------- -------1111---------- --------------------- ---------------------",
"--------------------- ------111111--------- ----111111111-------- ---1111222111-------- --1111222221111------ --1112223322111111--- -111122333322111111-- -1111123333322111111- --111112333322111111- ----111223322211111-- ------112222211111--- ------111221111------ ------111111111------ -------1111111------- --------11111-------- ---------------------",
"--------------------- ------11111111------- ----1111111111111---- ---1111-2222-111111-- --1111-222222-111111- --111-22-33-22-11111- -111122233332221111-- -1111222333322211---- --111-22333-22-11---- --111122-3-222111---- ---111-222222-11----- ---1111-2222-111----- ----11111111111------ -----111111111------- -------1111---------- ---------------------"
]
var mall = "--------------------- --------------------- --------------------- -------111111-------- ------11111111------- -----1111221111------ -----1112222111------ -----1122332211------ -----1122332211------ -----1112222111------ -----1111221111------ ------11111111------- -------111111-------- --------------------- --------------------- ---------------------";
var nolla = -1;
var xmax = 20;
var ymax = 15;
var level = 10;
var minnex = '';
var minney = '';
var minnevalue = '';
var y1 = -1;
var y2 = ymax + 1;
var y1minne;
var y2minne;
var k = '';
var ii = -1;
var xy = new Array(ymax+2);
for (y = 0; y < ymax+1; y++) {
	xy[y] = new Array(xmax+1);
	for (x = 0; x <= xmax; x++) {
		xy[y][x] = -1;
	}
}
var cpvLG   = 1; // 4.54609; // 3.78541
var cpvMFT  = 1;
var cpvLGtext   = " l";
var cpvLGtext2  = " l/min";
var cpvMFTtext  = " m";
var cpvMFTtext2 = " m" + unescape("%B2");

var cpvErr_sq_val	= "Error - the number of squares can't be more then pond size.";
var cpvErr_num_of_val	= " &nbsp; (value missing)";

function error(i) {
	if (i==0) {
		alert("The pond must be drawn as a continuous space - you can't increase/decrease pond here");
	}
	else if (i==1) {
		alert("There must be a space between the deep water zone and the edge of the shallow water zone.");
	}
	else if (i==2) {
		alert("There must be a space between the shallow water zone and the pond edge.");
	}
	else if (i==3) {
		alert("A shallow water zone or a deep water zone is not allowed outside the pond and the deep water zone must be drawn in the shallow water zone.");
	}
	else if (i==4) {
		alert("You can't decrease this zone here - decrease the deep water zone first");
	}
}
function cpvsetunit() { // not changed to function cpvgetid

	if (cpvgetid('cpvF1').checked == 1) { 
			cpvLG = 1;
			cpvLGtext  = " l";
			cpvLGtext2 = " l/min";
			showid('cpv1c11','inline'); hideid('cpv1c12');
	}
	if (cpvgetid('cpvF2').checked == 1) {
			cpvLG = 4.54609;
			cpvLGtext = " UK Gallons";
			cpvLGtext2 = " UK G.P.M.";
			showid('cpv1c12','inline'); hideid('cpv1c11');
	}
	if (cpvgetid('cpvF3').checked == 1) { 
			cpvLG = 3.78541;
			cpvLGtext = " US Gallons";
			cpvLGtext2 = " US G.P.M.";
			showid('cpv1c12','inline'); hideid('cpv1c11');
	}
	if (cpvgetid('cpvL1').checked == 1) { 
			cpvMFT = 1;
			cpvMFTtext  = " m";
			cpvMFTtext2 = " m" + unescape("%B2");
			for (var t = 1; t <= 21; t++) {
				showid('cpv1b'+t+'1','inline');
				hideid('cpv1b'+t+'2');
			}
			for (var t = 1; t <= 6; t++) {
				showid('cpv1a'+t+'1','inline');
				hideid('cpv1a'+t+'2');
			}
			for (var t = 1; t <= 5; t++) {
				showid('cpv2a'+t+'1','inline');
				hideid('cpv2a'+t+'2');
			}
	}
	if (cpvgetid('cpvL2').checked == 1) { 
			cpvMFT = 0.3048;
			cpvMFTtext  = " ft";
			cpvMFTtext2 = " Square Feet";
			for (var t = 1; t <= 21; t++) {
				showid('cpv1b'+t+'2','inline');
				hideid('cpv1b'+t+'1');
			}
			for (var t = 1; t <= 6; t++) {
				showid('cpv1a'+t+'2','inline');
				hideid('cpv1a'+t+'1');
			}
			for (var t = 1; t <= 5; t++) {
				showid('cpv2a'+t+'2','inline');
				hideid('cpv2a'+t+'1');
			}
	}
}

function cpvcalc1a() {
	var l = cpvgetid("cpvlen1aSQ").value;
	var b = cpvgetid("cpvwid1aSQ").value;
	var d1SQ = chvalue(cpvgetid("cpvdepI1aSQ").value);
	var d2SQ = chvalue(cpvgetid("cpvdepII1aSQ").value);
	var d3SQ = chvalue(cpvgetid("cpvdepIII1aSQ").value);
	var d4SQ = chvalue(cpvgetid("cpvdepIV1aSQ").value);
	var d1 = chvalue(cpvgetid("cpvdepI1a").value);
	var d2 = chvalue(cpvgetid("cpvdepII1a").value);
	var d3 = chvalue(cpvgetid("cpvdepIII1a").value);
	var d4 = chvalue(cpvgetid("cpvdepIV1a").value);
	var len = chvalue(cpvgetid("cpvlen1a").value);
	var wid = chvalue(cpvgetid("cpvwid1a").value);
	var ruta = len * wid; // kvadraten
	var kvadrat = '';
	if (l>0 && b>0) { kvadrat = ruta / l / b;}
	var yta = (d1SQ+d2SQ+d3SQ+d4SQ) * kvadrat;

	var vol = (d1SQ*kvadrat*d1) + (d2SQ*kvadrat*d2) + (d3SQ*kvadrat*d3) + (d4SQ*kvadrat*d4);
	var cC1 = cpvgetid("cpvresSQ1");
	var cC2 = cpvgetid("cpvresSQ2");
	var cC3 = cpvgetid("cpvresSQ3");

	yta = rund(yta, 100);
	vol = vol * cpvMFT * cpvMFT * cpvMFT * 1000 / cpvLG;
	vol = rund(vol,1);
	if (yta > l*b) {
		yta = '';
		
	}

	if (! vol) {
		vol = "-";
	} else {
		vol = vol + cpvLGtext;
	}
	if (yta == 0) {
		yta = "-";
	} else if (yta > len * wid) {
		yta = cpvErr_sq_val;
		vol = "-";
	} else {
		yta = yta + cpvMFTtext2;
	}
	var sq = '-';
	if (kvadrat) {
		len = rund(len/l, 100);
		wid = rund(wid/b, 100);
		sq = len + cpvMFTtext + " x " + wid + cpvMFTtext;
	}
	cC1.innerHTML = vol;
	cC2.innerHTML = yta;
	cC3.innerHTML = sq;
}

function cpvcalc2a() {
	var l      = -1;
	var lstart = xmax;
	var lend   = -1;
	var b      = -1;
	var bstart = ymax;
	var bend   = -1;
	var d1 = 0;
	var d2 = 0;
	var d3 = 0;
	for (y = 0; y <= ymax; y++) {
		for (x = 0; x <= xmax; x++) {
			var i = xy[y][x];
			if (i == 10 ) {
				b = y;
				if (y < bstart) { bstart = y; }
				if (y > bend)   { bend = y; }
				if (x < lstart) { lstart = x; }
				if (x > lend)   { lend = x; }
				d1++;
			}
			else if (i > 10 && i < 19) { d1 = d1 + 0.5; }
			else if (i == 20 ) { d2++; }
			else if (i > 20 && i < 29) { d2 = d2 + 0.5; d1 = d1 + 0.5; }
			else if (i == 30 ) { d3++; }
			else if (i > 30 && i < 39) { d3 = d3 + 0.5; d2 = d2 + 0.5;}
		}
		b = -1;
	}
	var len = chvalue(cpvgetid("cpvrl").value);
	var wid = chvalue(cpvgetid("cpvrb").value);
	b = bend - bstart + 1;
	l = lend - lstart + 1;
	var ruta = len * wid; // kvadrat
	var cC1 = cpvgetid("cpvres2a1");
	var cC2 = cpvgetid("cpvres2a2");
	var cC3 = cpvgetid("cpvres2a3");
	if (ruta > 0 && b > 0 && l > 0) {
		var kvadrat = ruta / l / b;
		var yta = (d1+d2+d3) * kvadrat;
		yta = rund(yta, 100);
		yta = yta + cpvMFTtext2;
		var vcda = chvalue(cpvgetid("cpvrd1").value);
		var vcdb = chvalue(cpvgetid("cpvrd2").value); if (! vcdb) {vcdb = vcda;}
		var vcdc = chvalue(cpvgetid("cpvrd3").value); if (! vcdc) {vcdc = vcdb;}
		var vol = (d1*kvadrat*vcda) + (d2*kvadrat*vcdb) + (d3*kvadrat*vcdc);
		vol = vol * cpvMFT * cpvMFT * cpvMFT * 1000 / cpvLG;
		vol = rund(vol,1);
		if (vol > 0) {
			vol = vol + cpvLGtext;
		} else {
			vol = '-';
		}
		var sq = '-';
		len = rund(len/l, 100);
		wid = rund(wid/b, 100);
		sq = len + cpvMFTtext + " x " + wid + cpvMFTtext;
		cC1.innerHTML = vol;
		cC2.innerHTML = yta;
		cC3.innerHTML = sq;
	}
	nolla = -1;
}


function cpvcalc2b(button) {
	var vol = 0;
	var yta = 0;
	var chErr = '';
	for (i=1; i<=7; i++) {
		var temp = "";
		var len = cpvgetid("cpvl" + i).value;
		var wid = cpvgetid("cpvb" + i).value;
		var dep = cpvgetid("cpvd" + i).value;
		if (len>0 || wid>0 || dep>0) {temp = 1;}
		var fac = 0;
		for( t = 0; t < 3; t++ ) {
			if( cpvgetid("cpvs" + i + t).checked) {
				fac = cpvgetid("cpvs" + i + t).value;
			}
		}
		var temp2 = len * wid * dep * fac;
		if (temp2 == 0 && temp == 1) { chErr = 1; }
		vol += (len * wid * dep * fac);
		yta += (len * wid * fac);
	}
	vol = vol * cpvMFT * cpvMFT * cpvMFT * 1000 / cpvLG;
	vol = rund(vol, 1);
	yta = rund(yta, 100);

	if (chErr == 1 && vol > 1) {
		chErr = cpvErr_num_of_val;
	} else {
		chErr = "";
	}
	if (! yta) {
		yta = "-";
	} else {
		yta = yta + cpvMFTtext2;
	}
	if (! vol) {
		vol = "-";
	} else {
		vol = vol + cpvLGtext;
	}
	var cC1 = cpvgetid("cpvf1");
	var cC2 = cpvgetid("cpvf2");
	cC1.innerHTML = yta;
	cC2.innerHTML = vol + chErr;
}

function cpvcalc1c() {
	var cC1 = cpvgetid("cpvrestid1");
	var cC2 = cpvgetid("cpvrestid2");
	cC1.innerHTML = "-";
	cC2.innerHTML = "-";
	var hour = 0;
	var min = 0;
	var sec = 0;

	var buket = cpvgetid("cpvbuket").value;
	if (buket < 1 ) { return; }
	min = chvalue(cpvgetid("cpvmin1").value);
	sec = chvalue(cpvgetid("cpvsec1").value);
	if (sec > 59 ) { sec = 0; }
	if (sec < 10 ) { cpvgetid("cpvsec1").value = "0" + sec; }
	var bukettime = min + sec / 60;
	if (bukettime == 0 ) { return; }
	var flow = buket / bukettime;
	cC2.innerHTML = rund(flow, 10) + cpvLGtext2;
	hour = chvalue(cpvgetid("cpvhour2").value);
	min = chvalue(cpvgetid("cpvmin2").value);
	sec = chvalue(cpvgetid("cpvsec2").value);
	if (sec > 59 ) { sec = 0; }
	if (sec < 10 ) { cpvgetid("cpvsec2").value = "0" + sec; }
	if (min > 59 ) { min = 0; }
	if (min < 10 ) { cpvgetid("cpvmin2").value = "0" + min; }
	var pondtime = min + sec / 60 + hour * 60;
	if (pondtime == 0 ) { return; }
	var vol = rund(pondtime * flow, 1);
	cC1.innerHTML = vol + cpvLGtext;
}

function searchcol(x, lev, cl) {
	y1 = -1;
	y2 = ymax + 1;
	var levfloor = Math.floor((lev/10)*10);
	for (yy = 0; yy <= ymax; yy++) {
		var i = xy[yy][x];
		if (i == levfloor && y1 == -1) { y1 = yy; }
		if (i == levfloor && y1 >= 0)  { y2 = yy; }
		if (cl == 1) {
			if (i > lev && i < (lev+10)) {
				evalit(x, yy, lev-10, 1);
			}
		}
	}
	if (y1 >= 0) { return 1; }
	return -1;
}

function exec(x, start, end, onoff) {
	for (y = start; y <= end; y++) {
		evalit(x, y, onoff, 1);
	}
	rundmacro(x-2, x+2, level ,1);
}
function validate2(x, y, lev, yplus) {
	if (xy[y+yplus][x] > lev+5 ) { return false; }
	if (xy[y][x-1] > lev+5 )     { return false; } 
	if (xy[y][x+1] > lev+5 )     { return false; } 
	return true;
}

function c(x, y) {
	reseta(1);
	minus = 0;
	searchcol(x, level);
	var i = xy[y][x];
	if (i == level || i > level+5) { 						// minska
		var lev = -1;
		if (level >= 20) { lev = level - 10; } 
		var m1 = y - y1;
		var m2 = y2 - y;
		if (y1 == y2 && level == 10) {
			if ( searchcol(x-1, 10, -1) == 1 && searchcol(x+1, 10, -1) == 1 )  {
				error(0);
			} else if (! validate2(x, y, level, 1)) {
				error(4);
			} else {
				exec(x, y, y, lev);
			}
		} else if (m1 <= m2) {
			if (y1 > 0) {minus = 1; }
			for (ya = (y1-minus); ya <= y; ya++) {
				if (! validate2(x, ya, level, 1)) { y = (y1-minus); error(4);return; }
			}
			exec(x, y1-minus, y, lev);
		} else {
			if (y2 < ymax) {minus = 1; }
			for (ya = y; ya <= y2+minus; ya++) {
				if (! validate2(x, ya, level, -1)) { y = (y2+minus); error(4);return; }
			}
			exec(x, y, y2+minus, lev);
		}
		minnevalue = '';
		return;
	}

	if (y < y1) {									// öka nedåt
		if (y1 > 0) {minus = 1; }
		if (level >= 20) {
			if (! validate1(x, y, level-10, level) ) { error(1); return; }
		}
		exec(x, y, y1-minus, level);
	}
	else if (y > y2) {								// öka uppåt
		if (level >= 20) {
			if (! validate1(x, y, level-10, level) ) { error(1); return; }
		}
		exec(x, y2+1, y, level);
	}
	else if (y1 == -1 && y2 > ymax) {						// ny rad
		minus = 1;
		if (x == 0) { minus = 0; }
		if (level == 10 && xy[y][x-minus] < 10 && xy[y][x+1] < 10) { error(0); return; }
		else if (level >= 20 && i < level-10) {
			error(3);
			return;
		}
		else if (level >= 20) {
			if (! validate1(x, y, level-10, level) ) { error(1); return; }
		}
		exec(x, y, y, level);
	}
	minnevalue = xy[y][x];
}

function validate1(x, y, a, b) {
	var i = xy[y][x];
	if (i < a+5 && i != a ) {
		if (i < b || i > (b+4) ) { return false; } 
	}
	i = xy[y][x+1];
	if (i < a+5 && i != a ) {
		if (i < b || i > (b+4) ) { return false; } 
	}
	i = xy[y][x-1];
	if (i < a+5 && i != a ) {
		if (i < b || i > (b+4) ) { return false; } 
	}
	i = xy[y-1][x];
	if (i < a+5 && i != a ) {
		if (i < b || i > (b+4) ) { return false; } 
	}
	i = xy[y+1][x];
	if (i < a+5 && i != a ) {
		if (i < b || i > (b+4) ) { return false; } 
	}
	return true;
}


function rundmacro(xa, xb, lev, cl) {
	if (xa < 0) {xa = 0; }
	if (xb > xmax+1) {xb = xmax+1; }
	var xc = xa;
	if (xc == 0) { xc = -1; }
	for (x = xa; x <= xb; x++) {
		if (x == xc || x == xb) {
			rundkant(x, lev, -1);
		} else {
			rundkant(x, lev, cl);
		}
	}
	rundend();
}
function rundkant(x, lev, cl) {
	if (lev == -1) {lev = 10; }
	searchcol(x, lev, cl);
	if (y2minne) {
		if (y2minne < y2 && y2 <= ymax) {
			var temp = xy[y2minne+1][x-2];
			if (temp == undefined) {temp = -1;}
			if (temp < level || temp > level) {
				evalit(x-1, y2minne+1, r1, 1);
			}
		} else if (y2minne > y2) {
			var temp = xy[y2+1][x+1];
			if (temp < level || temp > level) {
				evalit(x, y2+1, r2, 1);
			}
		}
		if (y1minne > y1 && y1 >= 0) {
			var temp = xy[y1minne-1][x-2];
			if (temp == undefined) {temp = -1;}
			if (temp < level || temp > level) {
				evalit(x-1, y1minne-1, r3, 1);
			}
		} else if (y1minne < y1) {
			var temp = xy[y1-1][x+1];
			if (temp < level || temp > level) {
				evalit(x, (y1-1), r4, 1);
			}
		}
	}
	if (y1 >= 0) {
		y2minne = y2;
		y1minne = y1;
	}
}
function rundend() {
	y2minne = '';
	y1minne = '';
}
function evalit (x, y, lev, save) {
	var p = "p0";
	if (lev >= 10) {
		p = "p" + lev;
	}
	cpvgetid("x" + x + "y" + y).src = "/pdc/" + p + ".gif";
	if (save) {
		xy[y][x] = lev;
	}
}
function chlev(i) {
	r1 = i + 1;
	r2 = i + 2;
	r3 = i + 3;
	r4 = i + 4;
	level = i;
}
function mark(i) {
	cpvgetid("cpvaktivzon").src = "/pdc/p" + i + ".gif";
}
function reseta(i) {
	if (nolla == -1) {
		cC1 = cpvgetid("cpvres2a1");
		cC2 = cpvgetid("cpvres2a2");
		cC3 = cpvgetid("cpvres2a3");
		cC1.innerHTML = "-";
		cC2.innerHTML = "-";
		cC3.innerHTML = "-";
		nolla = 1;
	}
}
function ch() {
	ii++;
	k = mall.substr(ii,1);
}
function init(i) {
	reseta(1);
	ii = -1;
	if (i >= 0) { mall = allponds[i]; }
	for (y = 0; y <= ymax; y++) {
		for (x = 0; x <= xmax; x++) {
			ch();
			if (k == ' ') { ch(); }
			if (k == '-' ) {
				xy[y][x] = -1;
				evalit(x, y, -1);
			}

			else if (k == '1' ) {
				xy[y][x] = '10';
				evalit(x, y, 10);
			}
			else if (k == '2' ) {
				xy[y][x] = '20';
				evalit(x, y, 20);
			}
			else if (k == '3' ) {
				xy[y][x] = '30';
				evalit(x, y, 30);
			}
		}
		xy[y][xmax+1] = -1;
	}
	chlev(30);
	rundmacro(0, xmax, 30, -1);
	chlev(20);
	rundmacro(0, xmax, 20, -1);
	chlev(10);
	rundmacro(0, xmax, 10, -1);
	rundend();
	mark(10);
	hideid('step1a');
	cpvcalc2a();
	showid('step2a','block');
	cpvTop();
}

function cpvTop() {
	location.hash="top";
}








		function hideid(id) {
			if (document.getElementById) { // DOM3 = IE5, NS6
				document.getElementById(id).style.display = 'none';
			}
			else {
				if (document.layers) { // Netscape 4
					document.id.display = 'none';
				}
				else { // IE 4
					document.all.id.style.display = 'none';
				}
			}
		}
		function showid(id, disp) {
			if (document.getElementById) { // DOM3 = IE5, NS6
				document.getElementById(id).style.display = disp;
			}
			else {
				if (document.layers) { // Netscape 4
					document.id.display = disp;
				}
				else { // IE 4
					document.all.id.style.display = disp;
				}
			}
		}
		function cpvgetid(id) {
			if (document.getElementById) { // DOM3 = IE5, NS6
				return document.getElementById(id);
			} else {
				if (document.layers) { // Netscape 4
					return document.id;
				} else { // IE 4
					return document.all.id;
				}
			}
		}








		function rund(a,b) {
			a += 0.0001;
			a = Math.floor(a * b) / b;
			if (b==10) {var fix = 1;}
			if (b==100) {var fix = 2;}
			if (a.toFixed && (fix)) {
				a = a.toFixed(fix);
			}
			if (a == 0) {a='';}
			return a;
		}

		function parses(v,p) {
			var deci = 100;
			if (p == 0) { deci = 1; }
			var str = v.value;
			var b = str.indexOf(",");
			if (b >=0) {
			str = str.substring(0,b) + "." + str.substring(b+1);
			}
			b = parseFloat(str);
			b = chvalue(b);
			v.value = rund(b,deci);
		}

		function chvalue(a) {a = isvalue(a);a = Math.abs(a);return a;}

		function isvalue(a) {if (isNaN(a)) {return 0;} else {return a;}}

		function noenter() { return false;}




