// Перечень смысловых классов элементов форм
var phone="phone";
var number="number";
var email="email";
var time="time";
var text="text";

function formsCheck() {
    // Перечень формальных классов элементов форм
	var s="submitForm";
	var r="required";
	var m="missed";
	var w="wrong";
	
	// Переменные сообщения об ошибках
	var rMessage=""; // required message
	var wMessage=""; // wrong message
	// Взять все формы на странице
	var forms = document.getElementsByTagName("form");
	if (!forms) return;
	
	// Перебрать все элементы каждой из этих форм
	for (var 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);
//            }

		}
        validateForm(theForm);
    }
	function validate(f){
		return function(){return validateForm(f);}
	}
	
	function validateForm(theForm) {
        var ok = true; // флаг валидности данной формы
		var e = theForm.elements; // все элементы данной формы
        var testmsg="";
		for (i=0; i<e.length; i++) {			
//			testmsg+=i + "---" + e[i].className + "---" + getLabel(e[i])+ "\n";
            switch (e[i].tagName) {
					
			
				case "INPUT":
				case "TEXTAREA":
					if (check(e[i],r) && !e[i].value) { // если class="required" и поле не заполнено																		
						ok = false;
						addclass(getStyleElement(e[i]), m);
                        if(check(e[i],"captcha")){
                            rMessage+="Код, указанный на картинке"+"\n";
                        } else{
                            rMessage+=getLabel(e[i])+"\n";
                        }

					}else if(e[i].value!=""){
						if(check(e[i],phone) && (!isNumber(e[i].value) || e[i].value.length != 10)){
							ok = false;
							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(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";
                        }else if (check(e[i],text) && isNumber(e[i].value)){
                        	ok = false;
							addclass(getStyleElement(e[i]), w);
							wMessage+=getLabel(e[i])+"\n";
                        }
						else if(theForm.name != 'form_registration' && theForm.name != 'MyForm3')
						{
							if ((i == 10) && !isEmail(e[i].value)){//обработка e-mail-a
								ok = false;
								addclass(getStyleElement(e[i]), w);
								wMessage+=getLabel(e[i])+"\n";
                            }
							/*else if ((i == 9) && !isNumber(e[i].value) && e[i].value.length != 10){//обработка телефонов
								ok = false;
								addclass(getStyleElement(e[i]), w);
								wMessage+=getLabel(e[i])+"\n";
                            }
							else if (((i == 11) || (i == 15) || (i == 18)) && !isNumber(e[i].value)){//обработка количества страниц и источников
								ok = false;alert(getLabel(e[i]));
								addclass(getStyleElement(e[i]), w);
								wMessage+=getLabel(e[i])+"\n";
                            }*/
						}
                    }
					break;
				case "SELECT":
					if (check(e[i],r) && (e[i].value == "не выбрано" || e[i].value == "0" || e[i].value == "")) { // если class="required" и оставлен нулевой пункт по умолчанию
						ok = false;
                        addclass(getStyleElement(e[i]), m);
						rMessage+=getLabel(e[i])+"\n";						
					}
//					else if (e[i].options.selectedIndex==0 && ((i == 6) || (i == 12) || (i == 16) || (i == 19) || (i == 26))){
//						alert("e[i].options");
//                        ok = false;
//						addclass(getStyleElement(e[i]), m);
//						rMessage+=getLabel(e[i])+"\n";
//					}
					break;
			}
		}

//        alert(testmsg);
		if (ok){
			theForm.submit();
		}else{
			if(rMessage!=""){
			rMessage="Заполните пропущенные поля:\n"+rMessage+"\n\n";
			}
			if(wMessage!=""){
			wMessage="Введите корректные данные:\n"+wMessage;
			}
			alert(rMessage+wMessage);
			rMessage="";
			wMessage="";
			return false;
		}

	}
	
	// Функция добавления класса к элементу
	function addclass(o, c) {
		if(!o) return;
		if (!check(o, c)) {
			o.className += o.className == ''?c:' '+c;
		}
	}
	
	// Функция удаления класса
	function removeclass(o, c) {
		if(!o) return;
		o.className = o.className.replace(c, '');
	}
	


	// Возвращаем внутреннее содержимое 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 в качестве знакового элемента
	}
}

// функция проверки наличия данного класса
function check(o, c) {
    if(!o) return;
    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, '' );
    document.getElementById("phone_edit").value = sPhone;
    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}$/;
    var t = oRegExp.test(sEmail);
    return t;
}

