/**********************************************************************************
 * 
 * LastChangedDate:		$Date: 2006-07-04 13:25:51 +0200 (Tue, 04 Jul 2006) $
 * LastChangedRevision	$Rev: 5 $
 * LastChangedBy:		$Author: $
 * HeadURL:				$URL: http://linux/cd/geuzenvloot/trunk/js/form.js $
 * ID:					$Id: form.js 5 2006-07-04 11:25:51Z  $
 * 
/**********************************************************************************/

nl.xd.util.Form = function() {
	var form ;
	
	return {
		send: function( name ) {
			this.form = document.forms[ name ] ;
			
			return this.check() ;
		} ,
		check: function() {
			var check = true ;
			var inputs = this.form.getElementsByTagName( 'input' ) ;
			var selects = this.form.getElementsByTagName( 'select' ) ;
			var textareas = this.form.getElementsByTagName( 'textarea' ) ;
			
			for ( var i = 0; i < textareas.length; i++ ) {
				if ( ! this.checkTextarea( textareas[ i ] ) ) {
					check = false ;
				} ;
			} ;
			
			for ( var i = 0; i < selects.length; i++ ) {
				if ( ! this.checkSelect( selects[ i ] ) ) {
					check = false ;
				} ;
			} ;
			
			for ( var i = 0; i < inputs.length; i++ ) {
				switch ( inputs[i ].type ) {
					case 'password' :
					case 'text' :
						if ( ! this.checkText( inputs[ i ] ) ) {
							check = false ;
						} ;
						break ;
					case 'radio' :
						if ( ! this.checkRadio( inputs[ i ] , inputs ) ) {
							check = false ;
						} ;
						break ;
				} ;
			} ;
			
			return check ;
		} ,
		checkRadio: function( element , elements ) {
			var parent = element.parentNode.parentNode.parentNode ;
			var key = parent.childNodes[ 0 ] ;
			
			for ( var i = 0; i < parent.childNodes.length; i++ ) {
				if ( parent.childNodes[ i ].nodeType == 1 ) {
					if ( parent.childNodes[ i ].innerHTML.search( /\*/ ) ) {
						for ( var p = 0; p < elements.length; p++ ) {
							if ( elements[ p ].name == element.name && elements[ p ].checked ) {
								return true ;
							} ;
						} ;
						
						return false ;
					} else {
						return true ;
					} ;
				} ;
			} ;
		} ,
		checkText: function( element ) {
			var parent = element.parentNode.parentNode ;
			var key = parent.childNodes[ 0 ] ;
			
			for ( var i = 0; i < parent.childNodes.length; i++ ) {
				if ( parent.childNodes[ i ].nodeType == 1 ) {
					if ( parent.childNodes[ i ].innerHTML.search( /\*/ ) != -1 && element.value == '' ) {
						nl.xd.util.DOM.addClass( parent.childNodes[ i ] , 'error' ) ;
						
						return false ;
					} else {
						nl.xd.util.DOM.removeClass( parent.childNodes[ i ] , 'error' ) ;
						
						return true ;
					} ;
				} ;
			} ;
		} ,
		checkSelect: function( element ) {
			var parent = element.parentNode.parentNode ;
			var key = parent.childNodes[ 0 ] ;
			
			for ( var i = 0; i < parent.childNodes.length; i++ ) {
				if ( parent.childNodes[ i ].nodeType == 1 ) {
					if ( parent.childNodes[ i ].innerHTML.search( /\*/ ) != -1 && ( element.options[ element.selectedIndex ].value == '' || element.options[ element.selectedIndex ].value == 0 ) ) {
						nl.xd.util.DOM.addClass( parent.childNodes[ i ] , 'error' ) ;
						
						return false ;
					} else {
						nl.xd.util.DOM.removeClass( parent.childNodes[ i ] , 'error' ) ;
						
						return true ;
					} ;
				} ;
			} ;
		} ,
		checkTextarea: function( element ) {
			var parent = element.parentNode.parentNode ;
			var key = parent.childNodes[ 0 ] ;
			
			for ( var i = 0; i < parent.childNodes.length; i++ ) {
				if ( parent.childNodes[ i ].nodeType == 1 ) {
					if ( parent.childNodes[ i ].innerHTML.search( /\*/ ) != -1 && element.value == '' ) {
						nl.xd.util.DOM.addClass( parent.childNodes[ i ] , 'error' ) ;
						
						return false ;
					} else {
						nl.xd.util.DOM.removeClass( parent.childNodes[ i ] , 'error' ) ;
						
						return true ;
					} ;
				} ;
			} ;
		}
	} ;
} () ;
