/*
	Author		:	Gautam Mankatti
	Dated		:	11-Dec-09
	Title		:	Egnyte Pricing Objects
	Description	:	Contains common pricing-related objects prototyped in Javascript for re-use.
*/


//	TODO: to remove the use of global variables
var CURR_SELECTED_PLAN = null;
var FROM_PRICING_PAGE = false;

var referrer = window.location.href;
if(referrer.indexOf('business_plans_and_pricing.html') != -1){
	FROM_PRICING_PAGE = true;
}

//	Selected plan object. Holds all the values / computed values for the selected plan
function SelectedPlan(noOfUsers){

	/* Initialize Instance Members with default values */
	this.versionId = 1;
	this.id = 1;
	this.name = "pro";
	this.baseUsersForPlan = 1;
	this.baseStorageAmt = 0;
	this.powerUsersCount = 1;
	this.stdUsersCount = 0;
	this.extraPowerUsersCount = 0;
	this.totalPowerUsersCount = 0;
	this.userCost = 0;
	this.dispUserCost = 0;
	this.isElcEnabled = false;
	this.localCloudCost = 0;
	this.localCloudAnnCost = 0;
	this.effLocalCloudCost = this.localCloudCost;
	this.brandingCost = 0;
	this.annPricePerMonth = 0;
	this.storageBasisForStdUser = "peruser";
	this.storageBasisForStorage = "flat";
	this.storageAmt = 0;
	this.storageUnit = "GB";
	this.computersPerUser = 0;
	this.extraPowerUserCost = 0;
	this.extraPowerUserAnnCost = 0;
	this.effExtraPowerUserCost = this.extraPowerUserCost;
	this.paymentMode = "monthly";
	this.totalMonthlyCost = 0;
	this.totalAnnualCost = 0;
	this.effectiveCost = this.totalMonthlyCost;
	this.effectiveCostPM = 0;
	this.extraStorageAmt = 0;
	this.extraStorageCost = 0;
	this.baseStorageUnit = "GB";
	this.extraStorageUnit = "GB";
	this.promotionalDiscount = 0;

	this.powerUsersCount = noOfUsers;
	var priceBands = PRICING_DETAILS.plans;
	if (priceBands.length == 0)	{
		//	no price bands found for the corresponding version id
		return;
	}

	setCurrentPlan(this);

	if(FROM_PRICING_PAGE)
		this.paymentMode = getCheckedValue(Ext.DomQuery.select("*[name='radPaymentTypeGrp']")).trim();
	else
		this.paymentMode = Ext.get('hidPaymentType').dom.value;

	//	TODO: check for internal grid as well
	if(document.getElementById("localCloud") && document.getElementById("localCloud").checked)
		this.isElcEnabled = true;

	if(document.getElementById("elcEnabled")){
		var elcEna = document.getElementById("elcEnabled").innerHTML;
			if(elcEna.trim().toLowerCase() == "enabled"){
				this.isElcEnabled = true;
			}
	}
	else if(Ext.get('hidElcEnabled') != null){
		var elcStatus =  Ext.get('hidElcEnabled').dom.value.trim();
		if(elcStatus.toLowerCase() == "true"){
			this.isElcEnabled = true;
		}		
	}

	//	update all related fields based on the plan id
	this.baseUsersForPlan = parseInt(priceBands[this.id - 1].minUserLimit.trim());
	this.baseStorageAmt = parseFloat(priceBands[this.id - 1].storageAmt.trim());
	this.userCost = parseFloat(priceBands[this.id - 1].userCost.trim());
	this.annPricePerMonth = parseFloat(priceBands[this.id - 1].annPricePM.trim());
	this.powerUsersCount = parseInt(priceBands[this.id - 1].minUserLimit.trim());
	this.stdUsersCount = parseInt(priceBands[this.id - 1].freeStdUsers.trim());
	//this.storageAmt = parseFloat(priceBands[this.id - 1].storageAmt.trim());
	this.computersPerUser = parseInt(priceBands[this.id - 1].compPerUser.trim()) * this.powerUsersCount;
	this.localCloudCost = parseFloat(priceBands[this.id - 1].elcCost.trim());
	this.localCloudAnnCost = parseFloat(priceBands[this.id - 1].elcAnnCost.trim());
	if(Ext.get('txtExtraPUCount'))
		this.extraPowerUsersCount = parseInt(Ext.get('txtExtraPUCount').dom.value.trim());
	this.totalPowerUsersCount = this.powerUsersCount + this.extraPowerUsersCount;
	this.baseStorageUnit = priceBands[this.id - 1].storageUnit.trim();
	if(FROM_PRICING_PAGE){
		this.storageAmt = this.baseStorageAmt;
		this.storageUnit = priceBands[this.id - 1].storageUnit.trim();
	}
	else{
		this.storageAmt = parseFloat(Ext.get('storage').dom.value.trim());
	}
	var baseStorageAmt = this.baseStorageAmt;
	if(baseStorageAmt != '99999' && this.baseStorageUnit == 'TB')
		baseStorageAmt *= 1000;

	this.extraStorageUnit = 'GB';
	if(this.storageAmt > baseStorageAmt)
		this.extraStorageAmt = this.storageAmt - baseStorageAmt;
	if(this.extraStorageAmt >= 1000){
		this.extraStorageAmt /= 1000;	//	convert to TBs
		this.extraStorageUnit = 'TB';
	}
	this.extraStorageAmt = parseFloat(this.extraStorageAmt).toFixed(0);

	if(this.storageAmt != 99999 && this.storageAmt >= 1000){
		this.storageAmt /= 1000;
		this.storageUnit = 'TB';
	}

	//	to set the appropriate extra power user costs based on the split bands in the config.
	setExtraPowerUserCost(this);

	//	set appropriate local cloud cost based on the payment mode
	setLocalCloudCost(this);

	//	function to calculate the monthly total based on the values for the above fields.
	this.calculateMonthlyTotal = function(){
		var noOfUsers = parseInt(document.getElementById("subscribers").value.trim());
		this.extraPowerUsersCount = noOfUsers - parseInt(this.baseUsersForPlan);
		var totalMonthlyCost = this.userCost + (this.extraPowerUsersCount * this.extraPowerUserCost);
		if(this.isElcEnabled){
			totalMonthlyCost += this.localCloudCost;
		}
		this.totalMonthlyCost = parseFloat(totalMonthlyCost) + parseFloat(this.extraStorageCost);
		this.totalMonthlyCost = this.totalMonthlyCost * (1 - (0.01 * this.promotionalDiscount));  // discounted price
		return this.totalMonthlyCost;
	}

	//	function to calculate the annual total based on the values for the above fields.
	this.calculateAnnualTotal = function(){
		var noOfUsers = parseInt(document.getElementById("subscribers").value.trim());
		this.extraPowerUsersCount = noOfUsers - parseInt(this.baseUsersForPlan);
		var localCloudCost = 0;
		if(this.isElcEnabled){
			localCloudCost = this.localCloudAnnCost;
		}
		var annualPUCost = (this.annPricePerMonth + localCloudCost) * 12;
		var extraAnnPUCost = this.extraPowerUsersCount * this.extraPowerUserAnnCost * 12;
		var totalAnnualCost = annualPUCost + extraAnnPUCost + (parseFloat(this.extraStorageCost) * 12);
		totalAnnualCost = totalAnnualCost * (1 - (0.01 * this.promotionalDiscount));	// discounted price
		this.totalAnnualCost = totalAnnualCost;
		return totalAnnualCost;
	}

	//	Annual cost per month
	this.calculateAnnualTotalPerMonth = function(){
		var noOfUsers = parseInt(document.getElementById("subscribers").value.trim());
		this.extraPowerUsersCount = noOfUsers - parseInt(this.powerUsersCount);
		var localCloudCost = 0;
		if(this.isElcEnabled){
			localCloudCost = this.localCloudAnnCost;
		}
		var annualPUCost = (this.annPricePerMonth + localCloudCost);
		var extraAnnPUCost = this.extraPowerUsersCount * this.extraPowerUserAnnCost;
		var totalAnnualCost = annualPUCost + extraAnnPUCost + parseFloat(this.extraStorageCost);
		totalAnnualCost = totalAnnualCost * (1 - (0.01 * this.promotionalDiscount));	// discounted price
		this.totalAnnualCost = totalAnnualCost;
		return totalAnnualCost;
	}

	//	function to calculate the annual total based on the values for the above fields.
	this.getEffectiveCost = function(){
		var effective_cost = this.calculateMonthlyTotal();
		if(this.paymentMode == 'annual'){
			effective_cost = this.calculateAnnualTotal();
		}
		this.effectiveCost = effective_cost;
		return effective_cost;
	}

	this.getEffectiveCostPerMonth = function(){
		var effective_cost = this.calculateMonthlyTotal();
		if(this.paymentMode == 'annual'){
			effective_cost = this.calculateAnnualTotalPerMonth();
		}
		this.effectiveCostPM = effective_cost;
		return effective_cost;
	}

	// TODO: optimize the code later by removing these calls
	this.calculateMonthlyTotal();
	this.calculateAnnualTotal();
	this.getEffectiveCost();

	/* Initialize the Class Prototype */
	//if (this.__protoInitialized) { return; };
	var proto = this.constructor.prototype;
	//proto.__protoInitialized = true;

	proto.id = this.id;
	proto.name = this.name;
	proto.paymentMode = this.paymentMode;
	proto.totalPowerUsersCount = this.totalPowerUsersCount;
	proto.stdUsersCount = this.stdUsersCount;
	proto.storageAmt = this.storageAmt;
	proto.localCloudCost = this.localCloudCost;
	proto.totalMonthlyCost = this.totalMonthlyCost;
	proto.totalAnnualCost = this.totalAnnualCost;
	proto.effectiveCost = this.effectiveCost;
	proto.isElcEnabled = this.isElcEnabled;
	proto.extraPowerUsersCount = this.extraPowerUsersCount;
	proto.extraPowerUserCost = this.extraPowerUserCost;
	proto.baseUsersForPlan = this.baseUsersForPlan;
	proto.extraStorageCost = this.extraStorageCost;
	proto.baseStorageAmt = this.baseStorageAmt;
	proto.storageUnit = this.storageUnit;
	proto.promotionalDiscount = this.promotionalDiscount;
}

