/**********************************************************************************
 * 
 * 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.indexOf( '*' ) > -1 ) {
					
					if(  nl.xd.dom.DOM.hasParent( labels[ i ], 'div', 'displaynone' ) ){
						continue;
					}
					if (labels[i].attributes[ 'for'].nodeValue) {
						formElement = nl.xd.dom.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.dom.DOM.addClass( _label , 'error' ) ;
				check = false ;
			} else {
				nl.xd.dom.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.dom.DOM.removeClass( _label , 'error' ) ;
					check = true ;
					break ;
				} ;
			} ;
			
			if ( ! check ) {
				nl.xd.dom.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.dom.DOM.addClass( _label , 'error' ) ;
				check = false ;
			} else {
				nl.xd.dom.DOM.removeClass( _label , 'error' ) ;
				check = true ;
			} ;
			
			return check ;
		} ,
		checkTextarea: function( _label , element ) {
			var check = true ;
			
			if ( element.value == '' ) {
				nl.xd.dom.DOM.addClass( _label , 'error' ) ;
				check = false ;
			} else {
				nl.xd.dom.DOM.addClass( _label , 'error' ) ;
			} ;
			
			return check ;
		}
	} ;
} () ;