// JavaScript Document

<!--
var $j = jQuery.noConflict();

var defaultAAMImages = new Array("", "<img src='../images/conpie.jpg' alt='Conservative' border='0' />", 
								 "<img src='../images/modconpie.jpg' alt='Moderately Conservative' border='0' />", 
								 "<img src='../images/modpie.jpg' alt='Moderate' border='0' />", 
								 "<img src='../images/modagpie.jpg' alt='Moderately Aggressive' border='0' />",
								 "<img src='../images/agpie.jpg' alt='Aggressive' border='0' />");

var months = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec');

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function addNewAAMRow() {
	var assetClassBody = $('assetClassesBody');
	var tableRows = assetClassBody.childElements();
	var maxRowCount = $('aamRowCount');
	var addAAMRowButton = $('addAAMRow');
	var rowCount = tableRows.length;
	if(rowCount <= maxRowCount.value){
		dwrAssetClassService.incrementAAMRows();
		var lastRow = tableRows[tableRows.length-1];
		var newRow = lastRow.cloneNode(true);
		var percentName = "inputAssetAllocations["+tableRows.length+"].percentage";
		var assetClassName = "inputAssetAllocations["+tableRows.length+"].assetClass";
		
		var rowCells = newRow.childElements();
		var percent = rowCells[0].down();
		percent.value = "";
		percent.name = percentName;
		percent.id = percentName;
		
		var assetClass = rowCells[1].down();
		assetClass.value = "-";
		assetClass.name = assetClassName;
		assetClass.id = assetClassName;
		$('assetClassesBody').insert ({'bottom'  :  newRow} );
		if(++rowCount > maxRowCount.value && addAAMRowButton.visible()){
			addAAMRowButton.hide()
		}
	}
}

/**
 * store user's AAM input so we can remember it
 * @param index
 */
function storeAAMInput(index, fieldName){
	var percentName = "inputAssetAllocations["+index+"].percentage";
	var assetClassName = "inputAssetAllocations["+index+"].assetClass";
	
	var percent = $F(percentName);
	var assetClass = $F(assetClassName);
	if(assetClass == "-"){
		assetClass = -1;
	}
	dwrAssetAllocationService.setAssetAllocationInput(index, percent, assetClass);
	if(fieldName == "percent"){
		calculateTotal();
	}
}

/**
 * Hide extra AAM rows
 * @param rowCount
 */
function hideAAMRows(rowCount) {
	var assetClassBody = $('assetClassesBody');
	var tableRows = assetClassBody.childElements();
	for(var i = rowCount; i < tableRows.length; i++){
		var rowToHide = tableRows[i];
		rowToShow.hide();
	}
}

/**
 * reset AAM row so the user can enter their own AAM
 * @param rowCount
 */
function resetAAMRows(formObject) {
	document.getElementById('models').innerHTML = defaultAAMImages[0];
	var assetAllocations = formObject.inputAssetAllocations;
	var count = assetAllocations.length;
	
	var assetClassBody = $('assetClassesBody');
	var tableRows = assetClassBody.childElements();
	var total = 0;
	for(var i = 0; i < count; i++){
		var rowToShow = tableRows[i];
		rowToShow.show();
		var percentage = assetAllocations[i].percentage;
		if(!isNaN(percentage)){
			total += percentage;
		}
		
		var assetClass = "-";
		if(assetAllocations[i].assetClass != null){
			assetClass = assetAllocations[i].assetClass.id;
		}
		var rowCells = rowToShow.childElements();
		
		var percent = rowCells[0].down();
		percent.value = (percentage == null) ? "" : percentage;
		percent.enable();
		rowCells[1].down().value = assetClass;
		rowCells[1].down().enable();
	}
	
	var addAAMRowButton = $('addAAMRow');
	if(tableRows.length-1 == formObject.maxAssetClassRowCount){
		addAAMRowButton.hide()
	}else{
		addAAMRowButton.show();
	}
	
	var totalBox = $('total');
	totalBox.value = total;
}

