      function $(id) { return document.getElementById(id); }
	  
  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["bill_street"] = /^((.| ){3,}[ \.]\d+?.*)|(\d+?.*)$/;
		regexes["ship_street"] = /(^((.| ){3,}[ \.]\d+?.*)|(\d+?.*)$)|(^$)/;
		regexes["ship_city"] = /(^.{2,}$)|(^$)/;
		regexes["name"] = regexes["surname"] = regexes["bill_city"] = regexes["adress"] /* x.x */ = regexes["subject"] = /^.{2,}$/;
		regexes["message"] = /^(.|\n){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").value;
		var password_img = $("password_img");
		if(register == true) {
			var confirmation = $("password_change_confirmation").value;
			var confirmation_img = $("password_change_confirmation_img");
		}
		else {
			var confirmation = $("password_confirmation").value;
			var confirmation_img = $("password_confirmation_img");
		}

		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, ''); }

var tr_click_recursive = false;
function tr_click(t, ev)
{
    if(tr_click_recursive) return;
    if(ev && ev.target && ev.target.tagName && ev.target.tagName.toLowerCase
       && ev.target.tagName.toLowerCase() == "input")
        return;

    tr_click_recursive = true;
    var inputs = t.getElementsByTagName('input');
    for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].type && inputs[i].type.toLowerCase() == "checkbox")
            inputs[i].click();
    }
    tr_click_recursive = false;
}


  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');
      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();
  }