//	On load function for the pricing page
function setHeader()
{
	var noOfUsers = 5;
	
	//	The WSGI call
	egnyteUtils.loadScript("/wsgi/getPriceBand", "typeof(xmlParsePriceResponse) != 'undefined'", getDetailsOfPricing);
	var headerText = "", subHeaderText = "", imgSource = "", buttonText="";
	var qStringVal = getQueryStringValues();
	var scheme = "trial";
	if(qStringVal["scheme"] != null)
		scheme = qStringVal["scheme"];
	document.getElementById("schemeType").value = scheme;	
}

//	WSGI callback function
function getDetailsOfPricing(){
	if(xmlParsePriceResponse != null && xmlParsePriceResponse.priceDetails != null){
		PRICING_DETAILS = xmlParsePriceResponse.priceDetails;
		populateGrid(PRICING_DETAILS);
	}
}

//	Populates the grid with values from the config file
function populateGrid(PRICING_DETAILS){
	var versionId = PRICING_DETAILS.version_id;
	Ext.get('hidPlanVersionId').dom.value = versionId;	
	setPricingValues();
}

function selectCol(noOfUsers){	
	Ext.get('standardAccounts').dom.value = noOfUsers;
	setSelectedPlanPanel(noOfUsers);
}

//	Delegate function to update the grid UI
function setPricingValues(){

	updateGridUI();
	
	//	if navigated from the home page - to auto-load the appropriate selected plan panel
	var qStringVal = getQueryStringValues();
	var tab = qStringVal["tab"];
	var selectedTabName = "group";
	if(tab != null){
		selectedTabName = tab;		
	}
	toggleCol($(".plan_box .line1 input[value="+ selectedTabName +"]"), 2)
	
}

