// --- config --- //

var default_border = "1px solid #D7D7D7";

/* Functions */
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}

function domReady(f) {
	if(domReady.done) return f();
	if(domReady.timer) {
		domReady.ready.push(f);
	} else {
		addEvent(window, "load", isDomReady);
		domReady.ready = [f];
		domReady.timer = setInterval(isDomReady, 13);
	}

}

function isDomReady() {
	if(domReady.done) return false;
	if(document && document.getElementsByTagName && document.getElementById && document.body) {
		clearInterval(domReady.timer);
		domReady.timer = null;			
		for(var i = 0; i < domReady.ready.length; i++) {
				domReady.ready[i]();
		}
		domReady.ready = null;
		domReady.done = true;
	}
}

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;
}



domReady(function() {
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(inputs[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;
    }
  }

});

