﻿
/*
	-----------------------------------------------------------------------------------------------
	JQuery Cost Calculator v 1.0
	(C) Copyright 2010 MC Creative & Product Ltd (MC+Co) (solutions@mc-co.co.uk)
	All rights reserved.
	Developed under licence to Utilize Plc.
	-----------------------------------------------------------------------------------------------
*/

// Define plugin enclosure
; (function($) {

	// Public Object
	$.fn.calc = function(opts) {

		// Manage multiple instances
		return this.each(function() {

			// Create a reference to the instance
			var instance = $(this);

			// Merge defaults and options
			var options = $.extend($.fn.calc.defaults, opts);

			// Process the config
			var config = $("#" + options.config);

			reset();

			instance.find(".usersBox").bind("click select", function() {
				//reset();
			});
			instance.find(".calcButton").bind("click", function() {
				doCalc();
			});
			instance.find(".usersBox").bind("change", function() {
				doCalc();
			});
			instance.find(".usersBox").keypress(function(e) {
				if (e.which == 13) {
					instance.find(".calcButton").click();
					e.preventDefault();
					return false;
				}
			});
			instance.find(".buyNowButton").click(function() {
				if (!$("input[@name='option_layout']:checked").val()) {
					alert("Please select a pricing option using the calculator below.");
					return false;
				}
			});

			function reset() {
				instance.find(".config").hide();
				instance.find("#OutOfBounds").hide();
				instance.find(".dynamic").remove();
				instance.find("#CalcOptions").hide();
				instance.find("#CalcWaiting").show();
			}

			function prepTo2Dec(val) {
				return (val).toFixed(2);
			}

			function doCalc() {

				reset();

				var calcPerformed = false;
				var ref = config.attr("ref");
				var name = config.attr("name");
				var users = parseInt(instance.find(".usersBox").val());
				if (isNaN(users)) { users = 0; }

				users = parseInt(users);

				var priceDiscount = options.priceDiscount;
				var priceDiscountOverride = config.attr("discount");

				if (! (typeof priceDiscountOverride === "undefined")) {
					priceDiscount = priceDiscountOverride;
				}

				//alert("Config length: " + config.length);

				config.find("div").each(function() {

					var band = $(this);
					var min = parseInt(band.attr("min"));
					var max = parseInt(band.attr("max"));
					var price = parseFloat(band.attr("price"));
					var rrp = parseFloat(band.attr("rrp"));
					var save = 0;
					var years = 1;	// Until shown otherwise.
					var isPerpetual = true;	// Until shown otherwise.

					if (! (typeof band.attr("years") === "undefined")) {
						years = parseInt(band.attr("years"));
						isPerpetual = false;
					}

					//alert("BandMin: " + min + " BandMax:" + max);

					if (users >= min) {

						if (users <= max) {

							calcPerformed = true;

							// Generate price options for selected band

							//alert("Found band: " + min + " - " + max + ".");

							instance.find(".dynamic").remove();

							var tbl = instance.find(".pricingTable");
							for (var i = 1; i < years + 1; i++) {

								var value = price;
								var rrpVal = rrp;

								if (i > 1) {
									rrpVal = rrp + ((rrp / 2) * (i - 1));
								}

								if (price == 0) {
									value = rrpVal - ((rrpVal / 100) * priceDiscount);
								} else {
									value = price + ((price / 2) * (i - 1));
								}

								value = (value * users);
								rrpVal = (rrpVal * users);

								value = prepTo2Dec(value);
								rrpVal = prepTo2Dec(rrpVal);

								var lblUsers = (users > 1) ? 'users' : 'user';
								var lblYears = (i > 1) ? 'years' : 'year';

								if (isPerpetual) {
									lblYears = "Perpetual";
								}

								var yearsData = ((isPerpetual) ? '' : i + ' ') + ((isPerpetual) ? 'Perpetual' : lblYears)
								var data = name + "##|##" + users + ' ' + lblUsers + "##|##" + yearsData + "##|##" + value;

								var tr = $('<tr class="dynamic"></tr>');
								var yy = $('<td class="year">' + ((isPerpetual) ? '' : i) + ' ' + lblYears + '</td>');
								var tdr = $('<td class="rrp">£' + rrpVal + '</td>');
								var tdp = $('<td class="pay">£' + value + '</td>');
								var tds = $('<td class="save">£' + (prepTo2Dec(rrpVal - value)) + '</td>');
								var tdb = $('<td class="buy"><img src="../../images/btnBuyNow.jpg" border="0" class="buyButton" alt="' + data + '" /></td>');

								tr.append(yy);
								tr.append(tdr);
								tr.append(tdp);
								tr.append(tds);
								tr.append(tdb);
								tbl.append(tr);

								instance.find("#CalcWaiting").hide();
								instance.find("#CalcOptions").show();

							} // for

							$(tbl).find(".buyButton").click(function() {
								$("#hdnPriceOption").val($(this).attr("alt"));
								$("#aspnetForm").submit();
							});

						} // if
					} // if

				}); // config.each()

				instance.find(".noUsers").html(0 + users + ' ');

				if (!calcPerformed) {
					reset();
					instance.find("#CalcWaiting").hide();

					if (users == 0) {
						instance.find("#OutOfBounds").html('Please enter a required number of licences.').show();
					} else if (users == 1) {
						instance.find("#OutOfBounds").html('If you require ' + users + ' licence, please contact us directly for custom pricing options.').show();
					} else {
						instance.find("#OutOfBounds").html('If you require ' + users + ' licences, please contact us directly for custom pricing options.').show();
					}
				}
			}

		}); // this.each
	};

	$.fn.calc.defaults = {
		priceDiscount: 0
	}

})(jQuery);