//	Updates all the UI elements on the grid
function updateGridUI() {

	var proPriceBand = PRICING_DETAILS.plans[0];
	var groupPriceBand = PRICING_DETAILS.plans[1];
	var companyPriceBand = PRICING_DETAILS.plans[2];

	//	annual power user cost
	Ext.get('lblProAnnPUCost').dom.innerHTML = '$' + proPriceBand.annPricePM + '/mo';
	Ext.get('lblGrpAnnPUCost').dom.innerHTML = '$' + groupPriceBand.annPricePM + '/mo';
	Ext.get('lblCmpAnnPUCost').dom.innerHTML = '$' + companyPriceBand.annPricePM + '/mo';

	//	monthly power user cost
	Ext.get('lblProMntPUCost').dom.innerHTML = '$' + proPriceBand.userCost + '/mo';
	Ext.get('lblGrpMntPUCost').dom.innerHTML = '$' + groupPriceBand.userCost + '/mo';
	Ext.get('lblCmpMntPUCost').dom.innerHTML = '$' + companyPriceBand.userCost + '/mo';

	//	power users count
	Ext.get('lblProPUCount').dom.innerHTML = proPriceBand.minUserLimit;
	Ext.get('lblGrpPUCount').dom.innerHTML = groupPriceBand.minUserLimit;
	Ext.get('lblCmpPUCount').dom.innerHTML = companyPriceBand.minUserLimit;

	//	standard users count
	Ext.get('lblProSUCount').dom.innerHTML = proPriceBand.freeStdUsers;
	Ext.get('lblGrpSUCount').dom.innerHTML = groupPriceBand.freeStdUsers;
	Ext.get('lblCmpSUCount').dom.innerHTML = companyPriceBand.freeStdUsers;

	//	storage size
	Ext.get('lblProStorage').dom.innerHTML = proPriceBand.storageAmt;
	Ext.get('lblProStorageUnit').dom.innerHTML = proPriceBand.storageUnit;
	Ext.get('lblGrpStorage').dom.innerHTML = groupPriceBand.storageAmt;
	Ext.get('lblGrpStorageUnit').dom.innerHTML = groupPriceBand.storageUnit;
	Ext.get('lblCmpStorage').dom.innerHTML = companyPriceBand.storageAmt;
	Ext.get('lblCmpStorageUnit').dom.innerHTML = companyPriceBand.storageUnit;
	
	//	Local cloud cost
	Ext.get('professionalCloudCost').dom.innerHTML = '$' + proPriceBand.elcCost;
	Ext.get('groupCloudCost').dom.innerHTML = '$' + groupPriceBand.elcCost;
	Ext.get('companyCloudCost').dom.innerHTML = '$' + companyPriceBand.elcCost;

	//	Computers per user
	Ext.get('lblProCompPerUser').dom.innerHTML = parseInt(proPriceBand.compPerUser) * parseInt(proPriceBand.minUserLimit);
	Ext.get('lblGrpCompPerUser').dom.innerHTML = parseInt(groupPriceBand.compPerUser) * parseInt(groupPriceBand.minUserLimit);
	Ext.get('lblCmpCompPerUser').dom.innerHTML = parseInt(companyPriceBand.compPerUser) * parseInt(companyPriceBand.minUserLimit);

	//	Show buttons and cells
	Ext.get('imgBtnFreePro').show();
	Ext.get('imgBtnFreeGrp').show();
	Ext.get('imgBtnFreeCmp').show();
	Ext.get('imgBtnBuyPro').show();
	Ext.get('imgBtnBuyGrp').show();
	Ext.get('imgBtnBuyCmp').show();
	
	Ext.select('div.select1 div.sub').show();
}

