(function($){
	var $cartForm = $('#cart_quantity');
	var $selectBoxes = $cartForm.find('select');
	var $textBoxes = $cartForm.find('input:text');
	var $validationErrorMessageBox = $('.validationMessage');
	
	$cartForm.submit(submitHandler);
	
	function submitHandler(){
		var valid = true;
		
		hideErrorMsg();
		
		if(checkSelectBox() && checkInput() && checkDateInput()){
			valid = true;
		} else {
			valid = false;
		}
		
		if(!valid){
			showErrorMsg('no_selection');
		} else {
			hideErrorMsg();
		}
		
		return valid;
	}
	
	function showErrorMsg(error){
		$validationErrorMessageBox
			.append(errorMsg[error] + '<br />')
			.show();
	}
	
	function hideErrorMsg(){
		$validationErrorMessageBox
			.empty()
			.hide();
	}
	
	function checkSelectBox(){
		var valid = true;
		var regexPleaseChoose = /(Bitte|Please)/;
		
		$selectBoxes.each(function(){
			var $selectBox = $(this);
			var selectedText = $selectBox.find(':selected').text();
			
			if($selectBox.val().length == 0 || selectedText.search(regexPleaseChoose) > -1){
				valid = false;
				$selectBox.addClass('validationFailed');
			} else {
				$selectBox.removeClass('validationFailed');
			}
		});
		
		return valid;
	}
	
	function checkInput(){
		var valid = true;
		
		$textBoxes.each(function(){
			var $textBox = $(this);
			
			if($textBox.val().length == 0){
				valid = false;
				$textBox.addClass('validationFailed');
			} else {
				$textBox.removeClass('validationFailed');
			}
		});
		
		return valid;
	}
	
	function checkDateInput() {
		
		var $dateStart = $('#date_start'),
			$dateEnd = $('#date_end');
		
		if($dateStart){
			var date_start = $dateStart.val();
			var date_start_split = date_start.split(".");
			var today_split = today.split(".");
			
			if(date_start_split[2] < today_split[2]) {
				showErrorMsg('date_error_1');
				$dateStart.addClass('validationFailed');
				return false;
			} else if(date_start_split[2] == today_split[2] && date_start_split[1] < today_split[1]) {
				showErrorMsg('date_error_1');
				$dateStart.addClass('validationFailed');
				return false;
			} else if(date_start_split[2] == today_split[2] && date_start_split[1] == today_split[1] && date_start_split[0] < today_split[0]) {
				showErrorMsg('date_error_1');
				$dateStart.addClass('validationFailed');
				return false;
			}  
			
			if(!date_start.match(/^((0[1-9])|([1-2][0-9])|(30|31))\.((0[1-9])|(1[0-2]))\.2\d\d\d$/) || date_start=='') {
				showErrorMsg('input_error');
				$dateStart.addClass('validationFailed');
				return false;
			}
			
			$dateStart.removeClass('validationFailed');			
		}
		
		
		if($dateEnd){
			var date_end = $dateEnd.val();
			var date_end_split = date_end.split(".");
			
			if(date_end_split[2]<date_start_split[2]) {
				showErrorMsg('date_error_2');
				$dateEnd.addClass('validationFailed');
				return false;
			} else if(date_end_split[2]==date_start_split[2] && date_end_split[1]<date_start_split[1]) {
				showErrorMsg('date_error_2');
				$dateEnd.addClass('validationFailed');
				return false;
			} else if(date_end_split[2]==date_start_split[2] && date_end_split[1]==date_start_split[1] && date_end_split[0]<date_start_split[0]) {
				showErrorMsg('date_error_2');
				$dateEnd.addClass('validationFailed');
				return false;
			}  
			
			if(!date_end.match(/^((0[1-9])|([1-2][0-9])|(30|31))\.((0[1-9])|(1[0-2]))\.2\d\d\d$/) || date_end=='') {
				showErrorMsg('input_error');
				$dateEnd.addClass('validationFailed');
				return false;
			}
			
			$dateEnd.removeClass('validationFailed');
		}
		
		return true;
	}
})(jQuery);
