/** * @overview Check für Datumsfelder * @name DL.dateCheck * @version 1.0 ($Revision: 1.0 $) * @updated 2010/01/28 * @author Alexander Ließmann al@dreamway.com * @copyright Copyright (c) 2010, Eberl Online GmbH. */ (function() { var DL = window.DL || {}; /** * Drag-Klasse * @name DL.Drag * @constructor */ DL.DateCheck = new DL.Class( { version: '$Revision: 1.00 $', /** * Fehlermeldung * @name message * @memberof DL.dateCheck * @type {String} */ message: '', /** * Initalisierung * @function * @name initialize * @memberof DL.dateCheck */ initialize: function(options) { /** * Optionen * @name DL.dateCheck.options * @memberof DL.dateCheck */ this.options = { /** * Form, in dem sich die Datumsfelder befinden * @name form * @memberof DL.dateCheck.options * @type {Element} */ formular: null, /** * Datum 1 * @name date1 * @memberof DL.dateCheck.options * @type {Element} */ date1: null, /** * Datum 2 * @name date2 * @memberof DL.dateCheck.options * @type {Element} */ date2: null, /** * Wenn gesetzt, werden die Daten gegeneinander gecheckt, welches später ist * @name checkLater * @memberof DL.dateCheck.options * @type {Element} / {Bool} */ checkLater: false, /** * Wenn gesetzt, darf keines der beiden Felder leer sein * @name checkEmpty * @memberof DL.dateCheck.options * @type {Bool} */ checkEmpty: true, /** * Wenn gesetzt, wird auf ein valides Datumsformat geprüft * @name checkFormat * @memberof DL.dateCheck.options * @type {Bool} */ checkFormat: true, /** * Wenn gesetzt, müssen die Daten in der Zukunft liegen * @name checkFuture * @memberof DL.dateCheck.options * @type {Bool} */ checkFuture: true, /** * Input Datumsformat * @name inputDateFormat * @memberof DL.dateCheck.options * @type {String} */ inputDateFormat: 'd.m.y', /** * CSS Class for failed Input Elements * @name failInputClass * @memberof DL.dateCheck.options * @type {String} */ failInputClass: 'failed', /** * Failure Message -> Wird beim Submit angezeigt. Wenn leer, keine Anzeige * @name submitMessage * @memberof DL.dateCheck.options * @type {String} */ submitMessage: '', /** * Failure Message -> Wird bei Formatfehler angezeigt * @name msgFormat * @memberof DL.dateCheck.options * @type {String} */ msgFormat: 'Die Datumsformatierung ist nicht wie erwartet.', /** * Failure Message -> Wird angezeigt, wenn die 'later'-Prüfung nicht korrekt ist * @name msgLater * @memberof DL.dateCheck.options * @type {String} */ msgLater: 'Das Anreisedatum liegt nicht vor dem Abreisedatum.', /** * Failure Message -> Wird bei Daten angezeigt, die in der Vergangenheit liegen * @name msgFuture * @memberof DL.dateCheck.options * @type {String} */ msgFuture: 'Eine Datumsangabe darf nicht in der Vergangenheit liegen.', /** * Failure Message -> Wird bei leeren Feldern angezeigt * @name msgEmpty * @memberof DL.dateCheck.options * @type {String} */ msgEmpty: 'Bitte f\u00fcllen Sie das An- und Abreisefeld aus!' }; var o = this.setOptions(options); // OnSubmit Abfangen DL.Event.addHandler(o.formular, 'submit', DL.bind( function(e) { var event = e || window.event; if ( this.checkDates() === false ) { this.markFields(this.options.date1, this.options.date2); alert( this.options.submitMessage + "\n" + this.message ); DL.Event.preventDefault(event); return false; } }, this ) ); // OnChange Datum 1 DL.Event.addHandler(o.date1, 'change', DL.bind( function(e) { var event = e || window.event; if ( this.checkDate(1) === false ) { this.markFields(DL.Event.target(event)); } else { this.unmarkFields(DL.Event.target(event)); } }, this ) ); // OnChange Datum 2 DL.Event.addHandler(o.date2, 'change', DL.bind( function(e) { var event = e || window.event; if ( this.checkDate(2) === false ) { this.markFields(DL.Event.target(event)); } else { this.unmarkFields(DL.Event.target(event)); } }, this ) ); }, /** * Checkt beide Daten * @memberof DL.DateCheck * @returns {Bool} */ checkDates: function() { var o = this.options; var status = this.checkDate(1); status = ( status ) ? this.checkDate(2) : status; if ( o.checkLater && status ) { if ( o.checkEmpty === false && ( this.checkFilled(o.date1.value) === false || this.checkFilled(o.date2.value) === false ) ) { } else { status = this.checkLater(); this.message = o.msgLater; } } return status; }, /** * Checkt ein Datum * @memberof DL.DateCheck * @param {Integer} Datum 1 oder 2? * @returns {Bool} */ checkDate: function(which) { var o = this.options; var item = ( which == 1 ) ? o.date1 : o.date2; var status = true; if ( o.checkEmpty && status ) { status = this.checkFilled(item.value); this.message = o.msgEmpty; } if ( o.checkFormat == true && status ) { if ( o.checkEmpty === false && this.checkFilled(item.value) === false ) { } else { status = /[0-9][.-\/]/.test(item.value); status = ( status ) ? DL.Date.isValid(item.value, o.inputDateFormat) : status; this.message = o.msgFormat; } } if ( o.checkFuture && status ) { if ( o.checkEmpty === false && this.checkFilled(item.value) === false ) { } else { status = this.checkFuture(item.value); this.message = o.msgFuture; } } return status; }, /** * Checkt, ob ein Feld befüllt ist * @memberof DL.DateCheck * @param {Date} date Datumsstring * @returns {Bool} */ checkFilled: function(date) { return ( date.replace(/^\s+/, '').replace(/\s+$/, '') == '' ) ? false : true; }, /** * Checkt, ob ein Datum in der Zukunft liegt * @memberof DL.DateCheck * @param {Date} date Datumsstring * @returns {Bool} */ checkFuture: function(date) { var o = this.options; var tmp = new Date(); var now = new Date(tmp.getFullYear(), tmp.getMonth(), tmp.getDay()).getTime(); if ( date.replace(/^\s+/, '').replace(/\s+$/, '') != '' ) { var input = DL.Date.stringToDate(date, o.inputDateFormat).getTime(); return ( now <= input ) ? true : false; } else { return false; } }, /** * Checkt, die Daten gegeneinander * @memberof DL.DateCheck * @returns {Bool} */ checkLater: function() { var o = this.options; var later = DL.Date.stringToDate(o.checkLater.value, o.inputDateFormat).getTime(); var date1 = DL.Date.stringToDate(o.date1.value, o.inputDateFormat).getTime(); var date2 = DL.Date.stringToDate(o.date2.value, o.inputDateFormat).getTime(); if ( later == date1 ) { return ( later > date2 ) ? true : false; } else if ( later == date2 ) { return ( later > date1 ) ? true : false; } }, /** * Setzt eine CSS Klasse bei beliebig vielen Elementen * @memberof DL.DateCheck * @param {Element} HTML Elemente * @returns {Void} */ markFields: function() { var o = this.options; for ( i = 0; i < arguments.length; i++ ) { DL.Element.addClass(arguments[i], o.failInputClass); } }, /** * Entfernt eine CSS Klasse bei beliebig vielen Elementen * @memberof DL.DateCheck * @param {Element} HTML Elemente * @returns {Void} */ unmarkFields: function() { var o = this.options; for ( i = 0; i < arguments.length; i++ ) { DL.Element.removeClass(arguments[i], o.failInputClass); } } }); })(); DL.DateCheck.implement(new DL.Class.Options);