men_non_recuring = new String(
"0	10	15	16	17	18	19	20	25	60	65\n" +
"15	892.25	806.55	790.65	775.13	759.99	745.23	722.04	653.63	458.16	427.11\n" +
"16	892.36	806.72	790.82	775.32	760.20	745.44	722.27	653.96	466.71	434.90\n" +
"17	892.45	806.85	790.96	775.47	760.35	745.61	722.46	654.24	475.35	442.76\n" +
"18	892.51	806.94	791.06	775.58	760.47	745.74	722.61	654.49	484.10	450.72\n" +
"19	892.54	806.99	791.12	775.64	760.54	745.82	722.70	654.69	492.96	458.74\n" +
"20	892.55	807.01	791.14	775.67	760.58	745.88	722.77	654.87	501.96	466.89\n" +
"21	892.55	807.02	791.16	775.70	760.62	745.93	722.83	655.07	511.16	475.21\n" +
"22	892.54	807.02	791.17	775.72	760.66	745.98	722.90	655.30	520.57	483.71\n" +
"23	892.52	807.03	791.18	775.74	760.69	746.03	722.98	655.56	530.18	492.40\n" +
"24	892.51	807.05	791.22	775.80	760.76	746.12	723.11	655.90	540.06	501.34\n" +
"25	892.51	807.09	791.28	775.87	760.87	746.25	723.27	656.31	550.20	510.51\n" +
"26	892.53	807.18	791.38	776.00	761.03	746.45	723.52	656.83	560.64	519.95\n" +
"27	892.56	807.29	791.53	776.18	761.24	746.70	723.82	657.46	571.35	529.65\n" +
"28	892.61	807.43	791.70	776.39	761.49	747.01	724.18	658.18	582.32	539.57\n" +
"29	892.66	807.60	791.91	776.64	761.79	747.36	724.61	659.00	593.55	549.74\n" +
"30	892.72	807.80	792.15	776.93	762.14	747.76	725.09	659.93	605.04	560.13\n" +
"31	892.79	808.04	792.44	777.27	762.53	748.23	725.64	660.97	616.79	570.76\n" +
"32	892.89	808.34	792.79	777.69	763.02	748.79	726.30	662.17	628.85	581.66\n" +
"33	893.00	808.67	793.19	778.15	763.56	749.42	727.04	663.51	641.17	592.79\n" +
"34	893.14	809.07	793.65	778.70	764.20	750.14	727.88	665.01	653.78	604.18\n" +
"35	893.30	809.51	794.18	779.31	764.90	750.94	728.81	666.66	666.66	615.80\n" +
"36	893.48	810.00	794.75	779.98	765.66	751.82	729.84	668.45	679.80	627.64\n" +
"37	893.68	810.54	795.39	780.71	766.51	752.79	730.96	670.40	693.20	639.71\n" +
"38	893.93	811.19	796.13	781.57	767.50	753.92	732.27	672.59	706.94	652.07\n" +
"39	894.20	811.89	796.95	782.51	768.57	755.14	733.68	674.93	720.94	664.65\n" +
"40	894.53	812.69	797.87	783.57	769.79	756.52	735.27	677.51	735.27	677.51\n" +
"41	894.89	813.56	798.89	784.74	771.12	758.01	736.98	680.28	758.01	690.60\n" +
"42	895.27	814.50	799.98	785.99	772.54	759.61	738.81	683.23	772.54	703.89\n" +
"43	895.67	815.50	801.13	787.31	774.04	761.30	740.73	686.34	787.31	717.36\n" +
"44	896.10	816.59	802.39	788.75	775.66	763.12	742.81	689.68	802.39	731.09\n" +
"45	896.55	817.74	803.71	790.26	777.36	765.03	745.00	693.19	817.74	745.00\n" +
"46	897.06	819.01	805.17	791.91	779.22	767.11	747.38	696.99	833.43	767.11\n" +
"47	897.66	820.43	806.79	793.74	781.29	769.42	750.00	701.12	849.50	781.29\n" +
"48	898.31	821.95	808.52	795.70	783.49	771.87	752.78	705.50	865.90	795.70\n" +
"49	898.98	823.51	810.31	797.73	785.77	774.42	755.69	710.07	882.62	810.31\n" +
"50	899.69	825.17	812.20	799.87	788.18	777.12	758.75	714.88	899.69	825.17\n" +
"51	900.47	826.95	814.23	802.17	790.76	780.01	762.05		917.18	840.32\n" +
"52	901.33	828.90	816.46	804.68	793.59	783.16	765.62		935.13	855.82\n" +
"53	902.28	831.02	818.86	807.40	796.64	786.55	769.46			871.66\n" +
"54	903.23	833.19	821.35	810.22	799.79	790.07	773.44			887.78\n" +
"55	904.23	835.48	823.97	813.18	803.12	793.76	777.62			904.23\n" +
"56	905.23	837.86	826.68	816.25	806.56	797.60				921.02\n" +
"57	906.30	840.40	829.58	819.53	810.23					938.26\n" +
"58	907.45	843.13	832.70	823.04						\n" +
"59	908.70	846.08	836.04							\n" +
"60	910.08	849.25								\n" +
"61	911.62									\n" +
"62	913.30									\n" +
"63	915.12									\n" +
"64	917.00									\n" +
"65	919.10									"
);

