/**********************************************************************************
 * 
 * LastChangedDate:		$Date: 2007-04-02 17:25:29 +0200 (Mon, 02 Apr 2007) $
 * LastChangedRevision	$Rev: 67 $
 * LastChangedBy:		$Author: $
 * HeadURL:				$URL: http://linux/cd/balance/trunk/httpdocs/js/nl/xd/form/form.js $
 * ID:					$Id: form.js 67 2007-04-02 15:25:29Z  $
 * 
/**********************************************************************************/

// Create namespace
window.nl.xd.form = {} ;

nl.xd.form.Form = function() {
	var form ;
	
	return {
		check: function( form ) {
			var check 		= true ;
			var labels 		= form.getElementsByTagName( 'label' ) ;
			var formElement = null ;
			
			for ( var i = 0; i < labels.length; i++ ) {
				if ( labels[ i ].innerHTML.search( /\*/ ) != -1 ) {
					formElement = nl.xd.util.DOM.get( labels[ i ].attributes[ 'for' ].nodeValue ) ;
					
					switch ( formElement.tagName.toLowerCase() ) {
						case 'input' :
							if ( ! this.checkInput( labels[ i ] , formElement ) ) {
								check = false ;
							} ;
							
							break ; 
						case 'textarea' :
							if ( ! this.checkTextarea( labels[ i ] , formElement ) ) {
								check = false ;
							} ;
							
							break ; 
						case 'select' :
							if ( ! this.checkSelect( labels[ i ] , formElement ) ) {
								check = false ;
							} ;
							
							break ; 
					} ;
				} ;
			} ;
			
			return check ;
		} ,
		checkInput: function( _label , element ) {
			var check = true ;
			
			switch ( element.type ) {
				case 'password' :
				case 'text' :
					if ( ! this.checkText( _label , element ) ) {
						check = false ;
					} ;
					break ;
				case 'radio' :
					if ( ! this.checkRadio( _label , element ) ) {
						check = false ;
					} ;
					break ;
			} ;
			
			return check ;
		} ,
		checkText: function( _label , element ) {
			var check = true ;
			
			if ( element.value == '' ) {
				nl.xd.util.DOM.addClass( _label , 'error' ) ;
				check = false ;
			} else {
				nl.xd.util.DOM.removeClass( _label , 'error' ) ;
			} ;
			
			return check ;
		} ,
		checkRadio: function( _label , element ) {
			var check  = false ;
			var inputs = document.getElementsByTagName( 'input' ) ;
			
			for ( var i = 0; i < inputs.length; i++ ) {
				if ( inputs[ i ].type == 'radio' && inputs[ i ].name == element.name && inputs[ i ].checked ) {
					nl.xd.util.DOM.removeClass( _label , 'error' ) ;
					check = true ;
					break ;
				} ;
			} ;
			
			if ( ! check ) {
				nl.xd.util.DOM.addClass( _label , 'error' ) ;
			} ;
			
			return check ;
		} ,
		checkSelect: function( _label , element ) {
			var check = true ;
			
			if ( element.options[ element.selectedIndex ].value == '' || element.options[ element.selectedIndex ].value == 0 ) {
				nl.xd.util.DOM.addClass( _label , 'error' ) ;
				check = false ;
			} else {
				nl.xd.util.DOM.removeClass( _label , 'error' ) ;
				check = true ;
			} ;
			
			return check ;
		} ,
		checkTextarea: function( _label , element ) {
			var check = true ;
			
			if ( element.value == '' ) {
				nl.xd.util.DOM.addClass( _label , 'error' ) ;
				check = false ;
			} else {
				nl.xd.util.DOM.addClass( _label , 'error' ) ;
			} ;
			
			return check ;
		}
	} ;
} () ;
