function urlencode( str ) {
	var histogram = {}, histogram_r = {}, code = 0, tmp_arr = [];
	var ret = str.toString();
	
	var replacer = function(search, replace, str) {
		var tmp_arr = [];
		tmp_arr = str.split(search);
		return tmp_arr.join(replace);
	};
	
	// The histogram is identical to the one in urldecode.
	histogram['!']   = '%21';
	histogram['%20'] = '+';
	
	// Begin with encodeURIComponent, which most resembles PHP's encoding functions
	ret = encodeURIComponent(ret);
	
	for (search in histogram) {
		replace = histogram[search];
		ret = replacer(search, replace, ret) // Custom replace. No regexing
	}
	
	// Uppercase for full PHP compatibility
	return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
		return "%"+m2.toUpperCase();
	});
	
	return ret;
}
function submitContact(contact,element) {
	var postdata = '';
	var interests = '';
		if (contact.intKitchen.checked) interests = interests + 'Kitchen, ';
		if (contact.intBath.checked) interests = interests + 'Bath, ';
		if (contact.intConsulting.checked) interests = interests + 'Design Consulting, ';
		if (contact.intBasement.checked) interests = interests + 'Basement, ';
		if (contact.intAddition.checked) interests = interests + 'Addition, ';
		if (contact.intGut.checked) interests = interests + 'Gut-Rehab, ';
		if (contact.intOther.checked) interests = interests + 'Other, ';
	postdata = 	'name='+urlencode(contact.posName.value)+	'&address='+urlencode(contact.posAddress.value)+	'&location='+urlencode(contact.posLocation.value)+	'&phone='+urlencode(contact.posPhone.value)+	'&interest='+urlencode(interests)+	'&budget='+urlencode(contact.posBudget.value)+	'&email='+urlencode(contact.posEmail.value)+	'&message='+urlencode(contact.posText.value)+	'&selfcc='+urlencode(contact.selfCC.checked);
	postContact('/contact/send.php','right-column',postdata);
}
function postContact(url,element,postdata){cload = new myXMLHttpRequest();cload.onreadystatechange = function () {if (cload.readyState == 4) {cloadtext = cload.responseText;setInnerHTML(document.getElementById(element),"Thank You! Your email has been sent.");}else {setInnerHTML(document.getElementById(element),'Sending...');}};cload.open ("POST", url, true);cload.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');cload.send (postdata);}
function loadContact(url,element){cload = new myXMLHttpRequest();cload.onreadystatechange = function () {if (cload.readyState == 4) {cloadtext = cload.responseText;setInnerHTML(document.getElementById(element),cloadtext);}else {setInnerHTML(document.getElementById(element),'');}};cload.open ("GET", url, true);cload.send (null);}function myXMLHttpRequest (){var xmlhttplocal = false;if (typeof XMLHttpRequest != 'undefined') {try {xmlhttplocal = new XMLHttpRequest ();}catch (e) {xmlhttplocal = false;}}if (!xmlhttplocal) {try {xmlhttplocal = new ActiveXObject ("Msxml2.XMLHTTP")}catch (e) {try {xmlhttplocal = new ActiveXObject ("Microsoft.XMLHTTP")}catch (E) {xmlhttplocal = false;alert ('couldn\'t create xmlhttp object');}}}return (xmlhttplocal);}function getXMLDocument(url, callback){if (!window.XMLHttpRequest)return false;var myDoc = new XMLHttpRequest();if (typeof(callback) != "undefined"){myDoc.onreadystatechange = function (){if (myDoc.readyState != 4)return;if (myDoc.responseXML != null && myDoc.status == 200)callback(myDoc.responseXML);};}myDoc.open('GET', url, true);myDoc.send(null);return true;}function sendXMLDocument(url, content, callback){if (!window.XMLHttpRequest)return false;var sendDoc = new window.XMLHttpRequest();if (typeof(callback) != "undefined"){sendDoc.onreadystatechange = function (){if (sendDoc.readyState != 4)return;if (sendDoc.responseXML != null && sendDoc.status == 200)callback(sendDoc.responseXML);elsecallback(false);};}sendDoc.open('POST', url, true);if (typeof(sendDoc.setRequestHeader) != "undefined")sendDoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');sendDoc.send(content);return true;}function setInnerHTML(element, toValue){if (typeof(element.innerHTML) != 'undefined')element.innerHTML = toValue;else{var range = document.createRange();range.selectNodeContents(element);range.deleteContents();element.appendChild(range.createContextualFragment(toValue));}}function getInnerHTML(element){if (typeof(element.innerHTML) != 'undefined')return element.innerHTML;else{var returnStr = '';for (var i = 0; i < element.childNodes.length; i++)returnStr += getOuterHTML(element.childNodes[i]);return returnStr;}}