var rentalData 	= new Array(

	"VILLA,AF-0001,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"RATES,2012,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0002,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"RATES,2012,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
      "DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RAV,182-243,RBV,244-351,RAV,351-366,RDV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-121,RBV,122-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0004,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0007,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,00.00,30.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,1260.00,RB=0.00,1260.00,RC=0.00,1260.00",
	"RATES,2012,RA=0.00,1260.00,RB=0.00,1260.00,RC=0.00,1260.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0135,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0136,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,840.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,840.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0209,discount=10,discount_days=1-1-2009->31-12-2012,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0137,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,720.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,720.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0158,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0167,discount=10,discount_days=1-1-2008->31-12-2012,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0237,discount=10,discount_days=1-1-2008->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0304,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0305,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0309,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0333,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,665.00,RB=0.00,760.00,RC=0.00,855.00",
	"RATES,2012,RA=0.00,665.00,RB=0.00,760.00,RC=0.00,855.00",
	"DATES,2011,1-4,RCV,5-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RCV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RBV,183-244,RCV,245-305,306-350,RAV,RAV,351-366,RCV",

	"VILLA,AF-0404,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0421,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0502,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0527,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0614,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-0662,discount=0,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,840.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,840.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-0704,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,630.00,RB=0.00,735.00",
	"RATES,2012,RA=0.00,630.00,RB=0.00,735.00",
	"DATES,2011,1-2,RBV,3-105,RAV,106-119,RBV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RBV",
	"DATES,2012,1-2,RBV,3-91,RAV,92-105,RBV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RBV",

	"VILLA,AF-0904,discount=10,discount_days=1-1-2009->18-12-2012,tax=12,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,21.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-1167,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,0.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"RATES,2012,RA=0.00,910.00,RB=0.00,990.00,RC=0.00,1190.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-1413,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"RATES,2012,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-2045,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,588.00,RB=0.00,672.00,RC=0.00,756.00,RD=0.00,798.00",
	"RATES,2012,RA=0.00,588.00,RB=0.00,672.00,RC=0.00,756.00,RD=0.00,798.00",
      "DATES,2011,1-2,RDV,3-90,RAV,91-105,RBV,106-119,RDV,120-181,RBV,182-243,RCV,244-304,RBV,305-350,RAV,351-366,RDV",
	"DATES,2012,1-2,RDV,3-91,RAV,92-105,RDV,106-182,RBV,183-244,RCV,245-350,RAV,351-366,RDV",

	"VILLA,AF-2609,discount=10,discount_days=1-1-2009->31-12-2012,tax=13,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-2952,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,880.00,RB=0.00,975.00,RC=0.00,1150.00,RD=0.00,1245.00",
	"RATES,2012,RA=0.00,880.00,RB=0.00,975.00,RC=0.00,1150.00,RD=0.00,1245.00",
      "DATES,2011,1-2,RDV,3-90,RAV,91-105,RBV,106-119,RDV,120-181,RBV,182-243,RCV,244-304,RBV,305-350,RAV,351-366,RDV",
	"DATES,2012,1-2,RDV,3-91,RAV,92-105,RDV,106-182,RBV,183-244,RCV,245-350,RAV,351-366,RDV",

	"VILLA,AF-4461,discount=10,discount_days=1-1-2009->31-12-2012,tax=13,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"RATES,2012,RA=0.00,695.00,RB=0.00,780.00,RC=0.00,860.00",
	"DATES,2011,1-2,RCV,3-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RBV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-305,RBV,306-350,RAV,351-366,RCV",

	"VILLA,AF-5250,discount=0,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,0.00,0.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,350.00,",
	"RATES,2012,RA=0.00,350.00,",
	"DATES,2011,1-366,RAV",
	"DATES,2012,1-366,RAV",

	"VILLA,AF-5420,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"RATES,2012,RA=0.00,1140.00,RB=0.00,1235.00,RC=0.00,1340.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,AF-6116,discount=10,discount_days=1-1-2009->31-5-2010,tax=12,cleaning=7,70.00,120.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,665.00,RB=0.00,760.00,RC=0.00,855.00",
	"RATES,2012,RA=0.00,665.00,RB=0.00,760.00,RC=0.00,855.00",
	"DATES,2011,1-4,RCV,5-90,RAV,91-105,RBV,106-119,RCV,120-181,RBV,182-243,RCV,244-304,RBV,305-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RBV,183-244,RCV,245-305,306-350,RAV,RAV,351-366,RCV",

	"VILLA,AF-rb02,discount=10,discount_days=1-1-2009->31-5-2010,tax=13,cleaning=7,50.00,85.00,extra1=,00.00,00.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2011,RA=0.00,555.00,RB=0.00,655.00,RC=0.00,725.00",
	"RATES,2012,RA=0.00,555.00,RB=0.00,655.00,RC=0.00,725.00",
	"DATES,2011,1-2,RCV,3-105,RAV,106-119,RCV,120-181,RAV,182-243,RBV,244-350,RAV,351-366,RCV",
	"DATES,2012,1-2,RCV,3-91,RAV,92-105,RCV,106-182,RAV,183-244,RBV,245-350,RAV,351-366,RCV",

	"VILLA,test,discount=10,discount_days=1-1-2009->31-5-2010,tax=0,cleaning=7,50.00,85.00,extra1=Pool Heating,12.00,20.00,extra2=,00.00,00.00,extra3=,00.00,00.00",
	"RATES,2006,RA=80.00,80.00,RB=150.00,160.00,RC=220.00,220.00",
	"RATES,2007,RA=90.00,90.00,RB=160.00,170.00,RC=230.00,230.00",
	"DATES,2006,1-4,RCV,5-90,RAV,91-97,RBV,98-111,RCV,112-181,RBV,182-243,RCV,244-304,RBV,305-352,RAV,353-366,RCV",
	"DATES,2007,1-4,RCV,5-89,RAV,90-103,RCV,104-181,RBV,182-243,RCV,244-304,RBV,305-352,RAV,353-366,RCV"


);

