/********************************************************************/
fValidate.prototype.notEqualTo = function( oName )
{
	if ( this.typeMismatch( 'text' ) ) return;
	var otherElem = this.form.elements[oName];
	if ( this.elem.value == otherElem.value )
	{
		this.throwError( this.elem.fName + " must not be the same as " + otherElem.fName );
	}
}
/********************************************************************/
fValidate.prototype.lengthRange = function( minLen, maxLen )
{
	if ( this.typeMismatch( 'text' ) ) return;
	if ( this.elem.value.length < parseInt( minLen, 10 ) )
	{
		this.throwError( 'The ' + this.elem.fName + ' must be at least ' + minLen + ' characters long' );
	}
	if ( this.elem.value.length > parseInt( maxLen, 10 ) )
	{
		this.throwError( 'The ' + this.elem.fName + ' must be not greater than ' + maxLen + ' characters long' );
	}
}
/***************************************************************************/
fValidate.prototype.date = function( dateStr, delim, code, specDate ) {
	var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var vDate = this.elem.value;
	var mPlace = dateStr.indexOf("m");
	var dPlace = dateStr.indexOf("d");
	var yPlace = dateStr.indexOf("y");
	var yLength = dateStr.lastIndexOf("y") - yPlace + 1;
	var dateReg = dateStr.replace(/\w/g,"\\d");
	delim = puncStr(delim);
	dateReg = dateReg.replace(/-/g,"[" + delim + "]");
	dateReg = "^" + dateReg + "$";
	var day = vDate.substring(dPlace, dPlace+2);
	var month = vDate.substring(mPlace, mPlace+2);
	var year = vDate.substring(yPlace, yPlace + yLength);
	var regex = new RegExp(dateReg);
	var d = new Date(months[month-1] + " " + day + ", " + year);
	var today = (specDate == 'today') ? new Date() : new Date(specDate);
	today.setHours(0);
	today.setMinutes(0);
	today.setSeconds(0);
	today.setMilliseconds(0);
	var timeDiff = today.getTime() - d.getTime();
	var dateOk = false;
	switch (parseInt(code)) {
		case 1 : // Before specDate
			dateOk = (timeDiff > 0);
			break;
		case 2 : // Before or on specDate
			dateOk = ((timeDiff + 86400000) > 0);
			break;
		case 3 : // After specDate
			dateOk = (timeDiff < 0);
			break;
		case 4 : // After or on specDate
			dateOk = ((timeDiff - 86400000) < 0);
			break;
		default : dateOk = true;
	}
	if (!regex.test(vDate) || d == 'NaN' || !dateOk) {
		this.throwError( 'The date you entered for ' + this.elem.fName + ' is not valid' );
	}
	this.elemPass = false;
	
}
	
/********************************************************************/
fValidate.prototype.selectnone = function()
{
	var count = 0;	
	for ( var i = 0; i < this.elem.options.length; i++ )
		if ( this.elem.options[i].selected ) count++;
	if (count == 0) {
		this.throwError( 'Please select the ' + this.elem.fName );
	}
}
/********************************************************************/
fValidate.prototype.selectblank = function()
{
	var count = 0;	
	for ( var i = 0; i < this.elem.options.length; i++ )
		if ( this.elem.options[i].value != '' ) count++;
	if (count == 0) {
		this.throwError( 'Please enter the ' + this.elem.fName );
	}
}
/********************************************************************/
fValidate.prototype.radioblank = function()
{
	if ( this.typeMismatch( 'rg' ) ) return;
	this.elem2 = this.form.elements[this.elem.name];
	
	for ( var i = 0; i < this.elem2.length; i++ )
	{
		if ( this.elem2.item( i ).checked )
		{
			return;
		}
	}
	this.throwError( 'Please select an option for ' + this.elem2[0].fName );
}
/********************************************************************/
fValidate.prototype.checkbox2 = function( minC, maxC )
{
	if ( this.typeMismatch( 'cb' ) ) return;
	if ( this.elem == this.form.elements[this.elem.name] && !this.elem.checked )
	{
		this.throwError( "Please check " + this.elem.fName + " before continuing" );
	}
	else
	{
		this.elem = this.form.elements[this.elem.name];
		var len   = this.elem.length;
		var count = 0;
		
		if ( maxC == 999 || maxC == '*' )
		{
			maxC = len;
		}
		var i = len;
		if (typeof len == "undefined" || len == 1) {
			if (this.elem.checked) {
				count = 1;			
			}
		} else {
			while( i-- > 0 )
			{
				if ( this.elem[i].checked )
				{
					count++;
				}
			}
		}
		if ( count < minC || count > maxC )
		{
			var fName = '';
			if (this.elem.length > 1) {
				fName = this.elem[0].fName;
			} else {
				fName = this.elem.name;
			}
			this.throwError( 'Please select between ' + minC + ' and ' + maxC + ' options for ' + fName + '.\nYou currently have ' + count + ' selected' );
		}			
	}
}



/***** legacy code*******************************************************
/***************************************************************************/	
function puncStr(str) {
	str = str.replace("pipe", "|");
	return str.replace(/([\\\|\(\)\[\{\^\$\*\+\?\.])/g,"\\$1");
//	return str.replace(/([\!\@\#\$\%\^\&\*\(\)\_\+\-\=\{\}\|\[\]\\\:\"\;\'\<\>\?\,\.\/])/g,"\\$1");
	}

