﻿function forms_checkEmail ( address )
	{
	return /^\w[\w.\-\&]*\@\w[\w.\-]*\w{2,}/.test(address); 
	//return re.test(address);
	}

function forms_checkHref ( address )
	{
	var re =/^http\:\/\/[\w.\-]+\.\w{2,}\/?\??/;
	//return false;
	//return true;
	return re.test(address);
	}
	
function forms_checkFile ( fileName, accessExtStr )
	{
	eval ("var re =/\.((" + accessExtStr + "))$/;");
	return re.test(fileName);
	}

function forms_check_all_check_box ( object ) {
	var frmObj = object.form;
	var element_name = object.getAttribute( "name_lat" );
	var cbCount = parseInt(object.getAttribute("count_cb"));
	if ( cbCount > 0 ) {
		for( var nn = 1; nn <= cbCount; nn++ ) {
			var tmp_element_name = element_name + "_" + nn;
			var tmp_element = frmObj.elements[ element_name + "_" + nn ];
			if ( tmp_element ) 
				tmp_element.checked = true;
			}
		}
	if ( frmObj.elements[ "_is_manual_" + element_name ] ) {
		frmObj.elements[ "_is_manual_" + element_name ].checked = true;
		}
	}

function forms_uncheck_all_check_box ( object ) {
	var frmObj = object.form;
	var element_name = object.getAttribute( "name_lat" );
	var tmp_element = frmObj.elements[ "_check_all_" + element_name ];
	if ( tmp_element ) 
		tmp_element.checked = false;
	}

function forms_check_all_multi_select ( object ) {
	var element_name = object.getAttribute( "name_lat" );
	var frmObj = object.form;
	var tmp_element = frmObj.elements[ element_name ];
	if ( tmp_element && tmp_element.length )
		for (var nn=0; nn<tmp_element.length; nn++) {
			tmp_element[ nn ].selected = true;
			}
	}
function forms_uncheck_all_multi_select ( object ) {
	var element_name = object.name;
	var frmObj = object.form;
	var tmp_element = frmObj.elements[ "_check_all_" + element_name ];
	if ( tmp_element )
		tmp_element.checked = false;
	}