women_non_recuring = new String(
"0	10	15	16	17	18	19	20	25	60	65\n" +
"15	891.88	805.60	789.56	773.89	758.61	743.68	720.29	650.92	447.37	412.20\n" +
"16	891.89	805.63	789.59	773.93	758.65	743.73	720.34	651.01	455.72	419.70\n" +
"17	891.91	805.65	789.61	773.96	758.68	743.76	720.38	651.09	464.25	427.36\n" +
"18	891.91	805.67	789.63	773.98	758.70	743.79	720.41	651.18	472.96	435.17\n" +
"19	891.92	805.68	789.65	774.00	758.73	743.82	720.45	651.27	481.87	443.16\n" +
"20	891.92	805.69	789.66	774.02	758.75	743.85	720.48	651.38	490.99	451.34\n" +
"21	891.92	805.70	789.68	774.04	758.78	743.88	720.53	651.50	500.32	459.71\n" +
"22	891.93	805.73	789.71	774.07	758.82	743.93	720.60	651.65	509.90	468.30\n" +
"23	891.94	805.76	789.74	774.12	758.87	744.00	720.68	651.83	519.71	477.09\n" +
"24	891.95	805.79	789.79	774.17	758.94	744.09	720.79	652.03	529.75	486.10\n" +
"25	891.96	805.83	789.83	774.23	759.02	744.18	720.90	652.26	540.03	495.31\n" +
"26	891.97	805.87	789.89	774.30	759.11	744.29	721.03	652.52	550.54	504.73\n" +
"27	891.98	805.93	789.96	774.39	759.21	744.41	721.17	652.82	561.30	514.38\n" +
"28	892.01	806.01	790.06	774.51	759.35	744.57	721.36	653.18	572.34	524.28\n" +
"29	892.03	806.10	790.17	774.64	759.50	744.75	721.57	653.59	583.64	534.41\n" +
"30	892.06	806.22	790.31	774.80	759.68	744.95	721.81	654.04	595.21	544.78\n" +
"31	892.10	806.35	790.46	774.97	759.88	745.18	722.09	654.55	607.05	555.39\n" +
"32	892.15	806.48	790.62	775.16	760.11	745.45	722.40	655.11	619.16	566.23\n" +
"33	892.22	806.65	790.82	775.39	760.38	745.76	722.76	655.75	631.56	577.34\n" +
"34	892.30	806.85	791.05	775.66	760.68	746.11	723.17	656.46	644.25	588.71\n" +
"35	892.39	807.06	791.30	775.96	761.03	746.50	723.62	657.23	657.23	600.32\n" +
"36	892.49	807.31	791.59	776.29	761.41	746.94	724.12	658.09	670.51	612.20\n" +
"37	892.61	807.60	791.92	776.67	761.84	747.42	724.68	659.04	684.10	624.35\n" +
"38	892.73	807.90	792.28	777.08	762.30	747.94	725.28	660.06	697.97	636.75\n" +
"39	892.85	808.23	792.65	777.51	762.79	748.50	725.93	661.14	712.15	649.40\n" +
"40	892.99	808.57	793.05	777.97	763.32	749.10	726.61	662.30	726.61	662.30\n" +
"41	893.11	808.92	793.45	778.43	763.85	749.70	727.32	663.50	749.70	675.42\n" +
"42	893.25	809.29	793.88	778.93	764.43	750.36	728.08	664.81	764.43	688.82\n" +
"43	893.40	809.69	794.36	779.48	765.06	751.08	728.91	666.24	779.48	702.51\n" +
"44	893.59	810.17	794.92	780.13	765.79	751.90	729.86	667.86	794.92	716.55\n" +
"45	893.82	810.73	795.56	780.85	766.61	752.82	730.91	669.67	810.73	730.91\n" +
"46	894.10	811.36	796.28	781.67	767.53	753.85	732.09	671.69	826.92	753.85\n" +
"47	894.39	812.03	797.04	782.53	768.50	754.95	733.35	673.88	843.47	768.50\n" +
"48	894.67	812.70	797.81	783.41	769.50	756.08	734.67	676.20	860.35	783.41\n" +
"49	894.93	813.37	798.58	784.30	770.53	757.26	736.03	678.67	877.58	798.58\n" +
"50	895.23	814.09	799.42	785.28	771.65	758.55	737.54	681.39	895.23	814.09\n" +
"51	895.56	814.89	800.36	786.36	772.90	759.98	739.21		913.31	829.96\n" +
"52	895.91	815.75	801.37	787.54	774.26	761.54	741.04		931.83	846.17\n" +
"53	896.30	816.73	802.52	788.87	775.80	763.30	743.10			862.79\n" +
"54	896.72	817.80	803.77	790.32	777.48	765.23	745.35			879.77\n" +
"55	897.17	818.99	805.16	791.95	779.36	767.39	747.87			897.17\n" +
"56	897.67	820.31	806.71	793.75	781.44	769.78				914.99\n" +
"57	898.20	821.76	808.42	795.74	783.73					933.24\n" +
"58	898.78	823.36	810.29	797.93						\n" +
"59	899.43	825.15	812.40							\n" +
"60	900.15	827.13								\n" +
"61	901.03									\n" +
"62	902.03									\n" +
"63	903.20									\n" +
"64	904.56									\n" +
"65	906.03									"
);

