var gValidators = new Array();

function SetValidityFlag(name, status, autoAdd, type) {
	var vObject = GetValidator(name);
	if( !vObject && autoAdd && autoAdd==true) {
		vObject = new Object;
		vObject.name = name;
		gValidators[gValidators.length] = vObject;
	}

	if( vObject ) {
		vObject.valid = status==true ? true : false;
		if( type ) vObject.type = type;
	}
	return true;
}

function RemoveValidator(name) {
	for(var c=0; c<gValidators.length; c++)
		if( gValidators[c].name==name ) {
			gValidators[c].valid = true;
			gValidators[c].name = "";
			return true;
		}

	return false;
}

function GetValidator(name) {
	for(var c=0; c<gValidators.length; c++)
		if( gValidators[c].name==name )
			return gValidators[c];
	return null;
}

function StartValidator(nextButtonName, stopDivName) {
	var nextObj = MM_findObj(nextButtonName);
	var stopObj = MM_findObj(stopDivName);
	if( !nextObj || !stopObj) return false;

	if( IsPageValid()==false ) {
		var spos = GetAbsPosition(stopObj);
		var npos = GetAbsPosition(nextObj);
		if( spos && npos ) {
			var x = npos.x+npos.cx/2 - spos.cx/2;
			var y = npos.y+npos.cy/2 - spos.cy/2;
			if( IsIE() ) {
				stopObj.style.pixelLeft = x;
				stopObj.style.pixelTop  = y;
			}
			else if( IsNetscape() ) {
				stopObj.style.left = x;
				stopObj.style.top = y;
			}
			stopObj.style.visibility = 'visible';
		}
	}
	else
		stopObj.style.visibility = 'hidden';

	setTimeout("StartValidator('"+nextButtonName+"','"+stopDivName+"');", 200);
}

function IsPageValid(error_text) {
	for(var c=0; c<gValidators.length; c++) {
		UpdateValidityFlag(gValidators[c]);
		if( gValidators[c].valid==false ) {
			if( error_text && error_text!='') alert(error_text);
			return false;
		}
	}
	return true;
}

function UpdateValidityFlag(validator) {
	if( !validator.type ) return;

	switch( validator.type )
	{
		case 'text':
			validator.valid = MM_findObj(validator.name).value=='' ? false : true;
			break;

		case 'option':
			validator.valid = ValidateOptionQuestion(validator.name);
			break;
	}
}

function ValidateOptionQuestion(qname) {
	var anyChecked = false;

	var question = MM_findObj(qname);
	if( question )
		for(var c=0; c<question.length; c++)
			anyChecked |= question[c].checked;

	return anyChecked;
}