// Support functions ...
function FormatNight(n)
{
	return n + " night" + (n > 1 ? "s" : "");
}

function DateParse(dateString)
{
	var kp2 = dateString.split("-");
											
	if (kp2.length == 3)
		return new Date(kp2[2],kp2[1] - 1,kp2[0]);
		
	alert("Bad date " + dateString);
	return new Date(0,0,0);
}
												
function Fix99(value)
{
	return (StringContainsIgnoreCase(value.toString(),".99") ? value + 0.01 : value);
}

function FormatFloat(value,places)
{
	var s = new String(value),
		i = s.indexOf(".");

	if (i > 0)
		s = (s + "0000").substring(0,i + places + 1);
	
	return s;
}

function FormatCash(value,currencySymbol)
{
	return currencySymbol + FormatFloat(value,2);
}

function StringContainsIgnoreCase(haystack,needle)
{
	return (haystack.toLowerCase().indexOf(needle.toLowerCase()) >= 0);
}

function IsNumericInteger(data)
{
	for (c = 0 ; c < data.length ; c++)
		if ((data.charAt(c) < '0') || (data.charAt(c) > '9'))
			return false;
	
	return true;
}

function GetPairValueString(data)
{
	var kp = data.split("=");	
	
	if (kp.length != 2)
	{
		alert("Bad key/pair for " + data);
		return "";
	}
	
	return kp[1];
}

function GetPairValue(data)
{
	var kp = GetPairValueString(data);
	
	return (kp.length > 0 ? parseFloat(kp) : 0);
}

function IsLeapYear(year)
{
	return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
}
						
function DaysInYear(year)
{
	return (IsLeapYear(year) ? 366 : 365);
}

function DaysInMonth(month,year)
{
   var monthDays = new Array(31,(IsLeapYear(year) ? 29 : 28),31,30,31,30,31,31,30,31,30,31);

   return monthDays[month];
}