men_repeated = new String (
"0	10	15	16	17	18	19	20	25	60	65\n" +
"15	103.76	66.55	61.98	57.97	54.40	51.22	47.78	36.11	17.37	15.46\n" +
"16	103.83	66.60	62.04	58.02	54.45	51.27	47.83	36.16	17.93	15.92\n" +
"17	103.88	66.64	62.08	58.06	54.49	51.31	47.87	36.20	18.52	16.40\n" +
"18	103.93	66.67	62.11	58.09	54.52	51.34	47.90	36.23	19.13	16.90\n" +
"19	103.95	66.69	62.12	58.10	54.54	51.35	47.92	36.26	19.76	17.41\n" +
"20	103.95	66.70	62.13	58.11	54.55	51.37	47.94	36.29	20.43	17.95\n" +
"21	103.95	66.70	62.14	58.12	54.56	51.38	47.95	36.31	21.13	18.51\n" +
"22	103.95	66.70	62.14	58.13	54.57	51.39	47.96	36.35	21.88	19.10\n" +
"23	103.94	66.70	62.15	58.13	54.58	51.40	47.98	36.38	22.67	19.72\n" +
"24	103.93	66.71	62.16	58.15	54.59	51.42	48.01	36.43	23.51	20.38\n" +
"25	103.93	66.72	62.17	58.17	54.62	51.45	48.04	36.49	24.40	21.08\n" +
"26	103.94	66.75	62.21	58.20	54.66	51.50	48.09	36.57	25.37	21.83\n" +
"27	103.96	66.79	62.25	58.25	54.71	51.56	48.15	36.66	26.39	22.62\n" +
"28	103.99	66.84	62.30	58.31	54.78	51.63	48.23	36.76	27.50	23.47\n" +
"29	104.03	66.90	62.36	58.38	54.85	51.71	48.32	36.88	28.68	24.36\n" +
"30	104.07	66.96	62.44	58.46	54.94	51.80	48.42	37.02	29.95	25.32\n" +
"31	104.12	67.04	62.52	58.55	55.04	51.91	48.53	37.17	31.31	26.34\n" +
"32	104.18	67.14	62.63	58.67	55.16	52.04	48.67	37.35	32.79	27.43\n" +
"33	104.26	67.25	62.75	58.79	55.30	52.19	48.83	37.55	34.39	28.60\n" +
"34	104.35	67.39	62.89	58.95	55.46	52.36	49.01	37.77	36.13	29.85\n" +
"35	104.46	67.54	63.05	59.12	55.64	52.54	49.20	38.02	38.02	31.20\n" +
"36	104.58	67.70	63.23	59.30	55.83	52.75	49.42	38.29	40.08	32.64\n" +
"37	104.71	67.89	63.43	59.51	56.05	52.98	49.67	38.59	42.33	34.20\n" +
"38	104.88	68.11	63.66	59.75	56.31	53.25	49.95	38.93	44.82	35.89\n" +
"39	105.06	68.35	63.91	60.02	56.59	53.55	50.26	39.30	47.56	37.72\n" +
"40	105.28	68.63	64.20	60.33	56.91	53.88	50.61	39.71	50.61	39.71\n" +
"41	105.53	68.93	64.52	60.66	57.26	54.25	50.99	40.16	54.25	41.88\n" +
"42	105.79	69.27	64.87	61.03	57.64	54.65	51.41	40.64	57.64	44.25\n" +
"43	106.06	69.62	65.24	61.41	58.05	55.07	51.85	41.16	61.41	46.84\n" +
"44	106.36	70.01	65.65	61.84	58.49	55.53	52.33	41.72	65.65	49.69\n" +
"45	106.67	70.42	66.08	62.29	58.96	56.02	52.84	42.33	70.42	52.84\n" +
"46	107.02	70.89	66.56	62.79	59.49	56.57	53.41	43.00	75.87	56.57\n" +
"47	107.44	71.41	67.11	63.36	60.07	57.18	54.04	43.74	82.17	60.07\n" +
"48	107.90	71.97	67.69	63.97	60.71	57.84	54.73	44.55	89.48	63.97\n" +
"49	108.38	72.56	68.31	64.61	61.38	58.54	55.45	45.41	98.07	68.31\n" +
"50	108.89	73.19	68.97	65.30	62.09	59.29	56.24	46.35	108.89	73.19\n" +
"51	109.45	73.88	69.69	66.05	62.88	60.11	57.10		121.38	78.75\n" +
"52	110.08	74.65	70.49	66.88	63.75	61.02	58.05		136.98	85.15\n" +
"53	110.77	75.50	71.37	67.81	64.72	62.03	59.11			92.59\n" +
"54	111.48	76.38	72.30	68.78	65.74	63.10	60.23			101.29\n" +
"55	112.23	77.33	73.30	69.83	66.84	64.26	61.44			112.23\n" +
"56	112.99	78.34	74.36	70.95	68.02	65.49				124.77\n" +
"57	113.81	79.44	75.52	72.17	69.30					140.37\n" +
"58	114.71	80.64	76.79	73.51						\n" +
"59	115.70	81.98	78.20							\n" +
"60	116.81	83.46								\n" +
"61	118.06									\n" +
"62	119.46									\n" +
"63	121.00									\n" +
"64	122.64									\n" +
"65	124.51									"
);

