var pricingObject = new function() {
	
	this.subscriptionServiceSelected = true;
	this.userLicenceMode			 = "A";
	this.multiSiteLicence			 = false;
	this.secureCertLicence			 = false;
	this.paperlessBilling		     = true;
	this.supportMode				 = "bronze";
	this.monthlyCharging			 = false;
	this.trainingSelected			 = false;
	this.termsAccepted				 = false;
	this.priceModel					 = new Object();
	this.monthlyPaymentSurchargeRate = 0;
	
	this.untickedImage = "/images/icons/checkbox_unticked.png";
	this.tickedImage = "/images/icons/checkbox_ticked.png";
	this.disabledImage = "/images/icons/checkbox_disabled.png";
	
	this.userLicenceClicked = function (evt) {
		var userLicenceMode = evt.id.replace(/userLic_/,"");
		var licenceMode = Array();
		licenceMode[0] = document.getElementById("userLic_A");
		licenceMode[1] = document.getElementById("userLic_B");
		licenceMode[2] = document.getElementById("userLic_C");
		licenceMode[3] = document.getElementById("userLic_D");
		
		pricingObject.userLicenceMode = userLicenceMode;
		switch (userLicenceMode) {
			case "A": licenceMode[0].src = pricingObject.tickedImage;
					  licenceMode[1].src = pricingObject.untickedImage;	
					  licenceMode[2].src = pricingObject.untickedImage;
					  licenceMode[3].src = pricingObject.untickedImage;
					  break;
			case "B": licenceMode[0].src = pricingObject.untickedImage;
					  licenceMode[1].src = pricingObject.tickedImage;	
					  licenceMode[2].src = pricingObject.untickedImage;
					  licenceMode[3].src = pricingObject.untickedImage;
					  break;
			case "C": licenceMode[0].src = pricingObject.untickedImage;
					  licenceMode[1].src = pricingObject.untickedImage;	
					  licenceMode[2].src = pricingObject.tickedImage;
					  licenceMode[3].src = pricingObject.untickedImage;
					  break;					  
			case "D": licenceMode[0].src = pricingObject.untickedImage;
					  licenceMode[1].src = pricingObject.untickedImage;	
					  licenceMode[2].src = pricingObject.untickedImage;
					  licenceMode[3].src = pricingObject.tickedImage;
					  break;					  
		}
		
		pricingObject.calcPrice();
	}; // end of userLicenceClicked
	
	this.multiSiteLicenceClick = function (evt) {
		pricingObject.multiSiteLicence = ! pricingObject.multiSiteLicence;
		var tickBox = document.getElementById('multiSite');

		if (pricingObject.multiSiteLicence) {
			tickBox.src = pricingObject.tickedImage;
		}
		else {
			tickBox.src = pricingObject.untickedImage;			
		}
		pricingObject.calcPrice();		
	}; // end of multiSiteLicenceClick
	
	this.secureCertTicked = function (evt) {
		pricingObject.secureCertLicence = ! pricingObject.secureCertLicence;
		var tickBox = document.getElementById('secureCert');

		if (pricingObject.secureCertLicence) {
			tickBox.src = pricingObject.tickedImage;
		}
		else {
			tickBox.src = pricingObject.untickedImage;			
		}
		
		pricingObject.calcPrice();
	}; // end of secureCertTicked
	
	this.supportClicked = function (evt) {
		var supportMode = evt.id.replace(/support_/,"");
		supportMode = supportMode.toLowerCase();
		var supportBoxes = Array();
		supportBoxes[0] = document.getElementById("support_Bronze");
		supportBoxes[1] = document.getElementById("support_Silver");
		supportBoxes[2] = document.getElementById("support_Gold");
		supportBoxes[3] = document.getElementById("support_Platinum");
		
		pricingObject.supportMode = supportMode;
		switch (supportMode) {
			case "bronze": supportBoxes[0].src = pricingObject.tickedImage;
					  	   supportBoxes[1].src = pricingObject.untickedImage;	
					  	   supportBoxes[2].src = pricingObject.untickedImage;
						   supportBoxes[3].src = pricingObject.untickedImage;
					  break;
			case "silver": supportBoxes[0].src = pricingObject.untickedImage;
					  	   supportBoxes[1].src = pricingObject.tickedImage;	
					  	   supportBoxes[2].src = pricingObject.untickedImage;
						   supportBoxes[3].src = pricingObject.untickedImage;
					  break;
			case "gold":   supportBoxes[0].src = pricingObject.untickedImage;
					  	   supportBoxes[1].src = pricingObject.untickedImage;	
					  	   supportBoxes[2].src = pricingObject.tickedImage;
						   supportBoxes[3].src = pricingObject.untickedImage;
					  break;					  
			case "platinum": supportBoxes[0].src = pricingObject.untickedImage;
					  	  	 supportBoxes[1].src = pricingObject.untickedImage;	
					  	   	 supportBoxes[2].src = pricingObject.untickedImage;
						   	 supportBoxes[3].src = pricingObject.tickedImage;
					  break;					  
		}		
		
		pricingObject.calcPrice();
	}; // end of supportClicked

	this.trainingClicked = function (evt) {
		pricingObject.trainingSelected = ! pricingObject.trainingSelected;
		var tickBox = document.getElementById('training');

		if (pricingObject.trainingSelected) {
			tickBox.src = pricingObject.tickedImage;
		}
		else {
			tickBox.src = pricingObject.untickedImage;			
		}
		
		pricingObject.calcPrice();
	}; // end of trainingClicked
	
	this.paperBillClicked = function(evt) {
		pricingObject.paperlessBilling = ! pricingObject.paperlessBilling;
		if (!pricingObject.monthlyCharging) {
			return;	
		}
		var tickBox = document.getElementById('paperBill');

		if (pricingObject.paperlessBilling) {
			tickBox.src = pricingObject.untickedImage;
		}
		else {
			tickBox.src = pricingObject.tickedImage;			
		}
		pricingObject.calcPrice();
	};
	
	this.monthlyChargingClicked = function(evt) {
		pricingObject.monthlyCharging = ! pricingObject.monthlyCharging;
		var tickBox = document.getElementById('monthlyCharge');
		var paperBillTickBox = document.getElementById('paperBill');		
		var monthlySurchargeRateElement = document.getElementById('monthlyPaymentSurchargeRate');
		pricingObject.monthlyPaymentSurchargeRate = monthlySurchargeRateElement.innerHTML;
		if (pricingObject.monthlyCharging) {
			tickBox.src = pricingObject.tickedImage;
			paperBillTickBox.className = "orderBox";
			if (pricingObject.paperlessBilling) {
				paperBillTickBox.src = pricingObject.untickedImage;
			}
			else {
				paperBillTickBox.src = pricingObject.tickedImage;				
			}
		}
		else {
			tickBox.src = pricingObject.untickedImage;			
			paperBillTickBox.className = "orderBox_disabled";
			paperBillTickBox.src = pricingObject.disabledImage;
		}

		pricingObject.calcPrice();
	};
	
	this.calcPrice = function() {
		var poa = false;
		var subscriptionPriceElement = document.getElementById('subscriptionPrice');
		var subscriptionPrice 		 = parseFloat(subscriptionPriceElement.innerHTML.replace(/£/,""));
		var userLicPricing 			 = Array();
		userLicPricing[0] = document.getElementById('userLicPrice_A');
		userLicPricing[1] = document.getElementById('userLicPrice_B');
		userLicPricing[2] = document.getElementById('userLicPrice_C');
		userLicPricing[3] = document.getElementById('userLicPrice_D');
		
		var userLicIndex = 0;
		switch (pricingObject.userLicenceMode) {
			case "A" : userLicIndex = 0; break;
			case "B" : userLicIndex = 1; break;
			case "C" : userLicIndex = 2; break;
			case "D" : userLicIndex = 3; break;
		}
		var userLicPrice = userLicPricing[userLicIndex].innerHTML.replace(/£/,"");
		if (userLicPrice.toLowerCase() == "free") {
			userLicPrice = 0;
		}
		else if (userLicPrice.toLowerCase() == "p.o.a.") {
			userLicPrice = 0;
			poa = true;
		}
		else {
			userLicePrice = parseFloat(userLicPrice);	
		}
		
		var multiSitePrice = 0;
		if (pricingObject.multiSiteLicence) {
			var multisitePricing = document.getElementById('multiSitePrice');			
			multiSitePrice = multisitePricing.innerHTML.replace(/£/,"");
			if (multiSitePrice.toLowerCase() == "free") {
				multiSitePrice = 0;
			}
			else if (multiSitePrice.toLowerCase() == "p.o.a.") {
				multiSitePrice = 0;
				poa = true;
			}
			else {
				multiSitePrice = parseFloat(multiSitePrice);	
			}
		}

		var secureCertPrice = 0;
		if (pricingObject.secureCertLicence) {
			var certPriceElement = document.getElementById('secureCertPrice');			
			secureCertPrice = certPriceElement.innerHTML.replace(/£/,"");
			if (secureCertPrice.toLowerCase() == "free") {
				secureCertPrice = 0;
			}
			else if (secureCertPrice.toLowerCase() == "p.o.a.") {
				secureCertPrice = 0;
				poa = true;
			}
			else {
				secureCertPrice = parseFloat(secureCertPrice);	
			}
		}

		var supportPricingElement = Array();
		supportPricingElement[0] = document.getElementById('supportPrice_A');
		supportPricingElement[1] = document.getElementById('supportPrice_B');
		supportPricingElement[2] = document.getElementById('supportPrice_C');
		supportPricingElement[3] = document.getElementById('supportPrice_D');
		
		var supportPriceIndex = 0;
		switch (pricingObject.supportMode) {
			case "bronze" :   supportPriceIndex = 0; break;
			case "silver" :   supportPriceIndex = 1; break;
			case "gold" : 	  supportPriceIndex = 2; break;
			case "platinum" : supportPriceIndex = 3; break;
		}
		var supportPrice = supportPricingElement[supportPriceIndex].innerHTML.replace(/£/,"");
		if (supportPrice.toLowerCase() == "free") {
			supportPrice = 0;
		}
		else if (supportPrice.toLowerCase() == "p.o.a.") {
			supportPrice = 0;
			poa = true;
		}
		else {
			supportPrice = parseFloat(supportPrice);	
		}


		var paperBillingPrice = 0;
		if (pricingObject.monthlyCharging && !pricingObject.paperlessBilling) {
			var paperBillPriceElement = document.getElementById('paperBillPrice');			
			paperBillingPrice = paperBillPriceElement.innerHTML.replace(/£/,"");
			if (paperBillingPrice.toLowerCase() == "free") {
				paperBillingPrice = 0;
			}
			else if (paperBillingPrice.toLowerCase() == "p.o.a.") {
				paperBillingPrice = 0;
				poa = true;
			}
			else {
				paperBillingPrice = parseFloat(paperBillingPrice);	
			}
		}
		

		var trainingPrice = 0;
		if (pricingObject.trainingSelected) {
			var trainingPriceElement = document.getElementById('trainingPrice');			
			trainingPrice = trainingPriceElement.innerHTML.replace(/£/,"");
			if (trainingPrice.toLowerCase() == "free") {
				trainingPrice = 0;
			}
			else if (trainingPrice.toLowerCase() == "p.o.a.") {
				trainingPrice = 0;
				poa = true;
			}
			else {
				trainingPrice = parseFloat(trainingPrice);	
			}
		}
		
		var totalPrice = parseFloat(subscriptionPrice)
					   + parseFloat(userLicPrice)
					   + parseFloat(multiSitePrice)
					   + parseFloat(secureCertPrice)
					   + parseFloat(supportPrice)
					   + parseFloat(paperBillingPrice);
					   + parseFloat(trainingPrice);
		
		if (pricingObject.monthlyCharging) {
			var surchargeRate = pricingObject.monthlyPaymentSurchargeRate / 100;
			totalPrice = totalPrice * (1 + surchargeRate);
		}
		pricingObject.displayTotalPrice(totalPrice, poa);
		
		pricingObject.priceModel.subscriptionPrice = parseFloat(subscriptionPrice);
		pricingObject.priceModel.userLicenceMode   = pricingObject.userLicenceMode;
		pricingObject.priceModel.userLicencePrice  = userLicPrice;
		pricingObject.priceModel.multiSiteUpgrade  = pricingObject.multiSiteLicence;
		pricingObject.priceModel.multiSitePrice	   = multiSitePrice;
		pricingObject.priceModel.secureCert		   = pricingObject.secureCertLicence;
		pricingObject.priceModel.secureCertPrice   = secureCertPrice;
		pricingObject.priceModel.paperlessBilling  = pricingObject.paperlessBilling;
		pricingObject.priceModel.paperlessBillingPrice = paperBillingPrice 
		pricingObject.priceModel.monthlyPayments   = pricingObject.monthlyCharging;
		pricingObject.priceModel.monthlyPaymentSurchargeRate = pricingObject.monthlyPaymentSurchargeRate;
		pricingObject.priceModel.supportMode	   = pricingObject.supportMode;
		pricingObject.priceModel.supportPrice	   = supportPrice;
		pricingObject.priceModel.trainingSelected  = pricingObject.trainingSelected;
	}; // end of calc Price
	
	this.displayTotalPrice = function (price, poa) {
		var netMonthly = document.getElementById('netMonthlyCharge');
		var vatMonthly = document.getElementById('vatMonthlyCharge');
		var grossMonthly = document.getElementById('grossMonthlyCharge');
		pricingObject.poa = poa;
		if (poa) {
			netMonthly.innerHTML = "Please Call";
			vatMonthly.innerHTML = "&nbsp;";
			grossMonthly.innerHTML = "&nbsp;";
		}
		else {
			price = parseFloat(price);
			var vatRateElement = document.getElementById('vatRate');
			var vatRate = parseFloat(vatRateElement.innerHTML);
			var vatAmount = (price / 100) * vatRate;
			vatAmount = Math.round(vatAmount*100)/100; // rounds up to 2dp.
			netMonthly.innerHTML = "£" + price.toFixed(2);
			vatMonthly.innerHTML = "£" + vatAmount.toFixed(2);
			grossMonthly.innerHTML = "£" + (price + vatAmount).toFixed(2);
			pricingObject.priceModel.netMonthly = price;
			pricingObject.priceModel.vatMonthly = vatAmount;
			pricingObject.priceModel.vatRate = vatRate;
			pricingObject.priceModel.grossMonthly = price + vatAmount;
		}
	}; // end of displayTotalPrice

	this.acceptTerms = function(evt) {
		var termsBox = document.getElementById('termsAccepted');
		var orderButton = document.getElementById('orderButton');
		if (termsBox.checked) {
			orderButton.src = "/images/buttons/generateOrder_enabled.png";
		}
		else {
			orderButton.src = "/images/buttons/generateOrder_disabled.png";			
		}
	}; 
	
	this.generateOrder = function(evt) {
		var termsBox = document.getElementById('termsAccepted');
		pricingObject.calcPrice();
		if (!termsBox.checked) {
			return false;
		}
		else if (pricingObject.poa) {
			alert ("You have select an option that requires a price on application (P.O.A.)\n"
					+ "Please contact our sales team for a price, and we will be happy to\n"
					+ "help you in placing the order.");
			return false;
		}
		else {
			pricingObject.buildOrder();
		}		
	}; // end of generate Order
	
	this.getContactInfo = function() {
		var form = document.getElementById('contactForm');
		var contactInfo = new Object();
		contactInfo.title = form.contactDetails_title.value;
		contactInfo.name  = form.contactDetails_name.value;
		contactInfo.company = form.contactDetails_company.value;
		contactInfo.address = form.contactDetails_address.value;
		contactInfo.phone	= form.contactDetails_phone.value;
		contactInfo.fax		= form.contactDetails_fax.value;
		contactInfo.email	= form.contactDetails_email.value;
		contactInfo.reg		= form.contactDetails_reg.value;
		
		pricingObject.priceModel.contactInfo = contactInfo;
	};

	this.buildOrder = function() {
		pricingObject.getContactInfo();
		var priceModelJSON = JSON.stringify(pricingObject.priceModel);
		var url = 'hs_orderFormController.php' + "?data=" + priceModelJSON;
		window.open(url, 
					'hsOrderForm', 
					'status=yes,resizable=yes,scrollbars=yes,height=600,width=600', false);
		
		
	}; // end of this.buildOrder
}
