jQuery.noConflict();

jQuery.blockUI.defaults.message = '<div style="padding: 2px;"><img src="/images/ajax-loader-white.gif" /><span style="padding-left: 3px; font-weight: bold;">Processing...</span></div>';
jQuery.blockUI.defaults.overlayCSS.backgroundColor = '#FFF';
jQuery.blockUI.defaults.overlayCSS.opacity = '0.5';
jQuery.blockUI.defaults.fadeOut = '0';

jQuery(document).ready(function($) {
	var uri = window.location.href;
	if (uri && uri.indexOf("/login.jsf") > -1) {
		$("label.overlabel").overlabel();
	}
	applyStyles($);

	if (uri && uri.indexOf("assetsDetails") > -1) {
		applyCalculatedFields($);
	}
	
	if (uri && uri.indexOf("exportResults") > -1) {
		$("input[@class*='pension-fund-export-categories']").bind("click", function(event) {
			calculateCustomExportColumns($);
			showTooManyColumnsWarning($);
			enableExport($);
		});
		calculateCustomExportColumns($);
		showTooManyColumnsWarning($);
		enableExport($);
	}
	
	if (uri && uri.indexOf("company") > -1) {
		applyLandingPageTotals($);
	}
	
	applyEditionConstraints($);
});

function applyStyles($) {
	$(".dataTable").each(function(i) {
		$(this).find("tbody tr:odd").css('background-color', '#EEE');
	})
	$(".rich-table").each(function(i) {
		$(this).find("tr.rich-table-firstrow:odd").css('background-color', '#EEE');
	})
	$(document).pngFix();
}



