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

function common_checkHref ( address )
	{
	var re =/^http\:\/\/[\w.\-]+\.\w{2,}\/?\??/;
	//return false;
	//return true;
	return re.test(address);
	}

function BE_orderMain(  ) {
	this.layersCount = 0;
	this.layers = new Array();
	this.stepsContainer = getElement ( "BE_orderStepsContainer");
	this.BE_stepsBack = getElement ( "BE_stepsBack");
	this.BE_stepsNext = getElement ("BE_stepsNext");
	this.BE_stepsFinish = getElement ("BE_stepsFinish");
	this.BE_stepsBack.style.display = "none";
	this.BE_stepsNext.style.display = "none";
	this.BE_stepsFinish.style.display = "none";
	this.layersContainer = getElement ("BE_orderLayersContainer");
	this.curLayer = 0;
	this.lastLayerShown = 0;
	this.BE_stepsStylePassed = "";
	this.BE_stepsStyleCurrent = "red_fon";
	this.BE_stepsStyle = "";
	this.BE_stepsStyleSecond = "";
	this.BE_stepsStyleSecondStartNum = -1;
	
	this.navButtonDisplayValue = "inline";
	this.dataForm = null;
	
	//параметры для блока Введения в анкету/опросник
	this.IntroBlockExists = false;
	this.IntroBlockAllowNavBack = false;
	this.IntroBlockName = "Введение";
	
	//параметры для блока текста, появляющегося при выборе в чекбоксе или в радиогруппе пункта Иное или Другое и тд.
	this.otherTextareaHeight = 50;
	this.otherTextareaWidth = 50;
	
	//режим обязательного заполнения для ВСЕХ полей
	this.allFieldsNeedle = false;
	}

BE_orderMain.prototype.getValue = function( param ) {
	return this[ param ];
	}

BE_orderMain.prototype.setValue = function( param , value) {
	this[ param ] = value;
	}
	
