/*
Gain and Watts Calculator Copyright (C) 2005 Giacomo Cau

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. 
*/

function tabellaKmh(rt, pd, c, p, rpm) {
	var isRpm = rpm.length ? 0 : 1
	html(
		table({cellspacing:0, cellpadding:4, border:1},
			tr(
				td({colspan:1+c.length*rpm.length, align:'center'}, 'Km/h per Cadenza')
			),
			tr(
				td({colspan:1, rowspan:4},	'&nbsp;'	),
				td({colspan:c.length*rpm.length, align:'center'}, 'Corone')
			),
			tr( 
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({align:'center', colspan:rpm.length}, c[i] + ' t'))
					}
				}
			),
			tr(
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({align:'center', colspan:rpm.length}, 'Cadenze'))
					}
				}
			),
			tr({align:'center'},
				function () {
					for (var i=0; i<c.length; i++) {
						for (var j=0; j<rpm.length; j++) {
							html(td(rpm[j]))
						}
					}
				}
			),
			tr({align:'center'},
				td('Pignoni'),
				function () {
					for (var i=0, ei=c.length; i<ei; i++) {
						for (var j=0, ej=rpm.length; j<ej; j++) {
							html(td('Km/h'))
						}
					}
				}
			),
			function () {
				for (var i=0; i<p.length; i++) {
					html(
						tr({align:'right'},
							td({align:'center'}, p[i] ),
							function () {
								for (var j=0; j<c.length; j++) {
									for (var k=0; k<rpm.length; k++) {
										var kmh = c[j]/p[i]*rpm[k]*rt*0.0012*Math.PI
										html(td(kmh.frmt(1,true)))
									}
								}
							}
						)
					)
				}
			}
		)
	)		
}

function tabellaGdKmh(rt, pd, c, p, rpm) {
	html(
		table({cellspacing:0, cellpadding:4, border:1},
			tr(
				td({colspan:1+c.length*(1+rpm.length), align:'center'}, 'Guadagno e Km/h per Cadenza')
			),
			tr(
				td({rowspan:3+(rpm.length?2:0), valign:'bottom'},	'Pignoni'	),
				td({colspan:1*c.length*(1+rpm.length), align:'center'}, 'Corone')
			),
			tr( 
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({colspan:1+rpm.length, align:'center'}, c[i] + ' t'))
					}
				}
			),
			tr({align:'center'},
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({rowspan:1+(rpm.length?2:0), valign:'bottom'}, 'Gd'))
						if (rpm.length) {
							html(td({colspan:rpm.length}, 'Cadenze'))
						}
					}
				}
			),
			function () {
				if (rpm.length) {
					html(					
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										html(td(rpm[j]))
									}
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var i=0, ei=c.length; i<ei; i++) {
									for (var j=0, ej=rpm.length; j<ej; j++) {
										html(td('Km/h'))
									}
								}
							}
						)
					)
				}
			},
			function () {
				for (var i=0; i<p.length; i++) {
					html(
						tr({align:'right'},
							td({align:'center'}, p[i] ),
							function () {
								for (var j=0; j<c.length; j++) {
									var gd = rt/pd * c[j]/p[i]
									html(td(gd.frmt(2,true)))
									for (var k=0; k<rpm.length; k++) {
										var kmh = c[j]/p[i]*rpm[k]*rt*0.0012*Math.PI
										html(td(kmh.frmt(1,true)))
									}
								}
							}
						)
					)
				}
			}
		)
	)		
}
function tabellaRpSvGd(c, p, cc, pp) {
	html(
		table({cellspacing:0, cellpadding:4, border:1},
			tr(
				td({colspan:12, align:'center'}, 'Rapporto Sviluppo Guadagno')
			),
			tr(
				td({colspan:3, rowspan:3, style:'font-size:smaller', width:'25%', valign:'bottom'},
					'&nbsp;'
				),
				td({colspan:c.length*3, align:'center'}, 'Corone')
			),
			tr( 
				function () {
					for (var i=0; i<c.length; i++)
						html(td({align:'center', colspan:3}, c[i] + ' t'));
				}
			),
			tr({align:'center'},
				td({rowspan:2, colspan:3}, '&nbsp;'),
				function () {
					for (var i=1; i<c.length; i++) 
						html(td({colspan:3}, cc[i].dt + ' &Delta;t'));
				}
			),
			tr({align:'center'},
				td({colspan:3},'Pignoni'),
				function () {
					for (var i=1; i<c.length; i++)
						html(td({align:'center', colspan:3}, cc[i].prc.frmt(2,true)+ ' &Delta;%'));
				}
			),
			tr({align:'center'},
				td('t'),
				td('&Delta;t'),
				td('&Delta;%'),
				function () {
					for (var i=0; i<c.length; i++) {
						html( 
							td('Rp'),
							td('Sv'),
							td('Gd')
						)
					}
				}
			),
			function () {
				for (var i=0; i<p.length; i++) {
					html(
						tr({align:'right'},
							td({align:'center'}, p[i] ),
							function () {
								if (i == p.length-1) 
									html(td({colspan:2},'&nbsp;'));
								else {
									html(
										td({align:'center'}, pp[i].dt ),
										td({align:'center'}, pp[i].prc.frmt(2,true))
									)
								}
								for (var j=0; j<c.length; j++) {
									var rp = c[j] / p[i]
									var gu = rp * rt / pd
									var sv = rp * rt * 2 * Math.PI / 100
									html(
										td(rp.frmt(2,true)),
										td(sv.frmt(2,true)),
										td(gu.frmt(2,true))
									)
								}
							}
						)
					)
				}
			}
		)
	)
}

