function init() {
  setOnSubmit();
}

function setOnSubmit() {
	for (var a = 0, frm = document.forms, aLen = frm.length; a < aLen; a++) {
		frm[a].onsubmit = valFrm;
	}
}

function valFrm() {
  errNote = "";
  lastChkEl = "";
	for (var curEl, frm = this.elements, a = 0, aLen = frm.length; a < aLen; a++) {
		curEl = frm[a]; 
    curElClass = curEl.className;
		if (curElClass != "") { checkFld(frm, curElClass.split(" "), curEl); }
	}
  var ref = this.elements["afterCheck"];
  if (ref) {
    eval("errNote += " + ref.value + "();"); 
  }
	if (errNote == "") { return true;	}
	else { window.alert(errNote); return false; }
}

function checkFld(frm, rls, fld) {
	for (var curRule, curLen, a = 0, aLen = rls.length; a < aLen; a++) {
		curRule = rls[a];
		switch (curRule) {
			case "el_required": {
				switch (fld.type) {
					case "textarea": case "text": case "password":  {
						if (fld.value == "") { errNote += fld.title + " " + "\n\n"; return; }
						break;
					}
					case "radio": {
						if (fld.name != lastChkEl) {
							lastChkEl = fld.name;
							for (var elChecked = false, p = 0, pLen = frm.length; p < pLen; p++) {
								curEl = frm[p];
								if (curEl.type == "radio" && curEl.name == fld.name && curEl.checked) { elChecked = true; }
							}
							if (!elChecked) { errNote += "Pre otázku: \"" + fld.title + "\" je potrebné zaškrtnúť jednu z odpovedí\n\n"; return; }
						}
						break;
					}
          case "checkbox": {
  					if (!fld.checked) { errNote += "Pole: \"" + fld.title + "\" je potrebné zaškrtnúť\n"; return; }
  					break;
          }
					case "select-one": {
						if (fld.options.selectedIndex == 0) {	errNote += "Z poľa: \"" + fld.title + "\" je potrebné si vybrať jednu možnosť\n";	return;	}
						break;
					}
         case "select-multiple": {
						if (fld.options.selectedIndex == -1) { errNote += "Z poľa: \"" + fld.title + "\" je potrebné si vybrať min. jednu možnosť\n"; return; }
						break;
					}
				}
				break;
			}
			case "el_digit": {
				switch (fld.type) {
					case "text": case "password": case "textarea": {
						var fldVal = fld.value;
						if (!isDigit(fldVal)) { errNote += "V poli: \"" + fld.title + "\" sa môžu vyskytovať iba číslice\n"; return; }
						break;
					}
				}
				break;
			}
			case "el_natural": {
				switch (fld.type) {
					case "textarea": case "text": case "password": {
						var fldVal = fld.value;
						if (isNaN(fldVal) || !isInt(fldVal) || fldVal < 1) { errNote += "Do poľa: \"" + fld.title + "\" je potrebné zadať prirodzené číslo\n"; return; }
						break;
					}
				}
				break;
			}
			case "el_float": {
				switch (fld.type) {
					case "textarea": case "text": case "password": {
						fld.value = replaceComma(fld.value);
						if (isNaN(fld.value) || !isFloat(fld.value)) { errNote += "Do poľa: \"" + fld.title + "\" je potrebné zadať reálne číslo\n"; return; }
						break;
					}
				}
				break;
			}
			case "el_email": {
				switch (fld.type) {
					case "textarea": case "text": case "password": {
						var fldVal = fld.value;
						if (!isEmail(fldVal)) { errNote += fld.title + "\n"; return; }
						break;
					}
				}
				break;
			}
			default: {
				if (curRule.indexOf("_min") > 0) {
					curLen = curRule.substr(6);
					if (fld.value.length < curLen) { errNote += "Min. povolený počet znakov v poli: " + fld.title + " je " + curLen + "\n"; return; }
				}
				else {
					if (curRule.indexOf("_max") > 0) {
						curLen = curRule.substr(6);
						if (fld.value.length > curLen) { errNote += "Max. povolený počet znakov v poli: " + fld.title + " je " + curLen + "\n"; return; }
					}
				}
				break;
			}
		}
	}
}

function replaceComma(n) {
  return n.replace(/,/gi, ".");
}

function isDigit(n) {
	for (var a = 0, aLen = n.length; a < aLen; a++) {
		if (isNaN( n.charAt(a))) { return false; }
	}
	return true;
}

function isInt(n) {
	var o = parseInt(n, 10);
	if (isNaN(o)) { return false; }
  else { return n == o && n.toString() == o.toString(); }
}

function isFloat(n) {
	var o = parseFloat(n);
	if (isNaN(o)) { return false; }
  else { return n == o && n.toString() == o.toString(); }
}

function isEmail(eml) {
  return /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,3})$/.test(eml);
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
