var application = {
	longDistancePrice: 0
};

// $ is redefined in global.js to not be the jQuery object...  that's really confusing... here's a closure
(function($) {	
	addLoadEvent(function() {			
		$('.feature').change(calculateNumFeatures);
		$('#radio_LD_NorthAmerica').change(calculateNumFeatures);
		$('.long_distance').change(updateLongDistance);
		$('.extra_feature').change(updatePriceCalculator);

		calculateNumFeatures();
		
		if (document.getElementById("yes_keep")) {
			document.getElementById("yes_keep").onchange = togglePortInfo;
			document.getElementById("yes_keep").onclick = togglePortInfo;
			document.getElementById("get_new").onchange = togglePortInfo;
			document.getElementById("get_new").onclick = togglePortInfo;
			togglePortInfo();
		}
		
		if (document.getElementById("yes_ex_int")) {
			document.getElementById("yes_ex_int").onchange = setHighSpeedDisplay;
			document.getElementById("yes_ex_int").onclick = setHighSpeedDisplay;
			document.getElementById("no_ex_int").onchange = setHighSpeedDisplay;
			document.getElementById("no_ex_int").onclick = setHighSpeedDisplay;
			setHighSpeedDisplay();
		}
	
	});
	
	function togglePortInfo() {
		if (document.getElementById("yes_keep").checked) {
			document.getElementById("number_port_wrap").style.display = "block";
		} else {
			document.getElementById("number_port_wrap").style.display = "none";
		}
	}
	
	function updateLongDistance() {
		application.longDistancePrice = parseFloat($(this).attr('data-price'));
		updatePriceCalculator();
	}
	
	function calculateNumFeatures() {
		var ld = $('#radio_LD_NorthAmerica').attr('checked') || false;
		var numFeatures = $('.feature:checked').size();

		debug.log(numFeatures);
		debug.log(application.prov);
		debug.log(ld);
		debug.log(application.rhpBasic);
		
		RHP.get(numFeatures, application.prov, ld, application.rhpBasic, function(response) {
			$('.plan_name').text(response.product.NAME);
			$('.plan_price').text("$" + roundNumber(response.product.PRICE, 2, true));
			application.packagePriceRegular = response.price;
			
			// This details area would probably be nice as a template.  Oh well.
			if (ld) {
				$('#CallingFeaturesTips .ld_included').show();
				$('#value_LD_NorthAmerica').val('Yes'); // this is a legacy hack by alex whereby the radio box toggles the value of a hidden field.
				$("#ld_no").hide();
				$("#ld_yes").show();
			}
			else {
				$('#CallingFeaturesTips .ld_included').hide();
				$('#value_LD_NorthAmerica').val('No'); // this is a legacy hack by alex whereby the radio box toggles the value of a hidden field.
				$("#ld_no").show();
				$("#ld_yes").hide();
			}
			
			if (response.freeFeatures <= 0) {
				$('#CallingFeaturesTips .included_features').hide();
			} else {
				$('#CallingFeaturesTips .num_included').text(response.freeFeatures);
				$('#CallingFeaturesTips .included_features').show();
			}
			
			if (numFeatures < response.freeFeatures) {
				$('#upgrade_callout').show();
				$('#upgrade_callout .free_features').text(response.freeFeatures - numFeatures);
			} else {
				$('#upgrade_callout').hide();
			}
			
			setCost('rogers', roundNumber(response.price, 2, true));
			updatePriceCalculator();

			/* Show the offer callout if required.
			 */
			if (response.product.CAMPAIGN_DESC && jQuery.trim(response.product.CAMPAIGN_DESC).length > 0) {
				jQuery("#campaignInfo .inner").html(response.product.CAMPAIGN_DESC)

				if (response.product.REGULAR_PRICE != "") {
					jQuery("#campaignInfo .inner").append("<span class=\"regularPrice\">Regular Price: $" + roundNumber(response.product.REGULAR_PRICE, 2, true) + "/mo.</span>");
				}

				if (response.product.CAMPAIGN_DESC != "") {
					jQuery('#campaignInfo').slideDown('fast');
				} else {
					jQuery('#campaignInfo').slideUp('fast');
				}
			}
		});
	}
	
	function updatePriceCalculator() {
		var extras = 0;
		$('.extra_feature').each(function() {
			if (this.checked)
				extras += parseFloat($(this).attr('data-price'));
		});
		
		var total = application.packagePriceRegular + application.longDistancePrice + extras;
		document.getElementById("fee_regular").innerHTML = roundNumber(total, 2, true);
	}
	
	function setHighSpeedDisplay() {
		if (document.getElementById("yes_ex_int").checked) {
			document.getElementById("high_speed_details").style.display = "inline";
		} else {
			document.getElementById("high_speed_details").style.display = "none";
		}
	}
	
	/**	provider is something like "rogers", or "aliant_nf".
	 *	price is something like 28.62.
	 */
	function setCost(provider, price) {
		if (!document.getElementById(provider + "_dollars"))
			return;
	
		var splat = price.split(".");
		
		document.getElementById(provider + "_dollars").innerHTML = splat[0];
		
		if (splat[1]) {
			document.getElementById(provider + "_cents").innerHTML = splat[1];
		} else {
			document.getElementById(provider + "_cents").innerHTML = "00";
		}
	}
})(jQuery);

