var vformErrorText = 'Proszę wypełnić zaznaczone pola.';
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 = validate_checkbox(obj.elements[p]);
			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) {
		alert(vformErrorText);
		return false;
	}
	return true;
}

function validate_checkbox(el) {
	
	el.parentNode.className = el.parentNode.className.replace(/error/, '');
	
	if(!el.checked) {
		el.parentNode.className = el.parentNode.className + 'error';		
	}
	return el.checked;
}

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;
} 