function GetMonth(dayDate)
{
	var monthNames = new Array(	"January",	"February",	"March",	"April",
								"May",		"June",		"July",		"August",
								"September","October",	"November",	"December");
								
	return monthNames[dayDate.getMonth()];
}		
		
// For the given date, return the day as a count from 1st Jan indexed from 1
function DayCalc(dayDate)
{
	var dc = dayDate.getDate();
	
	for (m = 0 ; m < dayDate.getMonth() ; m++)
		dc += DaysInMonth(m,dayDate.getFullYear());
	
	return dc;	
}

// Years as 4 digit numerics; days in range 1 - 365/366. Returns -VE if to is earlier than from
function DayDifference(dayFrom,yearFrom,dayTo,yearTo)
{
	if ((yearTo < yearFrom) || ((yearTo == yearFrom) && (dayTo < dayFrom)))
		return -1;
	
	if (yearFrom == yearTo)
		return dayTo - dayFrom;
		
	var dayDiff = (DaysInYear(yearFrom) - dayFrom) + dayTo;
	
	for (var y = yearFrom + 1 ; y < yearTo ; y++)
		dayDiff += DaysInYear(y);
		
	return dayDiff;
}
									
// Main entry point. Call from the HTML form passing the form name.
function PropCalc(formName)
{
	var	today		= new Date(),
		frm			= document[formName],
		villaRef	= frm.villa_ref.value,
		villaData	= null,
		rateData	= "RATES",
		dateData	= "DATES",
		bookReserve	= frm.book_reserve.options[frm.book_reserve.selectedIndex].text,
		
		// dateStart	: The day you turn up at the property (you spend that night there)
		// dateEnd		: The day you leave the property (you do NOT spend the night there)
		
		dateStart	= new Date(	frm.start_year.options[frm.start_year.selectedIndex].text,		// Year (4 digit)
								frm.start_month.selectedIndex,									// 0-11
								frm.start_day.selectedIndex + 1,								// 1 - 31,
								0,0,0,0),														// H M S MS
			
		dateEnd		= new Date(	frm.end_year.options[frm.end_year.selectedIndex].text,
								frm.end_month.selectedIndex,
								frm.end_day.selectedIndex + 1,
								0,0,0,0);

	// Convert today date into format we can use to calculate discounts ...
	var	bookYear	= today.getUTCFullYear(),
		bookDay		= DayCalc(today);
		
	// Calculate start/end dates as a day count from the first day of the year (e.g. 1-365/366)
	var	dayStart	= DayCalc(dateStart),
		dayEnd		= DayCalc(dateEnd),
		yearStart	= dateStart.getFullYear(),
		yearEnd		= dateEnd.getFullYear();
	
	// Checks for valid dates ...
	if (DayDifference(bookDay,bookYear,dayStart,yearStart) < 0)
	{
		alert("Start date is in the past.");
		return;
	}
	
	if ((yearEnd < yearStart) || ((yearEnd == yearStart) && (dayEnd <= dayStart)))
	{
		alert("End day must be later than start day.");
		return;
	}
	
	// Find the data for the property ...		
	for (p = 0 ; p < rentalData.length ; p++)
		if (StringContainsIgnoreCase(rentalData[p],villaRef))
		{
			// Previously, the next two lines in the data were rate and date information. These now have the possibility
			// of being split over a number of lines ...
			villaData = rentalData[p].split(",");

			for (q = p + 1 ; q < rentalData.length ; q++)
			{
				var nl = rentalData[q];
				
				if (StringContainsIgnoreCase(nl,"RATES,"))
				{
					rateData += "," + nl.substring(6);
				}
				else if (StringContainsIgnoreCase(nl,"DATES,"))
				{
					dateData += "," + nl.substring(6);
				}
				else
				{
					// Must be another VILLA line so stop.
					break;
				}
			}

			rateData	= rateData.split(",");			
			dateData	= dateData.split(",");

			break;
		}
		
	if (villaData == null)
	{
		alert("Unknown property : " + villaRef);
		return;
	}
	
	var	discount 		= GetPairValue(villaData[2]),
		discountDays	= villaData[3],
		tax				= GetPairValue(villaData[4]),
		cleaning		= GetPairValue(villaData[5]);
								
	// Loop from the start date to the end, adding up for each days cost ...
	var cost 			= 0,
		discountGiven	= 0,
		discountNights	= 0,
		nights			= 0,
		
		// Was 0 = GB; 1 = US but now using the value field for each option where 0 = GB, 1 = US
		currency		= 1,
		currencySymbol	= "$";
		
	while ((yearStart < yearEnd) || ((yearStart == yearEnd) && (dayStart < dayEnd)))
	{
		var	yearCurrent = -1,
			foundRate	= false;

		for (t = 1 ; (t < dateData.length) && !foundRate ; t++)
		{
			var token 	= dateData[t],
				i		= token.indexOf("-");
			
			if (IsNumericInteger(token))
			{
				// If it's purely numeric, treat it as a year entry ...
				yearCurrent = token;
			}
			else if (i > 0)
			{
				// Date range ...
				var	rLow	= token.slice(0,i),
					rHigh	= token.slice(i + 1);
					
				// Is our range ... ?
				if ((dayStart >= rLow) && (dayStart <= rHigh) && (yearCurrent == yearStart))
				{
					// Assumption : rate is specified such that the LAST character is either V or F for variable or
					// fixed rate. All other characters form the rate identifier (e.g. RA, RB). Given the above, you
					// can make them any length.
					var rate		= dateData[t + 1],
						rateID		= rate.substring(0,rate.length - 1),
						rateVar		= rate.charAt(rate.length - 1),
						fixedRate	= false;
					
					switch (rateVar.toUpperCase())
					{
						case "F":	fixedRate = true;	break;
						case "V":	fixedRate = false;	break;							
						default:
							alert("Data is not fixed or variable for " + rate);
							return;
					}
					
					// Now we have the rate, we need to find it in the rates data ...					
					var	yearCurrentRate = -1;
								
					for (u = 1 ; (u < rateData.length) && !foundRate ; u++)
					{
						var tokenRate = rateData[u];
						
						if (IsNumericInteger(tokenRate))
						{
							yearCurrentRate = tokenRate;
						}
						else if (StringContainsIgnoreCase(tokenRate,rateID))
						{
							// Found our rate, so if it's a match for our year, use it ...
							if (yearCurrentRate == yearStart)
							{
								var costNight = 0;
								
								// currency = 0 for UK and 1 for US (in the drop down). Given the data has been layed out thus :
								//
								//		... RA=60.00,100.00, ...
								//
								// we need to fetch the cost from either a key pair or the next token.
								switch (currency)
								{
									case 0:		costNight = GetPairValue(tokenRate);		break;
									case 1: 	costNight = parseFloat(rateData[u + 1]);	break;
									default:
										alert("Unknown curreny " + currency);
										return;
								}
								
								// Was daily rate list, is now a weekly rate ...
								costNight /= 7;
								
								// Apply discount ?
								//
								// Original discount : we have a rate and a number of days. If the booking date ("today") is within 
								// "discountDays" of the period chosen, a rate is applied i.e. last minute bookings.
								//
								// New discount : "discountDays" can (optionally) take a date format. If found, it now represents the last
								// day ("today") on which a booking can be made and a discount applied.
								//
								// Newer discount : two date range - if the night falls within then it's a discount
								if (!fixedRate)
								{
									var applyDiscount	= false,									
										s				= new String(discountDays);
											
									if (s.indexOf("->") > 0)
									{
										// Newer discount (date range)
										var discountDateRange = GetPairValueString(discountDays);
										
										if (discountDateRange.length > 0)
										{
											var discountDates = discountDateRange.split("->");
											
											if (discountDates.length == 2)
											{
												var discountDateStart 	= DateParse(discountDates[0]),
													discountDateEnd		= DateParse(discountDates[1]);
													
												if ((DayDifference(DayCalc(discountDateStart),discountDateStart.getFullYear(),dayStart,yearStart) >= 0) &&
													(DayDifference(dayStart,yearStart,DayCalc(discountDateEnd),discountDateEnd.getFullYear()) >= 0))
														applyDiscount = true;
											}
										}
									}
									else if (s.indexOf("-") > 0)
									{
										// New discount (end date) ...
										var discountDateEnd = DateParse(GetPairValueString(discountDays));
										
										if (DayDifference(bookDay,bookYear,DayCalc(discountDateEnd),discountDateEnd.getFullYear()) >= 0)
											applyDiscount = true;
									}
									else
									{
										// Original discount ...
										if (DayDifference(bookDay,bookYear,dayStart,yearStart) < GetPairValue(discountDays))
											applyDiscount = true;
									}
									
									if (applyDiscount)
									{
										thisDiscount = (costNight * discount) / 100;
										discountGiven += thisDiscount;
										costNight -= thisDiscount;
										discountNights++;
									}
								}
								
								cost += costNight;
								nights++;
								foundRate = true;
							}
						}
					}
				}							
			}
		}
		
		if (!foundRate)
		{
			alert("Unable to calculate cost for day " + dayStart + ", year " + yearStart + ".");
			return;
		}
		
		// Advance ...
		if (++dayStart > DaysInYear(yearStart))
		{
			dayStart = 1;
			yearStart++;
		}
	}	
	
	// Cleaning / extras (not subject to discount) ...
	var nightCosts	= Fix99(cost),
		extraDesc	= "";
		
	if (nights < cleaning)
	{
		var ec = Fix99(parseFloat(villaData[6 + currency]));
		extraDesc	+= ", extra cleaning charge for short let" + " (" + FormatCash(ec,currencySymbol) + ")";
		cost 		+= ec;
	}
		
	for (var e = 1 ; e <= 3 ; e++)
		if (frm["extra" + e])
			if (frm["extra" + e].checked)
			{
				var ec = Fix99(nights * parseFloat(villaData[5 + 3 * e + 1 + currency]));
				extraDesc	+= ", " + GetPairValueString(villaData[5 + 3 * e]) + " (" + FormatCash(ec,currencySymbol) + ")";
				cost 		+= ec;
			}

	// Tidy up costs 
	cost			= Fix99(cost);
	discountGiven	= Fix99(discountGiven);
		
	// Form URL ...
	var url =	frm.cart_url.value + "?" +
				"userid=" + frm.userid.value + "&" +
				"currency=" + currency + "&" +
				"return=" + frm["return"].value + "&" +
				"subject=" + frm.subject.value + "&" +
				"price=" + FormatFloat(cost,2) + "&" +
				"tax=" + FormatFloat(tax,2) + "&" +
				"product=" + (bookReserve.length > 0 ? bookReserve + " " : "") + 
							frm.villa_descr.value + " " + villaRef + 
							" Arrive " + dateStart.getDate() + " " + GetMonth(dateStart) + " " + dateStart.getFullYear() +
							". Depart " + dateEnd.getDate() + " " + GetMonth(dateEnd) + " " + yearEnd + 
							" (" + FormatNight(nights) + " " + FormatCash(nightCosts,currencySymbol) + 
							(extraDesc.length > 0 ? ", with" + extraDesc.substring(1) : "") + 
							(discountGiven > 0 ? ", includes " + FormatCash(discountGiven,currencySymbol) + " discount for " + FormatNight(discountNights) : "") + ")";

	// Action! Use the URL ...
	window.location = url;						// Redirect to shop 		(release)
//	alert("" + url.length + " chars : " + url);		// Show URL in alert box	(debug)
//	document.write("" + url.length + " chars : " + url);	// Write URL to web page	(debug)
}

