var oForm, ePage, pageCurrent, valueCurrent, heights, widths, errorType, previewImage, action;

// EVENTS
$(document).ready( function() {
	oForm = document.forms['frmKonfig'];
	ePage = oForm.elements['page'];
	if (ePage) pageCurrent = ePage.value*1-1;
	
	if (pageCurrent == 1) valueCurrent = getCurrentValue('output[skupina]');
	if (pageCurrent == 2) valueCurrent = getCurrentValue('output[provedeni]');
	if (pageCurrent == 4) enableElements('volba');
	if (pageCurrent == 6) getHeights();
	if (pageCurrent == 7) getWidths();
	if (pageCurrent == 8) colorPreviewPreloader();
	
	$("#menu A").click( function() {
		if (isValidRadiatorsCount() && $(this)[0].className.indexOf('denied ') == -1 && $(this)[0].className.indexOf('denied"') == -1 && $(this)[0].className.indexOf('current') == -1) {
			var url = $(this)[0].href.match(/.+=(\d{1,2})$/);
			if (ePage) {
				goToPage(url[1], true);
			} else
				return true;
		} else if (!isValidRadiatorsCount())
			showError('radiatorsCount');
			
		return false;
	});

	oForm.onsubmit = function() {
		return isValidPage(pageCurrent);
	};

	// obsluha tlacitek
	$("#nav .submit").toggleClass('hidden');
	$("#nav .submit A").click( function() {
		if (isValidPage(pageCurrent)) oForm.submit();
		return false;
	});
	if (pageCurrent == 10) {
		$(".nav .submit").toggleClass('hidden');
		$(".nav .submit A").click( function() {
			return false;
		});
	}
	$("#nav A#btnPrevious").click( function() {
		if (isValidRadiatorsCount()) {
			if (ePage) {
				goToPage(pageCurrent-1, true);
				return false;
			}
			return true;
		} else {
			showError('radiatorsCount');
			return false;
		}
		
	});
	$("A.print").click( function() {
		window.print();
		return false;
	});
	$("A.export").click( function() {
		saveData('output[desc]');
	});
	$("A.send").click( function() {
		removeMessage('email');
		action = 'email';
		if (isValidPage(pageCurrent)) saveDataAndMail('output[desc]');
		return false;
	});
	
	// kalkulacka max vysky
	$("A.helpCounter").click( function() {
		obj('helpHeightCounter').style.display = 'block';
		return false;
	});
	$("#helpHeightCounter .nav A").click( function() {
		countMaxHeight();
		return false;
	});
	$("#helpHeightCounter #navHelp A").click( function() {
		var oFormCounter 	= document.forms['frmKonfigCounter'];
		var eCountedValue 	= oFormCounter.elements['countedValueInput'];

		countMaxHeight();

		if (eCountedValue && eCountedValue.value && eCountedValue.value > 0) {
			var e = obj('heightElementMax'+eCountedValue.value);
			if (e) {
				turnRadio(e);
				signDesc(e);
			}
			obj('helpHeightCounter').style.display = 'none';
		}
		return false;
	});
	$("#helpHeightCounter #close").click( function() {
		obj('helpHeightCounter').style.display = 'none';
		return false;
	});
	
	// help
	$("A.help").click( function() {
		return false;
	});
	$("A.help").mouseover( function(e) {
		if ($(this)[0].name) var data = $(this)[0].name.split(':');
		if (data && $("#helpBox .inside ."+data[0])) {
			$("#helpBox .inside ."+data[0]).addClass('visible');

			var cursor = getPosition(e);
			
			switch (data[1]) {
				case 'left': cursor.x = cursor.x - 140; break;
				case 'right': cursor.x = cursor.x + 145; break;
			}

			switch (data[2]) {
				case 'middle': cursor.y = cursor.y - $("#helpBox .inside ."+data[0])[0].offsetHeight/2; break;
				case 'top': cursor.y = cursor.y - $("#helpBox .inside ."+data[0])[0].offsetHeight/2; break;
			}
			cursor.y = cursor.y - 25;
			
			obj('helpBox').style.left = cursor.x+'px';
			obj('helpBox').style.top = cursor.y+'px';
			obj('helpBox').style.display = 'block';
		}
	});
	$("A.help").mouseout( function() {
		if ($("#helpBox .inside DIV")) {
			obj('helpBox').style.display = 'none';
			$("#helpBox .inside DIV").removeClass('visible');
		}
	});

	// funkce pro ajax - reset
	$("#reset .startAgain").click( function() {
		resetSession();
		valueCurrent = null;
		if (pageCurrent == 1 || pageCurrent == 2) denyMenuItems(null, null);
		return false;
	});
	$("#reset .startAgainStay").click( function() {
		goToPage(2, false);
		return false;
	});
	$("#reset .page").click( function() {
		resetPage(pageCurrent, false);
		return false;
	});
	
	// implicitni funkce pro obsluhu ajaxu
	$("#vars INPUT").click( function() {
		// vysosne typ z nazvu elementu, napr. output[model] => model
		var type  = getTypeByName($(this)[0].name);
		// hodnota vybraneho elementu
		var value = $(this)[0].value;
		
		// pri zmene vyberu je v krocich 1 a 2 nutne omezit pohyb v menu
		denyMenuItems(value, valueCurrent);
		
		// kontrola a korekce hodnot u vysky resp. delky
		if (type == 'vyskaMin' || type == 'vyskaMax') {
			var correctValue = checkHeight($(this)[0]);
			signDesc($(this)[0]);
			if (type == 'vyskaMin') value = value + ';' + correctValue;
			if (type == 'vyskaMax') value = correctValue + ';' + value;
		}
		else
		if (type == 'delkaMin' || type == 'delkaMax') {
			var correctValue = checkWidth($(this)[0]);
			signDesc($(this)[0]);
			if (type == 'delkaMin') value = value + ';' + correctValue;
			if (type == 'delkaMax') value = correctValue + ';' + value;
		}
		
		// prepocet poctu teles dle zadanych hodnot
		countRadiators(pageCurrent+1, type, value);
	});
	
	// obsluha RADIO pri kliku na popis
	$("#group #vars SPAN").click( function() {
		turnRadioByTitle($(this)[0]);
	});

	$("#design #vars SPAN").click( function() {
		turnRadioByTitle($(this)[0]);
	});
	$("#design #vars IMG").click( function() {
		turnRadioByTitle($(this)[0]);
	});

	$("#model #vars SPAN").click( function() {
		turnRadioByTitle($(this)[0]);
	});
	$("#model #vars IMG").click( function() {
		turnRadioByTitle($(this)[0]);
	});
	
	// funkce pro ajax - teploty
	$("#temperature .vars INPUT.select").click( function() {
		var eT1 = oForm.elements['output[t1]'];
		var eT2 = oForm.elements['output[t2]'];
		var eTi = oForm.elements['output[ti]'];
	
		eT1.value = obj('t1_'+$(this)[0].value).innerHTML;
		eT2.value = obj('t2_'+$(this)[0].value).innerHTML;
		eTi.value = obj('ti_'+$(this)[0].value).innerHTML;
		
		tempCountRadiators();
	});
	
	$("#temperature .vars INPUT.text").keyup( function(e) {
		if (isNumByEvent(e) && isValidElement($(this)[0].name)) tempCountRadiators();
	});
	
	// funkce pro ajax - vykon
	$("#wattage .vars INPUT").keyup( function(e) {
		if (isNumByEvent(e)) {
			var type = getTypeByName($(this)[0].name);
			countRadiators(pageCurrent+1, type, $(this)[0].value);
		}
	});
	$("#wattage .increase A").click( function() {
		increaseValue('output[vykon]', wattageShift);
		return false;
	});
	$("#wattage .decrease A").click( function() {
		decreaseValue('output[vykon]', wattageShift);
		return false;
	});

	$("#height #vars SPAN").click( function() {
		var e = getElementByAnything($(this)[0].id, 'Desc');
		if (e && !e.checked) {
			// kontrola a korekce
			var correctValue = checkHeight(e);
			// zapne radio
			turnRadio(e);
			signDesc(e);
			
			var type = getTypeByName(e.name);
			var value = (type == 'vyskaMin' ? e.value+';'+correctValue : correctValue+';'+e.value);
			// prepocet poctu teles dle zadanych hodnot
			countRadiators(pageCurrent+1, type, value);
		}
	});
	$("#width #vars SPAN").click( function() {
		var e = getElementByAnything($(this)[0].id, 'Desc');
		if (e && !e.checked) {
			// kontrola a korekce
			var correctValue = checkWidth(e);
			// zapne radio
			turnRadio(e);
			signDesc(e);
			
			var type = getTypeByName(e.name);
			var value = (type == 'delkaMin' ? e.value+';'+correctValue : correctValue+';'+e.value);
			// prepocet poctu teles dle zadanych hodnot
			countRadiators(pageCurrent+1, type, value);
		}
	});
	
	$("#color #vars .item DIV").click( function() {
		var e = getElementByAnything($(this)[0].id, 'Container');
		if (e && !e.checked) {
			turnRadio(e);
			showColor(e);
			countRadiators(pageCurrent+1, getTypeByName(e.name), e.value);
		}
	});
	
	$("#color #vars INPUT").click( function() {
		showColor($(this)[0]);
	});
	
	// funkce pro ajax - seznam teles
	$("#list TABLE TH A").click( function() {
		var name = $(this)[0].name;
		if (name) {
			// toto trideni je uz zobrazeno
			if ($(this)[0].className.indexOf('orderUsed') != -1) return false;
			// zjisti prvek a smer trideni
			var splittedName = name.split('-');
			// vygeneruje obsah tabulky
			getListTable(pageCurrent, splittedName[0], splittedName[1]);
			// priradi class pro identifikaci
			$("#list TABLE TH A").removeClass('orderUsed');
			$(this)[0].className = 'orderUsed';
			return false;
		}
	});
	
	$("#detail #action TEXTAREA").click( function() {
		if ($(this)[0].value == detailDescDefault)
			$(this)[0].value = '';
	});
	$("#detail #action .email INPUT.text").click( function() {
		if ($(this)[0].value == detailEmailDefault)
			$(this)[0].value = '';
		removeError();
		removeMessage('email');
	});
	$("#detail #action .email INPUT.text").blur( function() {
		if ($(this)[0].value == '') {
			$(this)[0].value = detailEmailDefault;
			removeError();
		}
	});
/*	$("#detail #action .email INPUT.text").keyup( function() {
		action = 'emailCheck';
		isValidPage(pageCurrent);
	});
	$("#detail #action .email INPUT.text").blur( function() {
		action = 'emailCheck';
		isValidPage(pageCurrent);
	});*/
	$("#detail #action TEXTAREA").blur( function() {
		if ($(this)[0].value == '')
			$(this)[0].value = detailDescDefault;
		saveData('output[desc]');
	});
});