BE_orderMain.prototype.addLayer = function( content ) {
	this.layersCount++;		
	
	if (this.layersCount > 0)
		{
		this.BE_stepsNext.style.display = this.navButtonDisplayValue;
		}

	
	var tmp_step = document.createElement( "A" );
	tmp_step.href = "javaScript:;BE_order.navigationLayerSteps( " + ( this.layersCount - 1 ) + ")";
	
	if ( this.IntroBlockExists ) tmp_step.innerHTML = this.layersCount == 1 ? this.IntroBlockName : this.layersCount-1;
	else tmp_step.innerHTML = this.layersCount;
	
	if ( this.IntroBlockExists && !this.IntroBlockAllowNavBack && this.layersCount == 1 ) tmp_step.style.display = "none";
	
	this.stepsContainer.appendChild( tmp_step );
	
	var tmp_layer = document.createElement( "DIV" );
	tmp_layer.innerHTML = content;
	tmp_layer.style.display = this.layersCount == 1 ? "block" : "none";
	tmp_layer = this.layersContainer.appendChild( tmp_layer );
	
	var tmp_fields = new Array();
	var tmp_tags = tmp_layer.getElementsByTagName( "*" );
	for( k = 0 ; k < tmp_tags.length ; k++ ) {
		if( tmp_tags[ k ].getAttribute( "BE_check" ) == "yes" ) {
			tmp_tags[ k ].setAttribute( "_this" , this );
			if ( this.allFieldsNeedle )
				tmp_tags[ k ].setAttribute ("needle", "yes");
			if ( tmp_tags[ k ].type == "checkbox" ) { 
				/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
				tmp_tags[ k ].onclick = function ( ){
					//в качестве this данная функция считает объект, для которого была создана, а не глобальный класс,
					//внутри которого сейчас находиться, т.е. текст функции он автономен от всего на свете,
					//кроме объекта, которому был присвоен
					var tmp_element = this;
					//alert( this.getAttribute( "_this" ) );
					//eval ( "var element=document.forms.OrderForm." + tmp_element.name);			
					var element = this.form[ tmp_element.name ];			
					if ( element.length ) {
						var FLGCheckAll = false;
						var FLGCheckOther = false;
						for( var i = 0; i < element.length; i++ ) {
							if ( element[i].getAttribute("check_all") == "yes" && !FLGCheckAll) {
								FLGCheckAll = true;
								var chekcAllElement = element[i];
								}
							if ( element[i].getAttribute("check_other") == "yes" && !FLGCheckOther) {
								FLGCheckOther = true;
								var checkOtherElement = element[i];
								}								
							}
						if ( FLGCheckAll && chekcAllElement) {
							if ( tmp_element == chekcAllElement && chekcAllElement.checked ) { 
								for( var i = 0; i < element.length; i++ ) {
									if ( element[i] != chekcAllElement ) element[i].checked = false;
									}
								}
							else {
								chekcAllElement.checked = false;
								}
							}
						if ( FLGCheckOther && checkOtherElement && checkOtherElement == this) {
							var nameOtherElement = checkOtherElement.name;
							var idOtherElement = checkOtherElement.getAttribute ("id");
							if ( !getElement("text_other_" + nameOtherElement) ) {
								var cloneTextElement = getElement ( "clone_other" ).cloneNode(true);
								checkOtherElement.parentNode.parentNode.appendChild (cloneTextElement);
								cloneTextElement.setAttribute ("id" , "text_other_" + nameOtherElement);
								cloneTextElement.setAttribute ("option_id" , idOtherElement);
								}
							else {
								var cloneTextElement = getElement("text_other_" + nameOtherElement );
								}
							
							if ( checkOtherElement.checked )
								{
								cloneTextElement.style.display="block";
								}
							else
								cloneTextElement.style.display="none";
							
							}
						}
								
					};
				/*+++++++++++++++++++++++++++++++++++++++++++++++++*/					
				}
				
			if ( tmp_tags[ k ].type == "radio" ) { 
				/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
				tmp_tags[ k ].onclick = function ( ){
					//в качестве this данная функция считает объект, для которого была создана, а не глобальный класс,
					//внутри которого сейчас находиться, т.е. текст функции он автономен от всего на свете,
					//кроме объекта, которому был присвоен
					var tmp_element = this;

					var element = this.form[ tmp_element.name ];			
					if ( element.length ) {
						var FLGCheckOther = false;
						for( var i = 0; i < element.length; i++ ) {
							if ( element[i].getAttribute("check_other") == "yes" && !FLGCheckOther) {
								FLGCheckOther = true;
								var checkOtherElement = element[i];
								}								
							}

						var nameOtherElement = checkOtherElement.name;
						var idOtherElement = checkOtherElement.getAttribute ("id");

						if ( FLGCheckOther && checkOtherElement && checkOtherElement == this) {
							if ( !getElement("text_other_" + nameOtherElement) ) {
								var cloneTextElement = getElement ( "clone_other" ).cloneNode(true);
								checkOtherElement.parentNode.parentNode.appendChild (cloneTextElement);
								cloneTextElement.setAttribute ("id" , "text_other_" + nameOtherElement);
								cloneTextElement.setAttribute ("option_id" , idOtherElement);
								}
							else {
								var cloneTextElement = getElement("text_other_" + nameOtherElement );
								}					
							}
						else {
							var cloneTextElement = getElement("text_other_" + nameOtherElement );	
							}
							
						if ( checkOtherElement == this )
							{
							cloneTextElement.style.display="block";
							}
						else if (cloneTextElement)
							cloneTextElement.style.display="none";								
						}
								
					};
				/*+++++++++++++++++++++++++++++++++++++++++++++++++*/					
				}
				
			tmp_fields[ tmp_fields.length ] = tmp_tags[ k ];
			}
		}
	
	this.layers[ this.layersCount - 1 ] = new Array( tmp_layer , tmp_step , tmp_fields );
	if(  this.layersCount == 1 ) this.showLayer( 0 );
	else this.hideLayer( this.layersCount - 1 );
	}

