
	var errorBgColor = '#ffc6c6';
  var labelErrorColor = 'rgb(255,0,0)';
  
  var validatingOptions = new Array();
  
  var ofocus;    
  
  function labeldectohex(label) {
  	/**
    * IE i FF lubia format rgb() a Opera zas woli #xxxxxx ...
    */
  	var a = labelErrorColor.split('(');
    if (!a[1]) return label;
		var b = a[1].split(',')
    b[2] = b[2].replace(/\)/,'');

   	var ret = '#'+from10toradix(b[0], 16)+from10toradix(b[1], 16)+from10toradix(b[2], 16);
    ret = ret.toLowerCase();
		return ret;
  }
  
  function from10toradix(value,radix){
      var retval = '';
      var ConvArray = new initArray(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
      var intnum;
      var tmpnum;
      var i = 0;
  
      intnum = parseInt(value,10);
      if (isNaN(intnum)){
          retval = 'NaN';
      }else{
          while (intnum > 0.9){
              i++;
              tmpnum = intnum;
              retval = ConvArray[tmpnum % radix] + retval;  
              intnum = Math.floor(tmpnum / radix);
              if (i > 100){
                  retval = 'NaN';
                  break;
              }
          }
      }
      if(retval!='') return retval;
      else return '00';
  } 
  
  function initArray() {
      this.length = initArray.arguments.length;
      for (var i = 0; i < this.length; i++)
          this[i] = initArray.arguments[i];
  }

	function validate(obj) {
  	var p = 0;
    var valType = 0;
    var valReturn = 1;
    var eCount = 0;
    ofocus = 0;
    
    var labels = document.getElementsByTagName('label');
    var o = 0;
    for(o = 0; o < labels.length ; o++ ) { 	    
    	if(labels[o].style.color == labelErrorColor || labels[o].style.color == labeldectohex(labelErrorColor) || labels[o].style.color.replace(/ /g,'') == labelErrorColor) {
      	labels[o].style.color = '';
      }
    }
    
    for(p=0 ; p < obj.elements.length ; p++) {
    	valType = needsVal(obj.elements[p]);
      if(valType!=0) {
       	obj.elements[p].style.backgroundColor = '';
  	    if(obj.elements[p].style.border == errorBgColor+' 1px solid') obj.elements[p].style.border = '';     
      	valReturn = validate_set(obj.elements[p].value);        
        if(valReturn==0) {
        	validate_error(obj.elements[p]);
          eCount++;
        }
      	if(valType=='int') valReturn = validate_integer(obj.elements[p].value);                
      	if(valType=='number') valReturn = validate_number(obj.elements[p].value);
      	if(valType=='email') valReturn = validate_email(obj.elements[p].value);
        if(valType=='checked' && obj.elements[p].type=='radio') valReturn = validate_checked(obj.elements[p].name);
        if(valType=='checked' && obj.elements[p].type=='checkbox') valReturn = obj.elements[p].checked;
        if(valType=='select') valReturn = obj.elements[p].value;        
        
        if(valReturn==0) {
        	validate_error(obj.elements[p]);        
          eCount++;
        } 
      }
    }
		for(keyVar in validatingOptions) validatingOptions[keyVar] = '';    
    if(eCount > 0) return false;
    return true;
  }
  
  function validate_error(obj) {
  	if(ofocus==0) {
    	obj.focus();
      ofocus = 1;
    }
    if(obj.type=='radio' || obj.type=='checkbox') {
    	var objects = document.getElementsByName(obj.name);
      var o = 0;
      for(o = 0 ; o < objects.length ; o++ ) {      	
	    	objects[o].style.border = '1px solid '+errorBgColor;
      }
    }
    else {
	  	obj.style.backgroundColor = errorBgColor;    
    }
    var labels = document.getElementsByTagName('label');
    var o = 0;
    for(o = 0; o < labels.length ; o++ ) {    
    	if(labels[o].htmlFor == obj.name) {

      	labels[o].style.color = labelErrorColor;
      }
    }
  }  
  
  function validate_checked(objname) {
  	if(!validatingOptions[objname] || validatingOptions[objname] == '') {
    	validatingOptions[objname] = true;    
    	var options = document.getElementsByName(objname);
      var o = 0;    
      for(o = 0 ; o < options.length ; o++ ) {
      	if(options[o].checked) return 1;
      } 
      return 0; 
    }
  }
    
  function validate_integer(value)  {   
  		var i;
      for (i = 0; i < value.length; i++) {   
          var c = value.charAt(i);
          if (((c < "0") || (c > "9"))) return false;
      }
      return true;
  }  
  
  function validate_number(value) {
  	value = value.replace(/\./g,"");
  	value = value.replace(/\,/g,"");
    return validate_integer(value);
  }
  
  function validate_set(value) {
  	if(!value) {
    	return 0;
    }    
    return 1;
  }


  function validate_email(value){
  	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
  	if (filter.test(value)) return 1;
  	return 0;
  }
  
  function needsVal(obj) {
  	var p = 0;
    for(p = 0; p < obj.attributes.length ; p++) {
    	if(obj.attributes[p].name=="val") {
      	return obj.attributes[p].value;
      }
    }
    return 0;
  } 