function pbContactForm_Submit(sFormId) {
	var oForm = document.getElementById(sFormId+"_Form");
	var oFormItems = oForm.childNodes[0];
	var oFormItem, oFormItemField;
	var i;
	
	var bInvalidFieldPresent = false;
	
	for ( i=0; i<oFormItems.childNodes.length; i++ ) {
		oFormItem = oFormItems.childNodes[i];
		
		if ( oFormItem.className != 'formItem' ) continue;
		if ( oFormItem.getAttribute('itemType') != 'input' ) continue;
		oFormItemField = oFormItem.childNodes[0];
		
		if ( false == pbContactForm_ValidateField(oFormItemField) ) bInvalidFieldPresent = true;
	}
	
	//if ( ! bInvalidFieldPresent ) alert('submit');
	if ( ! bInvalidFieldPresent ) oForm.submit();
}
function pbContactForm_ValidateField(oField) {
	//return true;
	
	if ( ! oField.getAttribute('validPattern') ) return true; // if theres no valid pattern definition field is considered valid
	
	eval('sValidPattern = ' + oField.getAttribute('validPattern') + ';');
	var sInvalidMsg = oField.getAttribute('invalidMsg');
	
	var oInput = oField.childNodes[0];
	var oInvalidMsg = oField.childNodes[1];
	
	var sValue = oInput.value;
	
	// this is now being handled by lookahead in regex:
	// if ( sValue == oField.getAttribute('defValue') ) sValue = '';
	
	//alert('p:' + sValidPattern + 'v:' + sValue + ' s:' + sValue.search(sValidPattern));
	
	if ( sValue.search(sValidPattern) < 0 ) {// field is invalid
		oField.className = 'field invalid';
		oInvalidMsg.childNodes[0].nodeValue = sInvalidMsg;
		return false;
	} else {// field is valid
		oField.className = 'field';
		oInvalidMsg.childNodes[0].nodeValue = ' ';
		return true;
	}
}