function tabellaSintesi(c, p, sc, sp, smc, smp) {
	html(
		table({cellspacing:0, cellpadding:4, border:1},

			/*tr(
				td({colspan:12, align:'center'}, 'In Sintesi')
			),*/
						
			tr(td('corone'),		         td({align:'right'}, c.length )),
			tr(td('pignoni'),		         td({align:'right'}, p.length )),
			tr(td('rapporti'), 	         td({align:'right'}, c.length * p.length )),
			tr(td('capacita totale'), 	   td({align:'right'}, p[0] + c[c.length-1] - c[0] - p[p.length-1] )),
			tr(td('differenza frontale'),	td({align:'right'}, c[c.length - 1] - c[0] )),
			function () {
				if (p.length > 1) {
					html(
						tr(td('step pignoni'), 		   td({align:'right'}, sp.toPrc().frmt(2,true) + ' %' )),
						tr(td('step medio pignoni'),	td({align:'right'}, smp.frmt(2,true) + ' %' )),
						tr(td('half step pignoni'), 	td({align:'right'}, Math.sqrt(sp).toPrc().frmt(2,true) + ' %' ))
					)
				}
				if (c.length > 1) {
					html(
						tr(td('step corone'), 			td({align:'right'}, sc.toPrc().frmt(2,true) + ' %' )),
						tr(td('step medio corone'),	td({align:'right'}, smc.frmt(2,true) + ' %' )),
						tr(td('half step corone'), 	td({align:'right'}, Math.sqrt(sc).toPrc().frmt(2,true) + ' %' ))
					)
				}
				if (c.length > 1 
				&&  p.length > 1) {
					html(
						tr(td('guadagno min'), 			td({align:'right'}, (rt/pd*c[0]/p[0]  ).frmt(2,true))),
						tr(td('guadagno max'), 			td({align:'right'}, (rt/pd*c[c.length-1]/p[p.length-1]).frmt(2,true)))
					)
				}
			}
		)
	)
}

	
function tabellaKmhGdRpm(rt, pd, c, p, rpm, kg, cxpa, cr, pnd, watt) {
	var s = []
	for (var i=0; i<p.length; i++) {
		for (var j=0; j<c.length; j++) {
			s[s.length] = {
				c:c[j],
				p:p[i],
				gd:rt/pd*c[j]/p[i]
			}
		}
	}
	s.sort(function(a,b) {return b.gd - a.gd})
	html(
		table({cellspacing:0, cellpadding:4, border:1},
			tr(
				td({colspan:1+c.length*(1+rpm.length)*(1+pnd.length), align:'center'},
				'Km/h e Watt per guadagno cadenza e pendenza'
				)
			),
			tr({align:'center'},
				td({rowspan:1+(rpm.length?2:0)+(pnd.length?2:0), valign:'bottom', nowrap:true}, 'C&#215;P'),
				td({rowspan:1+(rpm.length?2:0)+(pnd.length?2:0), valign:'bottom'}, 'Gd'),
				td({colspan:rpm.length*(1+pnd.length)}, 'Cadenze')
			),
			function () {
				if (rpm.length) {
					html(					
						tr({align:'center'},
							function () {
								for (var j=0; j<rpm.length; j++) {
									html(td({colspan:1+pnd.length}, rpm[j] + ' rpm'))
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var j=0, ej=rpm.length; j<ej; j++) {
									html(td({rowspan:1+(pnd.length?2:0), valign:'bottom'}, 'Km/h'))
									if (pnd.length) {
										html(td({colspan:pnd.length},'Pendenze'))
									}
								}
							}
						)
					)
				}
				if (pnd.length) {
					html(
						tr({align:'center'},
							function () {
								for (var j=0; j<rpm.length; j++) {
									for (var k=0; k<pnd.length; k++) {
										html(td(pnd[k] + '%'))
									}
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var j=0; j<rpm.length; j++) {
									for (var k=0; k<pnd.length; k++) {
										html(td('Watt'))
									}
								}
							}
						)
					)						
				}
			},
			function () {
				for (var i=0; i<s.length; i++) {
					var si = s[i]
					html(
						tr({align:'right'},
							td({nowrap:true}, si.c + '&#215;' + si.p	),
							td( si.gd.frmt(2,true) ),
							function () {
								for (j=0; j<rpm.length; j++) {
									var kmh = si.gd * pd * rpm[j] * 0.0012 * Math.PI
									html(	td( kmh.frmt(1,true)))
									var ms = kmh / 3.6
									var wa = 9.81 * kg * cr * ms
									var wv = 0.5 * cxpa * Math.pow(ms,3)
									for (k=0; k<pnd.length; k++) {
										var wp = 9.81 * kg * pnd[k] / 100 * ms
										var wt = wa + wv + wp
										html(
											td({nowrap:true},
												 font({color:Math.round(wt,0)>watt?'red':'black'}, wt.frmt(0,true))
											)
										)
									}
								}
							}
						)	
					)
				}
			}
		)
	)
}