// univerzalni funkce
function isNum(value) {
	if (/^\d+$/.test(value))
		return true;
	else
		return false;
}
function isNumByEvent(e) {
	// 96 - 105 numericka klavesnice, 8 backspace, 46 delete
	if (/\d/.test(getChar(e)) || (e.keyCode >= 96 && e.keyCode <= 105) || e.keyCode == 8 || e.keyCode == 46)
		return true;
	else
		return false;
}

function getChar(e) {
	if (!e) var e = window.event;
	
	var code;
	if (e.keyCode) code = e.keyCode;
	else
	if (e.which) code = e.which;
		
	if (code)
		return String.fromCharCode(code);
	return false;
}

function increaseValue(name, shift) {
	var e = oForm.elements[name];
	e.value = e.value*1 + shift*1;
	if (name == 'output[vykon]') countRadiators(pageCurrent+1, 'vykon', e.value);
}
function decreaseValue(name, shift) {
	var e = oForm.elements[name];
	e.value = e.value*1 - shift*1;
	if (name == 'output[vykon]') countRadiators(pageCurrent+1, 'vykon', e.value);
}
function getCurrentValue(name) {
	var elements = getElementsByName(name);
	for (index in elements)
		if (elements[index].checked)
			return elements[index].value;
	return false;
}

