/**
 * Stellt Validators für jaex.frm zur Verfügung. Die Validators können beliebig
 * ergänzt werden.
 *
 * @namespace jaex.frm.validators
 * @requires jaex.frm
 */
jaex.frm.validators = function() {};

/**
 * Entspricht dem Format eines Benutzernamens?
 */
jaex.frm.validators.isNick = function(_valobj) {
	var regexp = /^[a-zA-Z0-9 _-äöüÄÖÜ]{3,}$/; 	
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format eines Benutzernamens?
 */
jaex.frm.validators.isTitle = function(_valobj) {
	var regexp = /^.{3,}$/; 	
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

jaex.frm.validators.isTime = function(_valobj) {
	var regexp = /^([0-1][0-9]|2[0-3])(:[0-5][0-9]){2}$/; 	
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format eines Passworts?
 */
jaex.frm.validators.isPassword = function(_valobj) {
	var regexp = /^.{5,}$/; 		
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format eines optionalen Passworts?
 */
jaex.frm.validators.isOptPassword = function(_valobj) {
	var regexp = /^(.{5,})?$/; 		
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Sind die ersten 2 Felder gleich?
 */
jaex.frm.validators.areEqual = function(_valobj) {
	if ($F(_valobj.inputIds[0]) == $F(_valobj.inputIds[1])) {
		return true;
	} else {
		_valobj.onError[0] = true;
		_valobj.onError[1] = true;
		return false;
	}
}

/**
 * Entspricht dem Format einer E-Mail-Adresse?
 */
jaex.frm.validators.isEMail = function(_valobj) {
	var regexp = /^.+@.+\..+$/;
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format eines optionalen Datums?
 */
jaex.frm.validators.isOptDate = function(_valobj) {
	var regexp = /^([0-9]{2}\.[0-9]{2}\.[0-9]{4})?$/;
	if(!jaex.frm.validators.util.checkAll(_valobj, regexp)) return false;
	regexp = /^$/;
	if(jaex.frm.validators.util.checkAll(_valobj, regexp)) return true;
	return jaex.frm.validators.util.checkAllCallBack(_valobj, 'jaex.frm.validators.isObtDateCall');
}

/**
 * @private
 */
jaex.frm.validators.isObtDateCall = function(str) {
	var dtmp = str.split(".");
	var dt = new Date(dtmp[2], dtmp[1], dtmp[0]);
	//alert(dt.getMonth() + " == " + dtmp[1] + " && " + dt.getFullYear() + " == " + dtmp[2]);
	if(dt.getMonth() != dtmp[1]) {
		return false;
	} else {
		return true;
	}
}

/**
 * Entspricht dem Format einer optionalen Telefonnummer?
 */
jaex.frm.validators.isOptPhone = function(_valobj) {
	var regexp = /^([0-9+\/ ]{6,})?$/;
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format einer optionalen URL?
 */
jaex.frm.validators.isOptWWW = function(_valobj) {
	var regexp = /^(http:\/\/[^ ]{2,}\.[^ ]{2,})?$/;
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format eines Berichtes
 */
jaex.frm.validators.isText = function(_valobj) {
	var regexp = /.{3,}/;
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}

/**
 * Entspricht dem Format eines Titels?
 */
jaex.frm.validators.isUltraTitle = function(_valobj) {
	var regexp = /^[^\Wa-z].{4,}$/;
	return jaex.frm.validators.util.checkAll(_valobj, regexp);
}


/**
 * Util-Funktionen für Validators
 *
 * @namepsace jaex.frm.validators.util
 */
jaex.frm.validators.util = function() {};

/**
 * @private
 */
jaex.frm.validators.util.checkAll = function(_valobj, regexp) {
	var anyErrors = false;
	
	for(var ic = 0; ic < _valobj.numInputs; ic++) {	
		var str = $F(_valobj.inputIds[ic]);
		
		if(str.search(regexp) == -1) {	
			anyErrors = true;
			_valobj.onError[ic] = true;
		} else {
			_valobj.onError[ic] = false;
		}
	}
	
	if (anyErrors) {
		return false;
	} else {
		return true;
	}
}

/**
 * @private
 */
jaex.frm.validators.util.checkAllCallBack = function(_valobj, callback) {
	var anyErrors = false;
	
	for(var ic = 0; ic < _valobj.numInputs; ic++) {	
		var str = $F(_valobj.inputIds[ic]);
		
		if(eval(callback + '(str)')) {	
			_valobj.onError[ic] = false;
		} else {
			anyErrors = true;
			_valobj.onError[ic] = true;
		}
	}
	
	if (anyErrors) {
		return false;
	} else {
		return true;
	}
}