function calculateCustomExportColumns($) {
	var totalColumns = 0;
	
	if ( $("input:checkbox:checked[@id$='company-info']").val() ) {
		totalColumns += parseInt($("span[@id$='company-info-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='key-personel']").val() ) {
		totalColumns += parseInt($("span[@id$='key-personel-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='assets-summary']").val() ) {
		totalColumns += parseInt($("span[@id$='assets-summary-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='plan-summary']").val() ) {
		totalColumns += parseInt($("span[@id$='plan-summary-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='plan-members']").val() ) {
		totalColumns += parseInt($("span[@id$='plan-members-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='associated-providers-1']").val() ) {
		totalColumns += parseInt($("span[@id$='associated-providers-1-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='associated-providers-2']").val() ) {
		totalColumns += parseInt($("span[@id$='associated-providers-2-columns']").text());
	}
	if ( $("input:checkbox:checked[@id$='dc-rrsp-survey-summary']").val() ) {
		totalColumns += parseInt($("span[@id$='dc-rrsp-survey-summary-columns']").text());
	}

	var planTypeCodes = ["DB", "DC", "RRSP", "HY", "TTL"];
	for (var i=0; i<planTypeCodes.length; i++) {
		if ( $("input:checkbox:checked[@id$='" + planTypeCodes[i] + "-summary']").val() ) {
			totalColumns += parseInt($("span[@id$='" + planTypeCodes[i] + "-summary-columns']").text());
		}
		if ( $("input:checkbox:checked[@id$='" + planTypeCodes[i] + "-detailed']").val() ) {
			totalColumns += parseInt($("span[@id$='" + planTypeCodes[i] + "-detailed-columns']").text());
		} else {
			if ( $("input:checkbox:checked[@id$='" + planTypeCodes[i] + "-EQT-detailed']").val() ) {
				totalColumns += parseInt($("span[@id$='" + planTypeCodes[i] + "-EQT-detailed-columns']").text());
			}
			if ( $("input:checkbox:checked[@id$='" + planTypeCodes[i] + "-FXI-detailed']").val() ) {
				totalColumns += parseInt($("span[@id$='" + planTypeCodes[i] + "-FXI-detailed-columns']").text());
			}
			if ( $("input:checkbox:checked[@id$='" + planTypeCodes[i] + "-CSH-detailed']").val() ) {
				totalColumns += parseInt($("span[@id$='" + planTypeCodes[i] + "-CSH-detailed-columns']").text());
			}
			if ( $("input:checkbox:checked[@id$='" + planTypeCodes[i] + "-ALT-detailed']").val() ) {
				totalColumns += parseInt($("span[@id$='" + planTypeCodes[i] + "-ALT-detailed-columns']").text());
			}
		}
	}
	
	$("input:text[@id$='total-export-columns']").val(totalColumns);
}

function showTooManyColumnsWarning($) {
	var totalColumns = $("input:text[@id$='total-export-columns']").val();
	if (totalColumns > 255) {
		$("div[@id='too-many-columns-warning']").show();
	} else {
		$("div[@id='too-many-columns-warning']").hide();
	}	
}

function enableExport($) {
	var totalColumns = $("input:text[@id$='total-export-columns']").val();
	if (totalColumns > 0) {
		$("input:submit[@id*='export-button']").removeAttr("disabled");
	} else {
		$("input:submit[@id*='export-button']").attr("disabled", "disabled");
	}
}


/************************************************************* Manual calculation of totals *************************************************************/
function calculateTotalColumns(assetClassTypeCode) {
	if (assetClassTypeCode == 'EQT') {
		calculateEquitiesTotals(jQuery);
	} else if (assetClassTypeCode == 'FXI') {
		calculateFixedIncomeTotals(jQuery);
	} else if (assetClassTypeCode == 'CSH') {
		calculateCashEquivalentTotals(jQuery);
	} else if (assetClassTypeCode == 'ALT') {
		calculateAlternativeInvestmentTotals(jQuery);
	}
}

function calculateEquitiesTotals($) {
	// Row calculation
	calculateRawTotalValue($, "input[@class*='equities-ce-large-active']", "input[@id$='equities-ce-large-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ce-large-index']", "input[@id$='equities-ce-large-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ce-mid-active']", "input[@id$='equities-ce-mid-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ce-mid-index']", "input[@id$='equities-ce-mid-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ce-small-active']", "input[@id$='equities-ce-small-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ce-small-index']", "input[@id$='equities-ce-small-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-canadian-equity']", "input[@id$='equities-canadian-equity-total']");

	calculateRawTotalValue($, "input[@class*='equities-ue-large-active']", "input[@id$='equities-ue-large-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ue-large-index']", "input[@id$='equities-ue-large-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ue-mid-active']", "input[@id$='equities-ue-mid-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ue-mid-index']", "input[@id$='equities-ue-mid-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ue-small-active']", "input[@id$='equities-ue-small-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ue-small-index']", "input[@id$='equities-ue-small-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-us-equity']", "input[@id$='equities-us-equity-total']");

	calculateRawTotalValue($, "input[@class*='equities-ee-large-active']", "input[@id$='equities-ee-large-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ee-large-index']", "input[@id$='equities-ee-large-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ee-mid-active']", "input[@id$='equities-ee-mid-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ee-mid-index']", "input[@id$='equities-ee-mid-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ee-small-active']", "input[@id$='equities-ee-small-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ee-small-index']", "input[@id$='equities-ee-small-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-eafe-equity']", "input[@id$='equities-eafe-equity-total']");

	calculateRawTotalValue($, "input[@class*='equities-ge-large-active']", "input[@id$='equities-ge-large-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ge-large-index']", "input[@id$='equities-ge-large-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ge-mid-active']", "input[@id$='equities-ge-mid-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ge-mid-index']", "input[@id$='equities-ge-mid-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ge-small-active']", "input[@id$='equities-ge-small-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-ge-small-index']", "input[@id$='equities-ge-small-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-global-equity']", "input[@id$='equities-global-equity-total']");
	
	calculateRawTotalValue($, "input[@class*='equities-em-active']", "input[@id$='equities-em-active-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-em-index']", "input[@id$='equities-em-index-ihe']");
	calculateRawTotalValue($, "input[@class*='equities-emerging-markets']", "input[@id$='equities-emerging-markets-total']");

	// Column calculation
	calculateTotal($, "input[@class*='pension-fund-assets-equities-ihe']", "#pension-fund-assets-equities-ihe-total", 2);
	calculateTotal($, "input[@class*='pension-fund-assets-equities-total']", "#pension-fund-assets-equities-total-total", 2);
	
	// Grand-Total
	applyGrandTotalCalculatedFields($);
}

function calculateFixedIncomeTotals($) {
	// Row calculation
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-ga-active']", "input[@id$='fixed-income-cb-ga-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-ga-index']", "input[@id$='fixed-income-cb-ga-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-corp-non-high-active']", "input[@id$='fixed-income-cb-corp-non-high-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-corp-non-high-index']", "input[@id$='fixed-income-cb-corp-non-high-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-corp-high-active']", "input[@id$='fixed-income-cb-corp-high-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-corp-high-index']", "input[@id$='fixed-income-cb-corp-high-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-rr-active']", "input[@id$='fixed-income-cb-rr-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-rr-index']", "input[@id$='fixed-income-cb-rr-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-cp-active']", "input[@id$='fixed-income-cb-cp-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-cp-index']", "input[@id$='fixed-income-cb-cp-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-canadian-bonds']", "input[@id$='fixed-income-canadian-bonds-total']");
	
	// Assets view is not detailed (Canadian Bonds)
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-active-summary']", "input[@id$='fixed-income-cb-active-summary-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-cb-index-summary']", "input[@id$='fixed-income-cb-index-summary-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-canadian-bonds-summary']", "input[@id$='fixed-income-canadian-bonds-summary-total']");
	
	
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-ga-active']", "input[@id$='fixed-income-ub-ga-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-ga-index']", "input[@id$='fixed-income-ub-ga-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-corp-non-high-active']", "input[@id$='fixed-income-ub-corp-non-high-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-corp-non-hign-index']", "input[@id$='fixed-income-ub-corp-non-hign-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-corp-high-active']", "input[@id$='fixed-income-ub-corp-high-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-corp-high-index']", "input[@id$='fixed-income-ub-corp-high-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-rr-active']", "input[@id$='fixed-income-ub-rr-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-ub-rr-index']", "input[@id$='fixed-income-ub-rr-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-us-bonds']", "input[@id$='fixed-income-us-bonds-total']");

	// Assets view is not detailed (US Bonds)
	calculateRawTotalValue($, "input[@class*='fixed-income-us-bonds-summary']", "input[@id$='fixed-income-us-bonds-summary-total']");


	calculateRawTotalValue($, "input[@class*='fixed-income-gb-ga-active']", "input[@id$='fixed-income-gb-ga-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-ga-index']", "input[@id$='fixed-income-gb-ga-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-corp-non-high-active']", "input[@id$='fixed-income-gb-corp-non-high-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-corp-non-high-index']", "input[@id$='fixed-income-gb-corp-non-high-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-corp-high-active']", "input[@id$='fixed-income-gb-corp-high-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-corp-high-index']", "input[@id$='fixed-income-gb-corp-high-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-rr-active']", "input[@id$='fixed-income-gb-rr-active-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-gb-rr-index']", "input[@id$='fixed-income-gb-rr-index-ihe']");
	calculateRawTotalValue($, "input[@class*='fixed-income-global-bonds']", "input[@id$='fixed-income-global-bonds-total']");

	// Assets view is not detailed (Global Bonds)
	calculateRawTotalValue($, "input[@class*='fixed-income-global-bonds-summary']", "input[@id$='fixed-income-global-bonds-summary-total']");
	
	// Column calculation
	calculateTotal($, "input[@class*='pension-fund-assets-fixed-income-ihe']", "#pension-fund-assets-fixed-income-ihe-total", 2);
	calculateTotal($, "input[@class*='pension-fund-assets-fixed-income-total']", "#pension-fund-assets-fixed-income-total-total", 2);
	
	// Grand-Total
	applyGrandTotalCalculatedFields($);
}

function calculateCashEquivalentTotals($) {
	// Row calculation
	calculateRawTotalValue($, "input[@class*='cash-cash-short-term']", "input[@id$='cash-cash-short-term-ihe']");
	calculateRawTotalValue($, "input[@class*='cash-cash-short-term']", "input[@id$='cash-cash-short-term-total']");
	calculateRawTotalValue($, "input[@class*='cash-gic']", "input[@id$='cash-gic-ihe']");
	calculateRawTotalValue($, "input[@class*='cash-gic']", "input[@id$='cash-gic-total']");
	
	// Column calculation
	calculateTotal($, "input[@class*='pension-fund-assets-cash-ihe']", "#pension-fund-assets-cash-ihe-total", 2);
	calculateTotal($, "input[@class*='pension-fund-assets-cash-total']", "#pension-fund-assets-cash-total-total", 2);
	
	// Grand-Total
	applyGrandTotalCalculatedFields($);
}

function calculateAlternativeInvestmentTotals($) {
	// Row calculation
	calculateRawTotalValue($, "input[@class*='alternative-hedge-funds']", "input[@id$='alternative-hedge-funds-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-hedge-funds']", "input[@id$='alternative-hedge-funds-total']");
	calculateRawTotalValue($, "input[@class*='alternative-managed-futures']", "input[@id$='alternative-managed-futures-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-managed-futures']", "input[@id$='alternative-managed-futures-total']");
	
	//calculateRawTotalValue($, "input[@class*='alternative-private-equity-venture-capital']", "input[@id$='alternative-private-equity-venture-capital-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-private-equity-mezzanine']", "input[@id$='alternative-private-equity-mezzanine-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-private-equity']", "input[@id$='alternative-private-equity-total']");
	calculateRawTotalValue($, "input[@class*='alternative-venture-capital']", "input[@id$='alternative-venture-capital-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-venture-capital']", "input[@id$='alternative-venture-capital-total']");
	calculateRawTotalValue($, "input[@class*='alternative-mezzanine']", "input[@id$='alternative-mezzanine-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-mezzanine']", "input[@id$='alternative-mezzanine-total']");
	
	//calculateRawTotalValue($, "input[@class*='alternative-real-estate-equity']", "input[@id$='alternative-real-estate-equity-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-real-estate-mortgage']", "input[@id$='alternative-real-estate-mortgage-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-real-estate']", "input[@id$='alternative-real-estate-total']");
	calculateRawTotalValue($, "input[@class*='alternative-equity']", "input[@id$='alternative-equity-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-equity']", "input[@id$='alternative-equity-total']");
	calculateRawTotalValue($, "input[@class*='alternative-mortgage']", "input[@id$='alternative-mortgage-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-mortgage']", "input[@id$='alternative-mortgage-total']");
	
	calculateRawTotalValue($, "input[@class*='alternative-infrastructure']", "input[@id$='alternative-infrastructure-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-infrastructure']", "input[@id$='alternative-infrastructure-total']");
	
	//calculateRawTotalValue($, "input[@class*='alternative-income-trusts-business']", "input[@id$='alternative-income-trusts-business-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-income-trusts-energy']", "input[@id$='alternative-income-trusts-energy-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-income-trusts-reits']", "input[@id$='alternative-income-trusts-reits-ihe']");
	//calculateRawTotalValue($, "input[@class*='alternative-income-trusts']", "input[@id$='alternative-income-trusts-total']");
	calculateRawTotalValue($, "input[@class*='alternative-business-trusts']", "input[@id$='alternative-business-trusts-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-business-trusts']", "input[@id$='alternative-business-trusts-total']");
	calculateRawTotalValue($, "input[@class*='alternative-energy-trusts']", "input[@id$='alternative-energy-trusts-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-energy-trusts']", "input[@id$='alternative-energy-trusts-total']");
	calculateRawTotalValue($, "input[@class*='alternative-reits']", "input[@id$='alternative-reits-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-reits']", "input[@id$='alternative-reits-total']");
	
	
	calculateRawTotalValue($, "input[@class*='alternative-commodities']", "input[@id$='alternative-commodities-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-commodities']", "input[@id$='alternative-commodities-total']");
	calculateRawTotalValue($, "input[@class*='alternative-timber']", "input[@id$='alternative-timber-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-timber']", "input[@id$='alternative-timber-total']");
	calculateRawTotalValue($, "input[@class*='alternative-oil-gas']", "input[@id$='alternative-oil-gas-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-oil-gas']", "input[@id$='alternative-oil-gas-total']");
	calculateRawTotalValue($, "input[@class*='alternative-non-marketable-govt-debt']", "input[@id$='alternative-non-marketable-govt-debt-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-non-marketable-govt-debt']", "input[@id$='alternative-non-marketable-govt-debt-total']");
	calculateRawTotalValue($, "input[@class*='alternative-other2']", "input[@id$='alternative-other2-ihe']");
	calculateRawTotalValue($, "input[@class*='alternative-other2']", "input[@id$='alternative-other2-total']");
	
	// Column calculation
	calculateTotal($, "input[@class*='pension-fund-assets-alternative-ihe']", "#pension-fund-assets-alternative-ihe-total", 2);
	calculateTotal($, "input[@class*='pension-fund-assets-alternative-total']", "#pension-fund-assets-alternative-total-total", 2);

	// Grand-Total
	applyGrandTotalCalculatedFields($);
}

function calculateRawTotalValue($, source, target) {
	var sum = $(source).sum(); 
	$(target).val(sum);
}
/************************************************************* End of Manual calculation of totals *************************************************************/


function applyLandingPageTotals($) {
	// CUSTODIAN ASSETS
	calculateTotal($, "*[@class*='custodian-canadian-assets']", "span[@id='custodian-canadian-assets-total']", 2);
	calculateTotal($, "*[@class*='custodian-us-assets']", "div[@id='custodian-us-assets-total']", 2);
	calculateTotal($, "*[@class*='custodian-nna-assets']", "div[@id='custodian-nna-assets-total']", 2);
}

function applyGrandTotalCalculatedFields($) {
	calculateTotal($, "*[@class*='pension-fund-assets-in-house-sub-total']", "#pension-fund-assets-in-house-grand-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-balanced-sub-total']", "#pension-fund-assets-balanced-grand-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-specialist-sub-total']", "#pension-fund-assets-specialist-grand-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-ihe-sub-total']", "#pension-fund-assets-ihe-grand-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-pooled-funds-sub-total']", "#pension-fund-assets-pooled-funds-grand-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-sub-total-total']", "#pension-fund-assets-grand-total-total", 2);
}

function applyCalculatedFields($) {
	/* EQUITIES */
	calculateTotal($, "*[@class*='pension-fund-assets-equities-in-house']", "#pension-fund-assets-equities-in-house-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-balanced']", "#pension-fund-assets-equities-balanced-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-specialist']", "#pension-fund-assets-equities-specialist-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-ihe']", "#pension-fund-assets-equities-ihe-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-core']", "#pension-fund-assets-equities-core-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-value']", "#pension-fund-assets-equities-value-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-growth']", "#pension-fund-assets-equities-growth-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-pooled-funds']", "#pension-fund-assets-equities-pooled-funds-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-equities-total']", "#pension-fund-assets-equities-total-total", 2);

	/* FIXED INCOME */
	calculateTotal($, "*[@class*='pension-fund-assets-fixed-income-in-house']", "#pension-fund-assets-fixed-income-in-house-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-fixed-income-balanced']", "#pension-fund-assets-fixed-income-balanced-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-fixed-income-specialist']", "#pension-fund-assets-fixed-income-specialist-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-fixed-income-ihe']", "#pension-fund-assets-fixed-income-ihe-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-fixed-income-pooled-funds']", "#pension-fund-assets-fixed-income-pooled-funds-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-fixed-income-total']", "#pension-fund-assets-fixed-income-total-total", 2);

	/* CASH & EQUIVALENTS */
	calculateTotal($, "*[@class*='pension-fund-assets-cash-in-house']", "#pension-fund-assets-cash-in-house-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-cash-balanced']", "#pension-fund-assets-cash-balanced-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-cash-specialist']", "#pension-fund-assets-cash-specialist-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-cash-ihe']", "#pension-fund-assets-cash-ihe-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-cash-pooled-funds']", "#pension-fund-assets-cash-pooled-funds-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-cash-total']", "#pension-fund-assets-cash-total-total", 2);

	/* ALTERNATIVE INVESTMENTS */
	calculateTotal($, "*[@class*='pension-fund-assets-alternative-in-house']", "#pension-fund-assets-alternative-in-house-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-alternative-balanced']", "#pension-fund-assets-alternative-balanced-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-alternative-specialist']", "#pension-fund-assets-alternative-specialist-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-alternative-ihe']", "#pension-fund-assets-alternative-ihe-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-alternative-pooled-funds']", "#pension-fund-assets-alternative-pooled-funds-total", 2);
	calculateTotal($, "*[@class*='pension-fund-assets-alternative-total']", "#pension-fund-assets-alternative-total-total", 2);

	/* GRAND TOTAL FOR IN-HOUSE, EXTERNAL(BALANCED & SPECIALIST) AND TOTAL(IN-HOUSE + EXTERNAL) */
	applyGrandTotalCalculatedFields($);
}

function applyEditionConstraints($) {
	var uri = window.location.href;

	if (uri && uri.indexOf("companyEdition") > -1) {
		/* Input constraints */
		$(".number-integer").numeric();
		$(".number-decimal").numeric({allow:".-"});

		// MONEY MANAGERS
		initCalculatedTotal($, "input[@class*='money-manager-asset-value']", "#money-manager-asset-total-value", 2);
		initCalculatedTotal($, "input[@class*='money-manager-client-count']", "#money-manager-total-client-count", 0);
		initCalculatedTotal($, "input[@class*='money-manager-sub-advised-asset-value']", "#money-manager-sub-advised-asset-total-value", 2);
		initCalculatedTotal($, "input[@class*='money-manager-sub-advised-client-count']", "#money-manager-sub-advised-total-client-count", 0);
		initCalculatedTotal($, "input[@class*='money-manager-total-assets-percentage']", "#money-manager-total-assets-percentage-calculated", 2);
		initCalculatedTotal($, "input[@class*='money-manager-pension-pooled-assets-count']", "#money-manager-pension-pooled-assets-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='money-manager-pension-pooled-assets-value']", "#money-manager-pension-pooled-assets-value-calculated", 2);
		initCalculatedTotal($, "input[@class*='money-manager-pension-seg-assets-mandate-count']", "#money-manager-pension-seg-assets-mandate-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='money-manager-pension-seg-assets-mandate-value']", "#money-manager-pension-seg-assets-mandate-value-calculated", 2);
		initCalculatedTotal($, "input[@class*='money-manager-balanced-asset-mix-value']", "#money-manager-balanced-asset-mix-value-calculated", 2);

		// MONEY MANAGERS - MANDATES
		initCalculatedTotal($, "input[@class*='mandate-summary-active-assets-count']", "#mandate-summary-active-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-summary-active-mandates-count']", "#mandate-summary-active-mandates-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='mandate-summary-passive-assets-count']", "#mandate-summary-passive-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-summary-passive-mandates-count']", "#mandate-summary-passive-mandates-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='mandate-clients-lt500-assets-count']", "#mandate-clients-lt500-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-clients-lt500-mandates-count']", "#mandate-clients-lt500-mandates-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='mandate-clients-gt500-assets-count']", "#mandate-clients-gt500-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-clients-gt500-mandates-count']", "#mandate-clients-gt500-mandates-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='mandate-categories-assets-count']", "#mandate-categories-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-categories-mandates-count']", "#mandate-categories-mandates-count-calculated", 0);
		initCalculatedTotal($, "input[@class*='mandate-details-global-equity-assets-count']", "#mandate-details-global-equity-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-details-eafe-developed-market-assets-count']", "#mandate-details-eafe-developed-market-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-details-eafe-emerging-markets-assets-count']", "#mandate-details-eafe-emerging-markets-assets-count-calculated", 2);
		initCalculatedTotal($, "input[@class*='mandate-details-emerging-markets-assets-count']", "#mandate-details-emerging-markets-assets-count-calculated", 2);

		// PENSION FUNDS
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-in-house']", "#pension-fund-assets-equities-in-house-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-balanced']", "#pension-fund-assets-equities-balanced-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-specialist']", "#pension-fund-assets-equities-specialist-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-ihe']", "#pension-fund-assets-equities-ihe-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-core']", "#pension-fund-assets-equities-core-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-value']", "#pension-fund-assets-equities-value-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-growth']", "#pension-fund-assets-equities-growth-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-pooled-funds']", "#pension-fund-assets-equities-pooled-funds-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-equities-total']", "#pension-fund-assets-equities-total-total", 2);

		initCalculatedTotal($, "input[@class*='pension-fund-assets-fixed-income-in-house']", "#pension-fund-assets-fixed-income-in-house-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-fixed-income-balanced']", "#pension-fund-assets-fixed-income-balanced-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-fixed-income-specialist']", "#pension-fund-assets-fixed-income-specialist-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-fixed-income-ihe']", "#pension-fund-assets-fixed-income-ihe-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-fixed-income-pooled-funds']", "#pension-fund-assets-fixed-income-pooled-funds-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-fixed-income-total']", "#pension-fund-assets-fixed-income-total-total", 2);

		initCalculatedTotal($, "input[@class*='pension-fund-assets-cash-in-house']", "#pension-fund-assets-cash-in-house-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-cash-balanced']", "#pension-fund-assets-cash-balanced-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-cash-specialist']", "#pension-fund-assets-cash-specialist-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-cash-ihe']", "#pension-fund-assets-cash-ihe-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-cash-pooled-funds']", "#pension-fund-assets-cash-pooled-funds-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-cash-total']", "#pension-fund-assets-cash-total-total", 2);

		initCalculatedTotal($, "input[@class*='pension-fund-assets-alternative-in-house']", "#pension-fund-assets-alternative-in-house-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-alternative-balanced']", "#pension-fund-assets-alternative-balanced-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-alternative-specialist']", "#pension-fund-assets-alternative-specialist-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-alternative-ihe']", "#pension-fund-assets-alternative-ihe-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-alternative-pooled-funds']", "#pension-fund-assets-alternative-pooled-funds-total", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-assets-alternative-total']", "#pension-fund-assets-alternative-total-total", 2);

		initCalculatedTotal($, "input[@class*='pension-fund-plan-assets-amount-subtotal']", "#pension-fund-plan-assets-amount-grandtotal", 2);
		initCalculatedTotal($, "input[@class*='pension-fund-plan-assets-percentage-subtotal']", "#pension-fund-plan-assets-percentage-grandtotal", 2);
		
		
		// CONSULTANT MANDATES
		initCalculatedTotal($, "input[@class*='consultant-mandate']", "div[@id$='total-mandates-value']", 2);
		
		// CUSTODIAN ASSETS
		initCalculatedTotal($, "input[@class*='custodian-canadian-asset']", "div[@id='custodian-canadian-assets-total']", 2);
		initCalculatedTotal($, "input[@class*='custodian-us-asset']", "div[@id='custodian-us-assets-total']", 2);
		initCalculatedTotal($, "input[@class*='custodian-nna-asset']", "div[@id='custodian-nna-assets-total']", 2);
		initCalculatedTotal($, "input[@class*='custodian-international-asset']", "div[@id='custodian-international-assets-total']", 2);
		
		// CUSTODIAN CANADIAN CLIENTS
		initCalculatedTotal($, "input[@class*='custodian-canadian-clients-clients']", "div[@id='custodian-canadian-clients-clients-total']", 2);
		initCalculatedTotal($, "input[@class*='custodian-canadian-clients-assets']", "div[@id='custodian-canadian-clients-assets-total']", 2);
		

		applyGrandTotalCalculatedFields($);
	}
}

function initCalculatedTotal($, itemPattern, totalElementPattern, precision) {
	$(itemPattern).bind("keyup", function() {
		calculateTotal($, itemPattern, totalElementPattern, precision);
	});
	calculateTotal($, itemPattern, totalElementPattern, precision);
}



function initCalculatedGrandTotal() {
	var args = initCalculatedGrandTotal.arguments;
	var itemPattern = args[1];
	var jQuery = args[0];
	var precision = args[2];
	var index = 0;
	
	if (args.length > 3) {
		for (i=3; i<args.length; i++) {
			index = i;
			jQuery(itemPattern).bind("keyup", function() {
				calculateTotal(jQuery, itemPattern, args[index], precision);
			});
			calculateTotal(jQuery, itemPattern, args[index], precision);
		}
	}

}


function calculateTotal($, itemPattern, totalElementPattern, precision) {
	var sum = null;
	var rawSum = 0;
	var value;
		
		$(itemPattern).each(function(){
		if ($(this).is("input")) {
			value = this.value;
		} else {
			value = $(this).text().replace(",", "").replace("%", "").replace("$", "");
		}

		if (!isNaN(value)) {
			rawSum += Math.round(value * 10000) / 10000;
		}
	});
	
	pow = Math.pow(10, precision);
	sum = Math.round(rawSum * pow) / pow;
	$(totalElementPattern).text(sum.toFixed(precision));
}

function beforeAjaxRequest() {
	jQuery.blockUI({ css: {
        border: 'none',
        padding: '5px',
        backgroundColor: '#FFF',
        opacity: '.5'
    } });
}

function afterAjaxRequest() {
	applyStyles(jQuery);
	applyEditionConstraints(jQuery);
	jQuery.unblockUI();
}


function goToTopOfPage() {
	scroll(0,0);
}

function processing() {
	beforeAjaxRequest();
	window.setInterval(afterAjaxRequest,3000);
}