function alters0() {
	var contain = Form.getInputs('assetAllocationModelForm','radio','model').find(function(radio) { return radio.checked; }).value;
	dwrAssetAllocationService.getAssetAllocationModelFormObject(resetAAMRows);
}

/**
 * Show default asset allocation model chart
 */
function showDefaultAAMChart(chartId) {
	if(chartId == null || chartId == 'undefined'){
		chartId = Form.getInputs('assetAllocationModelForm','radio','model').find(function(radio) { return radio.checked; }).value;
	}
	document.getElementById('models').innerHTML = defaultAAMImages[chartId];
}

/**
 * Set default AAM rows based on selected AAM radio button
 */
function setAAMRows() {
	var aamId = Form.getInputs('assetAllocationModelForm','radio','model').find(function(radio) { return radio.checked; }).value;
	showDefaultAAMChart(aamId);
	
	var assetClassBody = $('assetClassesBody');
	if(assetClassBody != null && assetClassBody != 'undefined'){
		dwr.engine.beginBatch();
		dwrAssetAllocationService.setDefaultAssetAllocationModelInput(aamId);
		dwrAssetClassService.getDefaultAssetAllocations(aamId, setAAMValues);
		dwr.engine.endBatch();
	}
}

/**
 * Set AAM rows based on default asset allocations specified
 * also hide any superfluous rows that might have been previously displayed
 */
function setAAMValues(defaultAssetAllocations) {
	var percentages = defaultAssetAllocations.pluck("percentage");
	var assetClasses = defaultAssetAllocations.pluck("assetClass");
	assetClasses = assetClasses.pluck("id");
	var assetClassBody = $('assetClassesBody');
	var tableRows = assetClassBody.childElements();
	for(var i = 0; i < defaultAssetAllocations.length; i++){
		var rowToShow = tableRows[i];
		rowToShow.show();
		var rowCells = rowToShow.childElements();
		
		rowCells[0].down().value = percentages[i];
		rowCells[1].down().value = assetClasses[i];
		rowCells.each(function(s) {
			var rowCell = s.down();
			rowCell.disable();
		});
	}
	for(var i = defaultAssetAllocations.length; i < tableRows.length; i++){
		var rowToHide = tableRows[i];
		rowToHide.hide();
	}
	
	var addAAMRowButton = $('addAAMRow');
	addAAMRowButton.hide();
	
	var totalBox = $('total');
	totalBox.value = sumValues(percentages);
}

/**
 * Sum elements of the specified array
 */
function sumValues(elems){
	var total = 0;
	if(elems != null){
		elems.each(function(s) {
			var elemNumber = parseFloat(s);
			total += elemNumber;
		});
		if(isNaN(total)){
			total = 0;
		}
	}
	return total;
}

/**
 * Switch account balances page mode between 
 * allowing user to enter account balances or allowing user to enter account returns
 * by showing or hiding the balance type columns. 
 */
function switchAccountBalancesPageMode(){
	var accountBalanceSymbol = $('accountBalanceSymbol');
	var accountBalancesBody = $('accountBalancesBody');
	var tableRows = accountBalancesBody.childElements();
	
	var cashflowType = $('cashflowType');
	var returnsInfo = $('returnsInfo');
	var startValueRow = $('startValueRow');
	
	var switchBox = $('returnsSuppliedByClient');
	var switchToReturnsMode = switchBox.checked;
	if(switchToReturnsMode){
		startValueRow.hide();
		accountBalanceSymbol.update('%');
		returnsInfo.show();
		cashflowType.hide();
		tableRows.each(function(s) {
			var rowCell = s.down().next().next();
			rowCell.down().hide();
		});
	}else{
		startValueRow.show();
		accountBalanceSymbol.update('$');
		returnsInfo.hide();
		cashflowType.show();
		tableRows.each(function(s) {
			var rowCell = s.down().next().next();
			rowCell.down().show();
		});
	}
}

function CloseWindow()
{
window.close();
}