function getElementByAnything(idDesc, anything) {
	if (idDesc && anything) {
		idPrefix = idDesc.substring(0, idDesc.indexOf(anything));
		idSuffix = idDesc.substring(idDesc.indexOf(anything)+anything.length, idDesc.length);
		return obj(idPrefix+'Element'+idSuffix);
	}
	return false;
}
function getDescByElement(idElement) {
	if (idElement) {
		var elementFlag = 'Element';
		idPrefix = idElement.substring(0, idElement.indexOf(elementFlag));
		idSuffix = idElement.substring(idElement.indexOf(elementFlag)+elementFlag.length, idElement.length);
		return obj(idPrefix+'Desc'+idSuffix);
	}
	return false;
}
function getElementsByName(name) {
	var retVal 	 = new Array;

	var elements = document.getElementsByName(name);
	for (var index = 0; index < elements.length; index++)
		retVal[retVal.length] = elements[index];
	
	return retVal;
}
function getTypeByName(name) {
	return name.substring(name.indexOf('[')+1, name.length-1);
}

function getPosition(e) {
	e = e || window.event;
	var cursorPosition = {x:0, y:0};
	
	if (e.pageX || e.pageY) {
		cursorPosition.x = e.pageX;
		cursorPosition.y = e.pageY;
	} else {
		var de = document.documentElement;
		var b = document.body;
		
		cursorPosition.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
		cursorPosition.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
	}
	return cursorPosition;
}

// funkce pro praci s kolacky
function getCookie(name) {
  complete=document.cookie; splited=complete.split(';');
  size=splited.length; parts=""; returns="";

  for (x=0;(x<size && returns=="");x++) 
  {
    parts=splited[x].split('=');
    if (parts[0].substring(0,1)==' ') 
      parts[0]=parts[0].substring(1,parts[0].length);
    if (parts[0]==name) returns=parts[1];
  }
  if (returns) return unescape(returns);
    else return false;
} 
function setCookie(name, value, expire, path) {
	var date = new Date();
	date.setTime(date.getTime() + expire * 1000);
	expire = date.toUTCString();
	
	var sPath = path;
	if ( !sPath ) sPath = "/";
   document.cookie = name + "=" + escape(value)  + "; path=" + sPath + ((expire == null) ? "" : ("; expires=" + expire))
} 