women_repeated = new String (
"0 	10	15	16	17	18	19	20	25	60	65\n" +
"15	103.51	66.23	61.66	57.63	54.06	50.87	47.43	35.73	16.69	14.61\n" +
"16	103.52	66.24	61.67	57.64	54.07	50.88	47.44	35.74	17.21	15.03\n" +
"17	103.53	66.25	61.68	57.65	54.08	50.89	47.45	35.75	17.77	15.48\n" +
"18	103.53	66.25	61.68	57.66	54.08	50.89	47.45	35.76	18.35	15.94\n" +
"19	103.54	66.26	61.69	57.66	54.09	50.90	47.46	35.78	18.97	16.42\n" +
"20	103.54	66.26	61.69	57.67	54.09	50.91	47.47	35.79	19.62	16.94\n" +
"21	103.54	66.26	61.70	57.67	54.10	50.91	47.48	35.81	20.31	17.47\n" +
"22	103.54	66.27	61.70	57.68	54.11	50.93	47.49	35.83	21.04	18.04\n" +
"23	103.55	66.28	61.71	57.69	54.13	50.94	47.51	35.85	21.81	18.64\n" +
"24	103.56	66.29	61.73	57.71	54.14	50.96	47.53	35.88	22.63	19.27\n" +
"25	103.57	66.30	61.74	57.72	54.16	50.98	47.55	35.92	23.50	19.93\n" +
"26	103.57	66.32	61.76	57.74	54.18	51.01	47.58	35.95	24.43	20.64\n" +
"27	103.58	66.34	61.78	57.77	54.21	51.03	47.61	35.99	25.43	21.39\n" +
"28	103.59	66.36	61.81	57.80	54.24	51.07	47.65	36.05	26.49	22.18\n" +
"29	103.61	66.40	61.84	57.84	54.28	51.11	47.69	36.10	27.63	23.02\n" +
"30	103.63	66.43	61.88	57.88	54.32	51.16	47.74	36.17	28.86	23.92\n" +
"31	103.66	66.48	61.93	57.92	54.37	51.21	47.80	36.24	30.18	24.88\n" +
"32	103.69	66.52	61.98	57.98	54.43	51.27	47.86	36.32	31.60	25.90\n" +
"33	103.73	66.58	62.04	58.04	54.50	51.34	47.93	36.41	33.14	26.99\n" +
"34	103.79	66.64	62.10	58.11	54.57	51.42	48.02	36.51	34.81	28.16\n" +
"35	103.85	66.71	62.18	58.19	54.66	51.51	48.11	36.62	36.62	29.42\n" +
"36	103.92	66.80	62.27	58.28	54.76	51.61	48.22	36.75	38.61	30.77\n" +
"37	103.99	66.89	62.37	58.39	54.86	51.72	48.33	36.89	40.78	32.23\n" +
"38	104.07	67.00	62.47	58.50	54.98	51.84	48.46	37.04	43.17	33.81\n" +
"39	104.16	67.11	62.59	58.62	55.10	51.97	48.59	37.20	45.81	35.51\n" +
"40	104.24	67.22	62.71	58.74	55.23	52.11	48.74	37.37	48.74	37.37\n" +
"41	104.33	67.34	62.83	58.87	55.37	52.25	48.89	37.54	52.25	39.38\n" +
"42	104.42	67.46	62.96	59.01	55.52	52.41	49.05	37.74	55.52	41.58\n" +
"43	104.52	67.60	63.11	59.16	55.68	52.58	49.22	37.96	59.16	44.00\n" +
"44	104.65	67.76	63.28	59.35	55.87	52.77	49.43	38.20	63.28	46.68\n" +
"45	104.81	67.95	63.48	59.55	56.08	52.99	49.65	38.48	67.95	49.65\n" +
"46	104.99	68.17	63.70	59.78	56.32	53.24	49.91	38.79	73.30	53.24\n" +
"47	105.19	68.40	63.94	60.03	56.57	53.50	50.19	39.13	79.47	56.57\n" +
"48	105.38	68.63	64.18	60.28	56.83	53.78	50.48	39.50	86.63	60.28\n" +
"49	105.56	68.87	64.43	60.53	57.10	54.06	50.78	39.90	95.07	64.43\n" +
"50	105.76	69.12	64.69	60.82	57.40	54.38	51.12	40.34	105.76	69.12\n" +
"51	105.99	69.40	64.99	61.13	57.74	54.74	51.50		118.12	74.48\n" +
"52	106.22	69.71	65.32	61.48	58.11	55.13	51.92		133.55	80.66\n" +
"53	106.50	70.06	65.69	61.88	58.53	55.58	52.39			87.86\n" +
"54	106.79	70.45	66.10	62.31	59.00	56.08	52.92			96.36\n" +
"55	107.10	70.88	66.56	62.81	59.52	56.64	53.53			107.10\n" +
"56	107.45	71.36	67.08	63.36	60.11	57.27				119.52\n" +
"57	107.83	71.90	67.66	63.98	60.78					135.00\n" +
"58	108.24	72.50	68.30	64.67						\n" +
"59	108.70	73.19	69.04							\n" +
"60	109.22	73.96								\n" +
"61	109.85									\n" +
"62	110.59\n" +
"63	111.46\n" +
"64	112.49\n" +
"65	113.60"
);

