| /*************************************************** |
| |
| fValidate |
| Copyright (c) 2000-2003 |
| by Peter Bailey |
| www.peterbailey.net/fValidate/ |
| |
| fValidate.controls.js |
| |
| Included Validators |
| ------------------- |
| select |
| selectm |
| selecti |
| checkbox |
| radio |
| file |
| |
| This file is only part of a larger validation |
| library and will not function autonomously. |
| |
| Created at a tab-spacing of four (4) |
| |
| ****************************************************/ |
| |
| fValidate.prototype.select = function() |
| { |
| if ( this.typeMismatch( 's1' ) ) return; |
| if ( this.elem.selectedIndex == 0 ) |
| { |
| this.throwError( [this.elem.fName] ); |
| } |
| } |
| |
| fValidate.prototype.selectm = function( minS, maxS ) |
| { |
| if ( this.typeMismatch( 'sm' ) ) return; |
| if ( typeof minS == 'undefined' ) |
| { |
| this.paramError( 'minS' ); |
| } |
| if ( maxS == 999 || maxS == '*' || typeof maxS == 'undefined' || maxS > this.elem.length ) maxS = this.elem.length; |
| |
| var count = 0; |
| for ( var opt, i = 0; ( opt = this.elem.options[i] ); i++ ) |
| { |
| if ( opt.selected ) count++; |
| } |
| |
| if ( count < minS || count > maxS ) |
| { |
| this.throwError( [minS, maxS, this.elem.fName, count] ); |
| } |
| } |
| |
| fValidate.prototype.selecti = function( indexes ) |
| { |
| |
| if ( this.typeMismatch( 's1' ) ) return; |
| if ( typeof indexes == 'undefined' ) |
| { |
| this.paramError( 'indexes' ); |
| return; |
| } |
| indexes = indexes.split( "," ); |
| var selectOK = true; |
| |
| for ( var i = 0; i < indexes.length; i++ ) |
| { |
| if ( this.elem.options[indexes[i]].selected ) |
| { |
| selectOK = false; |
| break; |
| } |
| } |
| if ( !selectOK ) |
| { |
| this.throwError( [this.elem.fName] ); |
| } |
| } |
| |
| fValidate.prototype.checkbox = function( minC, maxC ) |
| { |
| if ( this.typeMismatch( 'cb' ) ) return; |
| if ( typeof minC == 'undefined' ) |
| { |
| this.paramError( 'minC' ); |
| return; |
| } |
| if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked ) |
| { |
| this.throwError( [this.elem.fName] ); |
| } |
| else |
| { |
| this.elem = this.form.elements[this.elem.name]; |
| var len = this.elem.length; |
| var count = 0; |
| |
| if ( maxC == 999 || maxC == '*' || typeof maxC == 'undefined' || maxC > this.elem.length ) |
| { |
| maxC == len; |
| } |
| var i = len; |
| while( i-- > 0 ) |
| { |
| if ( this.elem[i].checked ) |
| { |
| count++; |
| } |
| } |
| if ( count < minC || count > maxC ) |
| { |
| this.throwError( [minC, maxC, this.elem[0].fName, count] ); |
| } |
| } |
| } |
| |
| fValidate.prototype.radio = function() |
| { |
| if ( this.typeMismatch( 'rg' ) ) return; |
| if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked ) |
| { |
| this.throwError( [this.elem.fName] ); |
| } |
| else |
| { |
| this.elem = this.form.elements[this.elem.name]; |
| |
| for ( var i = 0; i < this.elem.length; i++ ) |
| { |
| if ( this.elem.item( i ).checked ) |
| { |
| return; |
| } |
| } |
| this.throwError( [this.elem[0].fName] ); |
| } |
| } |
| |
| fValidate.prototype.file = function( extensions, cSens ) |
| { |
| if ( this.typeMismatch( 'file' ) ) return; |
| if ( typeof extensions == 'undefined' ) |
| { |
| this.paramError( 'extensions' ); |
| return; |
| } |
| cSens = Boolean( cSens ) ? "" : "i"; |
| var regex = new RegExp( "^.+\\.(" + extensions.replace( /,/g, "|" ) + ")$", cSens ); |
| if ( ! regex.test( this.elem.value ) ) |
| { |
| this.throwError( [extensions.replace( /,/g, "\n" )] ); |
| } |
| } |
| // EOF |