function submitForm() {
	var form = document.forms[ 'form' ] ;
	var td = form.getElementsByTagName( 'td' ) ;
	var send = true ;
	
	for ( var i = 0; i < td.length; i++ ) {
		if ( ( td[ i ].className == 'label' ) && ( td[ i ].innerHTML.indexOf( '*' ) != -1 ) ) {
			if ( _checkFormElements( td[ i + 1 ] ) ) {
				td[ i ].parentNode.className = td[ i ].parentNode.className.replace( 'error' , '' ) ;
			} else {
				send = false ;
				if ( td[ i ].parentNode.className.indexOf( 'error' ) == -1 ) {
					td[ i ].parentNode.className += 'error' ;
				} ;
			} ;
		} ;
	} ;
	
	return send ;
} ;

/**
 * @param table cell node
 * @access private
 * @return boolean
 */
function _checkFormElements( td ) {
	var formTypes = new Array( 'input' , 'select' , 'textarea' ) ;
	
	for ( var i = 0; i < formTypes.length; i++ ) {
		var formElements = td.getElementsByTagName( formTypes[ i ] ) ;
		
		if ( formElements.length == 0 ) {
			continue ;
		} ;
		
		switch ( formTypes[ i ] ) {
			case 'input':
				switch ( formElements[ 0 ].type ) {
					case 'password' :
					case 'text' :
						if ( ! _checkText( formElements ) ) {
							return false ;
						} ;
						break ;
					case 'radio' :
						if ( ! _checkRadio( formElements ) ) {
							return false ;
						} ;
						break ;
				} ;
				break ;
			case 'select':
				if ( ! _checkSelect( formElements ) ) {
					return false ;
				} ;
				break ;
			case 'textarea':
				if ( ! _checkTextarea( formElements ) ) {
					return false ;
				} ;
				break ;
		} ;
	} ;
	
	return true ;
} ;

/**
 * @param array of form elements
 * @access private
 * @return boolean
 */
function _checkText( formElements ) {
	var re = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/ ;
	
	for ( var i = 0; i < formElements.length; i++ ) {
		if ( formElements[ i ].value == '' ) {
			return false ;
		} else {
			if ( formElements[ i ].name == 'email' ) {
				if ( formElements[ i ].value.search( re ) == -1 ) {
					return false ;
				} ;
			} ;
		} ;
	} ;
	
	return true ;
} ;

/**
 * @param array of form elements
 * @access private
 * @return boolean
 */
function _checkSelect( formElements ) {
	for ( var i = 0; i < formElements.length; i++ ) {
		if ( formElements[ i ].options[ formElements[ i ].selectedIndex ].value == '' ) {
			return false ;
		} ;
	} ;
	
	return true ;
} ;

/**
 * @param array of form elements
 * @access private
 * @return boolean
 */
function _checkRadio( formElements ) {
	var returnValue = false ;
	
	for ( var i = 0; i < formElements.length; i++ ) {
		if ( formElements[ i ].checked ) {
			returnValue = true ;
		} ;
	} ;
	
	return returnValue ;
} ;

/**
 * @param array of form elements
 * @access private
 * @return boolean
 */
function _checkTextarea( formElements ) {
	for ( var i = 0; i < formElements.length; i++ ) {
		if ( formElements[ i ].value == '' ) {
			return false ;
		} ;
	} ;
	
	return true ;
} ;