serious_illness_nonsmokers = new String(
"0	5	10	15	20	25	60\n" +
"20	1.17	1.37	1.72	2.37	3.38	8.35\n" +
"21	1.25	1.47	1.89	2.65	3.78	8.67\n" +
"22	1.34	1.58	2.09	2.96	4.23	9.02\n" +
"23	1.43	1.72	2.33	3.32	4.73	9.38\n" +
"24	1.53	1.88	2.60	3.72	5.29	9.76\n" +
"25	1.64	2.08	2.91	4.17	5.93	10.16\n" +
"26	1.75	2.31	3.27	4.68	6.64	10.58\n" +
"27	1.90	2.58	3.69	5.26	7.40	11.04\n" +
"28	2.09	2.90	4.16	5.91	8.22	11.52\n" +
"29	2.34	3.28	4.70	6.65	9.11	12.03\n" +
"30	2.64	3.72	5.31	7.48	10.06	12.57\n" +
"31	3.01	4.25	6.00	8.41	11.08	13.15\n" +
"32	3.43	4.83	6.78	9.41	12.18	13.77\n" +
"33	3.91	5.49	7.65	10.48	13.35	14.42\n" +
"34	4.47	6.22	8.62	11.62	14.57	15.11\n" +
"35	5.09	7.04	9.71	12.84	15.84	15.84\n" +
"36	5.81	7.95	10.92	14.15		16.61\n" +
"37	6.61	8.97	12.21	15.53		17.42\n" +
"38	7.49	10.11	13.58	17.01		18.27\n" +
"39	8.46	11.37	15.04	18.54		19.18\n" +
"40	9.53	12.78	16.58	20.12		20.12\n" +
"41	10.71	14.35	18.21			21.11\n" +
"42	12.04	16.01	19.95			22.15\n" +
"43	13.53	17.76	21.78			23.25\n" +
"44	15.21	19.60	23.66			24.40\n" +
"45	17.10	21.53	25.59			25.59\n" +
"46	19.21	23.54				26.84\n" +
"47	21.37	25.64				28.12\n" +
"48	23.53	27.81				29.42\n" +
"49	25.68	29.95				30.74\n" +
"50	27.78	32.03				32.03\n" +
"51	29.78					33.25\n" +
"52	31.93					34.52\n" +
"53	34.23					35.84\n" +
"54	36.48					37.22\n" +
"55	38.67					38.67"
);

serious_illness_smokers = new String (
"0	5	10	15	20	25	60\n" +
"20	1.99	2.33	2.92	4.03	5.75	14.20\n" +
"21	2.13	2.50	3.21	4.51	6.43	14.74\n" +
"22	2.28	2.69	3.55	5.03	7.19	15.33\n" +
"23	2.43	2.92	3.96	5.64	8.04	15.95\n" +
"24	2.60	3.20	4.42	6.32	8.99	16.59\n" +
"25	2.79	3.54	4.95	7.09	10.08	17.27\n" +
"26	2.98	3.93	5.56	7.96	11.29	17.99\n" +
"27	3.23	4.39	6.27	8.94	12.58	18.77\n" +
"28	3.55	4.93	7.07	10.05	13.97	19.58\n" +
"29	3.98	5.58	7.99	11.31	15.49	20.45\n" +
"30	4.49	6.32	9.03	12.72	17.10	21.37\n" +
"31	5.12	7.23	10.20	14.30	18.84	22.36\n" +
"32	5.83	8.21	11.53	16.00	20.71	23.41\n" +
"33	6.65	9.33	13.01	17.82	22.70	24.51\n" +
"34	7.60	10.57	14.65	19.75	24.77	25.69\n" +
"35	8.65	11.97	16.51	21.83	26.93	26.93\n" +
"36	9.88	13.52	18.56	24.06		28.24\n" +
"37	11.24	15.25	20.76	26.40		29.61\n" +
"38	12.73	17.19	23.09	28.92		31.06\n" +
"39	14.38	19.33	25.57	31.52		32.61\n" +
"40	16.20	21.73	28.19	34.20		34.20\n" +
"41	18.21	24.40	30.96			35.89\n" +
"42	20.47	27.22	33.92			37.66\n" +
"43	23.00	30.19	37.03			39.53\n" +
"44	25.86	33.32	40.22			41.48\n" +
"45	29.07	36.60	43.50			43.50\n" +
"46	32.66	40.02				45.63\n" +
"47	36.33	43.59				47.80\n" +
"48	40.00	47.28				50.01\n" +
"49	43.66	50.92				52.26\n" +
"50	47.23	54.45				54.45\n" +
"51	50.63					56.53\n" +
"52	54.28					58.68\n" +
"53	58.19					60.93\n" +
"54	62.02					63.27\n" +
"55	65.74					65.74"
);