BE_orderMain.prototype.showLayer = function( layerNUmber ) {
	if ( this.lastLayerShown < layerNUmber )
		{
		alert ("Вы еще не заполнили предыдущие вкладки")
		return;
		}
	
	if( layerNUmber != this.curLayer ) {
		this.hideLayer( this.curLayer );
		}
	this.layers[ layerNUmber ][ 0 ].style.display = "block";
	this.layers[ layerNUmber ][ 1 ].className = this.BE_stepsStyleCurrent;
	this.curLayer = layerNUmber;
	this.checkLayerVisibility();
	}

BE_orderMain.prototype.hideLayer = function( layerNUmber ) {
	this.layers[ layerNUmber ][ 0 ].style.display = "none";
	if ( this.lastLayerShown < layerNUmber ) {
		this.layers[ layerNUmber ][ 1 ].className = (this.BE_stepsStyleSecondStartNum != -1 && this.BE_stepsStyleSecondStartNum > -1 && layerNUmber >= this.BE_stepsStyleSecondStartNum) ? this.BE_stepsStyleSecond : this.BE_stepsStyle;
		}
	else this.layers[ layerNUmber ][ 1 ].className = this.BE_stepsStylePassed;
	
	
	}	

BE_orderMain.prototype.navigationLayerSteps = function( layerNUmber ) { //  0 - назад, 1 - вперед
	var FLGCheckef = false;
	var differenceNumber = 0;
	differenceNumber = layerNUmber - this.curLayer;
	if ( differenceNumber == 1 ) {
		this.navigationSteps ( 1 )
		}
	else if ( differenceNumber == -1 ) {	
		this.navigationSteps ( 0 )
		}
	else if ( differenceNumber != 0 ) {
		this.showLayer ( layerNUmber );
		}
	}
	
BE_orderMain.prototype.navigationSteps = function( typeAction ) { //  0 - назад, 1 - вперед
	var layerNUmber = 0;
	if ( typeAction == 0 ) {
		layerNUmber = this.curLayer - 1 ;
		}
	if ( typeAction == 1 ) {
		layerNUmber = this.curLayer + 1 ;
		this.lastLayerShown = layerNUmber > this.lastLayerShown ? layerNUmber : this.lastLayerShown; 
		}
		
	if ( typeAction == 1 && this.checkLayerForm () && this.curLayer != -1)
		{
		this.showLayer ( layerNUmber );	
		}
	else if ( typeAction == 0 )
		{
		this.showLayer ( layerNUmber );
		}
	}

BE_orderMain.prototype.checkLayerVisibility = function( ) {
	if ( this.curLayer == 0 ) {
		this.BE_stepsBack.style.display = "none";
		this.BE_stepsNext.style.display = this.navButtonDisplayValue;
		this.BE_stepsFinish.style.display = "none";				
		}
	else if (this.curLayer == this.layersCount - 1 ) {
		this.BE_stepsBack.style.display = this.navButtonDisplayValue;
		this.BE_stepsNext.style.display = "none";
		this.BE_stepsFinish.style.display = this.navButtonDisplayValue;					
		}
	else if ( this.curLayer == 1 ) {
		if (this.IntroBlockExists && !this.IntroBlockAllowNavBack ) {
			this.BE_stepsBack.style.display = "none";
			this.BE_stepsNext.style.display = this.navButtonDisplayValue;
			this.BE_stepsFinish.style.display = "none";		
			}
		else {				
			this.BE_stepsBack.style.display = this.navButtonDisplayValue;
			this.BE_stepsNext.style.display = this.navButtonDisplayValue;
			this.BE_stepsFinish.style.display = "none";
			}
		}		
	else {
		this.BE_stepsBack.style.display = this.navButtonDisplayValue;
		this.BE_stepsNext.style.display = this.navButtonDisplayValue;
		this.BE_stepsFinish.style.display = "none";				
		}
	return true;
	}

