// -------------
// Uprava hodnot
// -------------

function trim (s) {
  s = s.replace (/^\s*/g, '');
  s = s.replace (/\s*$/g, '');
  return(s);
}

function trimNumber (s) {
  s = s.replace (/\s*/g, '');
  s = s.replace (/^0/g, '');
  return(s);
}

function repeatChar (chr, len) {
	s = "";
	for (i=0; i<len; i++)
		s += chr;
	return s;
}

function lPad (s, chr, len) {
	s += '';
	if (s.length < len) {
		s = repeatChar (chr, len - s.length) + s;
	}
	return s;
}

function rPad (s, chr, len) {
	s += '';
	if (s.length < len) {
		s = s + repeatChar (chr, len - s.length);
	}
	return s;
}


// -----------
// Test hodnot
// -----------

function testInteger (n, min, max) {
  if (parseInt(n)!=n) return false;
  if (!isNaN(min)) if (n < min) return false;
  if (!isNaN(max)) if (n > max) return false;
  return true;
}

function testFloat (n, min, max) {
  n = n.replace (/\./g, 'b');
  n = n.replace (/,/g, '.');
  if (parseFloat(n)!=n) return false;
  if (!isNaN(min)) if (n < min) return false;
  if (!isNaN(max)) if (n > max) return false;
  return true;
}

function testEMail (Address) {
  var re;
  re = new RegExp ("^[^.]+(\.[^.]+)*@([^.]+[.])+[a-z]{2,4}$");
  return re.test (Address)
}



// -------------
// Prevod hodnot
// -------------

function leapYear (y) {
  return ((y % 4 ) == 0) && (((y % 100) != 0) || ((y % 400) == 0));
};

function parseDate (s) {
  var current, div1, div2, y, m, d;
  current = new Date();
  s = trimNumber(s);
  div1 = s.indexOf(".");
  if (div1 <= 0) return false;
  div2 = div1 + 1 + s.substr(div1+1).indexOf(".");
  if (div2 == -1) return false;
  d = s.substring(0, div1);
  m = s.substring(div1 + 1, div2);
  y = s.substr(div2 + 1);
  if (!testInteger(y, current.getYear(), NaN)) return false;
  if (!testInteger(m, 1, 12)) return false;
  if (!testInteger(d, 1, 31)) return false;
  if (((m == 4)||(m == 6)||(m == 9)||(m == 11)) && (d == 31)) return false;
  if (  (m == 2) && ( (d > 29) || (!(leapYear(y)) && (d > 28)) )  ) return false;
  return new Date(y, m-1, d);
}

function parseTime (s) {
  var div, h, m;
  s = trimNumber(s);
  div = s.indexOf(":");
  if (div <= 0) return false;//div = s.length -1 ;
  h = s.substring(0, div);
  if (!h) h = 0;
  m = s.substr(div + 1);
  if (!m) m = 0;
  if (!testInteger(h, 0, 23)) return false;
  if (!testInteger(m, 0, 59)) return false;
  return new Date(0, 0, 0, h, m);
}

function parseDateTime (s, timerequired) {
  var div, d, t, dd, dt;
  s = trim(s);
  div = s.indexOf(" ");
  if (div <= 0) div = s.length;
  d = s.substring(0, div);
  t = s.substring(div + 1);
  dd = parseDate(d);
  if (!dd) return false;
  dt = parseTime(t);
  if (!dt)
  	if (timerequired || t) return false;
  else
		dt = new Date(0, 0, 0, 0, 0);
  return new Date(dd.getFullYear(), dd.getMonth(), dd.getDate(), dt.getHours(), dt.getMinutes());
}

function numFormat (n) {
	s = n + '';
	l = s.lastIndexOf ('.');
	if (l < 0) l = s.length;
	if (l > 3) {
		count = Math.floor((l - 1)/3);
		for (i = 0; i < count; i++) {
			s = s.substr(0, l - 3 - 4*i) + ' ' + s.substr(l - 3 - 4*i);
			l ++;
		}
	}
	s.replace ('.', ',');
	return s;
}

function dateFormat (d) {
	return d.getDate() + "." + (d.getMonth() + 1) + "." + d.getFullYear();
}

// ------------------------
// Test formularovych prvku
// ------------------------

function testTextElement (element, required, itemname) {
  with (element) {
    value = trim(value);
    if (required && !value) {alert('Musíte vyplnit položku „'+itemname+'“.'); focus(); return false;}
    else return true;
  }
}