// validace
function isValidElement(elementName) {
	var outputType = getTypeByName(elementName);
	//var argv = isValidElement.arguments;
  	//var argc = argv.length;
  	
	switch (outputType) {
		case 'skupina':
		case 'provedeni':
		case 'model':
		case 'prichytky':
		case 'barva':
		case 'detail':
			var elements = getElementsByName(elementName);
			if (outputType == 'detail' && elements.length == 0)
				errorType = 'empty';
			else if (outputType == 'skupina' && elements.length == 1)
				return true;
			else {
				for (index in elements) {
					if (elements[index] && elements[index].checked) return true;
				}
			}
			break;
		case 't1':
		case 't2':
			var outputTypeNext = outputType == 't1' ? 't2' : 'ti';
			var elements = getElementsByName('output['+outputTypeNext+']');
			var elementNext = elements[0];
		case 'ti':
			var elements = getElementsByName(elementName);
			if (elements.length == 1 && elements[0].value) {
				if (elements[0].value.length == 0)
					errorType = 'empty';
				else if (!isNum(elements[0].value))
					errorType = 'format';
				else if (((outputType == 't1' || outputType == 't2') && (elements[0].value*1 < tempWaterMin*1 || elements[0].value*1 > tempWaterMax*1)) || (outputType == 'ti' && (elements[0].value*1 < tempAirMin*1 || elements[0].value*1 > tempAirMax*1)))
					errorType = 'out';
				else if (((outputType == 't1' || outputType == 't2') && elements[0].value*1 <= elementNext.value*1))
					errorType = 'less';
				else
					return true;
			} else
				errorType = 'empty';
			break;
		case 'vykon':
			var elements = getElementsByName(elementName);
			if (elements.length == 1 && elements[0].value) {
				if (elements[0].value.length == 0)
					errorType = 'empty';
				else if (!isNum(elements[0].value))
					errorType = 'format';
				else
					return true;
			} else
				errorType = 'empty';
			break;
		case 'email':
			var elements = getElementsByName(elementName);
			if ((action == 'email' && validationEmail.test(elements[0].value)) || action != 'email') {
				action = null;
				return true;
			}
			action = null;
			break;
	}
	return false;
}

function isValidRadiatorsCount() {
	var e = getElementsByName('radiatorsCountInput')[0];
	if (e && (e.value.length == 0 || e.value < 1))
		return false;
	else
		return true;
}

function isValidPage(page) {
	removeError();
	
	switch (page) {
		case 1:
			if (!isValidElement('output[skupina]'))
				showError('skupina');
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 2:
			if (!isValidElement('output[provedeni]'))
				showError('provedeni');
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 3:
			var isValidModel = isValidElement('output[model]');
			var isValidPrichytky = isValidElement('output[prichytky]');
			var isValidRadCount = isValidRadiatorsCount();
			
			if (!isValidModel) showError('model');
			if (!isValidPrichytky) showError('prichytky');
			if (!isValidRadCount) showError('radiatorsCount');
			
			if (isValidModel && isValidPrichytky && isValidRadCount) return true;
			break;
		case 4:
			var isValidTemp = new Array;
			var errorTypeTemp = new Array;
			var outputType = new Array('t1', 't2', 'ti');
			
			for (index in outputType) {
				isValidTemp[outputType[index]] = isValidElement('output['+outputType[index]+']');
				errorTypeTemp[outputType[index]] = errorType;
				
				if (!isValidTemp[outputType[index]] && errorTypeTemp[outputType[index]])
					showError(outputType[index]+'-'+errorTypeTemp[outputType[index]]);
			}

			var isValidRadCount = isValidRadiatorsCount();
			if (!isValidRadCount) showError('radiatorsCount');
			
			if (isValidTemp['t1'] && isValidTemp['t2'] && isValidTemp['ti'] && isValidRadCount) return true;
			break;
		case 5:
			var isValidVykon = isValidElement('output[vykon]');
					
			if (!isValidVykon && errorType)
				showError('vykon-'+errorType);
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 6:
			var elements = getElementsByName('output[vyskaMin]');
			for (index in elements)
				if (elements[index] && elements[index].checked)
					var vyskaMinValue = elements[index].value;
			
			var elements = getElementsByName('output[vyskaMax]');
			for (index in elements)
				if (elements[index] && elements[index].checked)
					var vyskaMaxValue = elements[index].value;
			
			if (vyskaMinValue && vyskaMaxValue && vyskaMinValue*1 > vyskaMaxValue*1)
				showError('vyskaMin');
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 7:
			var elements = getElementsByName('output[delkaMin]');
			for (index in elements)
				if (elements[index] && elements[index].checked)
					var delkaMinValue = elements[index].value;
			
			var elements = getElementsByName('output[delkaMax]');
			for (index in elements)
				if (elements[index] && elements[index].checked)
					var delkaMaxValue = elements[index].value;
			
			if (delkaMinValue && delkaMaxValue && delkaMinValue*1 > delkaMaxValue*1)
				showError('delkaMin');
			else if (delkaMinValue && delkaMaxValue && delkaMaxValue*1 < delkaMinValue*1)
				showError('delkaMax');
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 8:
			if (!isValidElement('output[barva]'))
				showError('barva');
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 9:
			if (!isValidElement('output[detail]'))
				showError('detail'+(errorType ? '-'+errorType : ''));
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
			break;
		case 10:
			if (!isValidElement('output[email]'))
				showError('email');
			else if (!isValidRadiatorsCount())
				showError('radiatorsCount');
			else
				return true;
	}
	
	return false;
}

