﻿var ZipCodeRegexPattern = new RegExp("^\\d{3}( )?\\d{2}$");
var IntRegexPattern = new RegExp("^\\d+$");
var DateRegexPattern = new RegExp("^\\d{1,2}[.]\\d{1,2}[.]\\d{4}$");
var EmailRegexPattern = new RegExp("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$");

/// **********************************************
/// Validace vyzadovaneho vstupu
/// **********************************************
function validateRequiredField(id, errorMessage, messageArray)
{
	if (trimString(document.getElementById(id).value).length > 0) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

function validateRequiredFieldValue(v, errorMessage, messageArray)
{
	if (trimString(v).length > 0) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

/// **********************************************
/// Validace PSC
/// **********************************************
function validateRequiredZipCodeField(id, errorMessage, messageArray)
{
	return validateRequiredZipCodeFieldValue(trimString(document.getElementById(id).value), errorMessage, messageArray);
}

function validateRequiredZipCodeFieldValue(value, errorMessage, messageArray)
{
	if (value.length > 0 && stringMatchesRegExp(value, ZipCodeRegexPattern)) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

/// **********************************************
/// Validace pozadovaneho e-mailu
/// **********************************************
function validateRequiredEmailField(id, errorMessage, messageArray)
{
	var value = document.getElementById(id).value;
	
	if (value.length > 0 && stringMatchesRegExp(value, EmailRegexPattern)) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

function validateRequiredEmailFieldValue(v, errorMessage, messageArray)
{
	if (v && v.length > 0 && stringMatchesRegExp(v, EmailRegexPattern)) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

/// **********************************************
/// Validace pozadovaneho datumu
/// **********************************************
function validateRequiredDateField(id, errorMessage, messageArray)
{
	var value = document.getElementById(id).value;
	
	if (value.length > 0 && stringMatchesRegExp(value, DateRegexPattern)) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

/// **********************************************
/// Validace pozadovaneho celociselneho vstupu
/// **********************************************
function validateRequiredIntField(id, errorMessage, messageArray)
{
	var value = document.getElementById(id).value;
	
	if (value.length > 0 && stringMatchesRegExp(value, IntRegexPattern)) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

function validateRequiredIntFieldValue(v, errorMessage, messageArray)
{
	if (v && v.length > 0 && stringMatchesRegExp(v, IntRegexPattern)) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

/// **********************************************
/// Validace pozadovaneho checkboxu
/// **********************************************
function validateRequiredCheckBoxField(id, errorMessage, messageArray)
{
	if (document.getElementById(id).checked) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

function validateRequiredCheckBoxFieldValue(chkd, errorMessage, messageArray)
{
	if (chkd) return true;
	else
	{
		pushErrorMessageToMessageArray(errorMessage, messageArray);
		return false;
	}
}

function pushErrorMessageToMessageArray(errorMessage, messageArray)
{
	if (errorMessage && messageArray)
	{
		messageArray.push(errorMessage);
	}
}

function formatOverallErrorMessage(messageArray, headerText)
{
	var message = "";
	
	if (messageArray.length > 0)
	{
		message = headerText + "\n";
		var i = 0;
		
		for (i = 0; i < messageArray.length; i++)
		{
			message += " ▪ " + messageArray[i];
			if (i < (messageArray.length - 1)) message += "\n";
		}
	}
	
	return message;
}

function trimString(s) {
	
	var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}

function stringMatchesRegExp(value, rx) {
    
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}

/// **********************************************
/// Validace dotazu v poradne
/// **********************************************
function validateAdvisoryForm()
{
	var name		= $(".advisory-name");
	var address		= $(".advisory-address");
	var email		= $(".advisory-email");
	var weight		= $(".advisory-weight");
	var height		= $(".advisory-height");
	var age			= $(".advisory-age");
	var question	= $(".advisory-question");
	var agrees		= $("input:first", $(".advisory-agreement-parent"));
	
	var errorMessageArray = new Array();

	validateRequiredFieldValue(name.val(), "zadejte vaše jméno a příjmení", errorMessageArray);
	validateRequiredFieldValue(address.val(), "uveďte vaši adresu", errorMessageArray);
	
	if (validateRequiredFieldValue(email.val(), "uveďte váš e-mail", errorMessageArray))
	{
		validateRequiredEmailFieldValue(email.val(), "zadaný e-mail nelze použít", errorMessageArray);
	}
	
	if (validateRequiredFieldValue(weight.val(), "zadejte vaši váhu", errorMessageArray))
	{
		validateRequiredIntFieldValue(weight.val(), "zadaná váha není číslo", errorMessageArray);
	}
	
	if (validateRequiredFieldValue(height.val(), "zadejte vaši výšku", errorMessageArray))
	{
		validateRequiredIntFieldValue(height.val(), "zadaná výška není číslo", errorMessageArray);
	}
	
	if (validateRequiredFieldValue(age.val(), "zadejte váš věk", errorMessageArray))
	{
		validateRequiredIntFieldValue(age.val(), "zadaný věk není číslo", errorMessageArray);
	}
	
	validateRequiredFieldValue(question.val(), "chybí znění dotazu", errorMessageArray);
	validateRequiredCheckBoxFieldValue(agrees.attr("checked"), "je třeba potvrdit souhlas se zpracováním údajů", errorMessageArray);
	
	if (errorMessageArray.length == 0)
	{
		$(".advisory-submit").click();
		return true;
	}
	else
	{
		window.alert(formatOverallErrorMessage(errorMessageArray, "Doplňte či opravte následující:"));
		return false;
	}
}

/// **********************************************
/// Validace: chcete zas stihly pas
/// **********************************************
function validateSmallWaistForm()
{
	var category = $(".category"), category01 = $(".category-01").attr("checked"), category02 = $(".category-02").attr("checked"), category03 = $(".category-03").attr("checked");
	
	var name01		= jQuery.trim($(".name-01").val()),		name02 = jQuery.trim($(".name-02").val());
	var street01	= jQuery.trim($(".street-01").val()),	street02 = jQuery.trim($(".street-02").val());
	var city01		= jQuery.trim($(".city-01").val()),		city02 = jQuery.trim($(".city-02").val());
	var zip01		= jQuery.trim($(".zip-01").val()),		zip02 = jQuery.trim($(".zip-02").val());
	var email01		= jQuery.trim($(".email-01").val()),	email02 = jQuery.trim($(".email-02").val());
	var phone01		= jQuery.trim($(".phone-01").val()),	phone02 = jQuery.trim($(".phone-02").val());
	var birth01		= jQuery.trim($(".birth-01").val()),	birth02 = jQuery.trim($(".birth-02").val());
	var weight01	= jQuery.trim($(".weight-01").val()),	weight02 = jQuery.trim($(".weight-02").val());
	var height01	= jQuery.trim($(".height-01").val()),	height02 = jQuery.trim($(".height-02").val());
	var waist01		= jQuery.trim($(".waist-01").val()),	waist02 = jQuery.trim($(".waist-02").val());
	
	var agrees		= $(".agreement").attr("checked");
	
	var messages01 = new Array(), messages02 = new Array();

	messages01 = validateSmallWaistFormParticipant(name01, street01, city01, zip01, email01, phone01, birth01, weight01, height01, waist01);
	messages02 = validateSmallWaistFormParticipant(name02, street02, city02, zip02, email02, phone02, birth02, weight02, height02, waist02);
	
	if (messages01.length == 0 && messages02.length == 0 && agrees)
	{
		if (category01) category.val("Žena + Muž");
		else if (category02) category.val("Žena + Žena");
		else category.val("Muž + Muž");
		
		$(".form-submit").click();
		return true;
	}
	else
	{
		var overallMessage = "",
			alertMessage01 = formatOverallErrorMessage(messages01, "Soutěžící č. 1 – opravte:"),
			alertMessage02 = formatOverallErrorMessage(messages02, "Soutěžící č. 2 – opravte:");
		
		if (alertMessage01.length > 0 && alertMessage02.length > 0)
		{
			overallMessage = alertMessage01 + "\n\n" + alertMessage02;
		}
		else if (alertMessage01.length > 0)
		{
			overallMessage = alertMessage01;
		}
		else if (alertMessage02.length > 0)
		{
			overallMessage = alertMessage02;
		}
		
		if (agrees == false)
		{
			if (overallMessage.length > 0) overallMessage += "\n\n";
			
			overallMessage += "Před odesláním musíte souhlasit s poskytnutím údajů!";
		}
		
		window.alert(overallMessage);
		
		return false;
	}
}

function validateSmallWaistFormParticipant(name, street, city, zip, email, phone, birth, weight, height, waist)
{
	var errorMessageArray = new Array();

	validateRequiredFieldValue(name, "jméno a příjmení", errorMessageArray);
	validateRequiredFieldValue(street, "ulice", errorMessageArray);
	validateRequiredFieldValue(city, "město", errorMessageArray);
	validateRequiredZipCodeFieldValue(zip, "PSČ", errorMessageArray);
	validateRequiredEmailFieldValue(email, "e-mail", errorMessageArray);
	validateRequiredFieldValue(phone, "telefon", errorMessageArray);
	validateRequiredIntFieldValue(weight, "váha", errorMessageArray);
	validateRequiredIntFieldValue(height, "výška", errorMessageArray);
	validateRequiredIntFieldValue(waist, "obvod pasu", errorMessageArray);
	
	return errorMessageArray;
}