var fCheck=0;

function showPopupTest(testID){
	blindBox = $('#blind');
	currentTest = $('#'+testID+'');
	formName = currentTest.find('form').attr('name');

	vCenter(currentTest);
	setZI(currentTest);

	blindBox.height($('body').height()/*(window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight))*/).show().click(function(){
		closePopupTest(currentTest, blindBox);
		return false;
	});
	
	testformCheck();
	
	currentTest.find('select').hide(); //для ie6
	
	currentTest.find('a.closePopup').click(function(){
		closePopupTest(currentTest, blindBox);
		return false;
	});
	
	//document.forms[formName].submit();
	
	currentTest.find('button.checkForm').click(function(){
		if(fCheck == 1){
			$(this).parents('div.stepBox').fadeOut(400);
		}else {
		}
		return false;
	});
	
	currentTest.find('input.inputText').focus(function(){
		$(this).removeClass('invalid');
	});
	
	changeLang(currentTest);

	currentTest.find('#ft-06').change(function(){
		changeLang(currentTest);
	});
	
}

function changeLang(currentTest){
	
	//обновляем блок вопросов в зависимости от выбранного языка
	$.post('/onlinetest/act.php', 
			{action: 'display_q', lang: currentTest.find('#ft-06').val()},
			function (data){
				$('div.sb-q').html(data.str);
				
				//Приходится заново навешивать обработчики событий
				currentTest.find('a.button-N').click(function(){
					if(!$(this).hasClass('closeTest')){
						
						if ($(this).hasClass('sendRes')) result(currentTest);
						
						$(this).parents('div.stepBox').fadeOut(400);
						currentTest.find('select').show(); //для ie6
					}else{
						closePopupTest(currentTest, blindBox);
					}
					return false;
				});

				currentTest.show().find('div.sb-q').jScrollPane({scrollbarWidth: 2});

				currentTest.find('li input.inputRadio').change(function(){
					fillingQ($(this));
				});
				//для ie
				currentTest.find('li input.inputRadio').click(function(){
					fillingQ($(this));
				});
				currentTest.find('li label').click(function(){
					fillingQ($(this));
				});


			}, "json");	
	
}

//обработка результатов - посчитаем количество правильных ответов и отправим письма
function result(currentTest){
	$.ajax({
	  url: '/onlinetest/act.php',
	  dataType: "json",
	  type: "POST",
	  data:  'action=results&langName='+$('select[name="lang"] option:selected').text()+'&'+$('form[name=form1]').serialize(),
	  success: function(response) { },
	  error: function(response) { }
	});
}

function fillingQ(a){
	aVal = a.parent('li').find('label').text();/*a.attr('str');*/
	aArr = aVal.split(',')
	ttt = a.parents('li').find('strong');
	tttNum = ttt.length;
	for(i=0; i<tttNum; i++){
		ttt.eq(i).text(aArr[i]);	
	}
	$('div.sb-q').jScrollPane({scrollbarWidth: 2});
}

function setZI(currentTest){
	sb = currentTest.find('div.stepBox');
	numSB = sb.length;
	zi = numSB;
	for(i=0; i<numSB; i++){
		sb.eq(i).css({zIndex:zi, display:'block'});
		zi--;
	}
};

function vCenter(item) {
	windowHeight = document.documentElement.clientHeight;
	currentOffset = document.documentElement.scrollTop || document.body.scrollTop;
	currentTop = currentOffset + parseInt((windowHeight - ($(item).height()+30)) / 2);
	if(currentTop < (currentOffset+20)){ 
		$(item).css({top:(currentOffset+20)});
	}else{ 
		$(item).css({top:currentTop}); 
	}
	return false;
}
	
function closePopupTest(currentTest, blindBox){
	currentTest.hide();
	blindBox.hide();
}


