// 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);
}

// 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) 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) {
  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) dt = new Date(0, 0, 0, 0, 0);//return false;
  return new Date(dd.getYear(), dd.getMonth(), dd.getDate(), dt.getHours(), dt.getMinutes());
}

// Test prvků formuláře
function testTextElement(element, required, itemname) {
  with (element) {
    value = trim(value);
    if (required && !value) {alert('You must fill item "'+itemname+'".'); focus(); return false;}
    else return true;
  }
}

function testEmailElement(element, required, itemname) {
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('You must fill your email.'); focus(); return false;} else return true;}
    else if (!testEMail(value)) {alert('Value entered to email field does not appear to be a valid e-mail address.'); focus(); return false;}
    else return true;
  }
}

function testPasswordElement(element1, element2, required) {
  with (Element1) {
    if (!value) {if (required) {alert('You must choose any password.'); focus(); return false;} else return true;}
    else if (value!=Element2.value) {alert('Entered passwords don\'t match.'); Element2.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 = " >= " + min;
    if (isNaN(max)) msg2 = ""; else {msg2 = " <= " + max; if (msq1) msq2 += ' and';}
    if (!value) {if (required) {alert('You must fill item "'+itemname+'".'); focus(); return false;} else return true;}
    else if (!testInteger(value, min, max)) {alert('Item "'+itemname+'" must be integer'+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 (msq1) msq2 += ' and';}
    if (!value) {if (required) {alert('You must fill item "'+itemname+'".'); focus(); return false;} else return true;}
    else if (!testFloat(value, min, max)) {alert('Item "'+itemname+'" must be float number'+msg1+msg2+'.'); focus(); return false;}
    else {value = parseFloat(value); return true;}
  }
}

function testDateElement(element, required, itemname) {
  var term;
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('You must fill in date.'); focus(); return false;} else return true;}
    else {
      term = parseDate(value);
      if (term) return true;
      else {alert('Bad date format. Use day-month-year.'); focus(); return false;}
    }
  }
}

function testTimeElement(element, required, itemname) {
  var term;
  with (element) {
    value = trim(value);
    if (!value) {if (required) {alert('You must fill time "'+itemname+'".'); focus(); return false;} else return true;}
    else {
    term = parseTime(value);
      if (term) return true;
      else {alert('Bad time format in "'+itemname+'". Use hour:minute.'); focus(); return false;}
    }
  }
}

function testSelectElement(element, itemname) {
  with (element)
    if (!selectedIndex) {alert('You must choose "'+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('You must choose "'+itemname+'".'); element[0].focus(); return false;}
  else return true;
}

function humanToTime(value)
  {
  	var date;
	var month;
	var year;
	var timeStamp;
	date = value.substring (0, value.indexOf ("-"));
    month = value.substring (value.indexOf ("-")+1, value.lastIndexOf ("-"));
    year = value.substring (value.lastIndexOf ("-")+1, value.length);

    var humDate = new Date(Date.UTC(year, month, date, 0, 0));
    timeStamp = (humDate.getTime()/1000.0);
	return timeStamp;
  }
