/*
* The "common.js" file is used for centralizing
* common javascript functions.
*
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   IMPORTANT    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* !!  THIS FILE HAS TO BE SAVED IN CQ (and ECLIPSE) IN UTF-8 ENCODING		  !!
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

/* Custom form validators */
Validation.addAllThese([
	['validate-date', 'Please provide a valid date, format: dd.MM.yyyy', function(v) {
		var dValue = $('day');
		var dayValue = trim(dValue.value);
		var mValue = $('month')
		var monthValue = trim(mValue.value);
		var yValue = $('year');
		var yearValue = trim(yValue.value);
		
		var now = new Date();
		var dateObject = new Date(); 
		
		dateObject.setDate(dayValue);
		dateObject.setMonth(monthValue - 1);
		dateObject.setYear(yearValue);
		
		if ((dateObject - now) > 0 || yearValue < 1900) {
			return false;
		}

		var enteredDate = dayValue+"."+monthValue+"."+yearValue;             		
		return !Validation.get('IsEmpty').test(enteredDate) && /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/.test(enteredDate);
	}],
	['validate-all-cousins-required', 'Please fill in all of the above fields.', function (v, elm) {
		var p = elm.parentNode.parentNode;
		var options = p.getElementsByTagName('INPUT');
		return $A(options).all(function(elm) {
			return $F(elm);
		});
	}],
	['required-trim', 'This is a required field.', function(v) {
		
		// trim input
		var p = v.replace(/^\s*/, "").replace(/\s*$/, "");
		
		return !Validation.get('IsEmpty').test(p);
	}],
	['validate-vera', 'Please enter a valid name', function (v) {
		if (v.length > 100) {
			return false;
		}
		
		// trim input
		v = v.replace(/^\s*/, "").replace(/\s*$/, "");

		return Validation.get('IsEmpty').test(v) || /^['A-Za-zÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿŒœŠšŸŽž]+[\.]?(([ ]|[\-]{1,2})['A-Za-zÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿŒœŠšŸŽž]+[\.]?)*$/.test(v);
	}],
	['validate-street', 'Please enter a valid street', function (v) {
		if (v.length > 60) {
			return false;
		}
		return true;
	}],
	['validate-zip', 'Please enter a valid zip code', function (v) {
		if (v.length > 15) {
			return false;
		}
		return true;
	}],
	['validate-town', 'Please enter a valid town name', function (v) {
		if (v.length > 40) {
			return false;
		}
		return true;
	}],
	['validate-email-custom', 'Please enter a valid email address. For example fred@domain.com .', function (v) {
		
		// trim input
		var p = v.replace(/^\s*/, "").replace(/\s*$/, "");
		
		return /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(p);
	}],
	['validate-email-confirm', 'Please confirm your email address. For example fred@domain.com .', function (v) {
		var email = $('emailAddress');
		
		// empty field gets checked via required class
		if (v == ""){
			return true;
		}
		
		if (email.value == v) {
			return true;
		} 
		return false;
	}]
]);


/**
 * Checks wether the validation of the form
 * should be started or not.
 * If a user presses the 'back'-button, then
 * the form validation hasn't to be executed.
 * 
 * @param submitButtonId
 * @param formValidationObject
 * @return boolean True if the form shouldn't be validated or the form validation has passed correctly
 */
function doFormValidation(submitButtonId, formValidationObject) {
	if(submitButtonId == 0) {
		return true;
	}
	
	if(submitButtonId == 1) {
		submitButtonId = 0;
		return formValidationObject.validate();
	}
	
	return false;
}