//	Update the configurator (selected plan panel) element with values from the config file
function setSelectedPlanPanel(noOfUsers){
	if(noOfUsers == null || typeof noOfUsers == 'undefined')
		noOfUsers = document.getElementById("standardAccounts").value.trim();
	
	var selectedPlan = new SelectedPlan(noOfUsers);
	CURR_SELECTED_PLAN = selectedPlan;

	//	Calculate costs
	calculatePlanCosts(selectedPlan.paymentMode);

	//	display the configurator panel
	showConfigColumn(selectedPlan);
}

//	Calculate all plan costs
function calculatePlanCosts(paymentMode){	
	var selectedPlan = CURR_SELECTED_PLAN;
	selectedPlan.paymentMode = paymentMode;
	Ext.get('paymentMode').dom.value = paymentMode;
	document.getElementById("subscribers").value = selectedPlan.totalPowerUsersCount;
	if(document.getElementById("userCount") != null){
		document.getElementById("userCount").value = selectedPlan.totalPowerUsersCount;
	}
	
	var totalCost = parseFloat(selectedPlan.calculateMonthlyTotal()).toFixed(2);
	var totalAnnCost = parseFloat(selectedPlan.calculateAnnualTotal()).toFixed(2);
	var effectiveCost = parseFloat(selectedPlan.getEffectiveCost()).toFixed(2);
	
	var totalMntCostId = "", totalAnnCostId = ""
	if(selectedPlan.id == 1){
		totalMntCostId = 'spnMntTotalPro';
		totalAnnCostId = 'spnAnnTotalPro';
	}
	else if(selectedPlan.id == 2){
		totalMntCostId = 'spnMntTotalGrp';
		totalAnnCostId = 'spnAnnTotalGrp';
	}
	else{
		totalMntCostId = 'spnMntTotalCmp';
		totalAnnCostId = 'spnAnnTotalCmp';
	}
	Ext.get(totalMntCostId).update(totalCost);
	Ext.get(totalAnnCostId).update(totalAnnCost);

	//	hidden fields with actual values for DB
	Ext.get('standardUsers').dom.value = selectedPlan.stdUsersCount;
	var effStorageAmt = selectedPlan.storageAmt;
	if(selectedPlan.storageUnit == 'TB')
		effStorageAmt = parseFloat(selectedPlan.storageAmt) * 1000;
	Ext.get('storage').dom.value = effStorageAmt;
	Ext.get('hidLocalCloudCost').dom.value = selectedPlan.effLocalCloudCost;

	Ext.get('hidTotalCost').dom.value = effectiveCost;
	Ext.get('monthlyPricing').dom.value = effectiveCost;
	Ext.get('yearlyPricing').dom.value = effectiveCost;
}

