// get from cookies the shopping cart items.
function initCalculator() {
	if(document.getElementById('cartXmlHiddenfield') != null) {
		xmlContent = getCookie('cartXmlCookie');
		if(xmlContent != null && xmlContent != "" && xmlContent != "<cart/>") {
			xmlDoc = loadXmlDoc(xmlContent);
			document.getElementById('cartXmlHiddenfield').value = serializeToXml(xmlDoc);
			assignXmlDocumentToHiddenField(xmlDoc);
		}
	}

	//initImages();
}

/* deprecated function, this was used to fix IE6 images missing by pre-loading them */
function initImages() {
	allImages = [];
		
	$(".imageTab").each(
		function( intIndex ) {
			var culture = document.getElementById('cultureHidden').value;
			var imageName =  $(this).attr("id").replace("TabImage", "");
			allImages[intIndex + 1] = new Image();
			allImages[intIndex + 1].src = "/images/" + culture + "/calculator/tabs/" + imageName + ".gif";
			allImages[intIndex + 100] = new Image();
			allImages[intIndex + 100].src = "/images/" + culture + "/calculator/tabs/" + imageName + "_off.gif";
		}
	);

	allImages[999] = new Image();
	allImages[999].src = "/images/" + culture + "/calculator/x.gif";
}

// display the missing activities popup based on the html hidden field
function missingActivity() {
	alert(document.getElementById('missingActivityHiddenField').value);
}

// round number 
function roundNumber(number,decimals) {
	return Math.round(number * 100) / 100;
}

// check if the email address is valid
function echeck(str) {

	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    return false
	 }
	
	 if (str.indexOf(" ")!=-1){
	    return false
	 }

	 return true					
}

// format a number into currency value
function formatCurrency(num) {	
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	return (((sign)?'':'-') + num + '.' + cents);
}

// swith calculator tab
function switchTab(tab) {
	$(".imageTab").each(
		function( intIndex ) {
			var imageName = $(this).attr("id").replace("TabImage", "");
			var culture = document.getElementById('cultureHidden').value;
			$(this).attr("src", "/images/" + culture + "/calculator/tabs/" + imageName + "_off.gif");
		}
	);

	$(".calculatorContent").each(
		function( intIndex ){
			if($(this).attr("id") == tab + "Content") {
				//$(this).show();
				$(this).attr("style", "display: block;");
				var culture = document.getElementById('cultureHidden').value;
				$("#" + tab + "TabImage").attr("src", "/images/" + culture + "/calculator/tabs/" + tab + ".gif");
			} else {
				//$(this).hide();
				$(this).attr("style", "display: none;");
			}
		}
	);
}

function switchTabBusiness(tab) {
	if(tab == 'forfait') {
		$("#information").hide();
	} else {
		$("#information").show();
	}
	
	$(".imageTab").each(
		function( intIndex ) {
			var imageName = $(this).attr("id").replace("TabImage", "");
			var culture = document.getElementById('cultureHidden').value;
			$(this).attr("src", "/images/" + culture + "/calculator/tabs-business/" + imageName + "_off.gif");
		}
	);

	$(".calculatorContent").each(
		function( intIndex ){
			if($(this).attr("id") == tab + "Content") {
				$(this).show();
				var culture = document.getElementById('cultureHidden').value;
				$("#" + tab + "TabImage").attr("src", "/images/" + culture + "/calculator/tabs-business/" + tab + ".gif");
			} else {
				$(this).hide();
			}
		}
	);
}

function getHotelType()
{
	for (var i=0; i < document.calculatorForm_event.eventHotelType.length; i++)
	{
		if (document.calculatorForm_event.eventHotelType[i].checked)
		{
			return document.calculatorForm_event.eventHotelType[i].value;
		}
	}
}

function getPaymentTypeHome()
{
	for (var i=0; i < document.calculatorForm.paymentType_home.length; i++)
	{
		if (document.calculatorForm.paymentType_home[i].checked)
		{
			return document.calculatorForm.paymentType_home[i].value;
		}
	}
}

function getPaymentTypeCar()
{
	for (var i=0; i < document.calculatorForm_car.paymentType_car.length; i++)
	{
		if (document.calculatorForm_car.paymentType_car[i].checked)
		{
			return document.calculatorForm_car.paymentType_car[i].value;
		}
	}
}

function getPaymentTypeFly()
{
	for (var i=0; i < document.calculatorForm_fly.paymentType_fly.length; i++)
	{
		if (document.calculatorForm_fly.paymentType_fly[i].checked)
		{
			return document.calculatorForm_fly.paymentType_fly[i].value;
		}
	}
}

function getPaymentTypeTrainbus()
{
	for (var i=0; i < document.calculatorForm_trainbus.paymentType_trainbus.length; i++)
	{
		if (document.calculatorForm_trainbus.paymentType_trainbus[i].checked)
		{
			return document.calculatorForm_trainbus.paymentType_trainbus[i].value;
		}
	}
}