payment_suspension_duration = new String(
"0	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25\n" +
"18	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.50\n" +
"19	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.50	1.75\n" +
"20	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.50	1.75	1.75\n" +
"21	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	1.75\n" +
"22	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.50	1.75	1.75	1.75\n" +
"23	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	1.75	2.00\n" +
"24	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	1.75	2.00	2.00\n" +
"25	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	1.75	2.00	2.00\n" +
"26	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	1.75	2.00	2.00	2.00\n" +
"27	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	2.00	2.00	2.00	2.25\n" +
"28	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.50	1.75	1.75	1.75	2.00	2.00	2.25	2.25\n" +
"29	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.75	1.75	1.75	2.00	2.00	2.25	2.25	2.50\n" +
"30	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.50	1.75	1.75	2.00	2.00	2.25	2.25	2.50	2.50\n" +
"31	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.75	1.75	2.00	2.00	2.25	2.25	2.50	2.50	2.75\n" +
"32	1.00	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.75	1.75	1.75	2.00	2.00	2.25	2.50	2.50	2.75	3.00\n" +
"33	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.25	1.50	1.50	1.75	1.75	2.00	2.00	2.25	2.25	2.50	2.75	3.00	3.00\n" +
"34	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.75	1.75	2.00	2.00	2.25	2.25	2.50	2.75	3.00	3.25	3.25\n" +
"35	1.00	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.75	2.00	2.00	2.25	2.25	2.50	2.75	3.00	3.25	3.50	3.75\n" +
"36	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.75	1.75	2.00	2.25	2.25	2.50	2.75	3.00	3.25	3.50	3.75	4.00\n" +
"37	1.00	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.75	1.75	2.00	2.25	2.25	2.50	2.75	3.00	3.25	3.50	3.75	4.25	4.50\n" +
"38	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.75	2.00	2.00	2.25	2.50	2.75	3.00	3.25	3.50	3.75	4.25	4.50	5.00\n" +
"39	1.00	1.00	1.00	1.00	1.25	1.25	1.50	1.75	1.75	2.00	2.25	2.50	2.75	3.00	3.25	3.50	3.75	4.25	4.75	5.00	5.50\n" +
"40	1.00	1.00	1.00	1.25	1.25	1.50	1.50	1.75	2.00	2.25	2.50	2.75	3.00	3.25	3.50	3.75	4.25	4.75	5.25	5.75	6.00\n" +
"41	1.00	1.00	1.00	1.25	1.25	1.50	1.75	2.00	2.25	2.50	2.75	3.00	3.25	3.50	3.75	4.25	4.75	5.25	5.75	6.25	6.75\n" +
"42	1.00	1.00	1.00	1.25	1.50	1.75	1.75	2.00	2.25	2.50	3.00	3.25	3.50	4.00	4.50	5.00	5.50	6.00	6.50	6.75	7.25\n" +
"43	1.00	1.00	1.25	1.25	1.50	1.75	2.00	2.25	2.50	2.75	3.25	3.50	4.00	4.50	5.00	5.50	6.00	6.50	7.00	7.50	8.00\n" +
"44	1.00	1.00	1.25	1.50	1.75	2.00	2.25	2.50	2.75	3.25	3.50	4.00	4.50	5.25	5.75	6.25	6.75	7.25	7.75	8.25	8.75\n" +
"45	1.00	1.25	1.25	1.50	1.75	2.25	2.50	2.75	3.25	3.50	4.00	4.75	5.25	5.75	6.50	7.00	7.50	8.00	8.50	9.00	9.50\n" +
"46	1.00	1.25	1.50	1.75	2.00	2.25	2.75	3.00	3.50	4.00	4.75	5.25	6.00	6.50	7.25	7.75	8.25	8.75	9.25	9.75	10.25\n" +
"47	1.25	1.50	1.75	2.00	2.25	2.75	3.00	3.50	4.00	4.75	5.50	6.00	6.75	7.25	8.00	8.50	9.00	9.50	10.00	10.50	11.00\n" +
"48	1.25	1.50	1.75	2.25	2.50	3.00	3.50	4.00	4.75	5.50	6.25	6.75	7.50	8.25	8.75	9.25	10.00	10.50	11.00	11.50	12.00\n" +
"49	1.50	1.75	2.00	2.50	3.00	3.50	4.00	4.75	5.50	6.25	7.00	7.75	8.50	9.00	9.75	10.25	11.00	11.50	12.00	12.50	13.00\n" +
"50	1.50	2.00	2.50	2.75	3.50	4.00	4.75	5.50	6.50	7.25	8.00	8.75	9.50	10.00	10.75	11.25	12.00	12.50	13.00	13.50	14.00\n" +
"51	1.75	2.25	2.75	3.25	3.75	4.75	5.75	6.50	7.25	8.25	9.00	9.75	10.50	11.25	11.75	12.50	13.00	13.75	14.25	14.75	\n" +
"52	2.00	2.50	3.25	3.75	4.75	5.75	6.75	7.50	8.50	9.25	10.00	10.75	11.50	12.25	13.00	13.50	14.25	14.75	15.50		\n" +
"53	2.50	3.00	3.50	4.75	5.75	6.75	7.75	8.50	9.50	10.25	11.25	12.00	12.75	13.50	14.25	14.75	15.50	16.00			\n" +
"54	2.75	3.50	4.50	5.75	6.75	7.75	8.75	9.75	10.75	11.50	12.50	13.25	14.00	14.75	15.50	16.25	16.75				\n" +
"55	3.00	4.25	5.50	6.75	7.75	8.75	9.75	10.75	11.75	12.75	13.75	14.50	15.25	16.00	16.75	17.50					"
);