BE_orderMain.prototype.checkLayerForm = function( ) {
	var tmp_objects = this.layers[ this.curLayer ][2];
	for( k = 0 ; k < tmp_objects.length ; k++ ) {
		var tmp_element = tmp_objects [ k ] ;

		if (tmp_element.getAttribute( "needle" ) == "yes" && tmp_element.type=="checkbox")
			{
			var element = document.forms.OrderForm[ tmp_element.name ];
			if ( element.length ) {
				var FLGChecked = false;
				for( var i = 0; i < element.length; i++ ) {
					if ( element[i].checked ) {
						FLGChecked = true;
						break;
						}
					}
				if ( !FLGChecked )	{
					alert( TXT_enter_value );
					return false;						
					}
				}
			else if ( !element.checked ) {
				alert( TXT_enter_value );
				return false;				
				}
			
			// проверка для открытого вопроса, пункт Иное или Другое и тд
			if ( tmp_objects [ k ].getAttribute( "needle" ) == "yes" && tmp_objects [ k ].checked && tmp_objects [ k ].getAttribute( "check_other" ) == "yes" ) {
				if ( tmp_objects [ k ].value == "" || tmp_objects [ k ].value == null ) {
					alert( TXT_enter_value );
					return false;	
					}
				}				
			}
		else if ( tmp_element.getAttribute( "needle" ) == "yes" && tmp_element.type=="radio" )
			{
			var element = document.forms.OrderForm[ tmp_element.name ];
			if ( element.length ) {
				var FLGChecked = false;
				for( var i = 0; i < element.length; i++ ) {
					if ( element[i].checked ) {
						FLGChecked = true;
						break;
						}
					}
				if ( !FLGChecked )	{
					alert( TXT_enter_value );
					return false;						
					}
				}
			else if ( !element.checked ) {
				alert( TXT_enter_value );
				return false;				
				}
			
			// проверка для открытого вопроса, пункт Иное или Другое и тд
			if ( tmp_objects [ k ].getAttribute( "needle" ) == "yes" && tmp_objects [ k ].checked && tmp_objects [ k ].getAttribute( "check_other" ) == "yes" ) {
				if ( tmp_objects [ k ].value == "" || tmp_objects [ k ].value == null ) {
					alert( TXT_enter_value );
					return false;	
					}
				}				
			}		
		/**/
		else if( tmp_element.getAttribute( "needle" ) == "yes" && tmp_element.getAttribute( "adv_select" ) && !tmp_element.value ) {
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_enter_value );
			return false;
			}
		else if( tmp_element.getAttribute( "needle" ) == "yes" && tmp_element.type == "select-one" && tmp_element[tmp_element.selectedIndex].value == "" ) {
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_enter_value );
			return false;			
			}
		else if( tmp_element.getAttribute( "needle" ) == "yes" && !tmp_element.value ) {
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_enter_value );
			return false;
			}
		else if( tmp_element.getAttribute( "special_mask" ) == "email" && tmp_element.value && !common_checkEmail( tmp_element.value ) ) {
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_enter_email );
			return false;
			}
		else if( tmp_element.getAttribute( "special_mask" ) == "href" && tmp_element.value) {
			if (tmp_element.value.substr(0,7) != "http://")
				tmp_element.value = "http://" + tmp_element.value;
			if( !common_checkHref( tmp_element.value ) ) {
				try { tmp_element.focus(); } catch( exeption ) {}
				alert( TXT_enter_href );
				return false;
				}
			}
		else if ( tmp_element.name == "pass_to" && frm.pass.value !=  tmp_element.value ) {
			try { tmp_element.focus(); } catch( exeption ) {}
			alert( TXT_pass_unequal );
			return false;
			}
		}
	return true;
	}
	
BE_orderMain.prototype.formCheckboxClick = function( element ) {
	alert (element.name);
	}
	
BE_orderMain.prototype.changeOtherOption = function( element ) {
	var option_id = element.parentNode.getAttribute ( "option_id" );
	var optionElement = getElement (option_id) ;
	if ( optionElement )
		optionElement.value = element.value;
	}
	
