/*
 * belk.validation.js
 * Belk.com - Form validation javascript
 * Copyright Belk, Inc.
 */
belk.web.validation = {
	init: function(){
		var $body=$('body');
		if( ($body.is('.signin') || $body.is('.sign_in')) && !$body.is('.bridal_registry_process')){
			belk.web.validation._valSignInPage();
		} else if ($body.is('.shopping_bag')){
			belk.web.validation._valShoppingBag();
		} else if ($body.is('.register')){
			belk.web.validation._valRegisterPage();
		} else if ($body.is('.checkout.shipping')){
			belk.web.validation._valShippingPage();
		} else if ($body.is('.checkout.billing')){
			belk.web.validation._valBillingPage();
		} else if ($body.is('.bridal_registry_process.signin')){
			belk.web.validation._valBridalCreateRegistry();
		} else if ($body.is('.bridal_registry_process.event_details')){
			belk.web.validation._valBridalRegistryDetails();
		}
	},
	_error:function(ev){
		ev.preventDefault();
		return false;
	},
	_checkRequired:function(vals,ev,msgs){
		var l=vals.length;
		for(var i=0;i<l;i++){
			if(!vals[i] || vals[i]==''){
				var msg = msgs ? msgs[i] : 'Please enter all the required fields.';
				belk.util.alert(msg,'Required Fields Missing');
				return belk.web.validation._error(ev);
			}
		}
		return true;
	},
	_valSignInPage:function(){
		$('form[name="form_login"],form[name="form_checkout_step1"]').submit(function(ev){
			var e=$('input[name="LOGIN<>userid"]').val();
			var pw=$('input[name="LOGIN<>password"]').val();
			if(!e||e==''){
				belk.util.alert('Please enter your user id.','User ID Required');
				return belk.web.validation._error(ev);
			}
			else if(!pw||pw==''){
				belk.util.alert('Please enter your password.','Password Required');
				return belk.web.validation._error(ev);
			}
			return true;
		});
	},
	_valShoppingBag:function(){
		/* triggers when trying to remove coupon
		$('#sb_ft ul.coupon button').click(function(ev){
			if($('input[name="CART_HEADER<>ATR_Coupon_Code"]').val()==''){
				belk.util.alert('Please enter a coupon code.','Coupon Code Required');
				return belk.web.validation._error(ev);
			}
			return true;
		});
		*/
		$('button[name="postal_go"]').click(function(ev){
			if($('input[name="postal"]').val()==''){
				belk.util.alert('Please enter a zip code.','Zip Code Required');
				return belk.web.validation._error(ev);
			}
			return true;
		});
	},
	_valRegisterPage:function(){
		$('#form_registration').submit(function(ev){
			var e=$('input[name="USER_ACCOUNT<>email"]').val();
			var pw=$('input[name="USER_ACCOUNT<>password"]').val();
			var cpw=$('input[name="USER_ACCOUNT<>confirmPassword"]').val();
			if(!belk.util.isValidEmail(e)){
				belk.util.alert('Please enter a valid email address.','Invalid Email Address');
				return belk.web.validation._error(ev);
			}
			else if(!pw||pw==''){
				belk.util.alert('Please enter a password.','Password Required');
				return belk.web.validation._error(ev);
			}
			else if(!cpw||cpw==''){
				belk.util.alert('Please confirm the password.','Confirm Password Required');
				return belk.web.validation._error(ev);
			}
			else if(pw!=cpw){
				belk.util.alert('Confirm Password must be the same as Password.','Password Mismatch');
				return belk.web.validation._error(ev);
			}
			return true;
		});
	},
	_valShippingPage:function(){
		$('#form_shipping').submit(function(ev){
			var required=[];
			if($('ol.address_form').length>0){
				required.push(
					$('input[name="ADDRESS<>firstName"]').val(),
					$('input[name="ADDRESS<>lastName"]').val(),
					$('input[name="ADDRESS<>address1"]').val(),
					$('input[name="ADDRESS<>city"]').val(),
					$('select[name="ADDRESS<>state_cd"]').val(),
					$('input[name="ADDRESS<>postal"]').val(),
					$('select[name="shippingMethodList"]').val()
				);
			}
			if($('div.registration').length>0){
				var email=$('input[name="USER_ACCOUNT<>email"]').val();
				if(!belk.util.isValidEmail(email)){
					belk.util.alert('Please enter a valid email address.','Invalid Email Address');
					return belk.web.validation._error(ev);
				}
				
				required.push(
					$('input[name="USER_ACCOUNT<>password"]').val(),
					$('input[name="USER_ACCOUNT<>confirmPassword"]').val()
				);
			}
			return belk.web.validation._checkRequired(required,ev);
		});
	},
	_valBillingPage:function(){
		$('#form_checkout_billing input[name="continue"]').click(function(ev){
			var required=[];
			if($('ol.address_form').length>0){
				var $email = $('input[name="CURRENT_USER<>email"]');
				if($email.length>0){
					if(!belk.util.isValidEmail($email.val())){
						belk.util.alert('Please enter a valid email address.','Invalid Email Address');
						return belk.web.validation._error(ev);
					}
				}
				required.push(
					$('input[name="ADDRESS<>firstName"]').val(),
					$('input[name="ADDRESS<>lastName"]').val(),
					$('input[name="ADDRESS<>address1"]').val(),
					$('input[name="ADDRESS<>city"]').val(),
					$('select[name="ADDRESS<>state_cd"]').val(),
					$('input[name="ADDRESS<>postal"]').val(),
					$('input[name="ADDRESS<>ph_area_code"]').val(),
					$('input[name="ADDRESS<>ph_phone1"]').val(),
					$('input[name="ADDRESS<>ph_phone2"]').val()
				);
			}
			return belk.web.validation._checkRequired(required,ev);
		});
	},
	_valBridalCreateRegistry: function(){
		$('#guest form[name="form_create_acct_bridal_registry"]').submit(function(ev){
			var f=$('input[name="USER_ACCOUNT<>firstName"]').val();
			var l=$('input[name="USER_ACCOUNT<>lastName"]').val();
			var e=$('input[name="USER_ACCOUNT<>email"]').val();
			var pw=$('input[name="USER_ACCOUNT<>password"]').val();
			var cpw=$('input[name="USER_ACCOUNT<>confirmPassword"]').val();
			if(!f||f==''){
				belk.util.alert('Please enter a first name.','First Name Required');
				return belk.web.validation._error(ev);
			}else if(!l||l==''){
				belk.util.alert('Please enter a last name.','Last Name Required');
				return belk.web.validation._error(ev);
			} else if(!belk.util.isValidEmail(e)){
				belk.util.alert('Please enter a valid email address.','Invalid Email Address');
				return belk.web.validation._error(ev);
			}
			else if(!pw||pw==''){
				belk.util.alert('Please enter a password.','Password Required');
				return belk.web.validation._error(ev);
			}
			else if(!cpw||cpw==''){
				belk.util.alert('Please confirm the password.','Confirm Password Required');
				return belk.web.validation._error(ev);
			}
			else if(pw!=cpw){
				belk.util.alert('Confirm Password must be the same as Password.','Password Mismatch');
				return belk.web.validation._error(ev);
			}
			return true;
		});
		$('#existing form[name="form_create_acct_bridal_registry"]').submit(function(ev){
			var e=$('input[name="LOGIN<>userid"]').val();
			var pw=$('input[name="LOGIN<>password"]').val();
			if(!e||e==''){
				belk.util.alert('Please enter your user id.','User ID Required');
				return belk.web.validation._error(ev);
			}
			else if(!pw||pw==''){
				belk.util.alert('Please enter your password.','Password Required');
				return belk.web.validation._error(ev);
			}
			return true;
		});
	},
	_valBridalRegistryDetails:function(){
		$('form[name="form_create_registry_info"]').submit(function(ev){
			var required=[];
			var messages=[];
			required.push(
				$('input[name="EVENT<>event_dt_str"]').val(),
				$('input[name="EVENT<>num_guests"]').val(),
				/* these aren't really required because other can be entered
				$('input[name="EVENT<>event_city"]').val(),
				$('select[name="EVENT<>event_state"]').val(),
				*/
				$('select[name="REGISTRANT<>registrant_role"]').val(),
				$('input[name="REGISTRANT<>registrant_fname"]').val(),
				$('input[name="REGISTRANT<>registrant_lname"]').val(),
				$('input[name="REGISTRANT_ADDRESS<>address1"]').val(),
				$('input[name="REGISTRANT_ADDRESS<>city"]').val(),
				$('select[name="REGISTRANT_ADDRESS<>state_cd"]').val(),
				$('input[name="REGISTRANT_ADDRESS<>postal"]').val(),
				$('input[name="REGISTRANT_ADDRESS<>ph_area_code"]').val(),
				$('input[name="REGISTRANT_ADDRESS<>ph_phone1"]').val(),
				$('input[name="REGISTRANT_ADDRESS<>ph_phone2"]').val(),
				$('input[name="REGISTRANT<>registrant_email"]').val()
			);
			messages.push(
				'Please enter a valid Event Date.',
				'Please enter the Number of Guests',
				/*
				'Please enter the City for the event.',
				'Please select the State for the event.',
				*/
				'Please select the Registrant Role.',
				'Please enter the First Name.',
				'Please enter the Last Name',
				'Please enter the Address.',
				'Please enter the Address City.',
				'Please select the Address State.',
				'Please enter the Address Zip Code.',
				'Please enter a valid Phone Number.',
				'Please enter a valid Phone Number.',
				'Please enter a valid Phone Number.',
				'Please enter a valid Email Address.'
			);
			
			// validate date(s)
			var $dateFields = $('input.eventDatefield', $(this));
			$dateFields.each(function(){
				var $this = $(this);
				var val = $this.val();
				if (val && val != '' && val != 'MM/DD/YYYY') {
					// validate the date
					var date = Date.fromString(val); // this assumes that we are using jquery.datepicker which defines this
					var now = new Date();
					now.setHours(0, 0, 0, 0);
					now.setMonth(now.getMonth()-6);
					var newDate = new Date(now);
					//var today = new Date();
					var dd = newDate.getDate();
					var mm = newDate.getMonth()+1;//January is 0!
					var yyyy = newDate.getFullYear();
					if(dd<10){dd='0'+dd}
					if(mm<10){mm='0'+mm}
					if (!date || date < now) {
						belk.util.alert('Please enter a valid event date, which should be greater than '+mm+'/'+dd+'/'+yyyy+'.', 'Invalid Date');
						ev.preventDefault();
						return false;
					}
				}
			});
			return belk.web.validation._checkRequired(required,ev, messages);
		});
	}
};

$(document).ready(belk.web.validation.init);