
var formcheckbool;

var isLowerThanWordLimit = function(value, minWordCount) {
	var words = $.trim(value).split(' ');
	return words.length < minWordCount;
}

var isGreaterThanOrEqual = function(value, limit){
	if(!isNumeric(value)||!isNumeric(limit)){
		return false;
	}
	return value >= limit;
}

var isNumeric = function(value) {
	var regex = /^\d+$/;
	return regex.test(value);
}

var isValidZipCode = function(value) {
	var regex = /^\d{5}$/;
	return regex.test(value);
}

var errorMessages = {
	description: {
		invalidDescription: 'Bitte beschreiben Sie Ihren Auftrag mit mindestens 10 Wörtern.'
	},
	zipCode: {
		invalidZipCode: 'Bitte geben Sie eine gültige 5-stellige Postleitzahl ein.'
	},
	startPrice: {
		invalidStartPrice: 'Ihr Wunschpreis muss mindestens 10 € betragen.'
	}
};

var getDescriptionErrorMessage = function() {
	var $description = $('#description'),
		descriptionValue = $description.val(),
		isEmpty = (descriptionValue == "" || descriptionValue == $description.attr("defaultValue")),
		hasLessThan10Words = isLowerThanWordLimit(descriptionValue, 10);
	if(isEmpty||hasLessThan10Words) {
		return errorMessages.description.invalidDescription;
	}
	return false;
}

var getZipCodeErrorMessage = function() {
	if(!isValidZipCode($('#zipcode').val())){
		return errorMessages.zipCode.invalidZipCode;
	}
	return false;
}

var getStartPriceErrorMessage = function() {
	var value = $('#startprice').val();
	return !isGreaterThanOrEqual(value, 10) ?
		errorMessages.startPrice.invalidStartPrice :
		false;
}

function checkForm () {
    formChecked = true;
	resetFields();
	var title = document.getElementById('titel').value == "";
	var descriptionErrorMessage = getDescriptionErrorMessage();

	var isInvalidDescription = descriptionErrorMessage !== false;
	$('#errorDescription').text(descriptionErrorMessage);

	document.getElementById('errorDescription').style.display = isInvalidDescription ? 'block' : 'none';


	document.getElementById('errorTitle').style.display = title ? 'block' : 'none';
    var errorAny = title || isInvalidDescription;

	if (errorAny) {
        document.getElementById('sp_errors').style.display = "block";
		if (isInvalidDescription) {
            document.getElementById('sp_errors').style.top = "90px";
			document.getElementById('description').className = "ep_error_input_desc";
		}
		else{
			document.getElementById('description').className = "desc";
		}
		if (title) {
            document.getElementById('sp_errors').style.top = "6px";
			document.getElementById('titel').className = "ep_error_input";
		}
		else{
			document.getElementById('titel').className = "textfieldinput";
		}
    } else {
        document.getElementById('sp_errors').style.display = "none";
		document.getElementById('titel').className = "textfieldinput";
		document.getElementById('description').className = "desc";
		formcheckbool = true;
    }
    return (errorAny ? false : true)
}

function checkFormPageTwo() {
    formChecked = true;
	var zipCodeErrorMessage = getZipCodeErrorMessage();
	var zipcode = zipCodeErrorMessage !== false;
	var startPriceErrorMessage = getStartPriceErrorMessage();
	var invalidStartPrice = startPriceErrorMessage !== false;

	var city = document.getElementById('city').value == "";
	resetFields();
	document.getElementById('errorCity').style.display = city ? 'block' : 'none';
	$('#errorZipcode').text(zipCodeErrorMessage);
    document.getElementById('errorZipcode').style.display = zipcode ? 'block' : 'none';
	$('#errorStartPrice').text(startPriceErrorMessage);
	document.getElementById('errorStartPrice').style.display = invalidStartPrice ? 'block' : 'none';
    var errorAny = zipcode || city || invalidStartPrice;
    if (errorAny) {
        document.getElementById('sp_errors').style.display = "block";
        document.getElementById('sp_errors').style.top = "8px";
		if(zipcode){
			document.getElementById('zipcode').className = "plzinputerror";
		}
		else{
			document.getElementById('zipcode').className = "plzinput";
		}
		if(city){
			document.getElementById('city').className = "ortinputerror";
		}
		else{
			document.getElementById('city').className = "ortinput";
		}
		if(invalidStartPrice){
			document.getElementById('startprice').className = "priceinput error";
		}
		else{
			document.getElementById('startprice').className = "priceinput";
		}
    } else {
        document.getElementById('sp_errors').style.display = "none";
		formcheckbool = true;
    }
    return (errorAny ? false : true)
}

var form3steps = (function() {
	var currentPage = 1,
		maxPages = 3;
	var emulateNextPageClick = function(pageCount) {
		switch(pageCount)
		{
			case 1:
				if(checkForm()){
					$('#profiles input.weiter1').click();
				}
			break;
			case 2:
				if(checkFormPageTwo()){
					$('#profiles input.weiter2').click();
				}
			break;
		}
	};
	var submitForm = function() {
		if(currentPage < maxPages){
			emulateNextPageClick(currentPage);
			return false;
		}
		return checkFormPageThree();
	};
	return {
		submitForm: submitForm,
		increasePageCount: function () {
			if(currentPage < maxPages){
				currentPage++;
			}
		},
		decreasePageCount: function(){
			if(currentPage > 1){
				currentPage--;
			}
		}
	}
})();

