// kontrola a submit
function validateSimpleSearchForm(eMsg)
{
	if (getE("id_EXPS").value == getE("id_EXPS").defaultValue)
	{
		getE("id_EXPS").value='';
		alert(eMsg);
		getE("id_EXPS").focus();
		return false;
	}
	if (trim(getE("id_EXPS").value).length < 3)
	{
		alert(eMsg);
		getE("id_EXPS").focus();
		return false;
	}
	return true;
}



/*==============================================================================
pomocna funkce pro zmenu textu v inputech pro onblur, onfocus. Da se vyvolat
i od jinud nez z onblur/onfocus, je-li to potreba
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: elementId,
	value1, value2 jsou hodnoty, ktere se nastavi
--------------------------------------------------------------------------------
out: ---
==============================================================================*/
function changeValue(elementId, value1, value2)
{
	if (getE(elementId).value == value1)
	{
		getE(elementId).value = value2
	}
}



/*==============================================================================
Validate Form Submit
Zkontroluje podle definic prvky formu zda jsou spravne vyplnene a bud
odesle formular, nebo vyhodi alert. Da se aplikovat na vsechny html prvky, ktere
byly "spravne" pripraveny pro tuto fci. Tzn. musi mit minimalne attr ID

Zpusob pouziti:
----------------
Vety se definuji v asp kde je formular a provede se jejich zapis do skriptu pomoci tagu <script>
napr.
		"<script type=""text/javascript"">" & vbcrlf & _
		"var lostPass_vf = new Array();" & vbcrlf & _
		"	lostPass_vf[0] = 'simple|,|lostpass_email|,|text|,|>0|,|" & GLS(64, "Vyplňte e-mail.") & "';" & vbcrlf & _
		"	lostPass_vf[1] = 'simple|,|lostpass_email|,|email|,|" & GLS(65, "Nesprávný formát e-mailu.") & "';" & vbcrlf & _
	    "</script>" & vbcrlf
lostPass_vf je nazev promene vfd, ktera je predana do vfs, coz umoznuje zachovat GLS.
Doporucuji definice ukladat na jine misto a do function_inc.asp doplnit fce, ktere se budou starat o asp
kontrolu formulare, tzn. 2 mouchy jednou ranou.

Definice vet predavanych do formulare:
--------------------------------------
jako oddelovac je pouzita sekvence |,|. vety nejsou "pevne", pro kazdou kombinaci je mozne
dotvaret vlastni kontroly dle potreby

syntaxe:
--------
id_prvku_ktereho_se_to_tyka|,|hlavni_typ_testu|,|podminka|,|hlaska_pri_chybe

-hlavni_typ_testu:
	int - integer, cele cislo
	real - desetinne cislo
	textLegth - kontrola textu - delka
	date - datum
	email - email
	value - hodnota musi byt zadana/vybrana
	ifValue - pokud je zdana, proved kontrolu (prvni podminka pak urcuje "hlavni_typ_testu"
	time - cas
		........ muze byt vice, staci doplnit jako vetev do case a pridelit fci.
		
-podminka:
	1 ci vice podminek ktere jsou na hodnotu kladeny, jsou pouzity bud jako eval, nebo jako
	predvytvorene (specialni) pripady, ktere staci opet dopsat do tohoto skriptu.
	pro kazdy hlavni_typ_testu je mozne pouzivat jine podminky, nemusi nutne znacit to same.
	V podstate muzou vzniknout nove sekvence, ktere se budou starat o presne samostatny typ.
	
- posledni je pak vzdy hlaska

--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: formId, id formulare ktery chceme odeslat
	vfd definice pro kontrolu formulare
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs(formId, vfd)
{
	// zatim jsme chybu nenasli
	var noErrorFound = true;
	// pro kazdou vetu
	for (var i=0; i < vfd.length; i++)
	{
		// rozdelim ji na jednotlive casti
		var actualLineData = vfd[i].split('|,|');

		noErrorFound = vfs_simple(actualLineData);

		// pokud posledni proces krok chybou,
		// ve provedu alert, nastavim fokus a vracim flase
		if (!noErrorFound)
		{
			alert(actualLineData[actualLineData.length-1]);
			getE(actualLineData[0]).focus();
			return false;
		}
	}
	// nedoslo k odeslani false, posleme formular
//	getE(formId).submit();
	return true;
}


/*==============================================================================
kontrola zaznamu simple
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: ald aktualni data pro kontrolu
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_simple(ald)
{
	var noErrorFound = true;
	// nacteme element
	var el = getE(ald[0]);
	// zajisitme nastaveni jeho hodnoty, musim nacist
	var elHodnota

	switch (el.type)
	{
		case 'text':
		case 'password': elHodnota = el.value;
		break;
		case 'checkbox': elHodnota = el.checked;
		break;
		case 'select-one': elHodnota = el.selectedIndex;
		break;
		// zde je nutne doplnit select, checkbox, radio
	}
	// podle definovaneho typu kontroly, index1
	switch(ald[1])
	{
		// test na hodnotu
		case 'value': noErrorFound = vfs_checkType_value(elHodnota);
		break;
		// test na hodnotu
		case 'valueNot': noErrorFound = vfs_checkType_valueNot(elHodnota, ald[2]);
		break;
		// test na email
		case 'email': noErrorFound = vfs_checkType_email(elHodnota);
		break;
		// test na cele cislo, druh(int/real), podminka
		case 'int': noErrorFound = vfs_checkType_number(elHodnota, ald[1], ald[2]);
		break;
		// test na cislo, druh(int/real), podminka
		case 'real': noErrorFound = vfs_checkType_number(elHodnota, ald[1], ald[2]);
		break;
		// test na delku textu, index2 je podminka
		case 'textLength': noErrorFound = vfs_checkType_textLength(el.value.length, ald[2]);
		break;
		// test na shodu hodntot, z indexem 2 je druhy element
		case 'valueEq': noErrorFound = vfs_checkType_valueEq(elHodnota, ald[2]);
		break;
		// alespone jeden element musi byt vyplnen, elementy dalsi jsou splitovany &
		case 'valueOr': noErrorFound = vfs_checkType_valueOr(elHodnota, ald[2]);
		break;
		// Pokud 2. element ma danou hodnotu rovnu podmince, musi mit prvni nenulovou hodnotu
		case 'valueIf': noErrorFound = vfs_checkType_valueIf(elHodnota, ald[2], ald[3]);
		break;

		// test na nasobek cisla, nasobek
		case 'multiplied': noErrorFound = vfs_checkType_multiplied(elHodnota, ald[2]);
		break;

	}
	if (noErrorFound) {
		return true;
	}
	return false;
}


/*==============================================================================
kontrola na pritomnost nenulove hodnoty
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_value(hodnota)
{
	if (hodnota == "") { return false; }
	return true;
}

/*==============================================================================
kontrola na pritomnost nenulove hodnoty
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota a s cim porovnat
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_valueNot(hodnota, notEquelTo)
{
	if (hodnota == notEquelTo) { return false; }
	return true;
}



/*==============================================================================
kontrola to, zda je hodnota nasobkem cisla
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_multiplied(hodnota, nasobek)
{
	if (hodnota == "") { return false; }
	if ((hodnota * 10) % (nasobek * 10) != 0) { return false; }
	return true;
}

/*==============================================================================
kontrola na email
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota - email
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_email(hodnota)
{
	var reEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/
	if (reEmail.test(hodnota)) { return true; }
	return false;

}



/*==============================================================================
kontrola na cislo
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota - email
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_number(hodnota, druh, podminka)
{
	if (druh=='real') {
		najdiCislo=/^-{0,1}\d+(\.\d+){0,1}$/;
		zmenCarku = /,/;
		hodnota=hodnota.replace(zmenCarku, ".");
	} else {
		najdiCislo=/^-{0,1}\d+$/;
	}
	var jeCislo = najdiCislo.exec(hodnota);
	if (!jeCislo) { return false; }
	if (podminka=='all') { return true; }
	var podminky = podminka.split('&');
	for(var i=0; i<podminky.length; i++) {
		if (!eval(hodnota+podminky[i])) {
			return false;
		}
	}
	return true;
}


/*==============================================================================
kontrola na delku testu
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota, podminka
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_textLength(hodnota, podminka)
{
	var podminky = podminka.split('&');
	for(var i=0; i < podminky.length; i++) {
		if (!eval(hodnota+podminky[i])) {
			return false;
		}
	}
	return true;
}



/*==============================================================================
kontrola, alespon jeden element musi byt zadan
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota, podminka
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_valueOr(hodnota, podminka)
{
	var vystup = true
	vystup = vfs_checkType_value(hodnota)
	if (vystup) { return true; }
	var dalsiId = podminka.split('&');
	for(var i=0; i < dalsiId.length; i++) {
		if (getE(dalsiId[i]).value != "") {
			return true;
		}
	}
	return false;
}


/*==============================================================================
Pokud 2 element ma danou hodnotu rovnu podmince, musi mit prvni nenulovou hodnotu
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota1 - prvniho hodnota, id2 - id2 2. elementu, podminka2 co ma splnit 2. element
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_valueIf(hodnota1, id2, podminka2)
{
	// zatim musime testovat zda je splnena podminka, pokud neni, vracime true, nezajima nas hodnota
	var vystup = false
	var hodnota2 = "'" + getE(id2).value + "'";
	var podminky = podminka2.split('&');
	for(var i=0; i < podminky.length; i++) {
		if (eval(hodnota2+podminky[i])) {
			vystup = true;
		}
	}
	// podminka neni splenena, muzeme vyskocit
	if (!vystup) { return true; }
	// vracime pouze hodnotu z value
	return  vfs_checkType_value(hodnota1)
}


/*==============================================================================
kontrola na shodu hodnot
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: hodnota, podminka
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function vfs_checkType_valueEq(hodnota, element2)
{
	var el = getE(element2);
	// zajisitme nastaveni jeho hodnoty, musim nacist
	var elHodnota
	switch (el.type)
	{
		case 'text':
		case 'password':
			elHodnota = el.value;
		break;
		// zde je nutne doplnit select, checkbox, radio
	}
	if (hodnota != elHodnota) { return false; }
	return true;
}





/*==============================================================================
odesle formular, byl li stisknut enter, vyuzit se da pro pripady, ze formular
obsahuje pouze jeden input a ten se pri beznem enteru odesle nestandartne.
Takhle se docili vyvolani kontroly pres onsubmit formulare. Pridava se do
onkeypress.
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: event,
	element ze ktereho byla event vyvolana (staci "this")
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function enterSubmit(e, el)
{
	if (isEnterPressed(e))
	{
		el.form.submit();
	}
}



/*==============================================================================
testuje, zda event byl stisk enteru
--------------------------------------------------------------------------------
author: tomas.majer@netdirect.cz
--------------------------------------------------------------------------------
in: event
--------------------------------------------------------------------------------
out: true/false
==============================================================================*/
function isEnterPressed(e)
{
	var keynum;
	if(window.event) // IE
	{
		keynum = e.keyCode
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which
	}
	if (keynum == 13)
	{
		return true;
	}
	return false;
}