var dow_err_class = 'dowerror';

var form_initialization = function(
	html,
	dialog
	)
{
	dialog =
		DialogFactory.openDialog({
			dialog: dialog,
			reserve: true,
			message: html,
			closeOnEscape: true,
			dialogClass: 'signup_dialog',
			modal: true,
			title: 'Sign Up for Deal of the Week',
			width: 700,
			buttons: {}
		});

	Validation.startInputValidation({
		input: document.getElementById('dowEmail'),
		validationFunction: Generics.validation.validateEmail,
		errorClass: dow_err_class,
		beforeSetError: function(input, validationFunction)
		{
			$(input).parent().append('<span class="errorDescription">You\'ve specified an invalid Email</span>');
		},
		beforeRemoveError: function(input, validationFunction)
		{
			$(input).next('.errorDescription').remove();
		},
		validateOnBlur: true,
		validateOnChange: false,
		validateOnKeyup: false
	});
	Validation.startInputValidation({
		input: document.getElementById('dowEmailConf'),
		validationFunction: function(email)
		{
			if (document.getElementById('dowEmail').value == email)
			{
				return true;
			}

			return false;
		},
		errorClass: dow_err_class,
		beforeSetError: function(input, validationFunction)
		{
			$(input).parent().append('<span class="errorDescription">The e-mail and the e-mail confirmation fields must match !</span>');
		},
		beforeRemoveError: function(input, validationFunction)
		{
			$(input).next('.errorDescription').remove();
		},
		validateOnBlur: true,
		validateOnChange: false,
		validateOnKeyup: false
	});
	Validation.startInputValidation({
		input: document.getElementById('dowZip'),
		validationFunction: Generics.validation.validateZipCode,
		errorClass: dow_err_class,
		beforeSetError: function(input, validationFunction)
		{
			$(input).parent().append('<span class="errorDescription">You\'ve specified an invalid Zip Code</span>');
		},
		beforeRemoveError: function(input, validationFunction)
		{
			$(input).next('.errorDescription').remove();
		},
		validateOnBlur: true,
		validateOnChange: false,
		validateOnKeyup: false
	});
	return dialog;
}

var form_registration = function(waitListDialogData)
{
	if ($('.loader:visible', waitListDialogData.dialogDiv).length == 1)
	//If request already made - wait till that has been processed
	{
		return false;
	}

	Validation.validateInput({
		input: document.getElementById('dowEmail'),
		validationFunction: Generics.validation.validateEmail,
		errorClass: dow_err_class,
		beforeSetError: function(input, validationFunction)
		{
			$(input).parent().append('<span class="errorDescription">You\'ve specified an invalid Email</span>');
		},
		beforeRemoveError: function(input, validationFunction)
		{
			$(input).next('.errorDescription').remove();
		}
	});
	Validation.validateInput({
		input: document.getElementById('dowEmailConf'),
		validationFunction: function(email)
		{
			if (document.getElementById('dowEmail').value == email)
			{
				return true;
			}

			return false;
		},
		errorClass: dow_err_class,
		beforeSetError: function(input, validationFunction)
		{
			$(input).parent().append('<span class="errorDescription">The e-mail and the e-mail confirmation fields must match !</span>');
		},
		beforeRemoveError: function(input, validationFunction)
		{
			$(input).next('.errorDescription').remove();
		}
	});
	Validation.validateInput({
		input: document.getElementById('dowZip'),
		validationFunction: Generics.validation.validateZipCode,
		errorClass: dow_err_class,
		beforeSetError: function(input, validationFunction)
		{
			$(input).parent().append('<span class="errorDescription">You\'ve specified an invalid Zip Code</span>');
		},
		beforeRemoveError: function(input, validationFunction)
		{
			$(input).next('.errorDescription').remove();
		}
	});
	if (
		$('#dowEmail').hasClass(dow_err_class) ||
		$('#dowEmailConf').hasClass(dow_err_class) ||
		$('#dowZip').hasClass(dow_err_class)
		)
	{
		//Invalid Input !
//		DialogFactory.openDialog({
//			message: 'One or more of the fields are invalid.<br />Please correct the errors and try again.',
//			title: 'Error',
//			modal: true
//			//buttons
//			//beforeclose
//			//close
//			//width
//			//height
//			//dialogClass
//			});

		return false;
	}

	//All inputs are valid - submit data to server
//	var userName = document.getElementById('dowName').value;
	var userEmail = document.getElementById('dowEmail').value;
	var userZip = document.getElementById('dowZip').value;

	$('.loader', waitListDialogData.dialogDiv).show();
	AjaxHelpers.sendRequest({
		data:
			'data=' +
			Generics.serialize({
				data: [
					userZip,
					userEmail,
					userName
				],
				separator: 'A',
				encodeFunction: function(param){ return Base64.encode(param); }
				//ascendingOrder: false,
				//method: 0
			})
			,
		url: $('form', waitListDialogData.dialogDiv).attr('action'),
		//type: null,
		//serverFunction: null,
		onValid: function(data, textStatus)
		{
			$(':input', waitListDialogData.dialogDiv).not(':submit').val('');
			DialogFactory.openDialog({
				message: data,
				title: 'Request Submitted',
				modal: true
				//buttons
				//beforeclose
				//close
				//width
				//height
				//dialogClass
				});
			$(waitListDialogData.dialogDiv).dialog('close');
		},
		onExplicitlyInvalid: function(data, textStatus)
		{
			DialogFactory.openDialog({
				message: data,
				title: 'Request Failed',
				modal: true
				//buttons
				//beforeclose
				//close
				//width
				//height
				//dialogClass
				});
		},
		onImplicitlyInvalid: function(data, textStatus)
		{
			DialogFactory.openDialog({
				message: 'An unexpected error has occured. Please contact the site\'s management.',
				title: 'Request Failed',
				modal: true
				//buttons
				//beforeclose
				//close
				//width
				//height
				//dialogClass
				});
		},
		onError: function(xhr, textStatus, errorThrown)
		{
			DialogFactory.openDialog({
				message: 'A server error has occured. Please contact the site\'s management.',
				title: 'Request Failed',
				modal: true
				//buttons
				//beforeclose
				//close
				//width
				//height
				//dialogClass
				});
		},
		//onEmpty: null,
		//onNonEmpty: null,
		//onComplete: null,
		onNonErrorNonEmpty: function(data, textStatus)
		{
			$('.loader', waitListDialogData.dialogDiv).hide();
		},
		decodeFunction: function(data)
		{
			return Base64.decode(data);
		},
		validResponseIndicator: 'OK',
		invalidResponseIndicator: 'BAD'
	});//End of AjaxHelpers.sendRequest
//	$(waitListDialogData.dialogDiv).dialog('close');
};
