﻿/**
	@base Panagora.Class
	@constructor
	@author Niklas Bergius
*/
Panagora.CustomerRegister = new (Panagora.Class.create(
/** @lends Panagora.CustomerRegister */
function CustomerRegister() {
	var self = this;

	function init() {
		self.log('initializing country/register page logic');
		
		// events
		$j('#register-country').change(onCountryChanged);
		$j('button.add-address-line').click(onAddAddressLineClick);

		// show region select0r if country is US
		if ($j('#register-country').val() == 'US')
			$j('#register-region-row').show();
		
		// show all address lines if line 3 has text
		if ($j('#register-address-line3').val() != '')
			$j('button.add-address-line').click();
		
		// or second line if it has text
		else if ($j('#register-address-line2').val() != '')
			$j('button.add-address-line').filter(function () {
				return $j(this).prev('input').is('#register-address-line1');
			}).click();
			
		$j("#accept-terms-link").fancybox({
			hideOnContentClick: false,
			hideOnOverlayClick: true,
			overlayShow: true,
			centerOnScroll: true,
			autoDimensions: false,
			width: 560,
			href: document.getElementById('accept-terms-link').href + '?skip_layout=1'
		});

		// validation
		$j('#register').validate({
			//debug: true,
			submitHandler: onFormSubmit,
			rules: {
				firstName: 'required',
				lastName: 'required',
				emailAddress: {
					required: true,
					email: true,
					remote: {
						type: 'post',
						url: 'checkemailavailability'
					}
				},
				password: 'required',
				passwordRepeat: {
					equalTo: '#register-password'
				},
				addressLine2: {
					required: function () {
						var line3 = $j('#register-address-line3');
						return line3.is(':visible') && line3.val() != '';
					}
				},
				postalCode: {
					required: function () {
						return $j('#register-address-line2').val() != '';
					}
				},
				city: {
					required: function () {
						return $j('#register-address-line2').val() != '';
					}
				},
				country: 'required',
				region: {
					required: function () {
						// if region is visible, we need it
						return $j('#register-region-row').is(':visible');
					}
				},
				termsaccepted: 'required'
			},
			messages: {
				emailAddress: {
					remote: $j.validator.messages.emailAddressNotAvailable
				}
			},
			errorPlacement: function (error, element) {
				if (element.attr('type') == 'radio') {
					// append to end of container
					error.appendTo(element.closest('p'));
				} else if (element.attr('type') == 'checkbox') {
					$j('#please-accept-terms').show();
				} else {
					// insert after input element
					error.insertAfter(element);
				}
			},
			unhighlight: function (element, errorClass) {
				$j(element).removeClass(errorClass);
				if (element == $j('#confirm-acceptance-of-terms').get(0)) {
					$j('#please-accept-terms').hide();
				}
			}
		});
	}
	
	function onCountryChanged() {
		self.log('country changed');
		
		if (this.value == 'US') {
			$j('#register-region-row').show();
		} else {
			$j('#register-region-row').hide();
			$j('#register-region option[selected]').get(0).selected = false;
		}
	}
	
	function onAddAddressLineClick() {
		self.log('address line requested');
		
		$j(this)
			.hide()
			.next('p.additional-address-line')
				.show();
		
	}
	
	function onFormSubmit(form) {
		form.action = '';
		form.submit();
	}
	
	$j(init);
}))();