function setExtraPowerUserCost(selectedPlan){
	var planUserCount = selectedPlan.totalPowerUsersCount;
	var extraPowerUserCost = selectedPlan.extraPowerUserCost;

	var noOfUsers = parseInt(document.getElementById("subscribers").value.trim());
	selectedPlan.extraPowerUsersCount = noOfUsers - parseInt(selectedPlan.powerUsersCount);

	if(PRICING_DETAILS.plans[selectedPlan.id-1].extraUsersPriceBands != null){
		for(i=0; i<PRICING_DETAILS.plans[selectedPlan.id-1].extraUsersPriceBands.powerUserCosts.bands.length; i++){
			var currBand = PRICING_DETAILS.plans[selectedPlan.id-1].extraUsersPriceBands.powerUserCosts.bands[i];
			if(planUserCount >=currBand.min && planUserCount <= currBand.max){
				selectedPlan.effExtraPowerUserCost = selectedPlan.extraPowerUserCost = currBand.monthlyRate;
				selectedPlan.extraPowerUserAnnCost = currBand.annualRate;

				if(selectedPlan.paymentMode == "annual"){
					selectedPlan.effExtraPowerUserCost = selectedPlan.extraPowerUserAnnCost
				}
				break;
			}
		}
	}
}

function setLocalCloudCost(selectedPlan){
	var cloudCost = 0;
	var elcRate = parseFloat(PRICING_DETAILS.plans[selectedPlan.id-1].elcCost).toFixed(2);
	if(selectedPlan.paymentMode == "annual")
		elcRate = parseFloat(PRICING_DETAILS.plans[selectedPlan.id-1].elcAnnCost).toFixed(2);
	if(selectedPlan.isElcEnabled){
		cloudCost = elcRate;
	}
	selectedPlan.effLocalCloudCost = cloudCost;
	if(Ext.get('lblElcRate') != null){
		Ext.get('lblElcRate').update(elcRate);
	}
}

//	Displays the selected plan panel (configurator column)
function showConfigColumn(selectedPlan) {
	document.getElementById("hidPlanNum").value = selectedPlan.id;
	setConfigColumnPos(selectedPlan.id);
}

// Sets the configurator panel's position on the screen
function setConfigColumnPos() {
	var selectedPlanId = document.getElementById("hidPlanNum").value;	
}