payment_suspension_maturity = new String(
"0	50	55	60	65	WL\n" +
"18	2.00	2.50	3.25	4.00	6.50\n" +
"19	2.00	2.50	3.25	4.25	6.50\n" +
"20	2.00	2.50	3.25	4.25	6.75\n" +
"21	2.00	2.50	3.25	4.25	7.00\n" +
"22	2.00	2.50	3.25	4.50	7.00\n" +
"23	2.00	2.50	3.25	4.50	7.25\n" +
"24	2.00	2.50	3.50	4.50	7.25\n" +
"25	2.00	2.50	3.50	4.50	7.50\n" +
"26	2.00	2.50	3.50	4.75	7.75\n" +
"27	2.00	2.50	3.50	4.75	8.00\n" +
"28	2.00	2.50	3.50	4.75	8.00\n" +
"29	2.00	2.50	3.50	4.75	8.25\n" +
"30	2.00	2.50	3.50	5.00	8.50\n" +
"31	2.00	2.50	3.50	5.00	8.75\n" +
"32	1.75	2.50	3.50	5.00	9.00\n" +
"33	1.75	2.50	3.50	5.25	9.25\n" +
"34	1.75	2.50	3.50	5.25	9.50\n" +
"35	1.75	2.50	3.75	5.50	9.75\n" +
"36	1.75	2.50	3.75	5.50	10.25\n" +
"37	1.75	2.50	3.75	5.75	10.50\n" +
"38	1.50	2.50	3.75	5.75	11.00\n" +
"39	1.50	2.50	3.75	6.00	11.25\n" +
"40	1.50	2.50	3.75	6.00	11.75\n" +
"41	1.25	2.50	3.75	6.25	12.25\n" +
"42	1.25	2.25	4.00	6.50	12.75\n" +
"43	1.25	2.25	4.00	6.50	13.25\n" +
"44	1.00	2.25	4.00	6.75	14.00\n" +
"45	1.00	2.25	4.00	7.00	14.50\n" +
"46		2.00	4.00	7.25	15.25\n" +
"47		2.00	4.00	7.25	15.75\n" +
"48		1.75	4.00	7.50	16.50\n" +
"49		1.75	4.00	7.75	17.25\n" +
"50		1.50	4.00	8.00	18.25\n" +
"51			3.75	8.25	19.25\n" +
"52			3.75	8.50	20.25\n" +
"53			3.50	8.50	21.25\n" +
"54			3.50	8.75	22.25\n" +
"55			3.00	8.75	23.50"
);

function string_to_array(ar_string) {
	par = ar_string.split("\n");
	ret_ar = new Array();
	for (i = 0; i < par.length; i++) {
		ret_ar[i] = par[i].split("\t");	
		for (j = 0; j < ret_ar[i].length; j++)
			ret_ar[i][j] = parseFloat(ret_ar[i][j]);
	}		
	return(ret_ar);	
}

function get_val(val) {
	if (val == undefined || val == "")
		return(0);
	else {
		if (val.search("/^[0-9]+$/") != -1)
			return(val);
		else
			return(parseInt(val));
	}
}

function get_duration(form) {
	durs = new Array(10, 15, 16, 17, 18, 19, 20, 25);
	ages = new Array(60, 65);
	if (form.duration_type[0].checked) {
		for (i = 0; i < durs.length; i++)
			if (form.duration[i].selected)
				return(durs[i]);
	}			
	else if (form.duration_type[1].checked) {
		for (i = 0; i < ages.length; i++)
			if (form.until_age[i].selected)
				return(ages[i]);
	}			
	return(-1);			
}

// { creates array from arr_string and searches for x and y in the first line and column;
// appropriate element of array is returned
function find_in_arr(arr_string, x, y) {
	ar = string_to_array(arr_string);
	for (i = 1; i < ar.length; i++)
		if (ar[i][0] == x) break;
	if (i > ar.length) return(-1);
	for (j = 1; j < ar[0].length; j++)
		if (ar[0][j] == y) break;
	if (j > ar[0].length) return(-1);
	return(ar[i][j]);
}
// }

// { computes the sum to be payed yearly; returns the sum to be payed, or 0, if the basic value
//   to be payed is low (lower than 4500)
function insurance_yearly(sum, age, duration, sex, payment_wy, suspension, serious, serious_sum) {
	if (sex == "male")
		ar_str = men_repeated; 
	else
		ar_str = women_repeated;
	if (suspension) {
		if (duration < 60) susp_str = payment_suspension_duration;
		else susp_str = payment_suspension_maturity;		
		susp_ratio = 1 + find_in_arr(susp_str, age, duration) / 100;
	}
	else susp_ratio = 1;
	if (serious) {
		if (smoker) serious_str = serious_illness_smokers;
		else serious_str = serious_illness_nonsmokers;
		ratio = find_in_arr(serious_str, age, duration);
		serious_extra = serious_sum * ratio / 1000;
	}
	else serious_extra = 0;
	switch (payment_wy) {
		case 1: freq_ratio = 1; break;
		case 2: freq_ratio = 0.52; break;
		case 4: freq_ratio = 0.26; break;
	}
	ratio = find_in_arr(ar_str, age, duration);
	if (sum >= 700000)
		ratio -= 2;
	else if (sum >= 500000)
		ratio -= 1.5;
	else if (sum >= 350000)
		ratio -= 1;
	price = sum * ratio / 1000;
	if (price < 4500)
		return(0);
	price = (price + parseFloat(serious_extra)) * freq_ratio * susp_ratio;
	price = price.toFixed(0);
	return(price);
}
// }

