	// prevadi dekadicke cislo na hexadecimalni
	function d2h(d) {
		var d = d.toString(16);
		if (d.length == 1) d = '0' + d;
		return d;
	}
	
	// prevadi hexadecimalni cislo na dekadicke
	function h2d(h) {return parseInt(h,16);}
	
	
	// barvu predanou v neznamem formatu prevede na HTML kod
	function parseDomColor(color) {
		
		if (color.substring(0,1) == '#') {
			return color;
		} else if (color.substring(0,4) == 'rgb(') {
			color = color.substring(4, color.length-1).split(',');
			var res = '#';
			for (chan in color) {
				res += d2h(parseInt(color[chan]));
			}
			return res.toUpperCase();
		}
		
	}
	
	
	// ze stringu s barvou (napr. #FFEECC) sestavi pole s indexy RGB a 
	// dekadickymi hodnotami jednotlivych kanalu
	function parseHexColor(color) {
		
		var result = new Array();
		
		if (color.substring(0,1) == '#') {
			color = color.substr(1);
		}
		
		result['r'] = h2d(color.substring(0,2));
		result['g'] = h2d(color.substring(2,4));
		result['b'] = h2d(color.substring(4,6));
		
		return result;
	}
	
	// z pole s rozparsovanou barvou sestavi hex string barvy
	function buildHexColor(color) {
		return ('#'+d2h(Math.ceil(color['r']))+d2h(Math.ceil(color['g']))+d2h(Math.ceil(color['b']))).toUpperCase();
	}
	
	
	// vypocita prumernou hodnotu jednotlivych kanalu kterou je potreba pricitat
	// aby jsme se v danem poctu kroku dostali z pocatecni hodnoty do konecne
	function getColorSteps(start, end, stepCount) {
		
		var steps = new Array();
		
		start = parseHexColor(start);
		end = parseHexColor(end);
		
		steps['r'] = (end['r'] - start['r']) / stepCount;
		steps['g'] = (end['g'] - start['g']) / stepCount;
		steps['b'] = (end['b'] - start['b']) / stepCount;
		
		return steps;
		
	}
	
	function blink(field, colorSteps, stepCount, step) {
		
		if (step == null) {
			step = 0;
		}
		
		//alert(field.style.backgroundColor);
		
		// vyparsujeme barvu do pole
		var curColor = parseHexColor(parseDomColor(field.style.backgroundColor));
		
		// prenastavime hodnoty podle pole steps generovaneho funkci getColorSteps
		curColor['r'] = curColor['r'] + colorSteps['r'];
		curColor['g'] = curColor['g'] + colorSteps['g'];
		curColor['b'] = curColor['b'] + colorSteps['b'];
		
		//alert(colorSteps['r'] + ' : ' + colorSteps['g'] + ' : ' + colorSteps['b']);
		
		// sestavime zpet hex string barvy
		curColor = buildHexColor(curColor);
		
		// nastavime prvku novou barvu
		field.style.backgroundColor = curColor;
		
		step++;
		
		// pokud jeste nejsme nakonci, pokracujem
		if (step <= stepCount) {
			window.setTimeout(function () {blink(field, colorSteps, stepCount, step);}, 50);
		}
	}
	
	function checkField(field) {
		
		if (field.value == '') {
			//field.style.background = 'url(template/design/form-input_bg_req.png)';
			field.style.borderColor = '#b10200';
			field.style.backgroundColor = '#f16767';
			blink(field, steps, 75);
			return 0;
		} else {
			//field.style.borderColor = '#ff6363';
			field.style.backgroundColor = '#FFFFFF';
			//field.style.background = 'url(template/design/form-input_bg.png)';
			return 1;
		}
		
	}