function testEMailElement (element, required, itemname) {
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('Musíte vyplnit položku „'+itemname+'“.'); focus(); return false;} else return true;}
    else if (!testEMail(value)) {alert('Vložený údaj „'+itemname+'“ nemá formát e-mailové adresy.'); focus(); return false;}
    else return true;
  }
}

function testPasswordElement (element1, element2, required) {
  with (element1) {
		/*for (i = element.parentNode.childNodes.length - 1; i >= 0; i --) {
			if (element.parentNode.childNodes[i].type == "password")
				{confirmValue = element.parentNode.childNodes[i].value; break;}
		}*/
    if (!value) {
			if (required) {alert ('Musíte zvolit nějaké heslo.'); focus(); return false;}
			else return true;
    } else {
			if (value != element2.value/*confirmValue*/) {alert ('Kopie hesla se neshodují.'); focus(); return false;}
    	else return true;
    }
  }
}

function testIntegerElement (element, required, min, max, itemname) {
  var msg1, msg2;
  with (element) {
    value = trim(value);
    if (isNaN(min)) msg1 = ""; else msg1 = " větší rovno " + min;
    if (isNaN(max)) msg2 = ""; else {msg2 = " menší rovno " + max; if (msg1) msg1 += ' a';}
    if (!value) {if (required) {alert('Musíte vyplnit položku „'+itemname+'“.'); focus(); return false;} else return true;}
    else if (!testInteger(value, min, max)) {alert('Položka „'+itemname+'“ musí být celé číslo'+msg1+msg2+'.'); focus(); return false;}
    else {value = parseInt(value); return true;}
  }
}

function testFloatElement(element, required, min, max, itemname) {
  var msg1, msg2;
  with (element) {
    value = trim(value);
    if (isNaN(min)) msg1 = ""; else msg1 = " >= " + min;
    if (isNaN(max)) msg2 = ""; else {msg2 = " <= " + max; if (msg1) msg2 = ' a ' + msg2;}
    if (!value) {if (required) {alert('Musíte vyplnit položku „' + itemname + '“.'); focus(); return false;} else return true;}
    else if (!testFloat(value, min, max)) {alert('Položka „'+itemname+'“ musí být ' + msg1 + msg2 + '.'); focus(); return false;}
    else {value = value.replace(/,/g, '.'); value = parseFloat(value); return true;}
  }
}

function testDateElement(element, required, itemname) {
  var term;
  var now = new Date();
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('Musíte vyplnit datum „'+itemname+'“.'); focus(); return false;} else return true;}
    else {
      term = parseDate(value);
      if (term) return true;
      else {alert('Neplatný formát data „'+itemname+'“. Použijte den.měsíc.rok, např. '+now.getDate()+'.'+(now.getMonth()+1)+'.'+(now.getYear()+1900)+' .'); focus(); return false;}
    }
  }
}

function testTimeElement(element, required, itemname) {
  var term;
  var now = new Date();
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('Musíte vyplnit čas „'+itemname+'“.'); focus(); return false;} else return true;}
    else {
    term = parseTime(value);
      if (term) return true;
      else {alert('Neplatný formát času „'+itemname+'“. Použijte hodiny:minuty, např. '+now.getHours()+':'+now.getMinutes()+' .'); focus(); return false;}
    }
  }
}

function testDateTimeElement(element, required, requiredtime, itemname) {
  var term;
  var now = new Date();
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('Musíte vyplnit datum a čas „'+itemname+'“.'); focus(); return false;} else return true;}
    else {
    term = parseDateTime(value, requiredtime);
      if (term) return true;
      else {alert('Neplatný formát data a času „'+itemname+'“. Použijte den.měsíc.rok hodiny:minuty, např. '+now.getDate()+'.'+(now.getMonth()+1)+'.'+(now.getYear()+1900)+' '+now.getHours()+':'+now.getMinutes()+' .'); focus(); return false;}
    }
  }
}


function testSelectElement(element, required, itemname) {
  with (element)
    if (required && !selectedIndex) {alert('Musíte zvolit hodnotu „'+itemname+'“.'); focus(); return false;}
    else return true;
}

function testRadioElement(element, itemname) {
  var i, notchck;
  notchck = true;
  for (i=0; i<element.length; i++)
    notchck = notchck && !element[i].checked;
  if (notchck) {alert('Musíte zvolit jednu z možností „'+itemname+'“.'); element[0].focus(); return false;}
  else return true;
}
