/*
* Copyright (c) 2002-2005 Victor A.Spirin <victor_aspirin [at] mail [dot] ru>
* v. 1.1.7 - 2005.10.07
*/





/*boolean*/
/*public*/ function form_check( /*HTMLElement*/ form )
	{
		for( var i = 0 ; i < form.length ; i++ )
		{
		var e = form[i];
			switch( e.type )
			{
			case 'radio':
					if( !form__checkRadio(e) ) return false;
				break;
			case 'checkbox':
			case 'file':
			case 'hidden':
			case 'password':
			case 'text':
			case 'select-multiple':
			case 'select-one':
			case 'textarea':
					if( !form__checkDefault(e) ) return false;
				break;
			case 'button':
			case 'image':
			case 'reset':
			case 'submit':
			default:
			}
		}
	return true;
	}



/*boolean*/
/*protected*/ function form__checkRadio( /*HTMLElement*/ e )
	{
		if( e.group != null ) return true;
	e.group = e.form[e.name];
	var re = form__searchRE(e.group[0]);
		if( re == null ) return true;
	var v = '';
		for( var j = 0 ; j < e.group.length ; j++ )
		{
			if( e.group[j].checked )
			{
			v = e.group[j].value;
			break;
			}
		}
		if( v.search(re) == -1 )
		{
		alert(e.getAttribute('warning'));
		e.focus();
			if( typeof(e.select) == 'function' ) e.select();
		return false;
		}
	return true;
	}



/*boolean*/
/*protected*/ function form__checkDefault( /*HTMLElement*/ e )
	{
	var re = form__searchRE(e);
		if( re == null ) return true;
		if( e.value.search(re) == -1 )
		{
		alert(e.getAttribute('warning'));
			if( e.type != 'hidden' )
			{
			e.focus();
				if( e.type == 'checkbox' || e.type == 'password' || e.type == 'text' || e.type == 'textarea' )
				e.select();
			}
		return false;
		}
	return true;
	}



/*RegExp*/
/*protected*/ function form__searchRE( /*HTMLElement*/ e )
	{
	var m = e.getAttribute('mask');
		if( m == null || m == '' ) return null;
	var a = m.indexOf('/');
	var b = m.lastIndexOf('/');
		if( a == b || 2 < m.length - b - 1 )
		{
		alert('Illegal check condition (' + e.name + '): ' + m);
		return /^\x00$/i;
		}
	return new RegExp(m.substring(a + 1, b), m.substring(b + 1));
	}