function newWindow(pixgif)
{
pixWindow=window.open(pixgif,'pixWin','width=650,height=600,status=no,toolbar=no,directories=no,menubar=no,location=no,scrolling=no')
pixWindow.focus()
}

function showit1()
{
	var showblock = document.getElementById('accountReference').value;
	document.getElementById('shown1').innerHTML="<input type='radio' name='assam1' value='recommended' />&nbsp;<small>I want to enter my own Asset Allocation Model (recommended)</small><br /><input type='radio' name='assam1' value='generic' />&nbsp;<small>Use EMA's generic Asset Allocation Models</small>";
	document.getElementById('shown2').innerHTML="";
	document.getElementById('shown3').innerHTML="";
	document.getElementById('shown4').innerHTML="";
}
function showit2()
{
var showblock = document.getElementById('accountReference').value;
if (showblock=="1")
	{
	document.getElementById('shown1').innerHTML="";
	document.getElementById('shown2').innerHTML="<input type='radio' name='assam1' value='recommended' />&nbsp;<small>I want to enter my own Asset Allocation Model (recommended)</small><br /><input type='radio' name='assam1' value='generic' />&nbsp;<small>Use EMA's generic Asset Allocation Models</small>";
	document.getElementById('shown3').innerHTML="";
	document.getElementById('shown4').innerHTML="";
	}
}
function showit3()
{
var showblock = document.getElementById('accountReference').value;
if (showblock=="1")
	{
	document.getElementById('shown1').innerHTML="";
	document.getElementById('shown2').innerHTML="";
	document.getElementById('shown3').innerHTML="<input type='radio' name='assam1' value='recommended' />&nbsp;<small>I want to enter my own Asset Allocation Model (recommended)</small><br /><input type='radio' name='assam1' value='generic' />&nbsp;<small>Use EMA's generic Asset Allocation Models</small>";
	document.getElementById('shown4').innerHTML="";
	}
}
function showit4()
{
var showblock = document.getElementById('accountReference').value;
if (showblock=="1")
	{
	document.getElementById('shown1').innerHTML="";
	document.getElementById('shown2').innerHTML="";
	document.getElementById('shown3').innerHTML="";
	document.getElementById('shown4').innerHTML="<input type='radio' name='assam1' value='recommended' />&nbsp;<small>I want to enter my own Asset Allocation Model (recommended)</small><br /><input type='radio' name='assam1' value='generic' />&nbsp;<small>Use EMA's generic Asset Allocation Models</small>";
	}
}

/**
 * Sum up percentage(s) input on the AAM page.
 */
function calculateTotal(){
	var assetClassBody = $('assetClassesBody');
	var tableRows = assetClassBody.childElements();
	var total = 0;
	for(var i = 0; i < tableRows.length; i++){
		var rowToShow = tableRows[i];
		var rowCells = rowToShow.childElements();
		
		var percentage = rowCells[0].down().value;
		percentage = parseFloat(percentage);
		if(!isNaN(percentage)){
			total += percentage;
		}
	}
	
	var totalBox = $('total');
	totalBox.value = total;
}

function expandAAM(accountName){
	var expandImg = "../images/show.jpg";
	var collapseImg = "../images/hide.jpg";
	var accountImage = $(accountName+'Image');
	var imgSrc = accountImage.readAttribute("src");
	var tableRows = $(accountName);
	if(imgSrc == expandImg){
		accountImage.writeAttribute("src", collapseImg);
		tableRows.show();
	}else{
		accountImage.writeAttribute("src", expandImg);
		tableRows.hide();
	}
}

/**
 * Check if user is editing AAM and if so change submit button to 'EDIT'
 */
function checkAAMPageMode(){
	var pageMode = $F('pageMode');
	if(pageMode == 'true'){
		var pageButton = $('submit');
		pageButton.writeAttribute("value", 'EDIT');
	}
}

function showCashflows(cashflow){
	dwrPortfolioDataService.getAccountBalances(cashflow, createAccountBalanceRows);
}

