var args = {
	"title" : "Banded EOC",
	"type" : "report",
	"dataset" : "(|ContrName|) (|EndDate|) (|Structure|StruName|) (|Unit|UnitName|)",
	"hr_scale" : [(|ContrUnit|DisplayScale|%2%|[n0]|), (|ContrUnit|DisplayDecimal|%2%|[n0]|)],
	"sync" : "1",
	"sql" : [
"select UnitID, UnitName from Unit where (Unit.UnitID in (1,2) or Unit.UnitType = 1) order by UnitSeq",
"select ElemID, WbsNum, coalesce(LongDesc, ElemDesc) from Element where StruID = st_id and WbsNum <> '[PMB]' order by ElemHier",
"select Element.ElemID, Unit.UnitID, BcwsCur, BcwpCur, AcwpCur, BcwpCur-BcwsCur, BcwpCur-AcwpCur, BcwsCum, BcwpCum, AcwpCum, BcwpCum-BcwsCum, BcwpCum-AcwpCum, Bac, Lre from EarnedValue inner join Element on Element.ElemID = EarnedValue.ElemID inner join Unit on Unit.UnitID = EarnedValue.UnitID inner join ContrUnit on ContrUnit.ContrID = Element.ContrID and ContrUnit.UnitID = Unit.UnitID inner join Period on Period.PeriodID = EarnedValue.PeriodID where StruID = st_id and WbsNum <> '[PMB]' and (Unit.UnitID in (1,2) or Unit.UnitType = 1) and OrdVal = (select OrdVal from Period where PeriodID=cd_id) order by Element.ContrID, ElemHier, Unit.UnitID"
	]
};

(function() {
	'use strict';
	var stxt = ['Ones', 'Thousands', 'Millions', 'Billions', 'Zillions'],
		hdr = ['UNIT', 'BCWS_c', 'BCWP_c', 'ACWP_c', 'SV_c', 'CV_c', 'BCWS', 'BCWP', 'ACWP', 'SV', 'CV', 'BAC', 'EAC'],
		uarr = args.sql[0],
		earr = args.sql[1],
		darr = args.sql[2],
		em = [], tarr = [], empty = [], rmap = {},
		arr, s, decpl, val, sf, hr_sf, i, ilen, j, jlen, k, klen, cls, ce_id; 

	for (i = 0, ilen = darr.length; i < ilen; i++) {
		s = darr[i][0] + '.' + darr[i][1];
		rmap[s] = darr[i];
	} 

	hr_sf = Math.pow(10, -args.hr_scale[0]);
	sf = Math.pow(10, extra.scale.sf);
	s = args.dataset;
	if (extra.pf && extra.pf.length) {
		s = s + ' (' + extra.pf + ')';
	}
	em.push('<div class="rpt">');
	em.push('<div class="rtitle">');
	em.push(s);
	em.push('<br>');
	s = args.title;
	if (extra.scale.text.length) {
		s = s + ' (' + extra.scale.text + ')';
	}
	em.push(s);
	em.push('</div><br>');
	if( extra.dataset.ce === 'sum' ) {
		em.push('</div>');
		return em.join('');
	}
	i = +args.hr_scale[0] / 3;
	if (i > 3) {
		i = 4;
	}
	uarr[1][1] = uarr[1][1] + ' (' + stxt[i] + ')';

	for (i = 0, ilen = darr[0].length; i < ilen; i++) {
		empty.push(0);
	}

	for (j = 0, jlen = earr.length; j < jlen; j++) {
		arr = earr[j];
		ce_id = arr[0];
		em.push('<p>');
		em.push('<span class="rpt rtb">[' + arr[1] + ' : ' + arr[2] + ']</span>');
		em.push('<br>'); 
		em.push('<table class="rpt">');
		em.push('<tr>');
		for (i = 0, ilen = hdr.length; i < ilen; i++) {
			cls = (i === 0) ? 'ral' : 'rac';
			em.push('<td class="rpt ' + cls + ' rcgr1 rtb">' + hdr[i] + '</td>');
		}
		em.push('</tr>');

		em.push('<tr>');
		em.push('<td class="rpt rnw">' + uarr[1][1] + '</td>');
		s = ce_id + '.2';
		arr = rmap[s] || empty;
		decpl = args.hr_scale[1];
		for (i = 2, ilen = arr.length; i < ilen; i++) {
			val = +arr[i];
			em.push('<td class="rpt rar">' + dtostr(hr_sf * val) + '</td>');
		}
		em.push('</tr>');

		tarr.length = 0;
		for (i = 0; i < ilen; i++) {
			tarr.push(0);
		}

		em.push('<tr>');
		for (i = 2; i < ilen + 1; i++) {
			em.push('<td class="rpt rcgr0"> </td>');
		}
		em.push('</tr>');

		decpl = extra.scale.dd;
		uarr = args.sql[0];
		for (k = 2, klen = uarr ? uarr.length : 0; k < klen; k++) {
			s = ce_id + '.' + uarr[k][0];
			if (!rmap[s]) {
				continue;
			}
			arr = rmap[s];
			em.push('<tr>');
			em.push('<td class="rpt rnw">' + uarr[k][1] + '</td>');
			for (i = 2, ilen = arr.length; i < ilen; i++) {
				val = +arr[i];
				em.push('<td class="rpt rar">' + dtostr(sf * val, decpl) + '</td>');
				tarr[i] += val;
			}
			em.push('</tr>');
		}

		em.push('<tr>');
		em.push('<td class="rpt rcb0">EOC Total</td>');
		arr = tarr;
		for (i = 2, ilen = tarr.length; i < ilen; i++) {
			val = tarr[i];
			em.push('<td class="rpt rcb0 rar">' + dtostr(sf * val, decpl) + '</td>');
		}
		em.push('</tr>');

		em.push('<tr>');
		em.push('<td class="rpt rnw">Delta to ' + uarr[0][1] + '</td>');
		s = ce_id + '.1';
		arr = rmap[s];
		for (i = 2, ilen = arr? arr.length : 0; i < ilen; i++) {
			val = arr[i] - tarr[i];
			em.push('<td class="rpt rar">' + dtostr(sf * val, decpl) + '</td>');
		}
		em.push('</tr>');
		em.push('</table>');
	}
	em.push('</div>');
	return em.join('');
})();
