/**
 * Status der Felder (ausgefüllt?) -> anfangs nicht/false
*/
widgetFields['service'] = false;
widgetFields['heating_type'] = false;
widgetFields['heating_age'] = false;
widgetFields['year_of_construction'] = false;
widgetFields['inhabitants'] = false;
widgetFields['roofage'] = false;
widgetFields['roof_type'] = false;
widgetFields['comment'] = false;

lastStep = 3;

$(document).ready(function()
{
	/**
	 * Widget
	 */
	$('div.widget input#widget-service-sonstige').click(function()
	{
		$('div.widget input#widget-service-other').focus();
	});
	$('div.widget input#widget-heating-type-sonstige').click(function()
	{
		$('div.widget input#widget-heating-type-other').focus();
	});
	
	$('div#widget form input[name="heating_type"]').click(function(){
		showMoreFields();
	});
});


/**
 * Formularfeld ausgefüllt -> Fortschrittsbalken erhöhen, evt. nächstes Formular
 * @param field
 */
function formEvent(field)
{
	if(validationFailed)
	{
		validate();
	}
	
	name = field.attr('name');
	if(field.val() != '' && !widgetFields[name] && typeof widgetFields[name] != 'undefined')
	{
		heatingType = $('div#widget form ol.heating-type input:radio:checked').val();
		
		if(name == 'service' || name == 'heating_type')
			increaseStatus(12);
		else if(heatingType == 'Solarthermie')
			increaseStatus(6);
		else if($('div#widget').hasClass('elektroheizung'))
			increaseStatus(20);
		else
			increaseStatus(7);
		widgetFields[name] = true;
	}
	
	switch(widgetStep)
	{
		case 1:
			if(widgetFields['service'] && widgetFields['heating_type'])
			{
				forward();
			}
		break;
	}
	
}


/**
 * Weitere Felder anzeigen, je nachdem welcher Heizungstyp gewählt wurde
 * @return
 */
function showMoreFields()
{
	$('div#widget li.widget-solarthermie-infos').hide();
	$('div#widget li#widget-li-brauchwasseraufbereitung').hide();
	
	heatingType = $('div#widget form input[name="heating_type"]:checked').val();
	if(heatingType == 'Solarthermie')
	{
		$('div#widget li.widget-solarthermie-infos').show();
	}
	else if(heatingType == 'Wärmepumpe')
	{
		$('div#widget li#widget-li-brauchwasseraufbereitung').show();
	}
}


/**
 * Validierung des Standard-Widget
 * @return
 */
