blob: d3661bf6d8bf8238a19080018066418a5effa680 [file] [log] [blame]
/***************************************************
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