var mouse = {x: 0, y: 0};

function getMouseXY(e) {
	e = e || window.event;
	if (e.pageX || e.pageY) {
		mouse.x = e.pageX;
		mouse.y = e.pageY;
	} else if (e.clientX || e.clientY) {
		mouse.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		mouse.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
	}
}

document.onmousemove = getMouseXY;

function getPos(ref) {
	var x = y = 0;
	if (ref.offsetParent) {
		do {
			x += ref.offsetLeft;
			y += ref.offsetTop;
		} while (ref = ref.offsetParent);
	}
	return {x:x, y:y};
}

var timeoutId = 0;
var submenu = new Array(null, null, null, null, null);

function showSubmenu(ref, level, down) {
	if (timeoutId != 0) {
		clearTimeout(timeoutId);
		timeoutId = 0;
	}
	_hideSubmenu(level, true);
	submenu[level] = ref.nextSibling;
	if (down) {
		ref.nextSibling.style.display = 'block';
		ref.nextSibling.style.left = getPos(ref).x + 'px';
		ref.nextSibling.style.top = getPos(ref).y + ref.offsetHeight + 3 + 'px';
	} else {
		ref.nextSibling.style.display = 'block';
		if ((getPos(ref).x + ref.offsetWidth + ref.nextSibling.offsetWidth > (document.documentElement.clientWidth || document.body.clientWidth) + (document.documentElement.scrollLeft || document.body.scrollLeft)) && (getPos(ref).x - ref.nextSibling.offsetWidth >= 0))
			ref.nextSibling.style.left = ref.offsetLeft - ref.nextSibling.offsetWidth + 'px';
		else
			ref.nextSibling.style.left = ref.offsetLeft + ref.offsetWidth + 'px';
		ref.nextSibling.style.top = ref.offsetTop - 1;
	}
}

function _hideSubmenu(level, force) {
	if (level < submenu.length - 1) {
		if (!_hideSubmenu(level + 1, force)) return false;
	}
	var ref = submenu[level];
	if (!ref) return true;
	var posLeft = getPos(ref).x;
	var posRight = posLeft + ref.offsetWidth;
	var posTop = getPos(ref).y;
	var posBottom = posTop + ref.offsetHeight;
	if (force || mouse.x < posLeft || mouse.x > posRight || mouse.y < posTop || mouse.y > posBottom) {
		ref.style.display = 'none';
		submenu[level] = null;
		return true;
	}
	return false;
}

function hideSubmenu() {
	if (timeoutId == 0) timeoutId = setTimeout('timeoutId=0;_hideSubmenu(1);', 500);
}

function isEmail(email) {
	var re = /^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/;
	return re.test(email);
}

function isVIN(vin) {
	var re = /^[0-9a-hj-npr-zA-HJ-NPR-Z]{17}$/;
	return re.test(vin);
}

function isNumerical(value) {
	var re = /^[0-9]+$/;
	return re.test(value);
}

function checkDavoz(ref) {
	if (ref.pracoviste.value == '') {
		alert('Není vyplněno montážní pracoviště!');
		ref.pracoviste.focus();
		return false;
	}
	if (!isVIN(ref.vin.value)) {
		alert('Neplatný VIN vozidla!\nVIN vozidla je tvořeno 17 písmeny a číslicemi. V kódu se používají číslice a znaky anglické abecedy kromě písmen I, O a Q, u kterých by hrozila záměna s číslicemi 0 a 1.');
		ref.vin.focus();
		return false;
	}
	if (ref.typVozidla.value == '') {
		alert('Není vyplněn typ vozidla!');
		ref.typVozidla.focus();
		return false;
	}
	if (!isNumerical(ref.cisloPrilohy.value)) {
		alert('Číslo přílohy není správně vyplněno!');
		ref.cisloPrilohy.focus();
		return false;
	}
	if (ref.email.value != '' && !isEmail(ref.email.value)) {
		alert('E-mail není ve správném formátu!');
		ref.email.focus();
		return false;
	}
	if (ref.potvrzeni.checked && ref.email.value == '') {
		alert('Pro zaslání potvrzení o přečtení je potřeba vyplnit e-mail!');
		ref.email.focus();
		return false;
	}
	return true;
}