var defaultWidget = {
	step: 1,
	error: false,
	autoValidation: 0,
	statusbarFieldsUsed: new Array(),
	increaseLock: false,
	
	resetErrors: function()
	{
		$('div#widget form input').removeClass('error');
		$('div#widget form select').removeClass('error');
		$('div#widget form textarea').removeClass('error');
		$('div#widget form label').removeClass('error');
		
		if(this.autoValidation < this.step)
		{
			$('div#widget div.step' + this.step + ' input, div#widget div.step' + this.step + ' select, div#widget div.step' + this.step + ' textarea').change(function()
			{
				widget.validate();
			});
			this.autoValidation = this.step;
		}
		
		this.error = false;
	},
	setError: function(field)
	{
		$('div#widget form input[name="' + field + '"]').addClass('error');
		$('div#widget form select[name="' + field + '"]').addClass('error');
		$('div#widget form label[for="' + field + '"]').addClass('error');
		
		$('div#widget form input[name="personal_data[' + field + ']"]').addClass('error');
		$('div#widget form select[name="personal_data[' + field + ']"]').addClass('error');
		$('div#widget form label[for="personal_data-' + field + '"]').addClass('error');
		
		this.error = true;
	},
	nextStep: function()
	{
		if(!this.error)
		{
			if(typeof widget.nextStep != 'undefined')
			{
				var next = widget.nextStep();
				if(typeof next != 'undefined')
					return next;
			}
			
			$('div#widget div.step' + this.step).hide();
			this.step++;
			$('div#widget div.step' + this.step).show();
			
			var top = $('div#widget');
			$('html, body').animate({
				scrollTop: $(top).offset().top
			}, 1000);
			
			return false;
		}
	},
	lastStep: function()
	{
		if(!this.error)
		{
			$('div#widget div.step' + this.step).hide();
			this.step--;
			$('div#widget div.step' + this.step).show();
			
			var top = $('div#widget');
			$('html, body').animate({
				scrollTop: $(top).offset().top
			}, 1000);
		}
	},
	showMoreFields: function()
	{
		
	},
	increaseStatusbar: function(percent, field)
	{
		if(this.statusbarFieldsUsed.join().indexOf(field) == -1)
		{
			var currentWidth = parseInt($('div#widget div.control div.status-active').css('width'));
			
			if(currentWidth + percent < 100)
			{
				newPercent = currentWidth + percent;
			}
			else
			{
				newPercent = 100;
			}
			
			if(this.increaseLock)
			{
				window.setTimeout(function(){
					defaultWidget.increaseStatusbar(percent, field);
				}, 50);
				return;
			}
			
			this.increaseLock = true;
			$('div#widget div.control div.status-active').animate({
				width: newPercent + '%'
			}, 250, function()
			{
				$('div#widget div.control div.current-status').html(newPercent + '%');
				defaultWidget.increaseLock = false;
			});
			
			this.statusbarFieldsUsed.push(field);
		}
	},
	validatePersonalData: function()
	{
		if($('div#widget form select[name="personal_data[title]"] option:selected').val() == '')
		{
			this.setError('title');
		}
		
		if($('div#widget form input[name="personal_data[surname]"]').val() == '')
		{
			this.setError('surname');
		}
		
		var email = $('div#widget form input[name="personal_data[email]"]').val();
		var emailRegEx = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
		if(email == '' || !emailRegEx.test(email))
		{
			this.setError('email');
		}
		
		var phone = $('div#widget form input[name="personal_data[phone]"]').val();
		var queersumme = 0;
		var phone2 = phone.split('');
		for(var i = 0; i < phone.length; i++)
			queersumme += phone2[i]-0;
		
		if(phone == '' || (queersumme != "NaN" && queersumme <= 0) || phone.length < 8 || (phone.substr(0,1) != '0' && phone.substr(0,1) != '+') || phone.substr(0, 6) == '123456' || phone.substr(0, 7) == '0123456')
		{
			this.setError('phone');
		}
		
		if($('div#widget form select[name="personal_data[erreichbarkeit]"] option:selected').val() == '')
		{
			this.setError('erreichbarkeit');
		}
		
		if(typeof widget.noAddress == 'undefined' || !widget.noAddress)
		{
			if($('div#widget form input[name="personal_data[street]"]').val() == '')
			{
				this.setError('street');
			}
			
			if($('div#widget form input[name="personal_data[house_number]"]').val() == '')
			{
				this.setError('house_number');
			}
			
			if(typeof widget.noCity == 'undefined' || !widget.noCity)
			{
				if($('div#widget form input[name="personal_data[city]"]').val() == '')
				{
					this.setError('city');
				}
				
				var zipcode = $('div#widget form input[name="personal_data[zipcode]"]').val();
				if(zipcode == '' || zipcode.length < 5)
				{
					this.setError('zipcode');
				}
			}
		}
		
		$('div#widget form input[name="valid"]').val(parseInt(this.error ? 0 : 1));
	}
};

$('div#widget input.button').live('click', function()
{
	var valid = widget.validate();
	var steps;
	if(typeof widget.steps == 'undefined')
		steps = 2;
	else
		steps = widget.steps;
	
	if(valid && defaultWidget.step < steps)
	{
		return defaultWidget.nextStep();
	}
	else if(valid)
		return true;
	else
		return false;
});

$('div#widget input.backward, div#widget button.backward').live('click', function()
{
	if(defaultWidget.step > 1)
	{
		defaultWidget.lastStep();
		return false;
	}
});
$(document).ready(function()
{
	if($('div#widget').length > 0 && widget.showMoreFields)
	{
		$('div#widget input, div#widget select, div#widget').change(function()
		{
			widget.showMoreFields();
		});
		
		widget.showMoreFields();
	}
	if($('div#widget').length > 0)
	{
		if($('div#widget div.step2').is(':visible'))
		{
			defaultWidget.step = 2;
		}
		else if($('div#widget div.step3').is(':visible'))
		{
			defaultWidget.step = 3;
		}
	}
	
	if($('div#widget div.control div.status-active').length > 0)
	{
		$('div#widget input, div#widget select').change(function()
		{
			if(typeof widget.updateStatusbar != 'undefined')
				widget.updateStatusbar($(this));
		});
	}
});
