// Regular
function isMail(mail) {
	var pattern_mail = /\S+@\S+\.\w{2,3}$/; 
	if (pattern_mail.test(mail))
		return true;
	else
		return false;
}

function isPhone(phone) {
	var pattern_phone = /^(\+420\s*)?[1-7](\s*\d\s*){8}$/;
	if (pattern_phone.test(phone))
		return true;
	else
		return false;
}

function isZipcode(zipcode) {
	var pattern_zipcode = /^[0-9]{3} ?[0-9]{2}$/;
	if (pattern_zipcode.test(zipcode))
		return true;
	else
		return false;
}

addEvent(window, "load", function() {
  // FORM VALIDATION
  var default_border = "1px solid #fff";
  var check_val = function(){
                  var go_thru = true;
                  var go_thru_mail = true;
                  var go_thru_phone = true;
                	var go_thru_zipcode = true;
                	var go_thru_mail_or = true;
                	var go_thru_phone_or = true;
  
                  // INPUT
                  var inputs = this.getElementsByTagName("input");
                  for(var z = 0; z < inputs.length; z++){
                    // Is blank??
                    var classRegular = new RegExp("(^|\\s)" + "check-is-blank" + "(\\s|$)");
                    if(classRegular.test(inputs[z].className)){
                      inputs[z].style.border = default_border;
                      if(inputs[z].value == ""){
                        go_thru = false ;
                        inputs[z].style.border = "1px solid red";
                      }
                    }
                    // CheckBox is checked??
                    var classRegular = new RegExp("(^|\\s)" + "check-is-checked" + "(\\s|$)");
                    if(classRegular.test(inputs[z].className)){
                      inputs[z].style.border = "none";
                      if(inputs[z].checked != true){
                        go_thru = false ;
                        inputs[z].style.border = "1px solid red";
                      }
                    }
                    // Is Mail??
                    var classRegular = new RegExp("(^|\\s)" + "check-is-mail" + "(\\s|$)");
                    if(classRegular.test(inputs[z].className)){
                      inputs[z].style.border = default_border;
                      if(!(isMail(inputs[z].value))){
                        go_thru_mail = false ;
                        inputs[z].style.border = "1px solid red";
                      }
                    }
  				          // Is Phone??
                    var classRegular = new RegExp("(^|\\s)" + "check-is-phone" + "(\\s|$)");
                    if(classRegular.test(inputs[z].className)){
                      inputs[z].style.border = default_border;
                      if(!(isPhone(inputs[z].value))){
                        go_thru_phone = false ;
                        inputs[z].style.border = "1px solid red";
                      }
                    }
  				  // Is Mail OR Phone??
                    var classRegular = new RegExp("(^|\\s)" + "try-is-mail-or" + "(\\s|$)");
                    if(classRegular.test(inputs[z].className)){
                      inputs[z].style.border = default_border;
                      if(!(isMail(inputs[z].value))){
                        go_thru_mail_or = false ;
                        inputs[z].style.border = "1px solid red";
                      }
  
            					for(var q = 0; q < inputs.length; q++){
                        var classRegular = new RegExp("(^|\\s)" + "try-is-phone-or" + "(\\s|$)");
                        if(classRegular.test(inputs[q].className)){
            							inputs[q].style.border = default_border;
            							if(!((go_thru_mail_or == true) && (inputs[q].value == ''))){ // validní MAIL a nevplněný PHONE
            								if(!(isPhone(inputs[q].value))){
            									go_thru_phone_or = false ;
            									inputs[q].style.border = "1px solid red";
            								}
            							}
                          if((go_thru_mail_or == false) && (inputs[z].value == '')){ // NEvalidní MAIL a nevplněný MAIL
            								if(!(isPhone(inputs[q].value))){
            									go_thru_phone_or = false ;
            									inputs[q].style.border = "1px solid red";
            								} else {
            									inputs[z].style.border = default_border;
            									go_thru_mail_or = true ;
                            }
            							}
            						}
            					}
                    }
  				        // Is Zip code??
  				          var classRegular = new RegExp("(^|\\s)" + "check-is-zipcode" + "(\\s|$)");
                    if(classRegular.test(inputs[z].className)){
                      inputs[z].style.border = default_border;
                      if(!(isZipcode(inputs[z].value))){
                        go_thru_zipcode = false ;
                        inputs[z].style.border = "1px solid red";
                      }
                    }
                  }
  
                  // SELECT
                  var select = this.getElementsByTagName("select");
                  for(var z = 0; z < select.length; z++){
                    // Is selected first??
                    var classRegular = new RegExp("(^|\\s)" + "check-is-selected-first" + "(\\s|$)");
                    if(classRegular.test(select[z].className)){
                      select[z].style.background = "#ffffff";
                      if(select[z].options[0].selected == true){
                        go_thru = false ;
                        select[z].style.background = "red";
                      }
                    }
                  }
  
                  // TEXTAREA
                  var textareas = this.getElementsByTagName("textarea");
                  for(var z = 0; z < textareas.length; z++){
            					// Is blank??
                      var classRegular = new RegExp("(^|\\s)" + "check-is-blank" + "(\\s|$)");
                      if(classRegular.test(textareas[z].className)){
            						textareas[z].style.border = default_border;
            						if(textareas[z].value == ""){
            							go_thru = false ;
                          textareas[z].style.border = "1px solid red";
            						}
                      }
  					       }
  
  				var message = "";
  
  				if(go_thru_phone_or == false && go_thru_mail_or == false) message += "Zadejte E-mail nebo Telefoní číslo!! \n";
  				else if(go_thru_phone_or == true && go_thru_mail_or == false) message += "Zadejte E-mail ve správném tvaru!! \n";
  				else if(go_thru_phone_or == false && go_thru_mail_or == true) message += "Zadejte Telefoní číslo ve správném tvaru!! \n";
  				if(go_thru_mail == false) message += "Zadejte E-mail ve správném tvaru!! \n";
  				if(go_thru_phone == false) message += "Zadejte Telefoní číslo ve správném tvaru!! \n";
  				if(go_thru_zipcode == false) message += "Zadejte PSČ ve správném tvaru!! \n";
  				if(go_thru == false) message += "Musíte vyplnit všechny povinné údaje označené hvězdičkou!! \n";
  
  				if(message == "")
  					{
  					return true;
  					}
  				else
  					{
  					alert(message);
  					return false;
  					}
  
  };
  
  var forms = document.getElementsByTagName("form");
  for(var x = 0; x < forms.length; x++){
    var classRegular = new RegExp("(^|\\s)" + "form-validation" + "(\\s|$)");
    if(classRegular.test(forms[x].className)){
      forms[x].onsubmit = check_val;
    }
  }
});
