// This is JavaScript, but we may do PHP things here in future... (Check referrer for instance) // These JavaScript checks are copyright Whizzart Image & Interaction 2000-2001 // Arnoud van Delden - http://www.whizzart.nl or http://www.whizzweb.nl var MayBeEmpty = false; var MayNotBeEmpty = true; var DefaultEmptyOK = false; function IsMonth(s) { if (IsEmpty(s)) if (IsMonth.arguments.length == 1) return DefaultEmptyOK; else return (IsMonth.arguments[1] == true); return IsIntegerInRange (s, 1, 12); } function IsYear(s) { if (IsEmpty(s)) if (IsYear.arguments.length == 1) return DefaultEmptyOK; else return (IsYear.arguments[1] == true); if (!IsNonNegativeInteger(s)) return false; return ((s.length == 2) || (s.length == 4)); } function IsDay(s) { if (IsEmpty(s)) if (IsDay.arguments.length == 1) return DefaultEmptyOK; else return (IsDay.arguments[1] == true); return IsIntegerInRange (s, 1, 31); } 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 IsDate(Year, Month, Day) { var DaysInMonth = new Array('31','29','31','30','31','30','31','31','30','31','30','31'); // catch invalid years (not 2- or 4-digit) and invalid months and days. if (! (IsYear(Year, false) && IsMonth(Month, false) && IsDay(Day, false))) return false; // Explicitly change type to integer to make code work in both // JavaScript 1.1 and JavaScript 1.2. var IntYear = parseInt(Year); var IntMonth = parseInt(Month); var IntDay = parseInt(Day); // catch invalid days, except for February if (IntDay > DaysInMonth[IntMonth-1]) return false; if ((IntMonth == 2) && (IntDay > DaysInFebruary(IntYear))) { alert("Februari heeft " + DaysInFebruary(IntYear) + " dagen voor het opgegeven jaar.") return false; } return true; } // NotNumeric is used by IsStringDate, returns true if not numeric... function NotNumeric(s) { var i; for (i = 0; i < s.length; i++) { var c = s.charAt(i); if ((c < "0") || (c > "9")) return true; } return false; } function IsStringDate(args) { // Args: Date, Required_Y/N, FieldDescr, [StartDay] var Field = arguments[0]; var IsRequired = arguments[1]; var FieldDescription = arguments[2]; // Be more tolerant (11-4-2001)... var CheckStr = Field.value; if (IsRequired!=true && CheckStr=='') return true; CheckStr = CheckStr.replace(/\/+/gi,'-'); CheckStr = CheckStr.replace(/\ +/gi,'-'); var Parts = CheckStr.split('-'); // Check if three parts where given (5-9-2001)... if (Parts.length != 3) { alert(FieldDescription + ": Geef drie door streepjes of spaties gescheiden\n" + "nummerieke delen op voor resp. dag, maand en jaar. Een\n" + "dagaanduiding (bv. donderdag) is niet nodig."); if (Field.type != 'hidden') Field.focus(); return false; } // Check if the parts are numeric (5-9-2001)... if (NotNumeric(Parts[0]) || NotNumeric(Parts[1]) || NotNumeric(Parts[2])) { alert(FieldDescription + ": Geef drie door streepjes of spaties gescheiden\n" + "nummerieke delen op voor resp. dag, maand en jaar.\n" + "Gebruik alleen getallen, geen letters."); if (Field.type != 'hidden') Field.focus(); return false; } if (eval(Parts[0]) < 10) Parts[0] = "0"+eval(Parts[0]); if (eval(Parts[1]) < 10) Parts[1] = "0"+eval(Parts[1]); TempYear = eval(Parts[2]); if (TempYear < 100) if (TempYear > 40) TempYear = TempYear+1900; else TempYear = TempYear+2000; if (Field.value) Field.value = Parts[0]+"-"+Parts[1]+"-"+TempYear; var Re = /\d\d\-\d\d\-\d\d\d\d/; var RetVal = false; if (Field.value == null || Field.value == "") { if (IsRequired == true) { alert("Het veld " + FieldDescription.toLowerCase() + " is verplicht."); if (Field.type != 'hidden') Field.focus(); } else RetVal = true; } else { if(!Re.test(Field.value)) { alert(FieldDescription + ": gebruik altijd twee cijfers voor de dag- en de\n" + "maandaanduiding en vier voor de jaaraanduiding.\n\n" + "Bijvoorbeeld: 31 januari 2003 wordt 31-01-2003."); if (Field.type != 'hidden') Field.focus(); } else { var Year = Field.value.substring(6,10); var Month = Field.value.substring(3,5); var Day = Field.value.substring(0,2); if (!IsDate(Year, Month, Day)) { alert(FieldDescription + ": ongeldige datum (" + Day + "-" + Month + "-" + Year + ")"); } else { if (IsStringDate.arguments.length == 4) { var RequiredDayOfTheMonthValue = IsStringDate.arguments[3]; if(RequiredDayOfTheMonthValue != Day) { alert(FieldDescription + ": deze moet beginnen op dag " + RequiredDayOfTheMonthValue + " van de maand.\n\nIn uw geval dus: " + RequiredDayOfTheMonthValue + "-" + Month + "-" + Year + "."); } else RetVal = true; } else RetVal = true; } } } return RetVal; } function CheckDateRange(StartDate, EndDate, Message) { if (IsEmpty(EndDate) && !IsEmpty(StartDate)) return true; if (IsEmpty(EndDate) && IsEmpty(StartDate)) return true; if (!IsEmpty(EndDate) && IsEmpty(StartDate)) { alert("Er kan geen einddatum zijn zonder een aanvangsdatum.\n" + Message); return false; } var RetVal = false; if (IsStringDate(StartDate) && IsStringDate(EndDate)) { YearStart = StartDate.substring(6,10); MonthStart = StartDate.substring(3,5); DayStart = StartDate.substring(0,2); YearEnd = EndDate.substring(6,10); MonthEnd = EndDate.substring(3,5); DayEnd = EndDate.substring(0,2); if (YearStart < YearEnd) RetVal = true; else { if (YearStart == YearEnd) { if (MonthStart < MonthEnd) RetVal = true; else { if (MonthStart == MonthEnd) { if (DayStart <= DayEnd) RetVal = true; } } if(!RetVal) alert("De chronologische volgorde van de datumvelden klopt niet.\n" + Message); } } } return RetVal; } function CalcDuration(StartDate, EndDate, Units, Message) { var Duration = 0; if (CheckDateRange(StartDate, EndDate, Message)) { DurationYears = 0; DurationMonths = 0; YearStart = StartDate.substring(6,10); MonthStart = StartDate.substring(3,5); DayStart = StartDate.substring(0,2); YearEnd = EndDate.substring(6,10); MonthEnd = EndDate.substring(3,5); DayEnd = EndDate.substring(0,2); DurationYears = YearEnd - YearStart; DurationMonths = MonthEnd - MonthStart; if (Units == "maanden") { DurationYearsInMonths = 12 * DurationYears; Duration = DurationYearsInMonths + DurationMonths; } else { if (Units != "jaren") { alert("De opgegeven eenheid voor het berekenen van de duur: " + Units + " wordt niet herkend.\n" + "De functie zal 'jaren' hiervoor gebruiken"); } Units = "jaren"; if (YearStart <= YearEnd) { Duration = DurationYears; if (MonthStart > MonthEnd) { Duration = Duration - 1; } if (MonthStart == MonthEnd) { if(DayStart > DayEnd) { Duration = Duration - 1; } } } } } return Duration; } function CalcEndDate(StartDate, Duration, Units) { var EndDate = ""; var IntDuration = 0; IntDuration = parseInt(Duration); var Year = 0; var FloatYear = 0; var IntYear = 0; var Month = 0; var Day = 0; if (Duration != null && Duration != "") IntDuration = parseInt(Duration); if (IsStringDate(StartDate)) { Year = parseFloat(StartDate.substring(6,10)); Month = parseFloat(StartDate.substring(3,5)); Day = parseFloat(StartDate.substring(0,2)); if (Units == "maanden") { Month = Month + IntDuration%12; FloatYear = Year + IntDuration/12; Year = Math.floor(FloatYear); if (Month > 11) { var FloatYear = Year + Month/12; Year = Math.floor(FloatYear); Month = Month%12; } } else { if (Units != "jaren") { alert("De opgegeven eenheid voor het berekenen van de duur: " + Units + " wordt niet herkend.\n" + "De functie zal uit gaan van 'jaren'"); Units = "jaren"; } Year = Year + IntDuration; } if (Day > 0 && Day < 10) { EndDate = "0" + Day.toString(); } else { EndDate = Day.toString(); } EndDate = EndDate + "-"; if (Month > 0 && Month < 10) { EndDate = EndDate + "0" + Month.toString(); } else { EndDate = EndDate + Month.toString(); } EndDate = EndDate + "-" + Year.toString(); } return EndDate; } function Today(Field) { var Today = new Date(); var yy = Today.getYear(); var Year = (yy < 1000) ? yy + 1900 : yy; Day = Today.getDate(); if (Day<10) Day = "0" + Day; Month = Today.getMonth() + 1; if (Month<10) Month = "0" + Month; Field.value = Day + "-" + Month + "-" + Year; } function ThisMoment(Field) { // Returns mySql compliant DATETIME format... var Today = new Date(); var yy = Today.getYear(); var Year = (yy < 1000) ? yy + 1900 : yy; Day = Today.getDate(); if (Day<10) Day = "0" + Day; Month = Today.getMonth() + 1; if (Month<10) Month = "0" + Month; var Hours = Today.getHours(); if (Hours<10) Hours = "0" + Hours; var Minutes = Today.getMinutes(); if (Minutes<10) Minutes = "0" + Minutes; var Seconds = Today.getSeconds(); if (Seconds<10) Seconds = "0" + Seconds; Field.value = Year+"-"+Month+"-"+Day+" "+Hours+":"+Minutes+":"+Seconds; }