function SMValidateControls(){
var arrDeclarations = arguments[0], valid = true;
	for(var i=0; i<arrDeclarations.length; i++){
		valid = arrDeclarations[i].isValid();
		if(!valid){
			return(false);
			};
		};
	return(true);
	};

function SMFormDataDeclaration(){
var $args = arguments, $t = this;
	if($args.length>0){
		$t.init.apply($t, $args);
		};
	};

SMFormDataDeclaration.prototype.init = function(){
var $args = arguments, $t = this, $m = "";
	$t.name = $args[0];
	$t.form = $args[1];
	$t.required = $args[2];
	$t.type = $args[3];
	$t.fixedValueOperator = $args[4];
	$t.fixedValue = $args[5];
	$t.validFrom = $args[6];
	$t.validTo = $args[7];
	$t.regularExpression = $args[8];
	$t.callExternalJS = $args[9];
	$t.errorMessages = new Array();
	// error messages
	for(var i=10; i<$args.length; i++){
		$m = SX_uEsc($args[i]);
		$t.errorMessages[i-10] = $m.replace(/\\n/g, "\n");
		};
	};

SMFormDataDeclaration.prototype.isValid = function(){
var $t = this, $form = document.forms[$t.form], $elem = null, $valid = true,
		$oneSel = false, $val = null, $pat = null, $fV = null,
		$em = $t.errorMessages;
	if($form==null){
		return(false);
		}
	else $elem = $form.elements[$t.name];
	if($elem==null){
		return(false);
		};
	// required:
	if($t.required){
		switch($elem.type){
			case "checkbox":
				$valid = $elem.checked; break;
			case "select-one":
				for(var i=0; i<$elem.options.length; i++){
					if($elem.options[i].selected){
						$oneSel = true;
						break;
						};
					};
				$valid = $oneSel; break;
			case "select-multiple":
				for(var i=0; i<$elem.options.length; i++){
					if($elem.options[i].selected){
						$oneSel = true;
						break;
						};
					};
				$valid = $oneSel; break;
			default:
				$valid = ($elem.value!=""); break;
			};
		if(!$valid){
			if($em[0]) alert($em[0]);
			$elem.focus();
			return(false);
			};
		};
	if($elem.type!="radio" &&
			$elem.type!="checkbox" &&
			$elem.type!="select-single" &&
			$elem.type!="select-multiple"){
		// type
		if($t.type!=0){
			switch($t.type){
				case 1:
					// text
					$pat = new RegExp("^[a-z]*$", "gi"); break;
				case 2:
					// numeric
					$pat = new RegExp("^\\d*$", "gi"); break;
				case 3:
					// email
					$pat = new RegExp("^[\\w][\\w\\.\\-]+@[\\w\\.\\-]+\\.[a-z]+$", "gi"); break;
				};
			$valid = $pat.test($elem.value);
			if(!$valid){
				if($em[1]) alert($em[1]);
				$elem.focus();
				return(false);
				};
			};
		// fixed value
		if($t.fixedValueOperator!=""){
			$val = $elem.value;
			$fV = $t.fixedValue;
			if($fV.indexOf("eval-js:")==0) $fV = eval($fV.substring(8));
			switch($t.fixedValueOperator){
				case "eq":
					// equal
					$valid = ($val==$fV); break;
				case "neq":
					// not equal
					$valid = ($val!=$fV); break;
				case "gt":
					// greater than
					$valid = (parseFloat($val) > parseFloat($fV)); break;
				case "gte":
					// greater or equal
					$valid = (parseFloat($val) >= parseFloat($fV)); break;
				case "lt":
					// less than
					$valid = (parseFloat($val) < parseFloat($fV)); break;
				case "lte":
					// less than or equal
					$valid = (parseFloat($val) <= parseFloat($fV)); break;
				};
			if(!$valid){
				if($em[2]) alert($em[2]);
				$elem.focus();
				return(false);
				};
			};
		// valid from / to
		if($t.type!=3&&($t.validFrom!="0"||$t.validTo!="0")&&($t.validFrom!=""||$t.validTo!="")){
			$val = $elem.value;
			if($t.type!=2) $val = $val.length;
			if($t.validFrom!="0") $valid = ($val >= parseFloat($t.validFrom));
			if($t.validTo!="0") $valid = $valid && ($val <= parseFloat($t.validTo));
			if(!$valid){
				if($em[3]) alert($em[3]);
				$elem.focus();
				return(false);
				};
			};
		// regular expression
		if($t.regularExpression!=""){
			$pat = new RegExp($t.regularExpression, "gi");
			// $elem.blur();
			$val = $elem.value;
			$valid = $pat.test($val);
			if(!$valid){
				if($em[4]) alert($em[4]);
				$elem.focus();
				return(false);
				};
			};
		};
	// external JS function
	if($t.callExternalJS!=""){
		if(window[$t.callExternalJS]!=null){
			$val = $elem.value;
			$valid = window[$t.callExternalJS]($val);
			if(!$valid){
				if($em[5]) alert($em[5]);
				$elem.focus();
				return(false);
				};
			};
		};
	return(true);
	};