function validate()
{
	
	if($('div#widget').hasClass('elektroheizung'))
		return validateElektroheizung();
	
	
	error = false;
	
	// reset every error
	$('label.service').removeClass('error');
	$('div#widget form label[for="widget-service-sonstige"]').removeClass('error');
	$('div#widget form input#widget-service-other').removeClass('error');
	$('label.heating-type').removeClass('error');
	$('div#widget form label[for="widget-heating-type-sonstige"]').removeClass('error');
	$('div#widget form input#widget-heating-type-other').removeClass('error');
	
	$('div#widget form label[for="widget-heating-age"]').removeClass('error');
	$('div#widget form select#widget-heating-age').removeClass('error');
	$('div#widget form label[for="widget-year-of-construction"]').removeClass('error');
	$('div#widget form input#widget-year-of-construction').removeClass('error');
	$('div#widget form label[for="widget-inhabitants"]').removeClass('error');
	$('div#widget form select#widget-inhabitants').removeClass('error');
	$('div#widget form label[for="widget-roofage"]').removeClass('error');
	$('div#widget form input#widget-roofage').removeClass('error');
	$('div#widget form label[for="widget-roof-type"]').removeClass('error');
	$('div#widget form select#widget-roof-type').removeClass('error');
	
	resetPersonalDataErrors();
	
	switch(widgetStep)
	{
		case 1:
			service = $('div#widget form ol.service input:radio:checked').val();
			if(typeof service == 'undefined')
			{
				$('label.service').addClass('error');
				error = true;
			}
			else if(service == 'Sonstige' && $('div#widget form input#widget-service-other').val() == '')
			{
				$('label.service').addClass('error');
				$('div#widget form label[for="widget-service-sonstige"]').addClass('error');
				$('div#widget form input#widget-service-other').addClass('error');
				error = true;
			}
			
			heatingType = $('div#widget form ol.heating-type input:radio:checked').val();
			if(typeof heatingType == 'undefined')
			{
				$('label.heating-type').addClass('error');
				error = true;
			}
			else if(heatingType == 'Sonstige' && $('div#widget form input#widget-heating-type-other').val() == '')
			{
				$('label.heating-type').addClass('error');
				$('div#widget form label[for="widget-heating-type-sonstige"]').addClass('error');
				$('div#widget form input#widget-heating-type-other').addClass('error');
				error = true;
			}
		break;
		case 2:
			heatingAge = $('div#widget form select#widget-heating-age option:selected').val();
			if(heatingAge == -1)
			{
				$('div#widget form label[for="widget-heating-age"]').addClass('error');
				$('div#widget form select#widget-heating-age').addClass('error');
				error = true;
			}
			
			yearOfConstruction = $('div#widget form input#widget-year-of-construction').val();
			if(yearOfConstruction == '')
			{
				$('div#widget form label[for="widget-year-of-construction"]').addClass('error');
				$('div#widget form input#widget-year-of-construction').addClass('error');
				error = true;
			}
			
			inhabitants = $('div#widget form select#widget-inhabitants option:selected').val();
			if(inhabitants == '')
			{
				$('div#widget form label[for="widget-inhabitants"]').addClass('error');
				$('div#widget form select#widget-inhabitants').addClass('error');
				error = true;
			}
			
			heatingType = $('div#widget form ol.heating-type input:radio:checked').val();
			if(heatingType == 'Solarthermie')
			{
				roofage = $('div#widget form input#widget-roofage').val();
				if(roofage == '')
				{
					$('div#widget form label[for="widget-roofage"]').addClass('error');
					$('div#widget form input#widget-roofage').addClass('error');
					error = true;
				}
				roofType = $('div#widget form select#widget-roof-type').val();
				if(roofType == '')
				{
					$('div#widget form label[for="widget-roof-type"]').addClass('error');
					$('div#widget form select#widget-roof-type').addClass('error');
					error = true;
				}
			}
		break;
		case 3:
			error = validatePersonalData();
		break;
	}
	
	validationFailed = error;
	return !error;
}


/**
 * Validierung des Elektroheizung-Widget
 * @return bool
 */
function validateElektroheizung()
{
	error = false;
	
	// reset every error
	$('div#widget form label[for="widget-title"]').removeClass('error');
	$('div#widget form select#widget-title').removeClass('error');
	$('div#widget form label[for="widget-surename"]').removeClass('error');
	$('div#widget form input#widget-surename').removeClass('error');
	$('div#widget form label[for="widget-email"]').removeClass('error');
	$('div#widget form input#widget-email').removeClass('error');
	$('div#widget form label[for="widget-phone"]').removeClass('error');
	$('div#widget form input#widget-phone').removeClass('error');
	$('div#widget p.privacy_policy').removeClass('error');
	
	title = $('div#widget form select#widget-title option:selected').val();
	if(title == '')
	{
		$('div#widget form label[for="widget-title"]').addClass('error');
		$('div#widget form select#widget-title').addClass('error');
		error = true;
	}
	
	surename = $('div#widget form input#widget-surename').val();
	if(surename == '')
	{
		$('div#widget form label[for="widget-surename"]').addClass('error');
		$('div#widget form input#widget-surename').addClass('error');
		error = true;
	}
	
	email = $('div#widget form input#widget-email').val();
	emailRegEx = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
	if(email == '' || !emailRegEx.test(email))
	{
		$('div#widget form label[for="widget-email"]').addClass('error');
		$('div#widget form input#widget-email').addClass('error');
		error = true;
	}
	
	phone = $('div#widget form input#widget-phone').val();
	if(phone == '')
	{
		$('div#widget form label[for="widget-phone"]').addClass('error');
		$('div#widget form input#widget-phone').addClass('error');
		error = true;
	}
	
	privacyPolicy = $('div#widget form input#widget-privacy-policy:checked').val();
	if(typeof privacyPolicy == 'undefined')
	{
		$('div#widget p.privacy_policy').addClass('error');
		error = true;
	}
	
	validationFailed = error;
	return !error;
}