TXT_enter_value = "Введите обязательное значение: ";
TXT_enter_email = "Введите корректный E-Mail: ";
TXT_enter_href = "Введите корректную ссыдку: ";
TXT_pass_unequal = "Пароли не совпали: ";
TXT_enter_int = "Введите целое число: ";
TXT_enter_float = "Введите дробное число: ";
TXT_enter_file = "Укажите правильный файл: ";
function forms_check_form ( frmObj, formElememt ) {
	//alert( frmObj.elements.length );
	for ( var i=0; i<frmObj.elements.length; i++ ) {
		var element = frmObj.elements[ i ];
		if ( !element ) continue;
		var element_name = element.type=="checkbox" ? element.getAttribute( "name_lat" ) : element.name;
		if ( !formElememt[ element_name ] )
			continue;
		formElememt[ element_name ][1] = false;
		}
		
	for ( var i=0; i<frmObj.elements.length; i++ ) {
		var element = frmObj.elements[ i ];
		if ( !element ) continue;
		var element_name = element.type=="checkbox" ? element.getAttribute( "name_lat" ) : element.name;
		if ( !formElememt[ element_name ] || formElememt[ element_name ][1] === true )
			continue;
		var dop_name = formElememt[ element_name ][0];
		formElememt[ element_name ][1] = true;
		
		if( ( element.getAttribute( "special_mask" ) == "int" || element.getAttribute( "special_mask" ) == "float" ) && element.value ) { //Если в поле должно быть введено число, и оно введено, убираем пробелы
			element.value = element.value.replace( /\s/g , "" );
			}
		
		if (element.getAttribute( "needle" ) == "yes" && element.type=="checkbox")
			{
			var FLGChecked = false;
			var cbCount = parseInt(element.getAttribute("count_cb"));
			if ( cbCount > 0 ) {
				for( var nn = 1; nn <= cbCount; nn++ ) {
					var tmp_element_name = element_name + "_" + nn;
					var tmp_element = frmObj.elements[ element_name + "_" + nn ];
					if ( tmp_element.checked ) {
						FLGChecked = true;
						break;
						}
					}
				}
			
			var is_manual_element = frmObj.elements[ "_is_manual_" + element_name ];
			var manual_element_value = frmObj.elements[ "_manual_" + element_name ].value;
			// проверка для открытого вопроса, пункт Иное или Другое и тд
			if ( !FLGChecked && ( !is_manual_element.checked || manual_element_value == "" || manual_element_value == null ) ) {
				alert( TXT_enter_value + dop_name );
				return false;	
				}
			}
		else if ( element.getAttribute( "needle" ) == "yes" && element.type=="radio" )
			{
			var FLGChecked = false;
			var isManualFLG = false;
			if ( frmObj.elements[ element.name ].length ) {	
				var tmp_elements = frmObj.elements[ element.name ];
				for( var i = 0; i < tmp_elements.length; i++ ) {
					if ( tmp_elements[i].checked ) {
						FLGChecked = true;
						isManualFLG = tmp_elements[i].getAttribute( "is_manual" ) == "yes" ? true : false;
						break;
						}
					}
				}

			if ( isManualFLG ) { // проверка для открытого вопроса, пункт Иное или Другое и тд
				var manual_element_value = frmObj.elements[ "_manual_" + element_name ].value;
				if ( manual_element_value == "" || manual_element_value == null ) {
					alert( TXT_enter_value + dop_name );
					return false;	
					}
				}
			else if ( !FLGChecked ) {
				alert( TXT_enter_value + dop_name );
				return false;			
				}
			}
		else if( element.getAttribute( "needle" ) == "yes" && element.type == "select-one" ) {
			var isManualFLG = element.getAttribute( "is_manual" ) == "yes" ? true : false;
			var manual_element_value = isManualFLG ? frmObj.elements[ "_manual_" + element_name ].value : "";
			if ( (isManualFLG && ( manual_element_value == null || manual_element_value == "" ) ) || element.value == "" ) {
				try { tmp_element.focus(); } catch( exeption ) {}
				alert( TXT_enter_value + dop_name );
				return false;
				}
			}
		else if( element.getAttribute( "needle" ) == "yes" && element.type == "select-multiple" ) { 
			var FLGChecked = false;
			var isManualFLG = element.getAttribute( "is_manual" ) == "yes" ? true : false;
			var manual_element_value = isManualFLG ? frmObj.elements[ "_manual_" + element_name ].value : "";
			for (var nn=0; nn<element.length; nn++) {
				if ( element[ nn ].selected ) {
					FLGChecked = true;
					break;
					}
				}
			FLGChecked = !FLGChecked ? ( isManualFLG && (manual_element_value == null || manual_element_value == "" ) ? false : true ) : FLGChecked;
			if ( !FLGChecked ) {
				try { tmp_element.focus(); } catch( exeption ) {}
				alert( TXT_enter_value + dop_name );
				return false;
				}
			}
		else if ( element.getAttribute( "needle" ) == "yes" && ( element.value == "null" || element.value == "" ) ){
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_enter_value + dop_name );
			return false;
			}
		
		if( element.getAttribute( "special_mask" ) == "email" && element.value && !forms_checkEmail( element.value ) ) {
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_enter_email + dop_name );
			return false;
			}
		else if( element.getAttribute( "special_mask" ) == "href" && element.value) {
			if (element.value.substr(0,7) != "http://")
				element.value = "http://" + element.value;
			if( !forms_checkHref( element.value ) ) {
				try { element.focus(); } catch( exeption ) {}
				alert( TXT_enter_href + dop_name );
				return false;
				}
			}
		else if ( element.getAttribute( "special_mask" ) == "password" ) {
			if (element.getAttribute( "confirm" ) == "yes") {
				var pass_element = frmObj.elements[ element.name.substr(9) ];
				if ( pass_element && pass_element.value != element.value ) {
					try { element.focus(); } catch( exeption ) {}
					alert( TXT_pass_unequal + dop_name );
					return false;
					}
				}
			}
		else if ( element.getAttribute( "special_mask" ) == "int" && element.value && element.value != parseInt(element.value) ) {
			try { element.focus(); } catch( exeption ) {}
			alert( TXT_enter_int + dop_name );
			return false;
			}
		else if ( element.getAttribute( "special_mask" ) == "float" && element.value && element.value != parseFloat(element.value) ) {
			try { element.focus(); } catch( exeption ) {}
			alert( TXT_enter_float + dop_name );
			return false;
			}
		else if ( element.getAttribute( "special_mask" ) == "file" && element.value && !forms_checkFile( element.value.toLowerCase() , element.getAttribute( "extensions" ) ) ) {
			try { element.focus(); } catch( exeption ) {}
			alert( TXT_enter_file + dop_name );
			return false;
			}
		}
	return true;
	}

function forms_radioShowHideManual( element ) {
	var frmObj = element.form;
	var divOther = document.getElementById( "_manual_div_" + element.name );

	if ( frmObj.elements[ element.name ].length ) {	
		var tmp_elements = frmObj.elements[ element.name ];
		for( var i = 0; i < tmp_elements.length; i++ ) {
			if ( tmp_elements[i].checked && tmp_elements[i].getAttribute( "is_manual" ) == "yes" ) {
				if ( divOther ) 
					divOther.style.display = "block";
				}
			else {
				if ( divOther ) 
					divOther.style.display = "none";
				}
			}
		}	
	}
function forms_submit_multi_selects( frmObj, formElememt ) {
	for ( var i=0; i<frmObj.elements.length; i++ ) {
		var element = frmObj.elements[ i ];
		var element_name = element.name;
		if ( !element || element.type != "select-multiple" ) continue;
		if ( !formElememt[ element_name ] ) continue;

		var elementValuesInput = frmObj.elements[ "_var_multi_"+element_name ];
		var elementValues = "";
		if ( elementValuesInput && element.type == "select-multiple" && element.value != "" ) {
			for (var nn=0; nn<element.length; nn++) {
				if ( element[ nn ].selected ) {
					elementValues += elementValues !="" ? "|||" : "";
					elementValues += element[ nn ].value;
					}
				}
			elementValuesInput.value = elementValues;
			}
		}
	}
