/**
* Функции верификации данных
*/

/**
* Проверка строки (является ли числом с плавающей точкой)
* @param str string строка для проверки
* @param bSigned bool является ли знаковым
* @return bool результат проверки
*/
function isFloat(str, bSigned) {
	var sFloatDelimiter="\\.";
	var reg_exp = new RegExp("^("+((bSigned)?"[\\-\\+]?":"")+"(\\d*"+sFloatDelimiter+"?\\d+)|(\\d+"+sFloatDelimiter+"?\\d*))$");
	return reg_exp.test(str);
}

/**
* Проверка поля: номер из len цифр
*/
function isNumber( x, len )
{
	var etalon = "0123456789";	
	for( i = 0; i < x.value.length; i++ )
		if( etalon.indexOf(x.value.charAt(i)) == -1 ) {
			alert( "Неверный формат данных в поле");
			x.focus();
			return false;
		}
	if( x.value.length != len ) {
		alert( "Неверное количество цифр в поле");
		x.focus();
		return false;
	}
	return true;
}

/**
* Проверка массива CheckBox'ов: выбран ли кто-нибудь
* @param cb_array массив CheckBox'ов
 * @return bool результат проверки
*/
function isCheckBoxChecked(cb_array) {
	var isOneChecked = false;
	if(!cb_array.length) return cb_array.checked;
	for(i=0; i<cb_array.length; i++)
		if(cb_array[i].checked) {
			isOneChecked = true;
			break;			
		}
	return isOneChecked;
}


/**
 * Проверка формы
 * @param form форма
 * @return bool результат проверки
 */
function validateForm(form)
{
	var element = null;
	
	try
	{
		for(i=0; i<form.elements.length; i++) 
		{
			element	= form.elements[i];
			title	= (element.title=="" ? "Ошибка заполнения формы" : element.title) + ":\n";
			
			if( element.type!="text" && element.type!="select-one" && element.type!="file" ) continue;
			if( typeof(element.check)=="undefined" ) continue;
			
			// 1. Проверка обязателных полей (непустых)
			if(element.check.indexOf("[require]")!=-1 && !element.disabled && element.value=="")
			{		
				alert(title + "Данное поле обязательно для заполнения!");
				element.focus();			
				return false;
			}
			
			// 2. Проверка числовых (int) полей		
			if(element.check.indexOf("[int]")!=-1 && !element.disabled && element.value!="")
			{		
				value = parseInt(element.value, 10);
				if (isNaN(value))
				{
					alert( title + "У данного поля - числовой тип (целые)!");
					element.focus();			
					return false;
				}
				element.value = value;
			}
			
			// 3. Проверка числовых (float) полей		
			if(element.check.indexOf("[float]")!=-1 && !element.disabled && element.value!="" && !isFloat(element.value))
			{		
				alert(title + "У данного поля - вещественный тип!");
				element.focus();			
				return false;
			}
			
		}
	}
	catch(e)
	{
		alert(e.message);
		return false;
	}

	return true;	
}

/**
* Проверка строки (является email)
* @param str строка для проверки
* @return bool результат проверки
*/
function isEmail(str)
{
	var reg_exp = /^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})/i
	return reg_exp.test(str);
}