function getPaymentTypeEvent()
{
	for (var i=0; i < document.calculatorForm_event.paymentType_event.length; i++)
	{
		if (document.calculatorForm_event.paymentType_event[i].checked)
		{
			return document.calculatorForm_event.paymentType_event[i].value;
		}
	}
}

function getPaymentTypeGift()
{
	for (var i=0; i < document.calculatorForm_gift.paymentType_gift.length; i++)
	{
		if (document.calculatorForm_gift.paymentType_gift[i].checked)
		{
			return document.calculatorForm_gift.paymentType_gift[i].value;
		}
	}
}

function getPaymentTypeIndividual()
{
	for (var i=0; i < document.calculatorForm_individual.paymentType_individual.length; i++)
	{
		if (document.calculatorForm_individual.paymentType_individual[i].checked)
		{
			return document.calculatorForm_individual.paymentType_individual[i].value;
		}
	}
}

function getPaymentTypeBuilding()
{
	for (var i=0; i < document.calculatorForm.paymentType_building.length; i++)
	{
		if (document.calculatorForm.paymentType_building[i].checked)
		{
			return document.calculatorForm.paymentType_building[i].value;
		}
	}
}

function getPaymentTypePapers()
{
	for (var i=0; i < document.calculatorForm_papers.paymentType_papers.length; i++)
	{
		if (document.calculatorForm_papers.paymentType_papers[i].checked)
		{
			return document.calculatorForm_papers.paymentType_papers[i].value;
		}
	}
}

function getPaymentTypePostal()
{
	for (var i=0; i < document.calculatorForm_postal.paymentType_postal.length; i++)
	{
		if (document.calculatorForm_postal.paymentType_postal[i].checked)
		{
			return document.calculatorForm_postal.paymentType_postal[i].value;
		}
	}
}

function initXmlDoc() {
	var xml = "<cart></cart>";

	return loadXmlDoc(xml);
}

function loadXmlDoc(xml) {
	var xmlDoc = null;
	try //Internet Explorer
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(xml);
	} catch(e) {
		try // Firefox, Mozilla, Opera, etc.
		{
			parser=new DOMParser();
			xmlDoc=parser.parseFromString(xml,"text/xml");
		} catch(e) {
			alert(e.message);
			return;
		}
	}

	return xmlDoc;
}

function hasForfait(forfait) {
	return (forfait != '');
}

function getForfaitTons(forfait) {
	var configurationDoc = loadXmlDoc('<configuration>' + forfait + '</configuration>');
	var tons = configurationDoc.getElementsByTagName("tons")[0].childNodes[0].nodeValue;
	return tons;
}

function getCredits(forfait) {
	var configurationDoc = loadXmlDoc('<configuration>' + forfait + '</configuration>');
	var credits = configurationDoc.getElementsByTagName("credits")[0].childNodes[0].nodeValue;
	return credits;
}

function XMLtoString(elem){
	
	var serialized;
	
	try {
		// XMLSerializer exists in current Mozilla browsers
		serializer = new XMLSerializer();
		serialized = serializer.serializeToString(elem);
	} 
	catch (e) {
		// Internet Explorer has a different approach to serializing XML
		serialized = elem.xml;
	}
	
	return serialized;
}