BE_orderMain.prototype.dataFormSubmit = function( frmObj, scriptType , scriptText ) {
	if ( frmObj ) {
		if ( scriptType == "php" )
			{
			if ( !getElement ("BE_submitForm") ) {
				var BE_frmObj = document.createElement( "FORM" );
				BE_frmObj.setAttribute ( "id" , "BE_submitForm" );
				BE_frmObj.setAttribute ( "name" , "BE_submitForm" );
				BE_frmObj.setAttribute ( "target" , "" );
				BE_frmObj.setAttribute ( "method" , "" );
				BE_frmObj.setAttribute ( "action" , "" );
				frmObj.appendChild( BE_frmObj );				
				}
			else var BE_frmObj = getElement ("BE_submitForm");
				
			if ( !getElement ("BE_submitIframe") ) {
				var tmp_iframe = document.createElement( "IFRAME" );
				tmp_iframe.setAttribute ( "id" , "BE_submitIframe" );
				tmp_iframe.setAttribute ( "name" , "BE_submitIframe" );
				frmObj.appendChild( tmp_iframe );
				}
			else var tmp_iframe = getElement ("BE_submitIframe");
			
			tmp_iframe.style.display = "none";
			BE_frmObj.style.display = "none";
			//BE_frmObj.target = "BE_submitIframe"; //раскоментить если нада чтобы был пост формы в другое место
			BE_frmObj.method = "POST";
			BE_frmObj.action = scriptText;

			// создание полей в новой форме для отправки:
			this.dataFormSubmitCreateFields (BE_frmObj);
			//->
			
			BE_frmObj.submit ();
			
			// удаление полей в новой форме для отправки:

			//->
			
			
			}
		}
	}

	
BE_orderMain.prototype.dataFormSubmitCreateFields = function( frmObj ) {

	for ( n = 0 ; n < this.layers.length; n++) {
		var tmp_objects = this.layers[ n ][2];
		if ( !tmp_objects.length )
			continue;

		for( k = 0 ; k < tmp_objects.length ; k++ ) {
			var tmp_element = tmp_objects [ k ] ;

			if (tmp_element.type=="checkbox" && !frmObj.elements[tmp_element.name] )
				{
				var element = document.forms.OrderForm[ tmp_element.name ];
				// создаем элемент для новой формы
				if ( !frmObj.elements[tmp_element.name] )	{
					var new_tmp_element = document.createElement( "INPUT" );
					new_tmp_element.setAttribute ( "name" , tmp_element.name );
					new_tmp_element.setAttribute ( "value" , "" );
					new_tmp_element.setAttribute ( "type" , "text" );
					frmObj.appendChild( new_tmp_element );
					
					// если несколько чек боксов то пробигаем по всем или просто проверяем если он один
					if ( element.length ) {
						for( var i = 0; i < element.length; i++ ) {	
							if ( element[i].checked  && element[i].value != "" ) {
								new_tmp_element.value += new_tmp_element.value == "" ? "" : "|||";
								new_tmp_element.value += element[i].value;
								}
							}
						}
					else if ( element.checked  && element.value != "" ) {
						new_tmp_element.value += new_tmp_element.value == "" ? "" : "|||";
						new_tmp_element.value += element[i].value;					
						}
					}
				}
			else if ( tmp_element.type=="radio" && !frmObj.elements[tmp_element.name] )
				{
				var element = document.forms.OrderForm[ tmp_element.name ];

				// создаем элемент для новой формы
				if ( !frmObj.elements[tmp_element.name] )	{
					var new_tmp_element = document.createElement( "INPUT" );
					new_tmp_element.setAttribute ( "name" , tmp_element.name );
					new_tmp_element.setAttribute ( "value" , "" );
					new_tmp_element.setAttribute ( "type" , "text" );
					frmObj.appendChild( new_tmp_element );
					
					// если несколько радиокнопок то пробигаем по всем или просто проверяем если он одна
					if ( element.length ) {
						for( var i = 0; i < element.length; i++ ) {	
							if ( element[i].checked  && element[i].value != "" ) {
								new_tmp_element.value = element[i].value;
								}
							}
						}
					else if ( element.checked  && element.value != "" ) {
						new_tmp_element.value = element[i].value;					
						}
					}		
				}
			else if ( tmp_element.type !="radio" && tmp_element.type !="checkbox" ) {
				var new_tmp_element = tmp_element.cloneNode(true);
				frmObj.appendChild( new_tmp_element );
				new_tmp_element.setAttribute ("id", null );
				}
			}
		}
		
	//alert( frmObj.outerHTML );
	}