function setCurrentPlan(selectedPlan){
	var priceBands = PRICING_DETAILS.plans;
	if(FROM_PRICING_PAGE){
		if(selectedPlan.powerUsersCount >= priceBands[0].minUserLimit.trim() && selectedPlan.powerUsersCount <= priceBands[0].maxUserLimit.trim()){
			selectedPlan.id = 1;
			selectedPlan.name = "pro";
		}
		else if(selectedPlan.powerUsersCount >= priceBands[1].minUserLimit.trim() && selectedPlan.powerUsersCount <= priceBands[1].maxUserLimit.trim()){
			selectedPlan.id = 2;
			selectedPlan.name = "group";
		}
		else if(selectedPlan.powerUsersCount >= priceBands[2].minUserLimit.trim() && selectedPlan.powerUsersCount <= priceBands[2].maxUserLimit.trim()){
			selectedPlan.id = 3;
			selectedPlan.name = "office";
		}
		Ext.get('plan').dom.value = selectedPlan.name;
	}
	else{
		var currentPlanType = Ext.get('hidPlanType').dom.value.trim();
		selectedPlan.name = currentPlanType.toLowerCase();
		for(i=0; i<priceBands.length; i++){
			if(selectedPlan.name == priceBands[i].p_name.trim().toLowerCase()){
				selectedPlan.id = i+1;
				break;
			}
		}
	}
}

function setStorage(storageDetails){
	var storageAmt = 0, storageCost = 0, storageUnit = "GB";
	var arrStorageDetails = storageDetails.split('|');
	storageAmt = arrStorageDetails[0];
	storageUnit = arrStorageDetails[1];
	storageCost = arrStorageDetails[2];

	Ext.get('lblExtraStorageAmt').update(storageAmt);
	Ext.get('lblExtraStorageUnit').update(storageUnit);
	Ext.get('lblExtraStorageCost').update(parseFloat(storageCost).toFixed(2));

	var baseStorageAmt = parseFloat(CURR_SELECTED_PLAN.baseStorageAmt);
	var newStorage = parseFloat(storageAmt);
	CURR_SELECTED_PLAN.storageUnit = CURR_SELECTED_PLAN.baseStorageUnit;
	if(CURR_SELECTED_PLAN.baseStorageUnit == 'TB' && storageUnit == 'GB'){
		newStorage /= 1000;
	}
	else if(storageUnit == 'TB' && CURR_SELECTED_PLAN.baseStorageUnit == 'GB'){
		baseStorageAmt /= 1000;
		CURR_SELECTED_PLAN.storageUnit = 'TB';
	}
	var totalStorage = baseStorageAmt + newStorage;
	if(totalStorage >= 1000 && CURR_SELECTED_PLAN.baseStorageUnit == 'GB'){
		totalStorage /= 1000;
		CURR_SELECTED_PLAN.storageUnit = 'TB';
	}

	CURR_SELECTED_PLAN.storageAmt = totalStorage;
	CURR_SELECTED_PLAN.extraStorageCost = storageCost;

	setPlanDetChangedFlag('true');
	updateTotalCosts();
}