function tabellaGdKmhWatt(rt, pd, c, p, rpm, kg, cxpa, cr, pnd, watt) {
	html(
		table({cellspacing:0, cellpadding:4, border:1},
			tr(
				td({colspan:1+c.length*(1+rpm.length)*(1+pnd.length), align:'center'}, 'Titolo')
			),
			tr(
				td({rowspan:3+(rpm.length?2:0)+(pnd.length?2:0), valign:'bottom'},	'Pignoni'	),
				td({colspan:1*c.length*(1+rpm.length)*(1+pnd.length), align:'center'}, 'Corone')
			),
			tr( 
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({colspan:1+rpm.length*(1+pnd.length), align:'center'}, c[i] + ' t'))
					}
				}
			),
			tr({align:'center'},
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({rowspan:1+(rpm.length?2:0)+(pnd.length?2:0), valign:'bottom'}, 'Gd'))
						if (rpm.length) {
							html(td({colspan:rpm.length*(1+pnd.length)}, 'Cadenze'))
						}
					}
				}
			),
			function () {
				if (rpm.length) {
					html(					
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										html(td({colspan:1+pnd.length}, rpm[j] + ' rpm'))
									}
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var i=0, ei=c.length; i<ei; i++) {
									for (var j=0, ej=rpm.length; j<ej; j++) {
										html(td({rowspan:1+(pnd.length?2:0), valign:'bottom'}, 'Km/h'))
										if (pnd.length) {
											html(td({colspan:pnd.length},'Pendenze'))
										}
									}
								}
							}
						)
					)
				}
				if (pnd.length) {
					html(
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										for (var k=0; k<pnd.length; k++) {
											html(td(pnd[k] + '%'))
										}
									}
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										for (var k=0; k<pnd.length; k++) {
											html(td('Watt'))
										}
									}
								}
							}
						)
					)						
				}
			},
			function () {
				for (var i=0; i<p.length; i++) {
					html(
						tr({align:'right'},
							td({align:'center'}, p[i] ),
							function () {
								for (var j=0; j<c.length; j++) {
									var gd = rt/pd * c[j]/p[i]
									html(td(gd.frmt(2,true)))
									for (var k=0; k<rpm.length; k++) {
										var kmh = c[j]/p[i]*rpm[k]*rt*0.0012*Math.PI
										html(td(kmh.frmt(1,true)))
										var ms = kmh / 3.6
										var wa = 9.81 * kg * ms * cr
										var wv = 0.5 * Math.pow(ms,3) * cxpa
										for (var l=0; l<pnd.length; l++) {
											var wp = 9.81 * kg * ms * pnd[l] / 100
											var wt = wa + wv + wp
											html(
												td({nowrap:true},
													 font({color:round(wt,0)>watt?'red':'black'}, wt.frmt(0,true))
												)
											)
										}										
									}
								}
							}
						)
					)
				}
			}
		)
	)		
}