function addCartItem(prefix, toSummary, code, qty, item, paymentOption, configuration, forfait, productID) {
	productID = typeof(productID) != 'undefined' ? productID : 0;
	var xmlDoc = null;
	if(document.getElementById('cartXmlHiddenfield') != null) {
		if(document.getElementById('cartXmlHiddenfield').value != ' ') {
			xmlDoc = loadXmlDoc(document.getElementById('cartXmlHiddenfield').value);
		} else {
			xmlContent = getCookie('cartXmlCookie');
			if(xmlContent != null && xmlContent != "") {
				xmlDoc = loadXmlDoc(xmlContent);
			} else {
				xmlDoc = initXmlDoc();
			}
		}
	} else {
		alert('internal error 004');
	}

//	var xmlString = XMLtoString(xmlDoc);
//	alert("AVANT: " + xmlString.length);

	var cartItems = xmlDoc.getElementsByTagName("cartItem");
	var cartItemsNumber = cartItems.length;
//	alert("NUMBER: " + cartItemsNumber);

	if(cartItemsNumber >= 4) {
		alert("Votre panier est plein. Veuillez procéder à la transaction ou réviser les items choisis. Your cart is full. Please proceed to the transaction or revise the chosen items.");
		return;
	}

	var individual = null;
	var msg = null;
	
	switch(code) {
		case 'INDIVIDUAL_HOME':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var province = configurationDoc.getElementsByTagName("province")[0].childNodes[0].nodeValue;
			var electricity = configurationDoc.getElementsByTagName("electricity")[0].childNodes[0].nodeValue;
			var gaz = configurationDoc.getElementsByTagName("gaz")[0].childNodes[0].nodeValue;
			var oil = configurationDoc.getElementsByTagName("oil")[0].childNodes[0].nodeValue;
			var wood = configurationDoc.getElementsByTagName("wood")[0].childNodes[0].nodeValue;
	
			if(!hasForfait(forfait)) {
				if(electricity < 1 && gaz < 1 && oil < 1 && wood < 1) {
					missingActivity();
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.home(province, electricity, gaz, oil, wood);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'INDIVIDUAL_CAR':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var year = configurationDoc.getElementsByTagName("annee")[0].childNodes[0].nodeValue;
			var company = configurationDoc.getElementsByTagName("company")[0].childNodes[0].nodeValue;
			var model = configurationDoc.getElementsByTagName("model")[0].childNodes[0].nodeValue;
			var gaz = configurationDoc.getElementsByTagName("gaz")[0].childNodes[0].nodeValue;
			var transmission = configurationDoc.getElementsByTagName("transmission")[0].childNodes[0].nodeValue;
			var km = configurationDoc.getElementsByTagName("km")[0].childNodes[0].nodeValue;
			var averageLitter = configurationDoc.getElementsByTagName("averageLitter")[0].childNodes[0].nodeValue;

			if(!hasForfait(forfait)) {
				if(averageLitter < 1) {
					missingActivity();
					//alert('Vous devez completer le formulaire pour connaître votre consomation de CO2.');
					return;
				}
			}

            // don't allow form submission if the selected car consumes more
            // than 11L per 100km
            if ($('#averageLitersHidden').val() > 11) {
                if (siteLanguage == 'en') { 
                    msg = 'Reducing greenhouse gas emissions responsible for climate change at the source remains the most effective solution to minimize our negative footprint on the atmosphere. Within this context, the ZEROCO2 program does not offset emissions associated with vehicles that consume over 11 litres of gasoline per 100 km.';
                } else {
                    msg = 'Réduire à la source les émissions de gaz à effet de serre responsables des changements climatiques demeure la solution la plus efficace pour minimiser notre empreinte négative sur l’environnement. En ce sens, ZEROCO2 n’offre pas la compensation des émissions associées aux marques de voitures qui consomment plus de 11 litres d’essence aux 100 km.';
                }
                alert(msg);
                return false;
            }
            
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.car(km, averageLitter, gaz);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'INDIVIDUAL_FLY':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var departure = configurationDoc.getElementsByTagName("departure")[0].childNodes[0].nodeValue;
			var arrival = configurationDoc.getElementsByTagName("arrival")[0].childNodes[0].nodeValue;
			var roundtrip = configurationDoc.getElementsByTagName("roundtrip")[0].childNodes[0].nodeValue;
			
			if(!hasForfait(forfait)) {
				if(departure == "" || arrival == "") {
					missingActivity();
					//alert('Vous devez completer le formulaire pour connaître votre consomation de CO2.');
					return;
				}
			}
			
			code1 = "";
			code2 = "";
			
			if(!hasForfait(forfait)) {
				code1 = lookupFlyDeparture();
				code2 = lookupFlyArrival();
			}
			
			if(!hasForfait(forfait)) {
				if(code1 == "" || code2 == "") {
					missingActivity();
					// alert('Vous devez completer le formulaire pour connaître votre consomation de CO2.');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.fly(code1, code2, roundtrip);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'INDIVIDUAL_TRAINBUS':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var trainKm = configurationDoc.getElementsByTagName("trainKm")[0].childNodes[0].nodeValue;
			var trainInterval = configurationDoc.getElementsByTagName("trainInterval")[0].childNodes[0].nodeValue;
			var busKm = configurationDoc.getElementsByTagName("busKm")[0].childNodes[0].nodeValue;
			var busInterval = configurationDoc.getElementsByTagName("busInterval")[0].childNodes[0].nodeValue;
				
			if(!hasForfait(forfait)) {
				if(trainKm < 1 && busKm < 1) {
					missingActivity();
					//alert('Vous devez completer le formulaire pour connaître votre consomation de CO2.');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.trainbus(trainKm, trainInterval, busKm, busInterval);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'INDIVIDUAL_EVENT':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var name = configurationDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
			var guests = configurationDoc.getElementsByTagName("guests")[0].childNodes[0].nodeValue;
			var cars = configurationDoc.getElementsByTagName("cars")[0].childNodes[0].nodeValue;
			var carsKm = configurationDoc.getElementsByTagName("carsKm")[0].childNodes[0].nodeValue;
			var flyLocal = configurationDoc.getElementsByTagName("flyLocal")[0].childNodes[0].nodeValue;
			var flyInternationalShort = configurationDoc.getElementsByTagName("flyInternationalShort")[0].childNodes[0].nodeValue;
			var flyInternationalLong = configurationDoc.getElementsByTagName("flyInternationalLong")[0].childNodes[0].nodeValue;
			var hotel = configurationDoc.getElementsByTagName("hotel")[0].childNodes[0].nodeValue;
			var rooms = configurationDoc.getElementsByTagName("rooms")[0].childNodes[0].nodeValue;
			var night = configurationDoc.getElementsByTagName("night")[0].childNodes[0].nodeValue;
			var hotelType = configurationDoc.getElementsByTagName("hotelType")[0].childNodes[0].nodeValue;
				
			if(!hasForfait(forfait)) {
				if(! ((cars > 0 && carsKm > 0) || (flyLocal > 0) || (flyInternationalShort > 0) || (flyInternationalLong > 0) ||
						(rooms > 0 && night > 0))) {
					missingActivity();
					//alert('Vous devez répondre à au moin un type de transport ou h�bergement (voiture, avion ou hôtel).');
					return;
				}
				
				if((cars < 1 && carsKm > 0) || (cars > 0 && carsKm < 1)) {
					missingActivity();
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.event(name, guests, cars, carsKm, flyLocal, flyInternationalShort, flyInternationalLong, hotel, rooms, night, hotelType);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'INDIVIDUAL_GIFT':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var fromname = configurationDoc.getElementsByTagName("fromname")[0].childNodes[0].nodeValue;
			var fromemail = configurationDoc.getElementsByTagName("fromemail")[0].childNodes[0].nodeValue;
			var toname = configurationDoc.getElementsByTagName("toname")[0].childNodes[0].nodeValue;
			var toemail = configurationDoc.getElementsByTagName("toemail")[0].childNodes[0].nodeValue;
			var message = configurationDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
			var amount = configurationDoc.getElementsByTagName("amount")[0].childNodes[0].nodeValue;
			var tons = configurationDoc.getElementsByTagName("tons")[0].childNodes[0].nodeValue;
						
			if(!hasForfait(forfait)) {
				if(amount < 1) {
					alert(document.getElementById('strMoney').value);
					return;
				}
			}

			if(toSummary == 3 || toSummary == 2) {
				if(!echeck(fromemail)) {
					alert(document.getElementById('strEmail').value);
					return;
				}
				
				if(!echeck(toemail)) {
					
					alert(document.getElementById('strDestinationEmail').value);
					return;
				}

				if(fromname == "NA" || fromemail == "NA" || toname == "NA" || toemail == "NA" || message == "NA" ||
						fromname == 0 || fromemail == 0 || toname == 0 || toemail == 0 || message == 0) {
					alert(document.getElementById('strAllFields').value);
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.gift(fromname, fromemail, toname, toemail, message, amount, tons);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'INDIVIDUAL_INDIVIDUAL':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var adults = configurationDoc.getElementsByTagName("adults")[0].childNodes[0].nodeValue;
			var kids = configurationDoc.getElementsByTagName("kids")[0].childNodes[0].nodeValue;
			var percent = configurationDoc.getElementsByTagName("percent")[0].childNodes[0].nodeValue;
				
			if(!hasForfait(forfait)) {
				if(adults < 1 && kids < 1) {
					missingActivity();
					//alert('Vous devez entrer un nombre d\'enfant ou d\'adulte.');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.individ(adults, kids, percent);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			break;
		case 'BUSINESS_BUILDING':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var province = configurationDoc.getElementsByTagName("province")[0].childNodes[0].nodeValue;
			var electricity = configurationDoc.getElementsByTagName("electricity")[0].childNodes[0].nodeValue;
			var gaz = configurationDoc.getElementsByTagName("gaz")[0].childNodes[0].nodeValue;
			var oil = configurationDoc.getElementsByTagName("oil")[0].childNodes[0].nodeValue;
				
			if(!hasForfait(forfait)) {
				if(electricity < 1 && gaz < 1 && oil < 1) {
					missingActivity();
					//alert('Vous devez entrer un montant à au moin un type de consomation (électricité, gaz naturel, ou huile de chauffage).');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.building(province, electricity, gaz, oil);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			
			break;
		case 'BUSINESS_CAR':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var cars = configurationDoc.getElementsByTagName("cars")[0].childNodes[0].nodeValue;
			var km = configurationDoc.getElementsByTagName("km")[0].childNodes[0].nodeValue;
			var trucks = configurationDoc.getElementsByTagName("trucks")[0].childNodes[0].nodeValue;
			var tkm = configurationDoc.getElementsByTagName("tkm")[0].childNodes[0].nodeValue;
				
			if(!hasForfait(forfait)) {
				
				if(cars < 1 && km < 1 && trucks < 1 && tkm < 1) {
					missingActivity();
					return;
				}

				/*if(cars < 1 && km < 1) {
					missingActivity();
					//alert('Vous devez entrer des informations sur vos moyens de transports.');
					return;
				}*/
				
				if((cars > 0 && km < 1) || (cars < 1 && km > 0)) {
					missingActivity();
					//alert('Vous devez entrer des informations sur vos moyens de transports.');
					return;
				}
				
				/*if( trucks < 1 && tkm < 1) {
					missingActivity();
					//alert('Vous devez entrer des informations sur vos moyens de transports.');
					return;					
				}*/
				
				if( (trucks > 0 && tkm < 1) || (trucks < 1 && tkm > 0)) {
					missingActivity();
					//alert('Vous devez entrer des informations sur vos moyens de transports.');
					return;
				}
				
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.cars(cars, km, trucks, tkm);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			
			break;
		case 'BUSINESS_FLY':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');

			var domesticFly = configurationDoc.getElementsByTagName("domesticFly")[0].childNodes[0].nodeValue;
			var internationalFly = configurationDoc.getElementsByTagName("internationalFly")[0].childNodes[0].nodeValue;
			var internationalLongFly = configurationDoc.getElementsByTagName("internationalLongFly")[0].childNodes[0].nodeValue;
			var trainTotal = configurationDoc.getElementsByTagName("trainTotal")[0].childNodes[0].nodeValue;
			var trainTotalKm = configurationDoc.getElementsByTagName("trainTotalKm")[0].childNodes[0].nodeValue;
			var busTotal = configurationDoc.getElementsByTagName("busTotal")[0].childNodes[0].nodeValue;
			var busTotalKm = configurationDoc.getElementsByTagName("busTotalKm")[0].childNodes[0].nodeValue;
			var hotelTotalHigh = configurationDoc.getElementsByTagName("hotelTotalHigh")[0].childNodes[0].nodeValue;
			var hotelTotal = configurationDoc.getElementsByTagName("hotelTotal")[0].childNodes[0].nodeValue;

			if(!hasForfait(forfait)) {
				if(domesticFly < 1 && internationalFly < 1 && internationalLongFly < 1 && trainTotal < 1 && trainTotalKm < 1 && 
						busTotal < 1 && busTotalKm < 1 && hotelTotalHigh < 1 && hotelTotal < 1) {
					missingActivity();
					//alert('Vous devez entrer un montant à au moin un type de transport ou hébergement.');
					return;
				}
				
				if((trainTotal > 0 && trainTotalKm < 1) || (trainTotal < 1 && trainTotalKm > 0)) {
					missingActivity();
					//alert('Vous devez entrer un montant à au moin un type de transport ou hébergement.');
					return;
				}
				
				if((busTotal > 0 && busTotalKm < 1) || (busTotal < 1 && busTotalKm > 0)) {
					missingActivity();
					//alert('Vous devez entrer un montant à au moin un type de transport ou hébergement.');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.trips(domesticFly, internationalFly, internationalLongFly, trainTotal, trainTotalKm, busTotal, busTotalKm, hotelTotalHigh, hotelTotal);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			
			break;
		case 'BUSINESS_PAPERS':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');

			var papersPercent = configurationDoc.getElementsByTagName("papersPercent")[0].childNodes[0].nodeValue;
			var papersQuantity = configurationDoc.getElementsByTagName("papersQuantity")[0].childNodes[0].nodeValue;

			if(!hasForfait(forfait)) {
				if(papersPercent < 1 && papersQuantity < 1) {
					missingActivity();
					//alert('Vous devez entrer une quantité de papier.');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.papers(papersPercent, papersQuantity);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			
			break;
		case 'BUSINESS_POSTAL':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');

			var postalMethod = configurationDoc.getElementsByTagName("postalMethod")[0].childNodes[0].nodeValue;
			var postalNumber = configurationDoc.getElementsByTagName("postalNumber")[0].childNodes[0].nodeValue;
			var postalWeight = configurationDoc.getElementsByTagName("postalWeight")[0].childNodes[0].nodeValue;
			var postalKm = configurationDoc.getElementsByTagName("postalKm")[0].childNodes[0].nodeValue;

			if(!hasForfait(forfait)) {
				if(papersQuantity < 1 || postalWeight < 1 || postalKm < 1) {
					missingActivity();
					//alert('Vous devez entrer une quantité, un poid moyen et une distance moyenne par envoi.');
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.postal(postalMethod, postalNumber, postalWeight, postalKm);
			
			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			
			break;
		case 'BUSINESS_FORFAIT':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			
			individual = new Individual();
			individual.init();
			//individual.setPaymentOption(paymentOption);
			individual.setPaymentOption(1);
			individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) , -1);
			
			break;
		case 'GIFT_GIFT':
			var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
			var fromname = configurationDoc.getElementsByTagName("fromname")[0].childNodes[0].nodeValue;
			var fromemail = configurationDoc.getElementsByTagName("fromemail")[0].childNodes[0].nodeValue;
			var toname = configurationDoc.getElementsByTagName("toname")[0].childNodes[0].nodeValue;
			var toemail = configurationDoc.getElementsByTagName("toemail")[0].childNodes[0].nodeValue;
			var message = configurationDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
			var amount = configurationDoc.getElementsByTagName("amount")[0].childNodes[0].nodeValue;
			var tons = configurationDoc.getElementsByTagName("tons")[0].childNodes[0].nodeValue;
			var trees = configurationDoc.getElementsByTagName("trees")[0].childNodes[0].nodeValue;
						
			if(!hasForfait(forfait)) {
				if(tons > 0 && tons < 0.17) {
					alert(document.getElementById('strMinTons').value);
					return;
				}

				if(amount == 0 && tons == 0 && trees == 0) {
					missingActivity();
					return;
				}
			}

			if(toSummary == 3 || toSummary == 2) {
				if(!echeck(fromemail)) {
					alert(document.getElementById('strEmail').value);
					return;
				}
				
				if(!echeck(toemail)) {
					alert(document.getElementById('strDestinationEmail').value);
					return;
				}

				if(fromname == "NA" || fromemail == "NA" || toname == "NA" || toemail == "NA" || message == "NA" ||
						fromname == 0 || fromemail == 0 || toname == 0 || toemail == 0 || message == 0) {
					alert(document.getElementById('strAllFields').value);
					return;
				}
			}
			
			individual = new Individual();
			individual.init();
			individual.setPaymentOption(paymentOption);
			individual.giftOnly(fromname, fromemail, toname, toemail, message, amount, tons, trees);
			
			if(amount > 0 && amount < 20) {
				alert(document.getElementById('strMinAmount').value);
				return;
			}

			if(hasForfait(forfait)) {
				individual.setForfait(getForfaitTons(forfait), -1, getCredits(forfait) ,-1);
			}
			
			break;
	}

	individual.calculate();
	var tons = individual.getTons();
	
	var cost = individual.getCost();
	var trees = individual.getTrees();
	var credits = individual.getCarbonCredits();
			
	var cartItemElement = xmlDoc.createElement("cartItem");

	var idElement = xmlDoc.createElement("id");
	var codeElement = xmlDoc.createElement("code");
	var qtyElement = xmlDoc.createElement("qty");
	var itemElement = xmlDoc.createElement("item");
	var tonsElement = xmlDoc.createElement("tons");
	var treesElement = xmlDoc.createElement("trees");
	var creditsElement = xmlDoc.createElement("credits");
	var costElement = xmlDoc.createElement("cost");
	var paymentOptionElement = xmlDoc.createElement("paymentOption");
	var configurationElement = xmlDoc.createElement("configuration");
	var forfaitElement = xmlDoc.createElement("forfait");
	var productElement = xmlDoc.createElement("product");

	idElement.appendChild(xmlDoc.createTextNode('-1'));
	codeElement.appendChild(xmlDoc.createTextNode(code));
	qtyElement.appendChild(xmlDoc.createTextNode(qty));
	itemElement.appendChild(xmlDoc.createTextNode(item));
	tonsElement.appendChild(xmlDoc.createTextNode(tons));
	treesElement.appendChild(xmlDoc.createTextNode(trees));
	creditsElement.appendChild(xmlDoc.createTextNode(credits));
	costElement.appendChild(xmlDoc.createTextNode(cost));
	paymentOptionElement.appendChild(xmlDoc.createTextNode(paymentOption));
	configurationElement.appendChild(xmlDoc.createTextNode(configuration));
	forfaitElement.appendChild(xmlDoc.createTextNode(forfait));
	productElement.appendChild(xmlDoc.createTextNode(productID));

	cartItemElement.appendChild(idElement);
	cartItemElement.appendChild(codeElement);
	cartItemElement.appendChild(qtyElement);
	cartItemElement.appendChild(itemElement);
	cartItemElement.appendChild(tonsElement);
	cartItemElement.appendChild(treesElement);
	cartItemElement.appendChild(creditsElement);
	cartItemElement.appendChild(costElement);
	cartItemElement.appendChild(paymentOptionElement);
	cartItemElement.appendChild(configurationElement);
	cartItemElement.appendChild(forfaitElement);
	cartItemElement.appendChild(productElement);

	xmlDoc.getElementsByTagName("cart")[0].appendChild(cartItemElement);
	
	if(! (toSummary == 2 || toSummary == 3)) {
		if(tons < 0.5 && paymentOption == 2) {
			alert(document.getElementById('strMinimum').value);
			return;
		}
	} else {
		if(tons < 0.5 && paymentOption == 2) {
			alert(document.getElementById('strMinimum').value);
			return;
		}		
	}

	if(toSummary != 3) {
		if(tons == 0) {
			document.getElementById('tons_' + prefix).value = '< 0.01';
		} else {
			document.getElementById('tons_' + prefix).value = tons;
		}
		document.getElementById('cost_' + prefix).value = formatCurrency(cost);
	}
	
	if(toSummary == 2 || toSummary == 3) {
		assignXmlDocumentToHiddenField(xmlDoc);
	}

//	var xmlString = XMLtoString(xmlDoc);
//	alert("APRÈS: " + xmlString.length);

}

function removeFromCart(xmlDoc, id) {
	var cartItems = xmlDoc.getElementsByTagName("cartItem");
	for (i=0;i<cartItems.length;i++) {
		if(cartItems[i].getElementsByTagName("id")[0].childNodes[0].nodeValue == id) {
			xmlDoc.getElementsByTagName("cart")[0].removeChild(cartItems[i]);
			break;
		}
	}
	
	if(xmlDoc.getElementsByTagName("cartItem").length < 1) {
		document.getElementById('dailyCalculation').style.display = "none";
	}

	assignXmlDocumentToHiddenField(xmlDoc);
}

function assignUniqueIdentifier(xmlDoc) {
	var cartItems = xmlDoc.getElementsByTagName("cartItem");
	for (i=0;i<cartItems.length;i++) {
		cartItems[i].getElementsByTagName("id")[0].childNodes[0].nodeValue = i;
	}
}

function serializeToXml(xmlDoc) {
	try {
		// Gecko-based browsers, Safari, Opera.
		return (new XMLSerializer()).serializeToString(xmlDoc);
	} catch (e) {
		try {
			// Internet Explorer.
			return xmlDoc.xml;
		} catch (e) {//Strange Browser ??
			alert('Xmlserializer not supported');
		}
	}

	return '';
}

function removeCartItem(id) {

	var xmlDoc = null;
	if(document.getElementById('cartXmlHiddenfield') != null) {
		xmlDoc = loadXmlDoc(document.getElementById('cartXmlHiddenfield').value);
	} else {
		alert('internal error 003');
	}

	removeFromCart(xmlDoc, id);

	assignXmlDocumentToHiddenField(xmlDoc);
}

function assignXmlDocumentToHiddenField(xmlDoc) {

	var culture = document.getElementById('cultureHidden').value;

	assignUniqueIdentifier(xmlDoc);

	if(document.getElementById('cartXmlHiddenfield') != null) {
		document.getElementById('cartXmlHiddenfield').value = serializeToXml(xmlDoc);
		setCookie('cartXmlCookie', serializeToXml(xmlDoc), 360);
	} else {
		alert('internal error 001');
	}

	if(document.getElementById('cartItems') != null) {
		var strQty = document.getElementById('strQty').value;
		var strItem = document.getElementById('strItem').value;
		var strTonnes = document.getElementById('strTonnes').value;
		var strCo2 = document.getElementById('strCo2').value;
		var strNumber = document.getElementById('strNumber').value;
		var strTree = document.getElementById('strTree').value;
		var strNumberOf = document.getElementById('strNumberOf').value;
		var strCredit = document.getElementById('strCredit').value;
		var strPrix = document.getElementById('strPrix').value;
		
		var cartItemsTable = "<table border='0' width='330' cellspacing='0' cellpadding='0' class='paymentSummaryTable'>";
		cartItemsTable += "<tr><td colspan='99' bgcolor='#7abb23' height='3'></td></tr>";
		cartItemsTable += "<tr bgcolor='#79BA20' style='color: #ffffff'>";
		cartItemsTable += "<th width='10'></th>";
		cartItemsTable += "<th align='left' valign='top'>" + strQty + "&nbsp;</th>";
		cartItemsTable += "<th align='left' valign='top'>" + strItem + "</th>";
		cartItemsTable += "<th align='left' valign='top'>" + strTonnes + " <br />" + strCo2 + "</th>";
		cartItemsTable += "<th align='left' valign='top'>" + strNumber + " <br />" + strTree + "</th>";
		cartItemsTable += "<th>&nbsp;</th>";
		cartItemsTable += "<th align='left' valign='top'>" + strNumberOf + "<br />" + strCredit + "</th>";
		cartItemsTable += "<th align='left' valign='top'>" + strPrix + "</th>";
		cartItemsTable += "<th width='10'></th>";
		cartItemsTable += "<th>&nbsp;</th>";
		cartItemsTable += "</tr>";
		cartItemsTable += "<tr><td colspan='99' bgcolor='#7abb23' height='3'></td></tr>";
		
		var totalQuantity = 0.0;
		var totalTons = 0.0;
		var totalTrees = 0;
		var totalCredits = 0.0;
		var totalCost = 0.0;
		
		
		var cartItems=xmlDoc.getElementsByTagName("cartItem");
		for (i=0;i<cartItems.length;i++)
		{
			cartItemsTable += "<tr><td colspan='99' height='3'></td></tr>";
			cartItemsTable += "<tr><td></td><td align='center'>";
			
			cartItemsTable += cartItems[i].getElementsByTagName("qty")[0].childNodes[0].nodeValue;
			totalQuantity += parseInt(cartItems[i].getElementsByTagName("qty")[0].childNodes[0].nodeValue);
			
			cartItemsTable += "</td><td align='left'>";
			
			cartItemsTable += cartItems[i].getElementsByTagName("item")[0].childNodes[0].nodeValue;
			
			cartItemsTable += "</td><td align='center'>";
			
			if(cartItems[i].getElementsByTagName("tons")[0].childNodes[0].nodeValue == 0) {
				cartItemsTable += '< 0.01';
			} else {
				cartItemsTable += cartItems[i].getElementsByTagName("tons")[0].childNodes[0].nodeValue;
			}
			totalTons += parseFloat(cartItems[i].getElementsByTagName("tons")[0].childNodes[0].nodeValue);
			
			cartItemsTable += "</td><td align='center'>";
			
			cartItemsTable += cartItems[i].getElementsByTagName("trees")[0].childNodes[0].nodeValue;
			totalTrees += parseInt(cartItems[i].getElementsByTagName("trees")[0].childNodes[0].nodeValue);
			
			cartItemsTable += "</td><td></td><td align='center'>";
			
			cartItemsTable += cartItems[i].getElementsByTagName("credits")[0].childNodes[0].nodeValue;
			totalCredits += parseFloat(cartItems[i].getElementsByTagName("credits")[0].childNodes[0].nodeValue);
			
			cartItemsTable += "</td><td align='center'>";
			
			cartItemsTable += formatCurrency(cartItems[i].getElementsByTagName("cost")[0].childNodes[0].nodeValue) + "$";
			totalCost += parseFloat(cartItems[i].getElementsByTagName("cost")[0].childNodes[0].nodeValue);
			
			cartItemsTable += "</td><td>";
			cartItemsTable += "<a href='javascript:void(0);' onclick='removeCartItem(" + cartItems[i].getElementsByTagName("id")[0].childNodes[0].nodeValue + ")'><img src='/images/" + culture + "/calculator/x.gif' alt='remove' /></a>";
			cartItemsTable += "</td><td></td></tr>";
			cartItemsTable += "<tr><td colspan='99' height='3'></td></tr>";
		}

		cartItemsTable += "<tr><td colspan='99' height='2'></td></tr>";
		cartItemsTable += "<tr><td colspan='99' bgcolor='#79ba20' height='1'></td></tr>";
		cartItemsTable += "<tr><td colspan='99' height='1'></td></tr>";
		cartItemsTable += "<tr><td colspan='99' bgcolor='#79ba20' height='1'></td></tr>";

		cartItemsTable += "<tr><td></td><td colspan='2' align='right'>";
		cartItemsTable += "<b>TOTAL:&nbsp;&nbsp;</b>";
		cartItemsTable += "</td><td align='center'>";
		cartItemsTable += "<b>" + roundNumber(totalTons, 2) + "</b>";
		cartItemsTable += "</td><td align='center'>";
		cartItemsTable += "<b>" + totalTrees + "</b>";
		cartItemsTable += "</td><td></td><td align='center'>";
		cartItemsTable += "<b>" + roundNumber(totalCredits, 2) + "</b>";
		cartItemsTable += "</td><td align='center'>";
		cartItemsTable += "<b>" + formatCurrency(totalCost) + "$CAD</b>";
		cartItemsTable += "</td><td>";
		cartItemsTable += "</td><td></td></tr>";
		
		cartItemsTable += "</table>";

		document.getElementById('cartItems').innerHTML = cartItemsTable;
		
		document.getElementById('totalAmount').innerHTML = formatCurrency(totalCost);
		document.getElementById('totalAmountByDay').innerHTML = formatCurrency(totalCost / 365);
		
		if(xmlDoc.getElementsByTagName("cartItem").length > 0) {			
			document.getElementById('dailyCalculation').style.display = "block";
		}
		
	} else {
		alert('internal error 002');
	}
}

function checkGiftValues(prefix, toSummary, code, qty, item, paymentOption, configuration, forfait) {
	
	if( code == "GIFT_GIFT" || code == "INDIVIDUAL_GIFT") {
		var configurationDoc = loadXmlDoc('<configuration>' + configuration + '</configuration>');
		var fromname = configurationDoc.getElementsByTagName("fromname")[0].childNodes[0].nodeValue;
		var fromemail = configurationDoc.getElementsByTagName("fromemail")[0].childNodes[0].nodeValue;
		var toname = configurationDoc.getElementsByTagName("toname")[0].childNodes[0].nodeValue;
		var toemail = configurationDoc.getElementsByTagName("toemail")[0].childNodes[0].nodeValue;
		var message = configurationDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
		var amount = configurationDoc.getElementsByTagName("amount")[0].childNodes[0].nodeValue;
		var tons = configurationDoc.getElementsByTagName("tons")[0].childNodes[0].nodeValue;
		
		if(amount < 1) {
			missingActivity();
			return false;
		}
		
		if(!echeck(fromemail)) {
			alert(document.getElementById('strEmail').value);
			return false;
		}
		
		if(!echeck(toemail)) {
			
			alert(document.getElementById('strDestinationEmail').value);
			return false;
		}
	
		if(fromname == "NA" || fromemail == "NA" || toname == "NA" || toemail == "NA" || message == "NA" ||
				fromname == 0 || fromemail == 0 || toname == 0 || toemail == 0 || message == 0) {
			alert(document.getElementById('strAllFields').value);
			return false;
		}
		
		addCartItem(prefix, toSummary, code, qty, item, paymentOption, configuration, forfait);
	}
	
	return true;
}

function setCookie(c_name,value,expiredays)
{	
	pln.cookie.set(c_name, value, expiredays);
}

function getCookie(c_name)
{
	return pln.cookie.get(c_name);
}

function clearCalculatorCookie() {
	pln.cookie.remove('cartXmlCookie');
}