function setExtraPowerUsers(newExtraUsers){
	if(newExtraUsers.trim() == "")
		newExtraUsers = 0;
	else if(newExtraUsers < 0)
		newExtraUsers = 0;
	var totalPUCount = parseInt(CURR_SELECTED_PLAN.powerUsersCount) + parseInt(newExtraUsers);
	var activeUserCount = parseInt(document.getElementById("currentUserCount").value);
	var userDiff = activeUserCount - totalPUCount;

	if(totalPUCount > 50){
		showMessage("Please contact us for Enterprise accounts (>50 Power Users) at 1-877-734-6983.");
		newExtraUsers = 50-parseInt(CURR_SELECTED_PLAN.powerUsersCount);
	}
	if(newExtraUsers != "")
		newExtraUsers = parseInt(newExtraUsers);
	Ext.get('txtExtraPowerUsers').dom.value = newExtraUsers;	

	CURR_SELECTED_PLAN.extraPowerUsersCount = newExtraUsers;
	document.getElementById("subscribers").value = parseInt(CURR_SELECTED_PLAN.powerUsersCount) + parseInt(newExtraUsers);
	document.getElementById("userCount").value = parseInt(CURR_SELECTED_PLAN.powerUsersCount) + parseInt(newExtraUsers);
	var currPriceBand = getCurrentPriceBand();
	var extraFreeStdUsers = parseInt(currPriceBand.addnlSUPerPU);
	if(currPriceBand.addnlStdUsersBasis == "peruser")
		extraFreeStdUsers = newExtraUsers * extraFreeStdUsers;
	if(parseInt(currPriceBand.freeStdUsers) == 99999){		
		extraFreeStdUsers = 0;
	}
	CURR_SELECTED_PLAN.stdUsersCount = parseInt(currPriceBand.freeStdUsers) + extraFreeStdUsers;
	CURR_SELECTED_PLAN.computersPerUser = totalPUCount * parseInt(currPriceBand.compPerUser);

	var extraPowerUserRate = 0, extraPowerUserCost = 0;
	for(i=0; i<currPriceBand.extraUsersPriceBands.powerUserCosts.bands.length; i++){
		var currBand = currPriceBand.extraUsersPriceBands.powerUserCosts.bands[i];
		if(newExtraUsers >= parseInt(currBand.min) && newExtraUsers <= parseInt(currBand.max)){
			extraPowerUserRate = CURR_SELECTED_PLAN.extraPowerUserCost = currBand.monthlyRate;
			if(CURR_SELECTED_PLAN.paymentMode == 'annual')
				extraPowerUserRate = CURR_SELECTED_PLAN.extraPowerUserAnnCost = currBand.annualRate
			extraPowerUserCost = newExtraUsers * parseFloat(extraPowerUserRate);
		}
	}
	CURR_SELECTED_PLAN.effExtraPowerUserCost = extraPowerUserRate;

	Ext.get('standardUsers').dom.value = CURR_SELECTED_PLAN.stdUsersCount;
	Ext.get('lblExtraPUCount').update(newExtraUsers);
	Ext.get('txtExtraStdUsers').dom.value = extraFreeStdUsers;
	setPlanDetChangedFlag('true');
	updateTotalCosts();
}

function changePaymentMode(newPaymentMode){
	CURR_SELECTED_PLAN.paymentMode = newPaymentMode;
	//CURR_SELECTED_PLAN.getEffectiveCost();
	setLocalCloudCost(CURR_SELECTED_PLAN);
	setExtraPowerUserCost(CURR_SELECTED_PLAN);
	setPlanDetChangedFlag('true');
	updateTotalCosts();
}

function updateElcStatus(newElcStatus){
	var currPriceBand = getCurrentPriceBand();
	var elcCost = 0;
	CURR_SELECTED_PLAN.isElcEnabled = false;
	if(newElcStatus == "true"){
		CURR_SELECTED_PLAN.isElcEnabled = true;
		elcCost = currPriceBand.elcCost;
		if(CURR_SELECTED_PLAN.paymentMode == "annual")
			elcCost = parseFloat(currPriceBand.elcAnnCost).toFixed(2);
	}
	CURR_SELECTED_PLAN.effLocalCloudCost = elcCost;
	setPlanDetChangedFlag('true');
	updateTotalCosts();
}

function getPlanRate(){
	var currPriceBand = getCurrentPriceBand();
	var planRate = currPriceBand.userCost;
	if(CURR_SELECTED_PLAN.paymentMode == 'annual'){
		planRate = currPriceBand.annPricePM;
	}
	return planRate;
}

