﻿var validMode = true;
var emailfilter=/^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i

function validate(objIn, typ, notNull)
{
	if(validMode == true) return true
	var obj = objIn;
	if( typeof(objIn) == 'string' )
	{
		obj = document.getElementById(objIn);
		if(obj == null) return true;				
	}

	if(obj.tagName == 'TABLE')
	{
		if(isSelRadio(obj)) { changeClass(obj, ""); return true; }
		else { changeClass(obj, "ERR"); return false; }
	}

	if(obj.tagName == 'SELECT' && notNull)
	{
		if(obj.value != "" && obj.value != 0) { changeClass(obj, ""); return true; }
		else { changeClass(obj, "ERR"); return false; }
	}

	var newClass = ""
	if(obj.readOnly) newClass += "RO"

	if(obj.type == 'checkbox' && notNull)
	{
		if(obj.checked)
		{
			changeClass(obj.parentNode, newClass)
			return true
		}
		else
		{
			changeClass(obj.parentNode, newClass + "ERR")
			return false
		}
	}

	if(obj.value == "")
	{
		if(!notNull)
		{
			changeClass(obj, newClass)
			return true
		}
		else
		{
			changeClass(obj, newClass + "ERR")
//			alert('Pole nesmie ostať prázdne!')
			return false
		}
	}

	var datumfilter=/^([0]?[1-9]|[12][0-9]|3[01])[.][ ]?([0]?[1-9]|1[012])[.][ ]?(19|20)\d{2}$/
	var eanfilter=/^(\d{8}|\d{13}|\d{14})$/
	var ean2filter=/^[2][7-9]/
	var intfilter=/^[0-9 ]*$/
	var telfilter=/^[+]?[0-9]*$/
	var ok = true

	switch(typ)
	{
		case 'Num':
		case 'NumF':
		case 0:
		case 6:
			if(isNaN(obj.value.replace(/,/,".").replace(/ /,""))) ok = false
			break;
		case 'Date':
		case 1:
			obj.value = obj.value.replace(/,/g, ".")
			ok = datumfilter.test(obj.value); break
		case 'Email':
		case 3:
			ok = emailfilter.test(obj.value); break
		case 'EAN':
		case 4:
		    if(ean2filter.test(obj.value))
		    {
		        if(obj.value.length == 6 || obj.value.length == 14) ok = true
		        else
		        {
		            ok = false
		            alert("Vážené EAN kódy obsahujú vždy 6 miest ak sú vážené, alebo 14 miest ak začínajú ako vážené, ale sú to kartónové EAN kódy nevážených výrobkov")
		        }
	            break
		    }
			ok = eanfilter.test(obj.value);
			if(!ok) { alert("Nevážený čiarový kód musí obsahovať 8 alebo 13 číslic. Nesprávny počet číslic v kóde."); break }
		    konst=3;
			sucet=0;
		    for(i=obj.value.length-1; i>0; i--)
		    {
				sucet += obj.value.substr(i-1,1)*konst;
				konst = 4-konst;
			}
			if(obj.value.substr(obj.value.length-1) != (1000-sucet)%10) { alert("Nesprávny čiarový kód"); ok = false }
			break
		case 'NumD':
		case 5:
			ok = intfilter.test(obj.value); break

		case 'Tel':
		case 7:
			ok = telfilter.test(obj.value); break

		case 8:
	    case 'NumFKlad0':
			if(isNaN(obj.value.replace(/,/,".").replace(/ /,""))) { ok = false; break }
			if(obj.value < 0) ok = false
			break;

		case 9:
		case 'NumFKlad':
			if(isNaN(obj.value.replace(/,/,".").replace(/ /,""))) { ok = false; break }
			if(obj.value <= 0) ok = false
    		break;

		case 10:
		case 'NumDKlad0':
			if(!intfilter.test(obj.value)) { ok = false; break }
			if(obj.value < 0) ok = false
			break;

		case 11:
		case 'NumDKlad':
			if(!intfilter.test(obj.value)) { ok = false; break }
			if(obj.value <= 0) ok = false
		    break;

		case 12:
		case 'RC':
			if(isNaN(obj.value.replace(/ /g,""))) { ok = false; break }
			if(obj.value.length != 9 && obj.value.length != 10) { ok = false; break }
			if(obj.value.length == 9 && obj.value.substr(0,2) > 53) { ok = false; break }
			if(obj.value.length == 10 && obj.value%11) ok = false
			var mesiac = obj.value.substr(2,2)
			if(mesiac > 12 && mesiac < 51 || mesiac > 62) { ok = false; break }
			var den = obj.value.substr(4,2)
			if(den > 31) { ok = false; break }
		    break;
	}

	if(ok)
	{
		changeClass(obj, newClass)
		return true
	}
	else
	{
		changeClass(obj, newClass + "ERR")
		//alert('Nesprávna hodnota!')
		return false
	}
}

function validateForm(zoznam)
{
	if(typeof(zoznam) == 'string') eval("zoznam = " + zoznam)
	var OK = true

	var pocet = zoznam.length
	if(zoznam["addFunction"] != null)
	{
		eval("OK = " + zoznam["addFunction"])
		pocet--
	}

	for(n = 0; n < pocet; n+=3)
	{		
		if(validate(zoznam[n], zoznam[n+1], zoznam[n+2]) == false) OK = false
	}

	return OK
}

var maValidaciu = new Array()
function validating(zoznam, menoZoznamu)
{
	for(n = 0; n < zoznam.length-1; n+=3)
	{
		if(existInArray(maValidaciu,zoznam[n]) != -1) continue
		var element = document.getElementById(zoznam[n]);
		if (element!=null && !element.readOnly)
		{
			var oldonblur = element.onblur;

			if (typeof element.onblur != 'function') 
			{ 
			    element.onblur = function(){ eval("validateThis(this, "+menoZoznamu+")")} 
			}
			else
			{
			    return;	
			    // toto vobec nefunguje !!!!				    	    
				element.onblur = function()
				{			
				           					
					oldonblur()
					eval("validateThis(this, "+menoZoznamu+")")					
				}
			}
			maValidaciu.push(zoznam[n])
		}
	}
}

function validateThis(obj, pole)
{
	var n = existInArray(pole, obj.id);
	validate(obj, pole[n+1], pole[n+2])
}

function validateOverArray(ar,what)
{
	var n = existInArray( ar, what.id)
    validate(what,  ar[n+1],  ar[n+2]);
}

function isSelRadio(obj)
{
	var radioButtons = obj.getElementsByTagName("input")
        for(var j=0; j < radioButtons.length; j++)
		if(radioButtons[j].checked) return true

	return false
}