function non_recuring_discout(sum) {
	if (sum >= 650000)
		return(1.5)
	else if (sum >= 500000)
		return(1.25)
	else if (sum >= 350000)
		return(1);
	else return(0);	
}

function insurance_non_recuring(sum, age, duration, sex) {
	if (sex == "male")
		str = men_non_recuring;
	else
		str = women_non_recuring;
	tax = find_in_arr(str, age, duration);
	psum = sum * tax / 1000;
	ptax = tax * (1 - non_recuring_discout(psum) / 100); ptax = ptax.toFixed(2);
	ppsum = sum * ptax / 1000;
	pptax = tax * (1 - non_recuring_discout(ppsum) / 100); pptax = pptax.toFixed(2);
	price = sum * pptax / 1000; price = price.toFixed(0);
	if (price < 100000) return(0);
	return(price);
}

function error(msg) {
	dominnerText(document.getElementById('error'),msg);
	return(false);
}

//Error note
function dominnerText(node,text) {
    while (node.hasChildNodes()) {
        node.removeChild(node.firstChild);
    }
    node.appendChild(document.createTextNode(text));
}


function compute_insurance() {
	// { read data from the form
	form = document.forms[1];
	age = get_val(form.age.value);
	if (form.sex[0].checked)
		sex = "male";
	else if (form.sex[1].checked)	
		sex = "female";
	else return true;
	duration = get_duration(form);
	sum = get_val(form.sum.value);
	if (form.payment_within_year[0].checked)
		payment_wy = 4;
	else if (form.payment_within_year[1].checked)
		payment_wy = 2;
	else if (form.payment_within_year[2].checked)
		payment_wy = 1;
	else if (form.payment_within_year[3].checked)
		payment_wy = 0;
	if (form.payment_suspension.checked)
		suspension = true;
	else
		suspension = false;
	if (form.serious_illness.checked) {
		serious = true;
		serious_sum = get_val(form.serious_illness_sum.value);
	}
	else {
		serious = false;
		serious_sum = 0;
	}	
	if (form.smoker[0].checked)
		smoker = true;
	else smoker = false;	
	// }

	// { check whether input values are correct
	if (duration < 60 && age + duration > 75)
		return error("Pojištění musí skončit v 75 letech věku pojištěného. Změňte prosím dobu pojištění.");
	if (duration >= 60 && duration - age < 8)
		return error("Délka pojištění je minimálně 8 let, změňte prosím dobu pojištění.");
	if (sum < 120000)
		return error("Zadaná pojistná částka musí být minimálně 120 000 Kč!");
	if (age < 15 || age > 65)
		return error("Zadaný věk musí být mezi 15 a 65 lety!");
	if (suspension) {
		if (payment_wy == 0)
			return error("Při jednorázovém placení pojištění nelze sjednat žádný druh připojištění!");
		if (age < 18 || age > 55)
			return error("Pro připojištění zproštění od placení pojistného musí být zadaný věk " +
				"mezi 18 a 55 lety!");
	}
	if (serious) {
		if (payment_wy == 0)
			return error("Při jednorázovém placení pojištění nelze sjednat žádný druh připojištění!");
		if (duration > 15 && duration < 20)
			return error("Pro pojištění na dobu 16 až 19 let nelze sjednat připojištění pro případ vážného onemocnění.");
		if (duration == 65)
			return error("Připojištění pro případ vážné nemoci nelze sjednat do požadovaného věku.");
		if (serious_sum < 100000 || serious_sum > 1000000)
			return error("Zadaná částka musí být min. 100 000 Kč a max. 1 000 000 Kč. Změňte prosím částku připojištění.");
		if (age < 20 || age > 55)
			return error("Pro zadaný věk nelze sjednat připojištění pro případ vážné nemoci!");
	}
	// }
	if (payment_wy > 0) {
		price = insurance_yearly(sum, age, duration, sex, payment_wy, suspension, serious, serious_sum);
		if (price == 0)
			return error("Minimální roční pojistné je 4 500 Kč, změňte prosím pojistnou částku.");
	}
	else {
		price = insurance_non_recuring(sum, age, duration, sex);
		if (price == 0)
			return error("Minimální jednorázové pojistné je 100 000 Kč, změňte, prosím, pojistnou částku.");
	}			
	reg = /^([0-9]{1,3})([0-9]{3})$/;
	price = price.replace(reg, "$1 $2 Kč");
	dominnerText(document.getElementById('result-text'),price);
	dominnerText(document.getElementById('error'),'');
	return(false);
}