function updateTotalCosts(){
	var totalMonthlyCost = 0, totalAnnualCost = 0, totalAnnualCostPM = 0, totalEffectiveCost = 0, totalEffectiveCostPM = 0;

	//	update summary totals
	var currPriceBand = getCurrentPriceBand();
	CURR_SELECTED_PLAN.totalPowerUsersCount = parseInt(CURR_SELECTED_PLAN.powerUsersCount) + parseInt(CURR_SELECTED_PLAN.extraPowerUsersCount);
	CURR_SELECTED_PLAN.computersPerUser = CURR_SELECTED_PLAN.totalPowerUsersCount * parseInt(currPriceBand.compPerUser);
	Ext.get('lblUserCostSumm').update(getPlanRate());
	var extraPUCost = (parseFloat(CURR_SELECTED_PLAN.effExtraPowerUserCost) * parseInt(CURR_SELECTED_PLAN.extraPowerUsersCount)).toFixed(2);
	Ext.get('lblExtraPUCost').update(extraPUCost);
	var localCloudCost = 0, elcStatus = 'Disabled';
	if(CURR_SELECTED_PLAN.isElcEnabled){
		localCloudCost = CURR_SELECTED_PLAN.effLocalCloudCost;
		elcStatus = 'Enabled'
	}
	Ext.get('elcStatus').update(elcStatus);
	Ext.get('lblElcCost').update(parseFloat(localCloudCost).toFixed(2));
	Ext.get('hidLocalCloudCost').dom.value = CURR_SELECTED_PLAN.effLocalCloudCost;
	Ext.get('hidElcEnabled').dom.value = CURR_SELECTED_PLAN.isElcEnabled;
	Ext.get('hidPaymentType').dom.value = CURR_SELECTED_PLAN.paymentMode;	

	totalMonthlyCost = parseFloat(CURR_SELECTED_PLAN.calculateMonthlyTotal()).toFixed(2);
	totalAnnualCost = parseFloat(CURR_SELECTED_PLAN.calculateAnnualTotal()).toFixed(2);
	totalAnnualCostPM = parseFloat(CURR_SELECTED_PLAN.calculateAnnualTotalPerMonth()).toFixed(2);
	totalEffectiveCost = parseFloat(CURR_SELECTED_PLAN.getEffectiveCost()).toFixed(2);
	totalEffectiveCostPM = parseFloat(CURR_SELECTED_PLAN.getEffectiveCostPerMonth()).toFixed(2);

	var userCostSumm = parseFloat(Ext.get('lblUserCostSumm').dom.innerHTML.trim());
	var extraPUCost = parseFloat(Ext.get('lblExtraPUCost').dom.innerHTML.trim());
	var extraStorageCost = parseFloat(Ext.get('lblExtraStorageCost').dom.innerHTML.trim());
	var elcCost = parseFloat(Ext.get('lblElcCost').dom.innerHTML.trim());

	//	update grand totals
	var annDiscVal = 0;
	annDiscVal = (((totalMonthlyCost - totalAnnualCostPM) / totalMonthlyCost)*100).toFixed(0);

	Ext.get('lblTotalMonthyCost').update(totalMonthlyCost);
	Ext.get('lblTotalAnnualCost').update(totalAnnualCostPM);
	Ext.get('lblTotalEffectiveCost').update(totalEffectiveCost);
	Ext.get('lblPayModeSuffix').update('monthly');
	if(CURR_SELECTED_PLAN.paymentMode == 'annual'){
		Ext.get('lblPayModeSuffix').update('yearly');
	}
	Ext.get('annDiscVal').update(annDiscVal);
	Ext.get('hidTotalCost').dom.value = totalEffectiveCost;
	var storageAmt = CURR_SELECTED_PLAN.storageAmt;
	if(storageAmt != '99999' && CURR_SELECTED_PLAN.storageUnit.trim().toUpperCase() == 'TB'){
		storageAmt *= 1000;
	}
	Ext.get('storage').dom.value = storageAmt;

	//	update summary row
	var totStdUsers = CURR_SELECTED_PLAN.stdUsersCount;
	if(totStdUsers >= '99999') totStdUsers = 'Unlimited';
	
	var totStorage = CURR_SELECTED_PLAN.storageAmt + " " + CURR_SELECTED_PLAN.storageUnit
	if(CURR_SELECTED_PLAN.storageAmt >= '99999') totStorage = 'Unlimited Storage';
	
	var planSummaryText = CURR_SELECTED_PLAN.totalPowerUsersCount + " Power Users&nbsp;<font color='#ccc'>|</font>&nbsp;";
	planSummaryText += totStdUsers + " Standard Users&nbsp;<font color='#ccc'>|</font>&nbsp;";
	planSummaryText += totStorage + "&nbsp;<font color='#ccc'>|</font>&nbsp;";
	planSummaryText += CURR_SELECTED_PLAN.computersPerUser + " Computer backup licenses";
	if(CURR_SELECTED_PLAN.isElcEnabled){
		planSummaryText += "&nbsp;<font color='#ccc'>|</font>&nbsp;Local Cloud";
	}
	Ext.get('planSummary').update(planSummaryText);
}

