function validateorderform(form2validate) {
	var showError = false;

	/* required fields */
	if(form2validate.validateRequired) {
		if(form2validate.validateRequired.value.length){
			var reqfields = form2validate.validateRequired.value.split(',');	
			for(var x=0;x<reqfields.length;x=x+1)
			{
				var currentfield = $(reqfields[x]);
				if(!currentfield.value.length)
					showError = showMsg(currentfield,'Please fill in this field.');
				else
					hideMsg(currentfield);
			}
		}
	}
	
	/* check email */
	if(form2validate.validateEmail) {
		if(form2validate.validateEmail.value.length){
			var emailfields = form2validate.validateEmail.value.split(',');
			for(var x=0;x<emailfields.length;x=x+1)
			{
				var currentfield = $(emailfields[x]);
				var currentStyle = currentfield.parentNode.className;
				
				var regex = new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
				if(!regex.test(currentfield.value))
					showError = showMsg(currentfield,'Please enter a valid e-mail address.');
				else
					hideMsg(currentfield);
			}
		}
	}
	
	/* required selection */
	if(form2validate.validateSelection) {
		if(form2validate.validateSelection.value.length){
			var reqselectfield = form2validate.validateSelection.value.split(',');
			for(var x=0;x<reqselectfield.length;x=x+1)
			{
				var selectionArray = document.getElementsByName(reqselectfield[x].split('-')[0]);
				if(reqselectfield[x].split('-').length == 2)
					var nrToSelect = reqselectfield[x].split('-')[1];
				else
					var nrToSelect = 1;
				if($(selectionArray[0]).type == 'checkbox' || $(selectionArray[0]).type == 'radio') { // radio or checkbox
					var targetField = $(selectionArray[0]).parentNode.parentNode;
					var selectioncount = 0;
					for(var i=0;i<selectionArray.length;i++) {
						if(selectionArray[i].checked == true)
							selectioncount += 1;
					}
				} else { //select
					var targetField = $(reqselectfield[x]);
					selectioncount = targetField.options[targetField.selectedIndex].value;
				}
				if(selectioncount < nrToSelect)
					showError = showMsg(targetField,'Please make a selection.'+(nrToSelect>1?' Minimum '+nrToSelect+' to select':''));
				else
					hideMsg(targetField);
			}
		}
	}
	if(cartArr.length == 0)
		showError = showMsg($('selection'),'please make a t-shirt selection');

	/* if any of the fields is incorrect, show the message */
	if(showError)
		return false;
	else {
		$('orderdata').value = cartArr.toJSONString();
		return true;
	}
}

/* private functions */

function showMsg(currfield,errortext){
	var pField = currfield.parentNode;
	var pStyle = pField.className;

	if(pField.className.indexOf('f_error') == -1) {
		pField.className = pStyle+' f_error';
		if(pField.childNodes[pField.childNodes.length-1].id != 'errortext')
			pField.innerHTML=pField.innerHTML+'<span id="errortext" class=f_errortext>'+errortext+'</span>';
	}
	return true;
}

function hideMsg(currfield){
	var pField = currfield.parentNode;
	var pStyle = pField.className;
	
	if(pField.className.indexOf('f_error') != -1) {
		pField.className = pStyle.substring(0,pStyle.indexOf('f_error'));
		if(pField.childNodes[pField.childNodes.length-1].id == 'errortext')
			pField.removeChild(pField.childNodes[pField.childNodes.length-1]);
	}
}
