function setupConnection()
{
	var xmlHttp;
	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;
			}
		}
	}
	return xmlHttp;
}

function signup(oForm,authorEmail,form_url)
{
	//basic spam detection
	if (jQuery("#iamspam").attr('value') != "humans, please leave this text here") {
		show_error("fullname","'Contact us' ..if you are not a 'bot'.");
		return false;
	}

	var xmlHttp = setupConnection();
	var frm_elements = oForm.elements; 
	xmlHttp.onreadystatechange=function() {
		if(xmlHttp.readyState==4) {
			//alert(xmlHttp.responseText); //echo reponse from the php (signupForm.php)
			if(xmlHttp.responseText == 'already email') {
				show_error("email","You already have a StickyWorld account.");
			}else if(xmlHttp.responseText == 'already url') {
				show_error("preferredurl","Sorry, this subdomain already exists.");
			}else if(xmlHttp.responseText == 'success') {
				document.getElementById('signup-wrapper').innerHTML = '<div class="signup-message"><h3>Thanks for signing up!</h3> <br /><br />Within the next 5 minutes, an email containing an account activation link will be sent to your email address: <strong>'+ oForm.email.value +'</strong>. Follow this link to set your password and start using StickyWorld. <br /><br /> If you do not receive the email (check your spam box) or if you have any queries, please contact us on <a href="mailto:support@stickyworld.com">support@stickyworld.com</a>.</div>';
			}else if(xmlHttp.responseText == 'subdomain reserved') {
				show_error("preferredurl","Sorry, this subdomain is reserved.");
			}else {	
				document.getElementById('signup-wrapper').innerHTML = xmlHttp.responseText;
			}
		}
	}
	
	if(validate_form(frm_elements))	{
		//hack for development testing
		//form_url="/wp-content/themes/stickyworld/php/signupForm.php";
		
		form_url = form_url + "?"

		for(i=0; i<frm_elements.length; i++) {
			if(frm_elements[i].type == "text" || frm_elements[i].type == "textarea") {
				form_url=form_url+frm_elements[i].name+"="+frm_elements[i].value+"&";
			}
		} 
		form_url=form_url+"authorEmail=" + authorEmail;
		form_url=form_url+"&sid="+Math.random();
		form_url=form_url+"&agreed=1";
		xmlHttp.open("GET",form_url,true);
		xmlHttp.send(null);
	}
}

function show_error(for_id,error_message) {
	var err_div = jQuery("#"+for_id+"_error");
	if (err_div != null) {
		jQuery("#"+for_id+"_error .error-content").html(error_message);
		err_div.show(400);
	}
	//trigger active validation here?
}

function hide_error(for_id) {
	var err_div = jQuery("#"+for_id+"_error");
	if (err_div != null) {
		err_div.hide();
	}
}
  
function validate_form(frm_elements) {

//defaults:
var default_value = {};
default_value.firstname = 'first name';
default_value.surname = 'last name';
default_value.email = 'your@ddress.here';
default_value.preferredurl = 'yourorganisation';
default_value.organisation = 'the name of your organisation or project';
default_value.promo = 'enter promo code here';

    var valid = true;
	
	var ele_id = "";
	var ele_val = "";
	var val_pat = '';
	
	//check for agreed to T&C
	if(!jQuery('#agreed').hasClass('radio-selected')) {
		show_error('agreed',"you must agree to our terms and conditions");
		return false;
	}
	
	for(i=0; i<frm_elements.length; i++) {
	
		ele_id = frm_elements[i].id;
		ele_val = frm_elements[i].value;

//alert(ele_val + ' ' + default_value[ele_id] + ' ' + ele_id);
		if(ele_val == default_value[ele_id]) {
			ele_val = "";
		}
	
		switch(ele_id) {
			case 'agree':
					if (!false/*test class for radio-active*/) {
						show_error(ele_id,"you must agree to our terms and conditions");
						valid = false;
					} else {
						hide_error('agree');
					}
				break
			case 'firstname':
			case 'surname':
				val_pat = /[a-zA-Z][a-zA-Z\-\s']+/;
					if (ele_val == "") {
						show_error('name',"We need to know your name and surname");
						valid = false;
					} else if (ele_val.match(val_pat)==null) {		
						show_error('name',"Your name and surname, please");
						valid = false;
					} else {
						hide_error('name');
					}
				break;
			case 'organisation':
					if (ele_val == "") {
						show_error(ele_id,"The name of your organisation?");
						valid = false;
					} else {
						hide_error(ele_id);
					}
				break;			
			case 'email':
				val_pat = /^[a-zA-Z]+[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z]{2,4}$/;
					if (ele_val == "") {
						show_error(ele_id,"Where do you want your login details sent?");
						valid = false;
					} else if (ele_val.match(val_pat)==null) {
						show_error(ele_id,"That doesn't seem right");
						valid = false;
					} else {
						hide_error(ele_id);
					}
				break;
			case 'preferredurl':
				val_pat = /^[a-zA-Z0-9-]+$/;
					if (ele_val == "") {
						show_error(ele_id,"You'd like your online space to be where?");
						valid = false;
					}else if (ele_val.match(val_pat)==null) {
						show_error(ele_id,"Only a-z, 0-9 and hyphens, please");
						valid = false;
					} else if (ele_val.length > 32) {
						show_error(ele_id,"Subdomain lentgh is limited to 32 characters");
						valid = false;
					} else {
						hide_error(ele_id);
					}
				break;
		}
	} 

    return valid;
}