// error
function showError(name) {
	if (name) {
		var type = name.indexOf('-') != -1 ? name.substring(0, name.indexOf('-')) : name;
		var elements = getElementsByName('output['+type+']');
		for (index in elements)
			if (elements[index].type != 'radio')
				$(elements[index]).addClass('error');
			
		if ($("#values")[0]) $("#values")[0].style.visibility = 'hidden';
		if ($("#header #error")) {
			$("#header #error").addClass("visible");
			if ($("#header #error ."+name)) $("#header #error ."+name).addClass('visible');
		}
		
		if (pageCurrent != 10) window.scrollTo(0,0);
		
		if (name == 'radiatorsCount') {
			$("#menu A").addClass('deniedByCount');
			$("#menu A.current").removeClass('deniedByCount');
		}
	}
}
function removeError() {
	if ($("#header #error")) {
		$("#header #error").removeClass("visible");
		if ($("#header #error DIV")) $("#header #error DIV").removeClass('visible');
	}
	
	$("#menu A").removeClass('deniedByCount');
	
	if ($("#values")[0]) $("#values")[0].style.visibility = 'visible';
	$("INPUT.text").removeClass('error');
	errorType = null;
}

// message
function showMessage(name) {
	if (name) {
		if ($("#values")[0]) $("#values")[0].style.visibility = 'hidden';
		if ($("#header #message")) {
			$("#header #message").addClass("visible");
			if ($("#header #message ."+name)) $("#header #message ."+name).addClass('visible');
		}
		window.scrollTo(0,0);
	}
}
function removeMessage() {
	if ($("#header #message")) {
		$("#header #message").removeClass("visible");
		if ($("#header #message DIV")) $("#header #message DIV").removeClass('visible');
	}
	if ($("#values")[0]) $("#values")[0].style.visibility = 'visible';
}

// radio
function turnRadioByTitle(e) {
	if (e.id.indexOf('Desc') != -1)
		var anything = 'Desc';
	else if (e.id.indexOf('Image') != -1)
		var anything = 'Image';
	else if (e.id.indexOf('Container') != -1)
		var anything = 'Container';
		
	var eDestination = getElementByAnything(e.id, anything);
	if (eDestination && !eDestination.checked) {
		turnRadio(eDestination);
		denyMenuItems(eDestination.value, valueCurrent);
		countRadiators(pageCurrent+1, getTypeByName(eDestination.name), eDestination.value);
	}
}
function turnRadio(e) {
	if (e && !e.checked) e.checked = true;
}
function signDesc(eElement) {
	if (eElement) {
		var type = getTypeByName(eElement.name);
		var eDesc = getDescByElement(eElement.id);
		
		if (type.indexOf('Min') != -1)
			var column = '.col1';
		else
			var column = '.col2';
		
		$(column+" SPAN").removeClass('selected');
		$(column+" SPAN#"+eDesc.id).addClass('selected');
	}
}

function enableElements(type) {
	if (type) {
		var elementName = 'output['+type+']';
		var elements = getElementsByName(elementName);
		for (index in elements)
			if (elements[index] && elements[index].disabled && elements[index].disabled == true)
				elements[index].disabled = false;
	}
}

// jdi na stranku
function goToPage(pageNumber, doValidation) {
	oForm.action = oForm.action.substring(0, oForm.action.indexOf('?') + 1) + 'page=' + pageNumber;
	var isValid = pageNumber > pageCurrent ? (doValidation ? isValidPage(pageCurrent) : true) : true;
	if (isValid) {
		if (pageNumber) ePage.value = pageNumber;
		oForm.submit();
	}
}

