
// ----------------------------------------------------------------------------
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
// ----------------------------------------------------------------------------
function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}
// ----------------------------------------------------------------------------
function trim(str){
var s = str
	while (s.length > 0 && s.charAt(0)==" ") {
		s = s.slice(1)
	}
	while (s.length > 0 && s.charAt(s.length -1)==" ") {
		s = s.slice(0,-1)
	}
	return s
}
// ----------------------------------------------------------------------------
function daysInFebruary(year){
	// February has 29 days in any year evenly divisible by four,
   // EXCEPT for centurial years which are not also divisible by 400.
   return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
// ----------------------------------------------------------------------------
function daysInMonth(month){
   if (month==2) {return 29}
	if (month==4 || month==6 || month==9 || month==11) {return 30}
   return 31
}
// ----------------------------------------------------------------------------
// global var's to implement multiple return values from function 'isDate(..)'
var isDateDat
var isDateStr = ""
function isDate(strDat){
   //
   var tst    = false;  // generate test-alerts or not
   var strSep = "-";    // date separator
   var minYear=1900;    // year range - from
   var maxYear=2100;    // year range - thru

   // strip spaces from input
   strDat = stripCharsInBag(strDat, " ")

   // sep's: check
	var pos1 = strDat.indexOf(strSep)
	var pos2 = strDat.indexOf(strSep, pos1 + 1)
	if (pos1==-1 || pos2==-1){
	   if (tst){alert('no sep\'s')}
	   return false
	}
	// numeric char's only check
	if (strDat.indexOf(strSep,pos2+1)!=-1 || isInteger(stripCharsInBag(strDat, strSep))==false){
	   if (tst){alert('error in dat format')}
		return false
	}
   // day: strip leading zero's
	var strDay=strDat.substring(0,pos1)
	while (strDay.charAt(0)=="0"){
	   strDay=strDay.substring(1)
	}
   // day: check
	if (strDay.length<1 || parseInt(strDay)<1 || parseInt(strDay)>31){
	   if (tst){alert('error in day')}
		return false
	}
	// month: strip leading zero's
	var strMonth=strDat.substring(pos1+1,pos2)
	while (strMonth.charAt(0)=="0"){strMonth=strMonth.substring(1)}

	// month: check
	if (strMonth.length<1 || parseInt(strMonth)<1 || parseInt(strMonth)>12){
	   if (tst){alert('error in month')}
	   return false
	}
	// year: strip leading zero's
	var strYear=strDat.substring(pos2+1)
	for (var i = 1; i <= 3; i++) {
		if (strYear.charAt(0)=="0" && strYear.length>1) strYr=strYear.substring(1)
	}
	// year: add century
	if (strYear.length==1){strYear="0"+strYear}
	if (strYear.length==2){
	   if(parseInt(strYear)<30)
	      strYear="20"+strYear
	   else
	      strYear="19"+strYear
	}

	// year: check
	if (strYear.length<1 || parseInt(strYear)<minYear || parseInt(strYear)>maxYear){
	   if (tst){alert('error in year')}
	   return false
	}
   // day, month: check
   if (parseInt(strDay) > daysInMonth(parseInt(strMonth))){
      if (tst){alert('error in day, month-combi')}
	   return false
	}
   // day, month, year: check
	if (parseInt(strMonth)==2 && parseInt(strDay)>daysInFebruary(parseInt(strYear))){
	   if (tst){alert('error in day, month, year-combi')}
		return false
	}
	// fill isDateStr
	var x = ""
	if (strDay.length==1) x += "0"
	x += strDay+'-'
	if (strMonth.length==1) x += "0"
	x += strMonth+'-'+strYear
	isDateStr = x

	// fill isDateDat
	isDateDat = new Date(strYear,strMonth-1,strDay)

   return true
}
// ----------------------------------------------------------------------------
function today(){
   x = new Date()
   x.setHours(0,0,0,0)
   return x
}
// ----------------------------------------------------------------------------
function now(){
   return new Date()
}
// ----------------------------------------------------------------------------
function valCurrency(str){
var filter=/^([\€| ])*\d{1,3}(.\d{3})*(\,\d{2}){0,1}$/;
   return (filter.test(str))
}
// ----------------------------------------------------------------------------
function valEmail(str){
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
   return (filter.test(str))
}
// ----------------------------------------------------------------------------
function valNumeric(str){
var filter=/^([\d|\,|\.])*$/;
   return (filter.test(str))
}
// ----------------------------------------------------------------------------
function valPostcode(strPC){
   // returns valid 1234 AB postcode, else ''
   strPC=stripCharsInBag(strPC, " ")
	var val = (strPC.length==6)
   if (val) val =  (isInteger(strPC.substr(0,4)))
   if (val) val = !(isInteger(strPC.substr(4,2)))
   if (val)
      return strPC.substr(0,4)+' '+strPC.substr(4,2).toUpperCase()
   else
      return ''
}