function testformCheck() {
	
	// Перечень формальных классов элементов форм
	var s="checkForm";
	var r="required";
	var m="missed";
	var w="wrong";
	
	// Перечень смысловых классов элементов форм
	var phone="phone";
	var number="number";
	var email="email";
	var time="time";
	
	// Переменные сообщения об ошибках
	var rMessage=""; // required message
	var wMessage=""; // wrong message
	
	// Взять все формы на странице
	var forms = document.getElementsByTagName("form");
	if (!forms) return;
	
	// Перебрать все элементы каждой из этих форм
	for (i=0; i<forms.length; i++) {
		var theForm=forms[i]; // текущая форма
		var e=forms[i].elements; // ее элементы
		
		// Привязать обработчики к элементам с class="required", а также со всеми классами, требующими специфических данных
		for (var k=0; k<e.length; k++) {
		
			if (check(e[k],r) || check(e[k],phone) || check(e[k],email) || check(e[k],time)) {
				switch (e[k].tagName) {
					case "INPUT":
					case "TEXTAREA":
						e[k].onkeyup = e[k].onkeypress = function(){
							if(this.value!=""){
								removeclass(getStyleElement(this), m);
								removeclass(getStyleElement(this), w);
							}else{
								addclass(getStyleElement(this), m);								
							}
						}
						break;
					case "SELECT":
						e[k].onchange = function(){
							if(this.options.selectedIndex!=0){
								removeclass(getStyleElement(this), m);
							}else{
								addclass(getStyleElement(this), m);								
							}
						}
						break;
				}
			}
			
			if (check(e[k],s)){ // Привязываем функцию валидатора формы к элементу с class="submitForm"				
				e[k].onclick = validate(theForm);
			}
		}
	}
	
	function validate(f){
		return function(){return validateForm(f);}
	}
	
	function validateForm(theForm) {
		var ok = true; // флаг валидности данной формы
		var e = theForm.elements; // все элементы данной формы
		
		for (i=0; i<e.length; i++) {			
			switch (e[i].tagName) {
				case "INPUT":
				case "TEXTAREA":
					if (check(e[i],r) && !e[i].value) { // если class="required" и поле не заполнено																		
						ok = false;
						addclass(e[i], 'invalid');
						//addclass(getStyleElement(e[i]), m);
						//rMessage+=getLabel(e[i])+"\n";						
					}else if(e[i].value!=""){
						if(check(e[i],phone) && !isPhone(e[i].value)){
							ok = false;
							addclass(e[i], 'invalid');
							//addclass(getStyleElement(e[i]), w);
							//wMessage+=getLabel(e[i])+"\n";							
						/*}else if(check(e[i],number) && !isNumber(e[i].value)){
							ok = false;
							addclass(getStyleElement(e[i]), w);
							wMessage+=getLabel(e[i])+"\n";	*/						
						}else if(check(e[i],email) && !isEmail(e[i].value)){
							ok = false;
							addclass(e[i], 'invalid');
							//addclass(getStyleElement(e[i]), w);
							//wMessage+=getLabel(e[i])+"\n";							
						}/*else if(check(e[i],time) && !isTime(e[i].value)){
							ok = false;
							addclass(getStyleElement(e[i]), w);
							wMessage+=getLabel(e[i])+"\n";							
						}*/
					}
					break;
				case "SELECT":
					if (check(e[i],r) && e[i].options.selectedIndex==0) { // если class="required" и оставлен нулевой пункт по умолчанию
						ok = false;
						addclass(getStyleElement(e[i]), m);
						rMessage+=getLabel(e[i])+"\n";						
					}
					break;
			}
		}
		
		if (ok){
			//theForm.submit();
			fCheck=1;
		}else{
			fCheck=0;
			/*if(rMessage!=""){
			rMessage="Заполните пропущенные поля:\n"+rMessage+"\n\n";
			}
			if(wMessage!=""){
			wMessage="Введите корректные данные:\n"+wMessage;
			}
			alert(rMessage+wMessage);
			rMessage="";
			wMessage="";*/
			return false;
		}
	}
	
	// Функция добавления класса к элементу
	function addclass(o, c) {
		if (!check(o, c)) {
			o.className += o.className == ''?c:' '+c;
		}
	}
	
	// Функция удаления класса
	function removeclass(o, c) {
		o.className = o.className.replace(c, '');
	}
	
	// функция проверки наличия данного класса
	function check(o, c) {	 	
		return new RegExp('\\b' + c + '\\b').test(o.className);
	}
	
	// Функции проверок на правильность введенных данных
	function isTime(sTime) {
	oReTime = /^(2[0-3][:\-][0-5][0-9]$)|^([0-1]{0,1}[0-9][:\-][0-5][0-9])$/; 
	return oReTime.test(sTime);
	}
	
	function isNumber(sNumber) {
		oReNumber = /^\-{0,1}\d+$/;
		return oReNumber.test(sNumber);
	}
	
	function isPhone(sPhone) {
		sPhone = sPhone.replace( /[\s\-\(\)\.\]\[]/g, '' );
		oRePhone = /^\+*\d{7,11}(\+\d{2,4})?$/;
		return oRePhone.test(sPhone);
	}
	
	function isEmail(sEmail){
		//sEmail = sEmail.replace( /\(.*?\)/, '' );
		oRegExp = /^[A-Za-z0-9][-\w]*(\.[A-Za-z0-9][-\w]*)*@[A-Za-z0-9][-\w]*(\.[A-Za-z0-9][-\w]*)*\.[a-zA-Z]{2,4}$/;
		return oRegExp.test(sEmail);
	}

	// Возвращаем внутреннее содержимое label, соотвествующего незаполненному элементу формы 
	function getLabel(e){
		labels=e.form.getElementsByTagName("label");
		for(k=0;k<labels.length;k++){
			if(labels[k].htmlFor==e.id){
			    return labels[k].innerHTML;
			    break;
			}
		}
	}
	// Задание "знакового" элемента, к которому будет применяться class="missed" -
	// для указания на элемент формы, необходимый к заполнению
	function getStyleElement(o){
	
		// return o; // задание самого элемента формы в качестве знакового элемента
		// return o.parentNode; // задание родительского контейнера в качестве знакового элемента	
		return o.parentNode.getElementsByTagName("label")[0]; // задание label в качестве знакового элемента
	}
}


// window.onload = formsCheck;
