  function getOnlyTag(tagname, root) { return(root.getElementsByTagName(tagname)[0]); }
	  
  function namedItem(nodelist, name) {
        for(var i = 0; i < nodelist.length; i++) {
            if(nodelist.item(i).name == name) return nodelist.item(i);
        }
  }

	function validate(what) {
		var regexes = new Array();
		regexes["username"] = /^[a-zA-Z0-9_. -]{2,}$/;
		regexes["email"] = /^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/; // "
		regexes["phone"] = regexes["ship_phone"] = /^[+\d]\d[\d -]{6,}$/;
		regexes["bill_zip"] = /^\d{3}( )?\d{2}$/;
		regexes["ship_zip"] = /(^\d{3}( )?\d{2}$)|(^\d{0}$)/;
		regexes["name"] = regexes["surname"] = regexes["bill_street"] = regexes["bill_city"] = regexes["adress"] /* x.x */ = regexes["subject"] = regexes["message"] = /^.{2,}$/;
		
		var validity_images = new Array();
		validity_images["valid"] = template_url + "graphics/valid.png";
		validity_images["invalid"] = template_url + "graphics/invalid.png";
		
		var value = document.getElementById(what).value;
		var img = document.getElementById(what + "_img");

		if(regexes[what].exec(value)) {
			if(img.src != validity_images["valid"]) img.src = validity_images["valid"];
			return true;
		}
		else {
			if(img.src != validity_images["invalid"]) img.src = validity_images["invalid"];
			return false;
		}
	}

	function validate_password(register) {
		var password = $("#password").val();
		var password_img = $("#password_img")[0];
		if(register == true) {
			var confirmation = $("#password_change_confirmation").val();
			var confirmation_img = $("#password_change_confirmation_img")[0];
		}
		else {
			var confirmation = $("#password_confirmation").val();
			var confirmation_img = $("#password_confirmation_img")[0];
		}

		var regex = /^.{5,32}$/;
		var validity_images = new Array();
		validity_images["valid"] = template_url + "graphics/valid.png";
		validity_images["invalid"] = template_url + "graphics/invalid.png";
		
		if(regex.exec(password) || (password == "" && confirmation == "" && register == false)) {
			if(password_img.src != validity_images["valid"]) password_img.src = validity_images["valid"];
			var valid = true;
		}
		else {
			if(password_img.src != validity_images["invalid"]) password_img.src = validity_images["invalid"];
			var valid = false;
		}
		
		if(password == confirmation) {
			if(confirmation_img.src != validity_images["valid"]) confirmation_img.src = validity_images["valid"];
			var identic = true;
		}
		else {
			if(confirmation_img.src != validity_images["invalid"]) confirmation_img.src = validity_images["invalid"];
			var identic = false;
		}
		
		if(valid && identic) return true;
		else return false;
		
	}

function tr_over(t) { t.className += " hover"; }
function tr_out(t) { t.className = t.className.replace(/hover/g, ''); }


  function add_onload(f)
  {
      var oldhandler = window.onload;
      window.onload = function()
      {
          f();
          
          if(typeof(oldhandler) != "undefined" && oldhandler) {
              window.onload = oldhandler;
              window.onload();
          }
      }
  }

  function menu_fold()
  {
      var cats = $('#catnav')[0];
      var lis = cats.getElementsByTagName('li');
      for(var i = 0; i < lis.length; i++) {
          var uls = lis[i].getElementsByTagName('ul');
          if(lis[i].className.indexOf('sub') == -1 && uls[0]) {
              uls[0].style.display = "none";
          }
      }
  }
  function menu_click(t, e)
  {
      var uls = t.getElementsByTagName('ul');
      if(uls[0]) {
          uls[0].style.display = (uls[0].style.display == "none" ? "" : "none");
      }
      t.className = (t.className == "sub" ? "" : "sub");
      e.cancelBubble = true;
      e.stopPropagation();
  }
	function showText(){
		document.getElementById("text").style.display = 'block';
		document.getElementById("show").style.display = 'none';
		document.getElementById("hide").style.display = 'block';
	}
	function hideText(){
		document.getElementById("text").style.display = 'none';
		document.getElementById("show").style.display = 'block';
		document.getElementById("hide").style.display = 'none';
	}

  function ajax(url, method, data, succ, fail) {
  	method = method.toUpperCase();
	if(method == 'GET' || method == 'POST') {
		if(window.ActiveXObject) httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		else httpRequest = new XMLHttpRequest();

		httpRequest.onreadystatechange = function() {
			if(httpRequest.readyState == 4) {
				if(httpRequest.status == 200) succ();
				else fail();
			}
		};

		if(data) {
			params = new Array();
			for(paramname in data) params.push(escape(paramname) + '=' + escape(data[paramname]));
			params = params.join('&');
		}
		else params = null;

		httpRequest.open(method, url, true);
		if(method == 'POST') {
			httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			httpRequest.setRequestHeader("Content-length", params.length);
			httpRequest.setRequestHeader("Connection", "close");
		}
		httpRequest.send(params);
	}
  }

  function updatecartpanelitem(itemname, xml) {
  	  var tag = getOnlyTag(itemname, xml);
  	  $('#cart_panel_' + itemname).text(tag.textContent == undefined ? tag.text : tag.textContent);
  }
  
  function addtocart(succ, id) {
  	  var xml = httpRequest.responseXML.documentElement;
  	  updatecartpanelitem('itemcount', xml);
  	  updatecartpanelitem('totalprice', xml);
  	  
  	  var elem = $('#addtocart_result' + (id ? '_' + id : ''))[0];
	  var istr = elem.tagName.toLowerCase() == 'tr';
  	  elem.style.display = (istr ? 'table-row' : 'block');
  	  if(istr) elem = elem.getElementsByTagName('td')[0];
  	  elem.style.textAlign = "center";
  	  elem.innerHTML = (succ ? "Položka byla přidána.<br /><a href='/kosik'>Zobrazit košík »</a>" : "Položku se nepodařilo přidat do košíku.");
  }

  function session_keepalive()
  {
      var im = new Image();
      im.src = "{{BASE_URL}}keep-alive";
  }

  function watchdog_control()
  {
      var text = "";
      re = /^[^.]+(\.[^.]+)*@([^.]+[.])+[a-z]{2,3}$/;
      if (namedItem(document.getElementsByTagName('input'), 'email_addres').value.search(re) != 0)
         text = "{{ERROR_MESSAGE_EMPTY_MAIL}}";
      var count = 0;
      if(document.getElementsByName('event[a]')[0].checked)
         count++;
      
      var radios = document.getElementsByName('event[b]');
      for(var i = 0; i < radios.length; i++)
         if (radios[i].checked == true)
            count++;

      if (count == 0)
         text += "{{ERROR_MESSAGE_NO_EVENTS}}";
         
      if (text == "")
         document.forms.watchdog_form.submit();
      else
         alert(text);
  }

  function contact_form_validateall() {
      var error = "";
      
      if(!validate("name")) error += "Invalidní jméno.\n";
      if(email.value && !validate("email")) error += "Invalidní email.\n";
      if(phone.value && !validate("phone")) error += "Invalidní telefon.\n";
      if(adress.value && !validate("adress")) /* x.x */ error += "Invalidní adresa.\n";
      if(!email.value && !phone.value && !adress.value /* x.x */) error += "Není vyplněn ani jeden kontaktní údaj.\n";
      if(!validate("subject")) error += "Invalidní předmět.\n";
      if(!validate("message")) error += "Invalidní zpráva.";
      
      if(error != "") {
         alert(error);
         return false;
      }
      else return true;
   }
