// initialization
function id(name) {
	return document.getElementById(name);
}

function tag(name, element) {
	return (element || document).getElementsByTagName(name);	
}

function className(name, element) {
	var classRegular = new RegExp("(^|\\s)" + name + "(\\s|$)"); 
	var allTags = tag("*", element);
	var classField = [];
	var y = 0;
	for(var x = 0; x < allTags.length; x++) {
		if(classRegular.test(allTags[x].className)) {
			classField.push(allTags[x]);
		}
	}
	return classField;
}

function hasClass(element, className) {
  var classRegular = new RegExp("(^|\\s)" + className + "(\\s|$)");
  if(classRegular.test(element.className))
    return true;
  else
    return false;  
}

function addClass(element, className) {
  var classRegular = new RegExp("(^|\\s)" + className + "(\\s|$)");
  if(!classRegular.test(element.className)) {
    if(element.className == "")
      element.className = className;
    else
      element.className += " " + className;
  }      
}

function removeClass(element, className) {
  var classRegular = new RegExp("(^|\\s)" + className + "(\\s|$)");
  if(element.className == className) { 
    element.className = "";
  } else {
    var tempClass = element.className;
    var newClass = tempClass.replace(classRegular, "");
    element.className = newClass;
  }
}

// EVENTS 

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 removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else
    obj.removeEventListener( type, fn, false );
}

// DOM ready

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;
	}
}

// DOM editing

function prev(element) {
	do {
		element = element.previousSibling;
	} while (element && element.nodeType != 1)
	return element; 
}

function next(element) {
	do {
		element = element.nextSibling;
	} while (element && element.nodeType != 1)
	return element; 
}

function first(element) {
	element = element.firstChild;
	return element && element.nodeType != 1 ? 
		next(element) : element;
}

function last(element) {
	element = element.lastChild;
	return element && element.nodeType != 1 ?
		prev(element) : element;
}

function parent(element, number) {
	number = number || 1;
	for(var i = 0; i < number; i++) {
		if(element != null) element = element.parentNode;	
	} 
	return element;
}

function add(element) {
	return document.createElementNS ? 
		document.createElementNS('http://www.w3.org/1999/xhtml', element) :
		document.createElement(element);
}

function remove(element) {
	if(element) element.parentNode.removeChild(element);	
}

function truncate(element) {
	while (element.firstChild)
		remove(element.firstChild)
}

function overElement(element) {
	var r = [];
	if(element.constructor != Array) element = [element];
	
	for(var i = 0; i < element.length; i++) {
		if(element[i].constructor == String) {
			var div = add("div");
			div.innerHTML = element[i];
			for(var j = 0; j < div.childNodes.length; j++)
				r[r.length] = div.childNodes[j];
		} else if (element[i].length) {
			for(var j = 0; j < element[i].length; j++)
				r[r.length] = element[i][j];	
		} else {
			r[r.length] = element[i];
		}
	}
	return r;
}

function before(parent,prev,element) {
	if(element == null) {
		element = prev;
		prev = parent;
		parent = prev.parentNode;
	}
	
	var elements = overElement(element);
	
	for(var i = elements.length - 1; i >= 0; i--) {
		parent.insertBefore(elements[i], prev);	
	} 
}

function append(parent, element) {
	var elements = overElement(element);
	for(var i = 0; i < elements.length; i++) {
		parent.appendChild(elements[i]);
	}
}

// CSS

function readCss(element, name) {
  if(element.style[name])
    return element.style[name];
  else if(element.currentStyle)
    return element.currentStyle[name];
  else if(document.defaultView && document.defaultView.getComputedStyle) {
    name = name.replace(/([A-Z])/g, "-$1");
    name = name.toLowerCase();
    var s = document.defaultView.getComputedStyle(element,"");
    return s && s.getPropertyValue(name);  
  } else 
  return null;  
}


function posX(element) {
  return parseInt(readCss(element, "left"));
}

function posY(element) {
  return parseInt(readCss(element, "top"));
}

function setX(element, position) {
  element.style.left = position + "px";
}

function setY(element, position) {
  element.style.top = position + "px";
}

function addX(element, position) {
  setX(element, posX(element) + position);  
}

function addY(element, position) {
  setY(element, posY(element) + position);  
}

function setOpacity(element, level) { // 0 - 100
	if (!element.currentStyle || !element.currentStyle.hasLayout) element.style.zoom = 1;
  if(window.ActiveXObject) {
    if (level > 0 && level < 100) {
      element.style.filter = 'alpha(opacity=' + level + ')';
//      element.style.filter.alpha.enabled = true;
		}
    else if (level > 0){
      element.style.filter = '';
//      element.style.filter.alpha.enabled = false;
		}
		else {
      element.style.filter = 'alpha(opacity=0)';
//      element.style.filter.alpha.enabled = true;
		}
  }
  else
    element.style.opacity = Math.round(level / 100);
}

// Effects

function show(element) {
  element.style.display = "block";
}

function hide(element) {
  element.style.display = "none";
}

function fadeIn(element) {
  setOpacity(element, 0);
  show(element);
  for(var i = 0; i <= 100; i += 5) {
    (function(){
      var position = i; 
      setTimeout(function(){
        setOpacity(element, position);
      }, (position + 1) * 8);
    })();
  }
}

function fadeOut(element) {
  setOpacity(element, 100);
  show(element);
  for(var i = 100; i >= 0; i -= 5) {
    (function(){
      var position = i; 
      setTimeout(function(){
        setOpacity(element, position);
        if(position == 0) hide(element);
      }, (100 - position + 1) * 8);
    })();
  }
}

// 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-9](\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;
}

// ------------------ if (DOM ready) ------------------ // 
domReady(function() {

// TargetBlank
var targetblanks = className("targetblank");
for (var i = 0; i < targetblanks.length; i++ ) {
  targetblanks[i].onclick = function() {
    if(typeof(window.open(this.href)) == "object") return false;
  }
}

// FORM VALIDATION
var default_border = "1px solid #D7D7D7";
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;
    }
  }

});







	