function is_correct(name) {
       var elem =  document.getElementById(name);
       /*var elem2 =  document.getElementById(name+'_div');*/
       var ok = true;
       if (elem.value == ''){
           ok = false;
       } else {
           if(check(elem,phone) && (!isNumber(elem.value) || elem.value.length!=10)){
                ok = false;
            }else if(check(elem,number) && !isNumber(elem.value)){
               ok = false;
            }else if(check(elem,email) && !isEmail(elem.value)){
                ok = false;
            }else if(check(elem,time) && !isTime(elem.value)){
                ok = false;
            }else if(isNumber(elem.value)&& check(elem,text)){
               ok = false;
            }
            /*ok = true;*/
       }
        /*alert(document.getElementById("phone_edit").value);*/
        if(ok) {
            showConfirm(elem);
            /*elem2.style.background = "url('/i/img/done.png') no-repeat 0 0";*/
        } else {
            showError(elem);
            /*elem2.style.background = "url('/i/img/error.png') no-repeat 0 0";*/
        }
        if (elem.value == ''){
        	hideAllNotice(elem);
        }
        /*elem2.style.display = "block";*/
}
function isText(sText){
	oReText = /[^A-Za-zА-Яа-я]/;
    return oReText.test(sText);
}
function showError (checkElem){
	$(checkElem).removeClass('confirm_input');
    divId = '#' + $(checkElem).attr('id')+'_div';
	$(checkElem).addClass('err_input');
	$(divId+'_err').show();
	$(divId).hide();
}
function showConfirm (checkElem){
	$(checkElem).removeClass('err_input');
	divId = '#' + $(checkElem).attr('id')+'_div';
	$(checkElem).addClass('confirm_input');
	$(divId).show();
	$(divId+'_err').hide();
}
function hideAllNotice(checkElem){
	$(checkElem).removeClass('err_input');
	$(checkElem).removeClass('confirm_input');
	divId = '#' + $(checkElem).attr('id')+'_div';
	$(divId).hide();
	$(divId+'_err').hide();
}
function isEmailInDB (email, checkAction){
	var ExistEmail;
	divId = '#' + $(email).attr('id')+'_div';
	$.ajax({
		type: "POST",
		url: checkAction,
		data: 'email=' + email.val(),
		async: false,
		beforeSend: function(){
			email.parent().parent().parent().find('#' + divId + '_err').hide();
			email.parent().parent().parent().find('#' + divId).hide();
			email.parent().parent().parent().find('#' + divId + '_ajax').show();
		},
		success: function(msg){
			email.parent().parent().parent().find('#' + divId + '_ajax').hide();
			if (msg == "true"){
				ExistEmail = 1;
			} else {
				ExistEmail = 0;
			}
        }
	});
	if (ExistEmail == 1){
		return true;
	} else {
		return false;
	}
}
/*Функции проверки для даты на форме редактирования личных данных*/
/*Функция проверки количества дней в месяце*/
	function CheckDaysByMonth (month){
		DaySelect = $('form[name=form_contact] select[name=day]');
		countDays = $('form[name=form_contact] select[name=day] option').length - 1;
		currYear = $('form[name=form_contact] select[name=year]').val();
		if(month<8){
			if (month != 2 && month!=""){
				if (month%2!=0 && countDays>=28 && countDays<=30 ){
					for (i=countDays+1; i<=31; i++){
						DaySelect.append('<option value="'+i+'">'+i+'</option>');
					}
				} else if (month%2==0 && countDays == 31){
					DaySelect.find('option:last').remove();
				} else if (month%2==0 && countDays>=28 && countDays<30 ){
					for (i=countDays+1; i<=30; i++){
						DaySelect.append('<option value="'+i+'">'+i+'</option>');
					}
				}
			} else if (month == 2) {
				startDay = isYearLeap(currYear) ? 30 : 29;
				for (i=startDay; i<=countDays; i++){
					DaySelect.find('option:last').remove();
				}
			} else if (month==""){
				for (i=countDays+1; i<=31; i++){
					DaySelect.append('<option value="'+i+'">'+i+'</option>');
				}
			}
		} else {
			if (month%2==0 && countDays>=28 && countDays<=30 ){
				for (i=countDays+1; i<=31; i++){
					DaySelect.append('<option value="'+i+'">'+i+'</option>');
				}
			} else if (month%2!=0 && countDays == 31){
				DaySelect.find('option:last').remove();
			} else if (month%2!=0 && countDays>=28 && countDays<30 ){
				for (i=countDays+1; i<=30; i++){
					DaySelect.append('<option value="'+i+'">'+i+'</option>');
				}
			}
		}
	}
/*Функция проверки количества дней в феврале по году*/
	function CheckDaysByYear (year){
		currMonth = $('form[name=form_contact] select[name=month]').val();
		if (currMonth == 2){
			countDays = $('form[name=form_contact] select[name=day] option').length - 1;
			if (!isYearLeap(year) && countDays==29){
				$('form[name=form_contact] select[name=day] option:last').remove();
			} else if (isYearLeap(year) && countDays==28){
				$('form[name=form_contact] select[name=day]').append('<option value="29">29</option>')
			}
		}
	}
/*Функция проверки високосный ли год*/
	function isYearLeap(year){
		if (year==""){
			return true;
		} else if (year%4==0){
			if (year%100==0){
				if (year%400==0){
					return true;
				} else {
					return false;
				}
			} else {
				return true;
			}
			return false;
		}
	}		
//formsCheck();
// window.onload = formsCheck;
