// global functionality
(function () {
var signup = {};

signup.holderText = 'SIGN UP FOR 20% OFF + FREE SHIPPING';

signup.errorMessageTmp = '<span class="error">Invalid {%%}</span> Please try again.';
signup.errorMessage = '';

signup.showSignupForm = function (ele) {
	ele.addClassName('show');
	if (ele.readAttribute('id') === 'footer-emailForm') {
		ele.up(0).setStyle({top: '-138px'});
	}
}

signup.signupOpen = false;

signup.closeSignupForm = function (ele) {
	ele.removeClassName('show');
	if (ele.readAttribute('id') === 'footer-emailForm') {
		ele.up(0).setStyle({top: '0'});
	}
}

signup.customRadio = function (elements) {
	var customs = (function (eles) {
			var a = [];
			eles.each(function (ele) {
				a[a.length] = {
					originalElement : $(ele),
					label : $(ele).up(0)
				};
			});
			return a;
		})(elements);
	
	for (var i = 0, il = customs.length; i < il; i++) { (function (iter) {
		customs[i].label.observe('click', function (evt) {
			customs.each(function (item) { 
				item.label.removeClassName('selected');
				item.originalElement.checked = false;
			});
			customs[iter].label.addClassName('selected');
			customs[iter].originalElement.checked = true;
		});
		customs[i].originalElement.observe('focus', function (evt) {
			customs[iter].label.addClassName('focused');
		});
		customs[i].originalElement.observe('blur', function (evt) {
			customs[iter].label.removeClassName('focused');
		});
	})(i)}
	
}

signup.validators = {};

// email regex
signup.validators.email = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

// zip code regex - can be blank
signup.validators.zipCode = /^$|^\d{5}$|\d{5}-\d{4}$/;

signup.validators.test = function (validation, value) {
	return validation.test(value);
}

signup.validateSignup = function (form) {
	var valid = true,
		inputEles = $(form).getInputs(),
		validationMap = {
			'emailAddress' : {
				'validator': signup.validators.email,
				'message': 'Email'
			},
			'zip' : {
				'validator': signup.validators.zipCode,
				'message': 'Zip'
			}
		},
		firstInvalid = void 0;
	
	inputEles.each(function (item) {
		if (!!validationMap[item.getAttribute('name')]) {
			if (!signup.validators.test(validationMap[item.getAttribute('name')].validator, item.getValue())) {
				valid = false;
				if (firstInvalid === void 0) {
					firstInvalid = item;
					signup.errorMessage = signup.errorMessageTmp.replace(/\{%%\}/, function ($0) {
						return (validationMap[item.getAttribute('name')].message);
					});
				}
			}
		}
	});
	
	if (!valid) {
		firstInvalid.focus();
	}
	
	return valid;
}

document.observe('click', function (evt) {
	if (signup.signupOpen) {
		if ($(evt.element()).up('.email-signup') === void 0) {
			$$('.email-signup form.show').each(function (elem) {
				signup.closeSignupForm(elem);
			});
		}
	}
});

$$('.email-signup').each(function (elem) {
	
	// set up custom radio buttons, binds clicks, checks/unchecks radios
	var customRad = new signup.customRadio(elem.select('input.radiobox'));
	
	// bind onfocus event to emailAddress input to clear value/open signup form
	if (!!elem.down('input.signup-email')) {
		elem.down('input.signup-email').observe('focus', function (evt) {
			if (evt.element().getValue() == signup.holderText) {
				evt.element().setValue('');
			}
			if (!elem.down('form').hasClassName('show')) {
				if (signup.signupOpen === true) {
					$$('.email-signup form.show').each(function (elem) {
						signup.closeSignupForm(elem);
					});
				}
				signup.showSignupForm(elem.down('form'));
				signup.signupOpen = true;
			}
		});
		
		elem.down('input.signup-email').observe('blur', function (evt) {
			if (evt.element().getValue() == '') {
				evt.element().setValue(signup.holderText);
			}
		});
	}
	
	if (!!elem.down('form')) {
		elem.down('form').observe('submit', function (evt) {
			evt.preventDefault();
			var formEle = evt.element();
			// validate form
			var isValid = signup.validateSignup(formEle);
			
			if (!isValid) {
				formEle.down('p.signup-message').update(signup.errorMessage);
				return false;
			} else {
			// submit form
				var formParams = formEle.serialize(true),
					pc = document.createElement('div'),
					pixelId = (formEle.readAttribute('id') === 'header-emailForm') ? '55722': '55723'; // 55722 for header, 55723 for footer
					pixel = '<img src="https://secure.ed4.net/GSI/dualpost/?c=' + pixelId + '&e';
				pixel += (!!formParams.emailAddress) ? '=' + formParams.emailAddress : '';
				pixel += '&src';
				pixel += (!!formParams.contest) ? '=' + formParams.contest : '';
				pixel += '&b';
				pixel += (!!formParams.gender) ? '=' + formParams.gender : '';
				pixel += '&d';
				pixel += (!!formParams.zip) ? '=' + formParams.zip : '';
				pixel += '" width="1" height="1" />';
				pc.style.width = 0;
				pc.style.height = 0;
				pc.style.overflow = "hidden";
				
				var action = formEle.readAttribute('action');
				if (window.location.protocol === 'https:') {
					action = action.replace('http:', 'https:');
				}
				var ajaxer = new Ajax.Request(action, {
					parameters : $H(formParams).toQueryString(),
					onSuccess : function (response) {
						var parent = formEle.up('div.email-signup');
						if (formEle.readAttribute('id') === 'footer-emailForm') {
							parent.setStyle({top: '0px'});
						}
						$$('.email-signup').each(function (elem) {
							elem.update(response.responseText);
						});
						pc.innerHTML = pixel;
						document.body.appendChild(pc);
					}
				});
				
			}
		});
	}
	
});

})();
