




var labourRates = new Array(new Array(105,74,95,147,147,141,141,154,154,120,162),
							new Array(126,89,115,178,178,170,170,187,187,145,196),
							new Array(114,80,104,160,160,153,153,168,168,130,176),
							new Array(93,65,85,131,131,125,125,137,137,107,144),
							new Array(95,67,86,134,134,128,128,140,140,109,147),
							new Array(92,65,84,129,129,123,123,135,135,105,142),
							new Array(114,80,104,160,160,153,153,168,168,130,176),
							new Array(93,65,85,131,131,125,125,137,137,107,144),
							new Array(95,67,86,134,134,128,128,140,140,109,147),
							new Array(120,85,109,169,169,162,162,177,177,138,186),
							new Array(98,69,89,138,138,132,132,145,145,113,152),
							new Array(125,81,105,162,162,155,155,170,170,132,182),
							new Array(108,76,98,152,152,145,145,159,159,124,160),
							new Array(101,71,92,143,143,137,137,150,150,116,157));
var labourRegions = new Array("Eastern Region","London Region","Midlands Region","Northern Region","North East Region","Northern Ireland Region","North West Region","Scotland Region","Scottish City Region",
							  "South East Region","South Wales Region","South West Region","South Yorkshire Region","Wales (except South) Region");
var eolRegions = new Array("E","L","M","N","NE","NI","NW","S","SC","SE","WS","SW","SY","W");
Error: java.sql.SQLException: Communication link failure: java.io.EOFException, underlying cause: null

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
	at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1224)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:2248)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:2196)
	at com.mysql.jdbc.Statement.executeQuery(Statement.java:1163)
	at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
	at org.apache.jsp.samples.sample_005flabour_jsp._jspService(sample_005flabour_jsp.java:73)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



