	function validate()
	{
		var myFrm = document.frmCalc;
		var newStr = "";
		
		for (var i = 0; i < myFrm.elements.length; i++)
		{
			if (myFrm.elements[i].type == "text")
			{
				for (var j = 0; j < myFrm.elements[i].value.length; j++)
				{
					if (myFrm.elements[i].value.charAt(j) != " " && myFrm.elements[i].value.charAt(j) != "$" && myFrm.elements[i].value.charAt(j) != "%")
						newStr = newStr + myFrm.elements[i].value.charAt(j);
					//alert("new str" + myFrm.elements[i].value.charAt(j));
				}
				myFrm.elements[i].value = newStr;
				
				
				if (!newStr.match(/^\d*\.{0,1}\d+$/))
				{
					
					alert("Please enter Numeric values only");
					//alert(myFrm.elements[i].id);
					myFrm.elements[i].focus();
					return false;
				}
				newStr = "";
			}
		}
		myFrm.submit();
		return true;
	}
	
	function checkSubmit(e)
	{
		// get event if not passed
		if (!e) var e = window.event;

		// get character code of key pressed
		if (e.keyCode) 
			keynum = e.keyCode;
		else if (e.which) 
			keynum = e.which;

		if (keynum == 13)
		{
			if (validate())
			{
				//strip all special characters from values then submit
				document.frmCalc.submit();
			}
		}	
	}
	
	function formatNumber(obj, decPlaces, sign)
	{
		var obj = document.getElementById(obj.id);
		var num = new NumberFormat();
		
		if (sign == "no")
		{
			sign = "";
			num.setCurrency(false);
		}
		else if (sign != "pc")
			 {
				sign = "$";
				num.setCurrency(true);
				num.setCurrencyPosition(num.LEFT_OUTSIDE);
			 }
			 else
			 {
			 	sign = "%";
				num.setCurrency(true);
				num.setCurrencyPosition(num.RIGHT_OUTSIDE);
			 }
		//if (sign == "%")
		//	sign = "pc";
			
		//alert(sign);
		num.setCurrencyValue(sign);
		num.setInputDecimal('.');
		num.setNumber(obj.value);
		num.setPlaces(decPlaces, true);
		
		//num.setCurrency(true);

		num.setNegativeFormat(num.PARENTHESIS);
		num.setNegativeRed(false);
		num.setSeparators(true, ' ', ' ');
		obj.value = num.toFormatted();
	}
	
	function formatFields()
	{
		var myFrm = document.frmCalc;
		
		for (var i = 0; i < myFrm.elements.length; i++)
		{
			if (myFrm.elements[i].type == "text")
			{
				if (myFrm.elements[i].id == "marginalTaxRate")
					formatNumber(document.getElementById(myFrm.elements[i].id), 2, 'pc');	
				else if(myFrm.elements[i].id == "numShares")
					formatNumber(document.getElementById(myFrm.elements[i].id), 0, 'no');	
				else
					formatNumber(document.getElementById(myFrm.elements[i].id), 2, '$');
			}
		}
	}
	
	xmlHttp = "";
	function initAJAX()
	{
		try
		{
		  // Firefox, Opera 8.0+, Safari
		  xmlHttp=new XMLHttpRequest();
		}
		catch (e)
		{
		  // Internet Explorer
			try
			{
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
	
			catch (e)
			{
				try
				{
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e)
				{
					alert("Your browser does not support AJAX!");
					return false;
				}
			}
		}
	}
	
	function calcShares(sharesDonated)
	{
		initAJAX();
		var url = "calcSharesDonated.php";
		var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
		//alert("camp is:" + camp_id);
		xmlHttp.onreadystatechange = loadProgress;
		xmlHttp.open("post", url, true);
		xmlHttp.setRequestHeader("Content-Type", contentType);
		xmlHttp.send("sharesDonated=" + cleanVal(getVal('txtSharesDonated')) + "&numShares=" + cleanVal(getVal('numShares')) + "&marketPrice=" + cleanVal(getVal('marketPrice')) + "&adjustedCostShare=" + cleanVal(getVal('adjustedCostShare')) + "&marginalTaxRate=" + cleanVal(getVal('marginalTaxRate')) + "&province_id=" + cleanVal(getVal('province_id')));
	}
	
	function loadProgress()
	{
		if (xmlHttp.readyState==4)
		{// 4 = "loaded"
			if (xmlHttp.status==200)
			{// 200 = "OK"
				//alert(xmlHttp.responseText); //getAllResponseHeaders();
				parseXML(xmlHttp.responseText);
				document.getElementById('loading_image').style.display = "none";
				document.getElementById('loading_image').innerHTML = "";
				//= xmlHttp.responseText;
			}
			else
			{
				alert("Problem retrieving data:" + xmlHttp.statusText);
			}
		}
		else
		{
			document.getElementById('loading_image').style.display = '';
			document.getElementById('loading_image').innerHTML = "<img src='ajax-loader.gif' width='25' border='0' alt='Loading...'>";
		}

	}
	
	function activateText()
	{
		var obj = document.getElementById('sharesText');
		var myVal = document.getElementById('hdnSharesDonated').value;
		var newVal = "";
		for (i = 0; i < myVal.length; i ++)
		{
			if (myVal.charAt(i) != "," && myVal.charAt(i) != " ")
				newVal += myVal.charAt(i);
			
			if (!newVal.match(/^\d*\.{0,1}\d+$/))
			{
				
				alert("Please enter Numeric values only");
				document.getElementById('txtSharesDonated').focus();
				return false;
			}
		}
		obj.innerHTML = "<input type=\"text\" style=\"width:90px\" id=\"txtSharesDonated\" name=\"txtSharesDonated\" value=\"" + newVal + "\" />";
		obj.innerHTML += "<input type=\"button\" style=\"width:90px\" onclick=\"calcShares(" + myVal + ")\" value=\"re-Calculate\" /> ";
		obj.innerHTML += "<a href=\"javascript:deactivateText()\">Exit</a>";
	}
	
	function deactivateText()
	{
		var obj = document.getElementById('sharesText');
		var myVal = formatResult(document.getElementById('hdnSharesDonated').value);
		obj.innerHTML = "<strong>" + myVal + "</strong> <a href=\"javascript:activateText();\">Change Value</a>";
	}
	
	function getVal(elementID)
	{
		var myElement = document.getElementById(elementID);
		return myElement.value;
	}
	
	function cleanVal(val)
	{
		var newVal = "";
		for (var i = 0; i < val.length; i ++)
		{
			if (val.charAt(i) != "," && val.charAt(i) != " " && val.charAt(i) != "%" && val.charAt(i) != "$")
				newVal += val.charAt(i);
		}
		
		if (newVal.match(/^\d*\.{0,1}\d+$/))
			return newVal;
		else
			return false;
	}
	
	function parseXML(result)
	{
		try //Internet Explorer
		{
			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="true"; // used to be set to false
			xmlDoc.loadXML(result);
		}
		catch(e)
		{
			try //Firefox, Mozilla, Opera, etc.
			{
				parser=new DOMParser();
				xmlDoc=parser.parseFromString(result,"text/xml");
			}
			catch(e)
			{
				alert(e.message);
			return;
			}
		}
		sharesDonated = xmlDoc.getElementsByTagName("sharesDonated")[0].childNodes[0].nodeValue;
		mvsd = xmlDoc.getElementsByTagName("mvsd")[0].childNodes[0].nodeValue;
		acbd = xmlDoc.getElementsByTagName("acbd")[0].childNodes[0].nodeValue;
		dCapitalGain = xmlDoc.getElementsByTagName("dCapitalGain")[0].childNodes[0].nodeValue;
		taxPayable = xmlDoc.getElementsByTagName("taxPayable")[0].childNodes[0].nodeValue;
		donationTaxCredit = xmlDoc.getElementsByTagName("donationTaxCredit")[0].childNodes[0].nodeValue;
		sharesSold = xmlDoc.getElementsByTagName("sharesSold")[0].childNodes[0].nodeValue;
		salesProceedsB = xmlDoc.getElementsByTagName("salesProceedsB")[0].childNodes[0].nodeValue;
		acs = xmlDoc.getElementsByTagName("acs")[0].childNodes[0].nodeValue;
		cgs = xmlDoc.getElementsByTagName("cgs")[0].childNodes[0].nodeValue;
		tps = xmlDoc.getElementsByTagName("tps")[0].childNodes[0].nodeValue;
		dtcd = xmlDoc.getElementsByTagName("dtcd")[0].childNodes[0].nodeValue;
		ntp = xmlDoc.getElementsByTagName("ntp")[0].childNodes[0].nodeValue;
		finalProceeds = xmlDoc.getElementsByTagName("finalProceeds")[0].childNodes[0].nodeValue;
		funds = xmlDoc.getElementsByTagName("funds")[0].childNodes[0].nodeValue;
		
		document.getElementById("hdnSharesDonated").value = sharesDonated;
		//document.getElementById("sharesText").innerHTML = sharesDonated;
		document.getElementById("divMvsd").innerHTML = formatResult(mvsd);
		document.getElementById("divAcbd").innerHTML = formatResult(acbd);
		document.getElementById("divDCapitalGain").innerHTML = formatResult(dCapitalGain);
		document.getElementById("divTaxPayable").innerHTML = formatResult(taxPayable);
		document.getElementById("divDonationTaxCredit").innerHTML = formatResult(donationTaxCredit);
		document.getElementById("divSharesSold").innerHTML = formatResult(sharesSold);
		document.getElementById("divSalesProceedsB").innerHTML = formatResult(salesProceedsB);
		document.getElementById("divAcs").innerHTML = formatResult(acs);
		document.getElementById("divCgs").innerHTML = formatResult(cgs);
		document.getElementById("divTps").innerHTML = formatResult(tps);
		document.getElementById("divDtcd").innerHTML = formatResult(dtcd);
		document.getElementById("divNtp").innerHTML = formatResult(ntp);
		document.getElementById("divFinalProceeds").innerHTML = formatResult(finalProceeds);
		document.getElementById("divFunds").innerHTML = formatResult(funds);
		
		//alert("SharesDonated: " + sharesDonated + " MVSD: " + mvsd + " ACBD: " + acbd + " dCAPITALGAIN: " + dCapitalGain + " TAXPAYABLE: " + taxPayable + " DONATION TAX CREDIT: " + donationTaxCredit);
	}
	
	function formatResult(res)
	{
		var num = new NumberFormat();

		num.setCurrency(false);
		//num.setCurrencyPosition(num.LEFT_OUTSIDE);
		//num.setCurrencyValue("");
		num.setInputDecimal('.');
		num.setNumber(res);
		num.setPlaces(0, true);
		num.setNegativeFormat(num.PARENTHESIS);
		num.setNegativeRed(false);
		num.setSeparators(true, ',', ',');
		return num.toFormatted();
	}
	
	function popTax(province_id)
	{
		initAJAX();
		var url = "getProvinceTax.php";
		var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
		//alert("camp is:" + camp_id);
		xmlHttp.onreadystatechange = loadProvince;
		xmlHttp.open("post", url, true);
		xmlHttp.setRequestHeader("Content-Type", contentType);
		xmlHttp.send("province_id=" + province_id);
	}
	
	function loadProvince()
	{
		if (xmlHttp.readyState==4)
		{// 4 = "loaded"
			if (xmlHttp.status==200)
			{// 200 = "OK"
				document.getElementById('provVal').value = xmlHttp.responseText * 100;
				formatNumber(document.getElementById('provVal'), 2, 'pc');
				document.getElementById('marginalTaxRate').value = document.getElementById('provVal').value;
			}
			else
			{
				alert("Problem retrieving data:" + xmlHttp.statusText);
			}
		}
	}