/**
 * Create table row for each account balance to be displayed
 */
function createAccountBalanceRows(accountBalances) {
	var amounts = accountBalances.pluck("amount");
	var balanceTypes = accountBalances.pluck("balanceType");
	var balanceDates = accountBalances.pluck("balanceDate");
	
	var div = new Element('div');
	var tab = new Element('table');
	tab.writeAttribute("width", '100%');
	
	var headerRow = new Element('tr');
	var dateHeader = new Element('th').update("Date");
	dateHeader.writeAttribute("align", 'left');
	
	var amountHeader = new Element('th').update("Amount");
	amountHeader.writeAttribute("align", 'left');
	
	var balanceTypeHeader = new Element('th').update("Cashflow");
	balanceTypeHeader.writeAttribute("align", 'left');
	headerRow.insert ({'bottom'  :  dateHeader} );
	headerRow.insert ({'bottom'  :  amountHeader} );
	headerRow.insert ({'bottom'  :  balanceTypeHeader} );
	tab.insert ({'bottom'  :  headerRow} );
	
	for(var i = 0; i < accountBalances.length; i++){
		var row = new Element('tr');
		var formattedDate = formatDate(balanceDates[i]);
		var balanceDateCell = new Element('td').update(formattedDate);
		row.insert ({'bottom'  :  balanceDateCell} );	
		
		var formattedAmount = addCommas(amounts[i]);
		var amountCell = new Element('td').update('$'+formattedAmount);
		row.insert ({'bottom'  :  amountCell} );
		var balanceTypeCell = new Element('td').update(balanceTypes[i].name);
		row.insert ({'bottom'  :  balanceTypeCell} );
		
		tab.insert ({'bottom'  :  row} );
	}
	div.insert ({'bottom'  :  tab} );
	win = new Window({className: "mac_os_x", title: "Cash Flows", width:250, height:100, zIndex: 100, resizable: false, destroyOnClose: true, recenterAuto:false}); 
	var text = div.innerHTML;
	win.getContent().update(text); 
	win.showCenter(); 
}

function formatDate(date){
	var day = date.getDate();
	var month = date.getMonth();
	var yy = date.getYear();
	var year = (yy < 1000) ? yy + 1900 : yy;
	
	return (day + " " + months[month] + " " + year);
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

//jquery functions from here
$j(function() {
	$j('#startDate, #endDate, #portfolioStartDate').datepick({ inline: true, dateFormat: 'dd-mm-yy', showOn: 'both', buttonImage: '../images/calendar.jpg', buttonImageOnly: true });
	var rows = $j('#accountBalancesBody').find('tr');
	if(rows != null && rows.length > 0){
		var endOfMonthDate = $j('#endOfMonthDate').val();
		for(var i = 0; i < rows.length; i++){
			var dateFieldName = '#datepicker' + i;
			if(endOfMonthDate != null && endOfMonthDate != 'undefined' && endOfMonthDate != ""){
				var minDate = $j('#datepicker0').val();
				var dateValues = minDate.split("-");
				
				var endDateValues = endOfMonthDate.split("-");
				endDateValues[1] = dateValues[1];
				var maxDate = "";
				for(var k = 0; k < endDateValues.length; k++){
					maxDate += endDateValues[k];
					if(k != endDateValues.length - 1){
						maxDate += "-";
					}
				}
				$j(dateFieldName).datepick({ inline: true, dateFormat: 'dd-mm-yy', showOn: 'both', buttonImage: '../images/calendar.jpg', buttonImageOnly: true, minDate: (minDate), maxDate: (maxDate) });
			}else{
				$j(dateFieldName).datepick({ inline: true, dateFormat: 'dd-mm-yy', showOn: 'both', buttonImage: '../images/calendar.jpg', buttonImageOnly: true, maxDate: (+0) });
			}
		}
	}
});

$j(document).ready(function($) {
    $j('a[rel*=facebox]').facebox() 
  })
//-->
