function SMILETX_QuickForm_Submit() {
	var oForm = document.getElementById("SMILETX_QuickForm_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 == SMILETX_QuickForm_ValidateField(oFormItemField) ) bInvalidFieldPresent = true;
	}
	
	//if ( ! bInvalidFieldPresent ) alert('submit');
	if ( ! bInvalidFieldPresent ) oForm.submit();
}
function SMILETX_QuickForm_ValidateField(oField) {
	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[oField.childNodes.length -1];
	
	var sValue = oInput.value;
	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;
	}
}
function SMILETX_QuickForm_InputTypeSelect_SetOtherOption(oField) {
	var oSel = oField.childNodes[1];
	var oOtherOpt = oField.childNodes[2];
	
	switch ( oSel.value ) {
		case 'other' :
			oOtherOpt.style.display='block';
			oOtherOpt.focus();
		break;
		default :
			oOtherOpt.style.display='none';
		break;
	}
}
function SMILETX_QuickForm_InputTypeSelect_SetFieldValue(oField) {
	var oInput = oField.childNodes[0];
	var oSel = oField.childNodes[1];
	var oOtherOpt = oField.childNodes[2];
	var sValue;
	
	switch ( oSel.value ) {
		case 'other' :
			oSel.className = '';
			sValue = oOtherOpt.value;
		break;
		case '' :
			oSel.className = 'initial';
			sValue = '';
		break;
		default :
			oSel.className = '';
			sValue = oSel.value;
		break;
	}
	
	oInput.value = sValue;
}