// vymaze polozky na strance
function resetPage(page, reset) {
	switch(page) {
		case 1:
			var elements = getElementsByName('output[skupina]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) resetInSession('skupina');
			break;
		case 2:
			var elements = getElementsByName('output[provedeni]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) resetInSession('provedeni');
			break;
		case 3:
			// model
			var elements = getElementsByName('output[model]');
			if (elements.length > 1)
				for (index in elements)
					if (elements[index].checked) elements[index].checked = false;
			
			// prichytky
			var elements = getElementsByName('output[prichytky]');
			if (!reset && elements.length == 1)
				elements[0].checked = true;
			else
				for (index in elements) if (elements[index].checked) elements[index].checked = false;
				
			if (!reset) resetInSession('model');
			break;
		case 4:
			var elements = getElementsByName('output[volba]');
			for (index in elements) {
				if (!reset && elements[index].value == defaultTempId)
					elements[index].checked = true;
				else elements[index].checked = false;
			}
				
			if (!reset) {
				obj('t1').value = defaultTempWater1;
				obj('t2').value = defaultTempWater2;
				obj('ti').value = defaultTempAir;
				resetInSession('teplota');
			}
			break;
		case 5:
			var elements = getElementsByName('output[vykon]');
			elements[0].value = reset ? '' : defaultWattage;
			if (!reset) resetInSession('vykon');
			break;
		case 6:
			var elements = getElementsByName('output[vyskaMin]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) elements[0].checked = true;
			var elements = getElementsByName('output[vyskaMax]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) resetInSession('vyska');
			break;
		case 7:
			var elements = getElementsByName('output[delkaMin]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			var elements = getElementsByName('output[delkaMax]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) resetInSession('delka');
			break;
		case 8:
			var elements = getElementsByName('output[barva]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) {
				elements[0].checked = true;
				resetInSession('barva');
				showColor(elements[0]);
			}
			break;
		case 9:
			var elements = getElementsByName('output[detail]');
			for (index in elements) if (elements[index].checked) elements[index].checked = false;
			if (!reset) resetInSession('detail');
			turnOffMenu(9);
			break;
		case 10:
			var elements = getElementsByName('output[email]');
			if (detailEmailDefault && elements[0] && elements[0].value) elements[0].value = detailEmailDefault;
			var elements = getElementsByName('output[desc]');
			if (detailDescDefault && elements[0] && elements[0].value) elements[0].value = detailDescDefault;
			break;
	}
	if (reset && pageCurrent != 1 && pageCurrent != 2) {
		goToPage(2, false);
 	} else
		countRadiators();
}

// omezeni menu
function denyMenuItems(value, valueCurrent) {
	if ((value == null && valueCurrent == null) || pageCurrent == 1 || pageCurrent == 2) {
		if ((value == null && valueCurrent == null) || value != valueCurrent) {
			// je-li zvolena jina hodnota, nasledujici polozky v menu budou deaktivovany
			$("#menu A").addClass('denied');
			$("#menu A.current").removeClass('denied');
			if (pageCurrent == 2) $("#menu .item1 A").removeClass('denied');
		} else {
			// hodnota je stejna, muzeme vypnute polozky opet zapnout
			$("#menu A").removeClass('denied');
			$("#menu A.deniedMark").addClass('denied');
		}
	}
}

function turnOnMenu(page) {
	if (page && page*1 > 0 && page*1 <=10) {
		var name = "#menu .item"+((page*1)+1)+" A";
		$(name).removeClass('denied');
	}
}

function turnOffMenu(page) {
	if (page && page*1 > 0 && page*1 <=10) {
		var name = "#menu .item"+((page*1)+1)+" A";
		$(name).addClass('denied');
	}
}

// teplota
function tempCountRadiators() {
	var eT1 = oForm.elements['output[t1]'];
	var eT2 = oForm.elements['output[t2]'];
	var eTi = oForm.elements['output[ti]'];
	var value = eT1.value+';'+eT2.value+';'+eTi.value;
	countRadiators(pageCurrent+1, null, value);
}

// vyska
function checkHeight(eSelected) {
	if (eSelected) {
		// napr. heightElementMax588 -> heightElementMax588,Max,588
		idParts = eSelected.id.match(/^.*(Min|Max)(\d+)$/);
		
		if (idParts.length == 3) {
			
			var idPrefix = 'heightElement'+(idParts[1] == 'Min' ? 'Max' : 'Min');
			var correctValue;
			
			for (index in heights) {
				var eOposite = obj(idPrefix+heights[index]);
				// nastavi navratovou hodnotu na hodnotu aktualne nastavene vysky
				if (eOposite.checked) correctValue = eOposite.value;
				
				// hodnota minimalni vysky
				if (eOposite.checked && idParts[1] == 'Max' && eOposite.value*1 > eSelected.value*1) {
					nShift = 0;
					// dokud bude minimalni vyska vyssi jak maximalni, musi se hodnota snizovat
					while (eOposite.value*1 > eSelected.value*1) {
						nShift++;
						eOposite = obj(idPrefix+heights[index*1-nShift]);
					}
					eOposite.checked = true;
					signDesc(eOposite);
					// navratova hodnota je nastavena na aktualne upravenou hodnotu vysky
					correctValue = eOposite.value;
					break;
				}
				else
				// hodnota maximalni vysky
				if (eOposite.checked && idParts[1] == 'Min' && eOposite.value*1 < eSelected.value*1) {
					nShift = 0;
					// dokud bude maximalni vyska nizsi jak minimalni, musi se hodnota zvysovat
					while (eOposite.value*1 < eSelected.value*1) {
						nShift++;
						eOposite = obj(idPrefix+heights[index*1+nShift]);
					}
					eOposite.checked = true;
					signDesc(eOposite);
					// navratova hodnota je nastavena na aktualne upravenou hodnotu vysky
					correctValue = eOposite.value;
					break;
				}
			}
			
			// pokud neni vybrana zadna moznost, je vracena budto nejnizsi nebo nejvyssi hodnota podle toho, zda uzivatel edituje max nebo min hodnotu
			return correctValue ? correctValue : (idParts[1] == 'Max' ? obj(idPrefix+heights[0]).value : obj(idPrefix+heights[index]).value);
		}
	}
}

// delka
function checkWidth(eSelected) {
	if (eSelected) {
		// napr. widthElementMax588 -> widthElementMax588,Max,588
		idParts = eSelected.id.match(/^.*(Min|Max)(\d+)$/);
		
		if (idParts.length == 3) {
			
			var idPrefix = 'widthElement'+(idParts[1] == 'Min' ? 'Max' : 'Min');
			var correctValue;
			
			for (index in widths) {
				var eOposite = obj(idPrefix+widths[index]);
				// nastavi navratovou hodnotu na hodnotu aktualne nastavene delky
				if (eOposite.checked) correctValue = eOposite.value;
				
				// hodnota minimalni delky
				if (eOposite.checked && idParts[1] == 'Max' && eOposite.value*1 > eSelected.value*1) {
					nShift = 0;
					// dokud bude minimalni delka vyssi jak maximalni, musi se hodnota snizovat
					while (eOposite.value*1 > eSelected.value*1) {
						nShift++;
						eOposite = obj(idPrefix+widths[index*1-nShift]);
					}
					eOposite.checked = true;
					signDesc(eOposite);
					// navratova hodnota je nastavena na aktualne upravenou hodnotu delky
					correctValue = eOposite.value;
					break;
				}
				else
				// hodnota maximalni delky
				if (eOposite.checked && idParts[1] == 'Min' && eOposite.value*1 < eSelected.value*1) {
					nShift = 0;
					// dokud bude maximalni delka nizsi jak minimalni, musi se hodnota zvysovat
					while (eOposite.value*1 < eSelected.value*1) {
						nShift++;
						eOposite = obj(idPrefix+widths[index*1+nShift]);
					}
					eOposite.checked = true;
					signDesc(eOposite);
					// navratova hodnota je nastavena na aktualne upravenou hodnotu delky
					correctValue = eOposite.value;
					break;
				}
			}
			
			// pokud neni vybrana zadna moznost, je vracena budto nejnizsi nebo nejvyssi hodnota podle toho, zda uzivatel edituje max nebo min hodnotu
			return correctValue ? correctValue : (idParts[1] == 'Max' ? obj(idPrefix+widths[0]).value : obj(idPrefix+widths[index]).value);
		}
	}
}

function countMaxHeight() {
	var oFormCounter 	= document.forms['frmKonfigCounter'];
	var eCountedValue 	= oFormCounter.elements['countedValueInput'];
	var eSillHeight 	= oFormCounter.elements['sillHeightInput'];
	var eFloorHeight 	= oFormCounter.elements['floorHeightInput'];

	if (eCountedValue) $(eCountedValue).removeClass('error');
	
	var error = false;
	
	var minFloorHeight = 150;
	
	if (eCountedValue && eCountedValue.value) {
		if (eSillHeight && eSillHeight.value) {
			var vSillHeight = parseInt(eSillHeight.value);
			if (!vSillHeight || vSillHeight == 'NaN') vSillHeight = 0;
		}
		
		if (eFloorHeight && eFloorHeight.value) {
			var vFloorHeight = parseInt(eFloorHeight.value);
			if (!vFloorHeight || vFloorHeight == 'NaN') vFloorHeight = minFloorHeight;
		}
		
		if (vFloorHeight < minFloorHeight)
			vFloorHeight = minFloorHeight;
	
		var minSillHeight = vFloorHeight*1 + heights[0]*1 + 50;
			
		// vyska parapetu je nizsi nez nejnizsi mozna
		if (vSillHeight < minSillHeight)
			error = true;
	
		eSillHeight.value = vSillHeight;
		eFloorHeight.value = vFloorHeight;
			
		var vCountedValue;
		
		if (!error && eCountedValue && vSillHeight && vFloorHeight) {
			var heightMax = vSillHeight - vFloorHeight - 50;
			for (index in heights)
				if (heightMax >= heights[index] && heights[index*1+1] && heightMax < heights[index*1+1])
					vCountedValue = heights[index];
			if (!vCountedValue) vCountedValue = heights[index];
		} else {
			vCountedValue = 0;
			$(eCountedValue).addClass('error');
		}
		
		eCountedValue.value = vCountedValue;
	}
}

// AJAX
function showColor(e) {
	// zmena barvy pozadi
	$("#vars .item DIV").removeClass('selected');
	$(e.parentNode).addClass('selected');

	var codeColor = e.id.substring('colorElement'.length, e.id.length);
	if (codeColor) {
		// nahled
		if (previewImage[codeColor]) obj('colorPreview').src = previewImage[codeColor].src;
		
		// nacte a zobrazi barvu armatury
		/*
		var url = '/php/u/_get_data.php?action=setColor&code='+codeColor;
		new ajaxRequest("get", url, "ShowColor");
		*/
	}
}
function parseShowColor(o) {
	if (o.responseText) {
		var e = obj('colorArmature');
			e.innerHTML = o.responseText;
	}
}

function countRadiators(page, type, value) {
	removeError();
	var url = '/php/u/_get_data.php?action=getRadiatorsCount&page='+page+'&type='+type+'&value='+value;
	new ajaxRequest("get", url, "CountRadiators");
}
function parseCountRadiators(o) {
	if (o.responseText) {
		var data = o.responseText.split(';');
		
		// zapise zpravu o poctu teles
		var e = obj('radiatorsCount').childNodes[0];
		if (data[0] && e && e.innerHTML) e.innerHTML = data[0];
		
		// ulozi pocet vyhovujicich teles
		var e = getElementsByName('radiatorsCountInput')[0];
		if (e) e.value = data[1];
		
		// pokud doslo ke zmene a detail pod danym id neexistuje, zakazeme krok 10
		if (!data[2] || data[2] == 0)
			$("#menu .item10 A").addClass('denied');
		else
			$("#menu .item10 A").removeClass('denied');
	}
}

function getHeights() {
	var url = '/php/u/_get_data.php?action=getHeights';
	new ajaxRequest("get", url, "GetHeights");
}
function parseGetHeights(o) {
	if (o.responseText) heights = o.responseText.split(';');
}
function getWidths() {
	var url = '/php/u/_get_data.php?action=getWidths';
	new ajaxRequest("get", url, "GetWidths");
}
function parseGetWidths(o) {
	if (o.responseText) widths = o.responseText.split(';');
}

function resetSession() {
	var url = '/php/u/_get_data.php?action=sessionReset';
	new ajaxRequest("get", url, "ResetSession");
}
function parseResetSession(o) {
	resetPage(pageCurrent, true);
}

function resetInSession(type) {
	var url = '/php/u/_get_data.php?action=resetType&type='+type;
	new ajaxRequest("get", url, "ResetInSession");
}
function parseResetInSession(o) {
	countRadiators(null, null, null);
}

function getListTable(page, orderName, orderDirection) {
	var url = '/php/u/_get_data.php?action=getListTable&page='+page+'&orderName='+orderName+'&orderDirection='+orderDirection;
	new ajaxRequest("get", url, "GetListTable");
}
function parseGetListTable(o) {
	if (o.responseText && o.responseText != 'empty') {
		var e = obj('vars');

		while (e.rows.length) e.deleteRow(0);
		
		var data = o.responseText.substring(0, o.responseText.length-1);
		var rows = data.split('#');
		
		for (rIndex in rows) {
			var row = e.insertRow(rIndex);
			if (rIndex % 2 != 0) row.className = 'even';
			var cols = rows[rIndex].split(';');
			
			for (cIndex in cols) {
				var cell = row.insertCell(cIndex);
				cell.innerHTML = cols[cIndex];
				if (cIndex == 0) cell.className = 'vars';
				if (cIndex*1+1 == cols.length) cell.className = 'last';
			}
		}
	}
}

function saveData(name, parseFunc) {
	var elements = getElementsByName(name);
	if (elements[0] && elements[0].value) {
		//var ie = window.ActiveXObject ? 1 : 0;
		var url = '/php/u/_get_data.php?pagePrevious='+pageCurrent+'&action=saveData&name='+getTypeByName(name)+'&data='+encodeURI(elements[0].value); //+'&ie='+ie;
		new ajaxRequest("get", url, parseFunc ? parseFunc : "SaveData");
	}
}
function parseSaveData(o) {}

function saveDataAndMail(name) {
	saveData(name, 'SaveDataAndMail');
}
function parseSaveDataAndMail() {
	sendSpecification(getElementsByName('output[email]')[0].value);
}

function sendSpecification(address) {
	var url = '/php/u/_get_data.php?action=sendSpecification&address='+address;
	new ajaxRequest("get", url, "SendSpecification");
}
function parseSendSpecification(o) {
	if (o.responseText && o.responseText == 'ok')
		showMessage('email');
}
// * AJAX