function tabellaGdKmhWattOriz(rt, pd, c, p, rpm, kg, cxpa, cr, pnd, watt) {
	html(
		table({cellspacing:0, cellpadding:4, border:1},
			tr(
				td({colspan:1+c.length*(1+rpm.length)*(1+pnd.length), align:'center'}, 'Titolo')
			),
			tr(
				td({rowspan:3+(rpm.length?2:0)+(pnd.length?2:0), valign:'bottom'},	'Pignoni'	),
				td({colspan:1*c.length*(1+rpm.length)*(1+pnd.length), align:'center'}, 'Corone')
			),
			tr( 
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({colspan:1+rpm.length*(1+pnd.length), align:'center'}, c[i] + ' t'))
					}
				}
			),
			tr({align:'center'},
				function () {
					for (var i=0; i<c.length; i++) {
						html(td({rowspan:1+(rpm.length?2:0)+(pnd.length?2:0), valign:'bottom'}, 'Gd'))
						if (rpm.length) {
							html(td({colspan:rpm.length*(1+pnd.length)}, 'Cadenze'))
						}
					}
				}
			),
			function () {
				if (rpm.length) {
					html(					
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										html(td({colspan:1+pnd.length}, rpm[j] + ' rpm'))
									}
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var i=0, ei=c.length; i<ei; i++) {
									for (var j=0, ej=rpm.length; j<ej; j++) {
										html(td({rowspan:1+(pnd.length?2:0), valign:'bottom'}, 'Km/h'))
										if (pnd.length) {
											html(td({colspan:pnd.length},'Pendenze'))
										}
									}
								}
							}
						)
					)
				}
				if (pnd.length) {
					html(
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										for (var k=0; k<pnd.length; k++) {
											html(td(pnd[k] + '%'))
										}
									}
								}
							}
						),
						tr({align:'center'},
							function () {
								for (var i=0; i<c.length; i++) {
									for (var j=0; j<rpm.length; j++) {
										for (var k=0; k<pnd.length; k++) {
											html(td('Watt'))
										}
									}
								}
							}
						)
					)						
				}
			},
			function () {
				for (var i=0; i<p.length; i++) {
					html(
						tr({align:'right'},
							td({align:'center'}, p[i] ),
							function () {
								for (var j=0; j<c.length; j++) {
									var gd = rt/pd * c[j]/p[i]
									html(td(gd.frmt(2,true)))
									for (var k=0; k<rpm.length; k++) {
										var kmh = c[j]/p[i]*rpm[k]*rt*0.0012*Math.PI
										html(td(kmh.frmt(1,true)))
										var ms = kmh / 3.6
										var wa = 9.81 * kg * ms * cr
										var wv = 0.5 * Math.pow(ms,3) * cxpa
										for (var l=0; l<pnd.length; l++) {
											var wp = 9.81 * kg * ms * pnd[l] / 100
											var wt = wa + wv + wp
											html(
												td({nowrap:true},
													 font({color:wt>watt?'red':'black'}, wt.frmt(0,true))
												)
											)
										}										
									}
								}
							}
						)
					)
				}
			}
		)
	)		
}