function checkFormPageThree() {
    valid = true;
	resetFields();
	var isMail = document.getElementById('email').value.toLowerCase().match(/([a-z0-9_.-]+)@([a-z0-9-]+\.)+[a-z]{2,}/) ? false : true;
	var email = document.getElementById('email');
	var errorUserName = email.value == null || email.value == "";
    var password = document.getElementById('password').value == "";
	var passwordACK = document.getElementById("passwordACK");
    var errorPW_short = document.getElementById('password').value.length < 6;
	var pwconfirm = passwordACK.value == null || passwordACK.value == "" || (document.getElementById('password').value != passwordACK.value)
	var errorTerms = document.getElementById('terms').checked ? false : true;
    var pass_conf_label = document.getElementById("pass_conf_label");
	var register = document.getElementById("UserIsUnknownSwitch").checked ? false : true;
	if(!register){
		var errorAny = password || errorTerms  || pwconfirm || errorPW_short || isMail;
	}
	else{
		var errorAny = password || errorPW_short || errorUserName;
	}
    if (errorAny) {
		valid=false;
        document.getElementById('sp_errors').style.display = "block";
		if(!register){
			if (errorTerms) {
				document.getElementById('errorDivTerms').style.display =  'block';
				document.getElementById('sp_errors').style.top = "197px";
				valid = false;
			}
			else{
				document.getElementById('sp_errors').style.display = "none";
			}
			if(pwconfirm){
				pass_conf_label.className = "ep_error";
				passwordACK.className = "ep_error_input";
				document.getElementById('sp_errors').style.top = "161px";
				document.getElementById("errorPW").style.display = "block";
			}else {
				passwordACK.className = "textfieldinput";
				document.getElementById("errorPW").style.display = "none";
			}
		}
		if (password) {
            document.getElementById('sp_errors').style.top = "116px";
			document.getElementById("errorPass").style.display = "block";
			document.getElementById('password').className = "ep_error_input";
		}
		else{
			document.getElementById('password').className = "textfieldinput";
			document.getElementById("errorPass").style.display = "none";
		}
		if(errorPW_short){
			document.getElementById('sp_errors').style.top = "116px";
			document.getElementById("errorPassShort").style.display = "block";
			document.getElementById('password').className = "ep_error_input";
		}
		else{
			document.getElementById('password').className = "textfieldinput";
			document.getElementById("errorPassShort").style.display = "none";
		}
		if(register){
			if(errorUserName){
				email.className = "ep_error_input";
				document.getElementById("errorUsername").style.display = "block";
				document.getElementById('sp_errors').style.top = "72px";
			} else {
				email.className = "textfieldinput";
				document.getElementById("errorUsername").style.display = "none";
			}
		}
		else{
			if(errorUserName){
				email.className = "ep_error_input";
				document.getElementById("errorEmail").style.display = "block";
				document.getElementById('sp_errors').style.top = "72px";
			}
			else if(isMail){
				email.className = "ep_error_input";
				document.getElementById("errorNoEmail").style.display = "block";
				document.getElementById('sp_errors').style.top = "72px";
			} else {
				email.className = "textfieldinput";
				document.getElementById("errorNoEmail").style.display = "none";
				document.getElementById("errorEmail").style.display = "none";
			}

		}
	} else {
		resetFields();
		document.getElementById('sp_errors').style.display = "none";
		valid = true;
	}


    if(valid){
        return true;
    }
    else{
        document.getElementById("sp_errors").style.display = "block";
		return valid;
    }



}

function resetFields(){
	document.getElementById("errorPassShort").style.display = "none";
	document.getElementById("errorUsername").style.display = "none";
	document.getElementById('errorPW').style.display = 'none';
	document.getElementById("errorNoEmail").style.display = "none";
	document.getElementById('errorEmail').style.display = 'none';
	document.getElementById('errorPass').style.display = 'none';
	document.getElementById('errorDivTerms').style.display = 'none';
    document.getElementById('errorCity').style.display = 'none';
    document.getElementById('errorZipcode').style.display = 'none';
	document.getElementById('city').className = "ortinput";
	document.getElementById('zipcode').className = "plzinput";
	document.getElementById('email').className = "textfieldinput";
	document.getElementById('password').className = "textfieldinput";
	document.getElementById('passwordACK').className = "textfieldinput";
	document.getElementById("sp_errors").style.display = "none";


}



function setOverlay(){
	window.setTimeout(function showForm(){
	document.getElementById('overlay').style.display = 'block';
	document.getElementById('profiles').style.display = 'block';
	} );
}

function makeDate(days) {

	var allSelects = document.getElementById('daysRunning').value;
	var dayValue = allSelects;

	var tagName = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch",
                         "Donnerstag", "Freitag", "Samstag");

	var then = new Date();

    var today = new Date().getTime();
    var then_unix_time = today + (dayValue * 24 * 60 * 60 * 1000);
    then.setTime(then_unix_time);
    var year = then.getFullYear();
    var month = then.getMonth() + 1;
    var day = then.getDate();
	var weekdayDigit = then.getDay();

	document.getElementById('daystill').innerHTML = dayValue + " Tag(e) bis  " + tagName[weekdayDigit] + " " + day + "." + month + "." + year;
}