var labourRates = new Array(
var labourRegions = new Array(
var eolRegions = new Array(
// JavaScript Document
var labourGrades = new Array("Ganger","General labourer","Semi-Skilled labourer","Bricklayer","Carpenter &amp; Joiner","Roofer","Plasterer","Electrician",
							 "Plumber &amp; Heating engineer","Painter &amp; Decorator","Working Foreman");
var labourGradeTranslation = new Array(-1,10,-1,0,1,2,3,4,5,6,8,7,9);
var labourNewRates = new Array(114,80,104,160,160,153,153,168,168,130,176);
var labourOrigRates = new Array(114,80,104,160,160,153,153,168,168,130,176);
var labourGradient = new Array(9.857720488,5.212470662,36.28260305,6.047422164,11.00352811,3.501512252,4.139686198,7.831320312,17.63586813,5.266548176,23);
var labourBaseCost = 35121.53199;
var labourNewRates = new Array(114, 90, 104, 170, 160, 156, 160, 180, 180, 131, 176);
var labourOrigRates = new Array(114, 90, 104, 170, 160, 156, 160, 180, 180, 131, 176);
var labourGradient = new Array(6.34516999999996, 2.75900999999994, 29.91955, 6.86210999999985, 11.79946, 3.51642999999985, 4.68926499999998, 4.54555499999988, 13.27449, 4.67225500000004, 17.25);
var labourBaseCost = 30677.1029;
var labourRegion = 0;
var labourRegionsLat = new Array(51.0,51.0,51.5,52.3,52.5,53.5,53.5,54.6,54.6,55.8,56.6,51.8,52.8,54.6);
var labourRegionsLng = new Array(3.0,-0.3,0.0,1.4,-0.5,2.4,1.0,1.6,2.8,3.5,4.3,3.6,3.6,6.5);
var doubleOldCost = 0.0;
var doubleNewCost = 0.0;
var defaultVisible = new Array();
var popupLines = new Array(6,0,0,4,14,7,8,8,11,5,0);
var popupLineText = new Array(
	new Array("Excavations for cavity walls: Hand Dig","Concrete:  Strip Foundations","Excavate Drains Hand dig","Lay Pipes 110mm plastic 3m lengths","Backfill Pipes P-Gravel","Backfill over with spoil"),
	new Array(),
	new Array(),
	new Array("65mm Facing brick above DPC","Cavity/Party Wall BLWK 100mm Solid Con 7Kn","Cavity/Party Wall BLWK 100mm Celcon/Thermalite","Rack out &amp; repoint existing brickwork in sand and cement mortar"),
	new Array("Floor Joists 47x175","Water Resistant 22mm Chipboard fixed to timber","Velux Window GGL C02","Velux Flashing EDL C02","Stud Partitions in 4 X 2 (47x100)","Redwood rebated internal door framing (5.1m per door)","Redwood rebated &amp; grooved fire door framing  (5.1m per door)","Standard Internal Door","Internal Fire Door","Ironmongery Standard Door Pack","5 Lever Mortise Door Pack","Softwood 3&quot; Moulded Architrave","Softwood 5&quot; Moulded Skirting Board","Oak 5&quot; Moulded Skirting Board"),
	new Array("PROCTOR Roofshield breathable membrane","Battens 19x38 Treated","Battens 25x38 Treated","MARLEY PLAIN EAVES TILES","MARLEY PLAIN TILES","Slates 24&quot;X12&quot; (Welsh)","Lead Flashings"),
	new Array("Floated walls using: Thistle Browning","Skim Walls","Sand &amp; Cement render scratch/base coat ready to receive skim finish","Sand &amp; Cement render scratch coat only","Dot &amp; Dab using 12.5mm Boards","100mm Quilt Insulation (Partitions)","Insulate Ceilings &amp; Roof Voids 100mm Quilt","Insulate Ceilings &amp; Roof Voids 200mm Quilt"),
	new Array("First Fix Wiring 1.5mm Twin &amp; Earth Cabling","First Fix Wiring 2.5mm Twin &amp; Earth Cabling","First Fix Wiring 6.0mm Twin &amp; Earth Cabling","Install New Consumer Unit","Ceiling Pendant Light inc switch &amp; back box","Double plug socket &amp; back box","Shower Unit Connection","Shower Ceiling Isolating Pull switch"),
	new Array("First Fix 15mm Copper pipe","First Fix 22mm Copper Pipe","Soil Vent Pipes","SVP Branch","SVP Bends","SVP Clips","WC Pan white","WC Cistern White","Wash-hand-basin White","Basin Pedestal White","Standard White Bath"),
	new Array("Prime Internal Woodwork. Prior to fixing","Undercoat Internal Woodwork","Gloss Internal Woodwork","Emulsion Walls (Mist &amp; two coats)","Emulsion Ceiling (Mist &amp; two coats)"),
	new Array());
var popupLineL2 = new Array(2,2,2,2,2,2,2,2,2,2,2);
var popupLineM1 = new Array(
	new Array(0.75,0.175,0.1875,0.025,0.175,0.1875),
	new Array(),
	new Array(),
	new Array(3,0.07,0.0625,0.035),
	new Array(0.0275,0.04375,0.45,0.125,0.00625,0.175,0.2,0.125,0.1875,0.09375,0.125,0.01875,0.03125,0.04375),
	new Array(0.0025,0.00625,0.00625,0.00125,0.00125,0.00625,0.0325),
	new Array(0.03125,0.01875,0.04375,0.01625,0.0225,0.01,0.015,0.02),
	new Array(0.00625,0.0075,0.01,0.8125,0.125,0.125,0.21875,0.15625),
	new Array(0.025,0.03,0.05625,0.05,0.0425,0.01875,0.09375,0.1875,0.25,0.0625,0.375),
	new Array(0.005,0.0075,0.01,0.02875,0.03125),
	new Array());
var popupLineM2 = new Array(
	new Array(0.375,0.0875,0.09375,0,0,0),
	new Array(),
	new Array(),
	new Array(0,0.035,0.03125,0.035),
	new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0),
	new Array(0,0,0,0,0,0,0),
	new Array(0.03125,0.01875,0.04375,0.01625,0.0225,0.01,0.015,0.02),
	new Array(0,0,0,0,0,0,0,0),
	new Array(0,0,0,0,0,0,0,0,0,0,0),
	new Array(0,0,0,0,0),
	new Array());
var popupLineUOM = new Array(
	new Array("M<sup>3</sup>","M<sup>3</sup>","M<sup>1</sup>","M<sup>1</sup>","M<sup>3</sup>","M<sup>3</sup>"),
	new Array(),
	new Array(),
	new Array("TH","M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>"),
	new Array("M<sup>1</sup>","M<sup>2</sup>","NR","NR","M<sup>1</sup>","NR","NR","NR","NR","NR","NR","M<sup>1</sup>","M<sup>1</sup>","M<sup>1</sup>"),
	new Array("M<sup>2</sup>","M<sup>1</sup>","M<sup>1</sup>","NR","NR","NR","M<sup>1</sup>"),
	new Array("M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>","M<sup>2</sup>"),
	new Array("M<sup>1</sup>","M<sup>1</sup>","M<sup>1</sup>","NR","NR","NR","NR","NR"),
	new Array("M<sup>1</sup>","M<sup>1</sup>","M<sup>1</sup>","NR","NR","NR","NR","NR","NR","NR","NR"),
	new Array("M<sup>1</sup>","M<sup>1</sup>","M<sup>1</sup>","M<sup>2</sup>","M<sup>2</sup>"),
	new Array()
	);
var popupHtml = new Array("Excavations &amp; Foundations Drainage","","","Brickworks","Carpentry &amp; Joinery","Roof Tiling/Slating/Thatching","Plastering &amp; Insulation","Electrical",
							 "Plumbing &amp; Heating","Painting &amp; Decorating","");
function findNewCost() {
	var labourDelta = 0.0;
	for (i=0;i<labourGrades.length;i++) {
		labourDelta+=(labourNewRates[i]-labourOrigRates[i])*labourGradient[i];
	}
	return ((labourBaseCost+labourDelta).toFixed(2));
}
function setNewCost() {
	var newCost = document.getElementById("theNewCost");
	doubleNewCost = findNewCost();
	newCost.innerHTML="&pound;"+doubleNewCost;
	if (doubleNewCost != doubleOldCost) {
		newCost.className = "newCost";
	}
	else {
		newCost.className = "oldCost";
	}
	var theDiff = document.getElementById("theDifference");
	var doubleDiff = (((doubleNewCost-doubleOldCost)/doubleOldCost)*100);
	theDiff.innerHTML = (doubleDiff).toFixed(2) + "%";
	if (doubleDiff<0) {
		theDiff.innerHTML = "your price is " + (-doubleDiff).toFixed(2) + "% lower";
		theDiff.className = "costLess";
	}
	else if (doubleDiff>0) {
		theDiff.innerHTML = "your price is " + (doubleDiff).toFixed(2) + "% higher";
		theDiff.className = "costMore";
	}
	else {
		theDiff.innerHTML = "";
		theDiff.className = "costSame";
	}
}
function setOldCost() {
	doubleOldCost = findNewCost();
	document.getElementById("theOldCost").innerHTML="&pound;"+doubleOldCost;
}
function useNewLabour(newLabourRates) {
	for (i=0;i<labourGrades.length;i++) {
		labourNewRates[i]=newLabourRates[i];
	}
}
function setNewRate(slider,index) {
	labourNewRates[index]=slider.value;
	setNewCost();
}
function discardNonNumeric(input) {
	var mStr = new String(input.value);
	mStr = mStr.replace(/[^.0-9]/g,'');
	input.value = mStr;
}
function setNewRate(index) {
	var theValue = document.getElementById("RATE_"+index);
	var theBaseValue = document.getElementById("BASE_"+index);
	if (theValue != null) {
		var theType = document.getElementById("TYPE_"+index);
		if (theType.value == "1") {
			labourNewRates[labourGradeTranslation[index]]=theValue.value;
		}
		else {
			labourNewRates[labourGradeTranslation[index]]=8*theValue.value;
		}
		if (theValue.value.length < 1 && theBaseValue != null) {
			labourNewRates[labourGradeTranslation[index]]=theBaseValue.value;
		}
	}
}
function showPopup(index) {
	var theValue = document.getElementById("RATE_"+index);
	var realIndex = labourGradeTranslation[index];
	var returnValue = "<font size='1'><table><tr><td>"; 
	returnValue += popupHtml[realIndex];
	returnValue += "</td></tr>";
	if (defaultVisible[realIndex]) {
	for (i=0;i<popupLines[realIndex];i++) {
		returnValue += "<tr><td width='60%'>" + popupLineText[realIndex][i] + "</td>";
		var unitTime = 0.0 + popupLineM1[realIndex][i]*labourNewRates[realIndex] + popupLineM2[realIndex][i]*labourNewRates[popupLineL2[realIndex]];
		if (unitTime > 10) {
			unitTime = Math.round(unitTime * 2)/2;
		}
		else {
			unitTime = Math.round(unitTime * 10)/10;
		}
		returnValue += "<td>&pound;" + unitTime.toFixed(2) + " per " + popupLineUOM[realIndex][i] + "</td></tr>";
	}
	}
	else {
		returnValue += "<tr><td>Please enter your labour rate</td></tr>";
	}
	returnValue += "</table></font>";
	return returnValue;
}
function setNewBaseRate(index) {
	var theValue = document.getElementById("BASE_"+index);
	if (theValue != null) {
		labourNewRates[labourGradeTranslation[index]]=theValue.value;
	}
}
function setNewRegion(theId,index) {
	labourRegion=index;
	useNewLabour(labourRates[index]);
	createSliders(theId);
}
function setNewRegion(eolRegion) {
	var index = -1;
	for (i=0;i<=eolRegions.length;i++) {
		if (eolRegions[i] == eolRegion) {
			index = i;
			break;
		}
	}
	labourRegion=index;
	useNewLabour(labourRates[index]);
	return findNewCost();
}
function createSliders(theId) {
	var theDiv=document.getElementById(theId);
	var theHtml = "<table>";
	theHtml+="<tr><td><select onChange='javascript: setNewRegion(\""+theId+"\",this.value);'>";
	for (i=0;i<labourRegions.length;i++) {
		theHtml+="<option value='"+i+"'"+(labourRegion==i?" selected":"")+">"+labourRegions[i]+"</option>";
	}
	theHtml+="</select></td></tr>";
	for (i=0;i<labourGrades.length;i++) {
		theHtml+="<tr><td>"+labourGrades[i]+"</td><td>";
		theHtml+="<div class='carpe_horizontal_slider_track'><div class='carpe_slider_slit'>&nbsp;</div><div class='carpe_slider' id='slider"+i+"' orientation='horizontal' distance='100' display='display"+i+"' style='left: "+((labourNewRates[i])/3)+"px;' onMouseUp='javascript:setNewRate(document.getElementById(\"display"+i+"\"),"+i+");'>&nbsp;</div></div>";
		theHtml+="<div class='carpe_slider_display_holder'><input class='carpe_slider_display' id='display"+i+"' name='var"+i+"' type='text' from='0' to='300' valuecount='31' value='"+labourNewRates[i]+"' defaultValue='"+labourNewRates[i]+"' typelock='off' onChange='javascript:setNewRate(this,"+i+");'/></div>";
		theHtml+="</td></tr>";
	}
	theHtml+="<tr><td>Total cost</td><td id='theNewCost'></td></tr>";
	theHtml+="</table>";
	theDiv.innerHTML=theHtml;
	setNewCost();
	carpeInit();
}
function showRegionsOnMap() {
	for (i=0;i<labourRegions.length;i++) {
		useNewLabour(labourRates[i]);
		map.addOverlay(createMarker(new GLatLng(labourRegionsLat[i], labourRegionsLng[i]),"Total contract price for our 2 storey extension sample in this region is " + findNewCost()));
	}
}
function unhideDefault(index) {
	var theValue = document.getElementById("DEFAULTRATEDISPLAY_"+index);
	defaultVisible[labourGradeTranslation[index]] = true;
	theValue.className = "regionalRate";
}
var popup=function(){
	var id = 'pu';
	var top = 3;
	var left = 3;
	var maxw = 350;
	var speed = 10;
	var timer = 20;
	var endalpha = 95;
	var alpha = 0;
	var pu,tpu,cpu,bpu,hpu;
	var iepu = document.all ? true : false;
	return{
		show:function(v,w){
			if(pu == null){
				pu = document.createElement('div');
				pu.setAttribute('id',id);
				tpu = document.createElement('div');
				tpu.setAttribute('id',id + 'top');
				cpu = document.createElement('div');
				cpu.setAttribute('id',id + 'cont');
				bpu = document.createElement('div');
				bpu.setAttribute('id',id + 'bot');
				pu.appendChild(tpu);
				pu.appendChild(cpu);
				pu.appendChild(bpu);
				document.body.appendChild(pu);
				pu.style.opacity = 0;
				pu.style.filter = 'alpha(opacity=0)';
			}
			document.onmousemove = this.pupos;
			pu.style.display = 'block';
			cpu.innerHTML = v;
			pu.style.width = w ? w + 'px' : 'auto';
			if(!w && iepu){
				tpu.style.display = 'none';
				bpu.style.display = 'none';
				pu.style.width = pu.offsetWidth;
				tpu.style.display = 'block';
				bpu.style.display = 'block';
			}
			if(pu.offsetWidth > maxw){pu.style.width = maxw + 'px'}
			hpu = parseInt(pu.offsetHeight) + top;
			hpu = -20;
			clearInterval(pu.timer);
			pu.timer = setInterval(function(){popup.fade(1)},timer);
		},
		pupos:function(e){
			var u = iepu ? event.clientY + document.documentElement.scrollTop : e.pageY;
			var l = iepu ? event.clientX + document.documentElement.scrollLeft : e.pageX;
			pu.style.top = (u - hpu) + 'px';
			pu.style.left = (l + left) + 'px';
		},
		fade:function(d){
			var a = alpha;
			if((a != endalpha && d == 1) || (a != 0 && d == -1)){
				var i = speed;
				if(endalpha - a < speed && d == 1){
					i = endalpha - a;
				}else if(alpha < speed && d == -1){
					i = a;
				}
				alpha = a + (i * d);
				pu.style.opacity = alpha * .01;
				pu.style.filter = 'alpha(opacity=' + alpha + ')';
			}else{
				clearInterval(pu.timer);
				if(d == -1){pu.style.display = 'none'}
			}
		},
		hide:function(){
			clearInterval(pu.timer);
			pu.timer = setInterval(function(){popup.fade(-1)},timer);
		}
	};
}();