
/**
 * Customers Form
 *
 * This file is part of the con|comm framework
 * (c) EZdesign.de
 *
 * Author:   Timo Besenreuther
 * Created:  2007
 * Modified: 2010-12-09
 */

jQuery(document).ready(function() {
	jQuery('#ConComm_Customers').ccCustomers()
			.find('input.Submit').removeAttr('disabled');
});

(function($) {
	
	$.fn.ccCustomers = function() {
		
		// initialize
		var el = $(this);
		var form = el.find('form').eq(0);
		var edit = el.find('input.Action').attr('value') == 'Edit';
		
		// load some more data
		var mandatory = null;
		loadMandatoryFields();
		var i18n = null;
		loadI18n();
		
		// listen to form submit
		form.submit(function() {
			checkForm();
			return false;
		});
		
		/** Load mandatory fields */
		function loadMandatoryFields() {
			ConComm_Ajax.request(['Customers', 'CreateAccountForm'],
				'ajaxGetMandatoryFields', {},
				function(response) {
					mandatory = response.fields;
					if (edit) {
						mandatory.push('CurrentPassword');
					} else {
						mandatory.push('NewPassword1');
						mandatory.push('NewPassword2');
					}
				}
			);
		}
		
		/** Load i18n */
		function loadI18n() {
			i18n = new EzLibrary_Internationalization;
			i18n.loadMsgFiles('ConComm', 'Customers');
		}
		
		/** Check form and output error or success message */
		function checkForm() {
			// disable submit
			var submit = el.find('input.Submit').attr('disabled', 'disabled');
			var oldValue = submit.attr('value');
			i18n.wait(function() {
				submit.attr('value', i18n.get('Wait'));
				var enableSubmit = function() {
					submit.removeAttr('disabled');
					submit.attr('value', oldValue);
				};
		
				// get and check form data
				var error  = new Array();
				var values = {};
				el.find('input, checkbox, select').each(function() {
					var input = $(this);
					var key = input.attr('name');
					var val;
					if (input.is('[type=checkbox]')) {
						val = input.is(':checked') ? '1' : '0';
					} else {
						val = input.val();
						if (typeof(val) == 'object') {
							// stoopid ie6
							val = val[0];
						}
					}
					if (val == '' && $.inArray(key, mandatory) > -1) {
						error.push(key);
					} else {
						values[key] = val;
					}
				});
		
				// mandatory fields
				var errorHTML = new Array();
				if (error.length > 0) {
					var mandatoryError = [];
					for (var i = 0; i < error.length; i++) {
						mandatoryError.push(i18n.get(error[i]));
					}
					errorHTML.push('<b>' + i18n.get('EmptyFields') + '</b> '
							+ mandatoryError.join(', '));
				}
				
				// new password
				if (values.NewPassword1 != values.NewPassword2) {
					errorHTML.push('<b>' + i18n.get('NewPasswordError') + '</b>');
				}
				
				if (errorHTML.length > 0) {
					// output error
					displayError(errorHTML.join('<br /><br />'));
					enableSubmit();
				} else {
					ConComm_Ajax.request('Customers', 'ajaxCustomerForm', {
						'values': values
					}, function(response) {
						if (response.done != 'done') {
							// error
							if (!response) {
								displayError(i18n.get('Error'));
							} else if (typeof(response.error) != 'undefined') {
								displayError(i18n.get(response.error));
							} else {
								displayError(response);
							}
						} else if (typeof response.redirect != 'undefined') {
							// redirect: used for ordering as guest
							window.location.href = response.redirect;
						} else {
							// success
							displaySuccess(response.message);
						}
						enableSubmit();
					});
				}
			});
		}
		
		var displayError = function(msg) {
			if (msg.indexOf('<b>') == -1) {
				msg = '<b>' + msg + '</b>';
			}
			$('#CustomersError').html(msg).show();
		};
		
		var displaySuccess = function(msg) {
			$('#CustomersError').hide();
			form.hide();
			$('#CustomersSuccess').html(i18n.get(msg)).show();
		}
		
		return this;
	};

})(jQuery);

