/**
* @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);