var res_field = "start";
var res_start = 0;
var res_end = 0;   

var calendarValidated = true;
var riderValidated = true;  
var locationValidated = true;
var billingValidated = true;
var finalizeValidated = true;

$(document).ready(function(){ 
	
	
	$('a#res_search_button').bind('click', function() {
		$('form#res_search').submit();
	});
	
	$('select#location').bind('change', function() {
		if ($('select#location').val() == "other") {
			$('#address_field').show();
			$('input#location_name').val('other');
			$('input#location_address').val('');
		} else {
			$('#address_field').hide();			
			locationName = $('select#location').val().substring(0,$('select#location').val().indexOf(' / '));
			locationAddress = $('select#location').val().substring($('select#location').val().indexOf(' / ')+3,100);
			$('input#location_name').val(locationName);
			$('input#location_address').val(locationAddress);			
		}
	});
	
	$('.reservable_day').livequery('click', function() { 
		if (res_field == "start") {                     
			res_start = $(this).attr('rel'); // telling script the start doy 
			$('#res_start_display').val(getDate($(this).attr('id'))); // pretty date for display field
			$('#res_start').val($(this).attr('id')); // system format for form
			res_field = "end"; // telling script we're now on end date
			$('#res_start_display').removeClass('on'); // removing start field highlight
			$('#res_end_display').addClass('on'); // adding end field highlight
			$(this).addClass('reservable_day_on'); // highlighing start day
			$('.available_end').each(function(intIndex){
				if ($(this).hasClass('unavailable_day')) {
					$(this).addClass('unavailable_day_hold');
				}
				$(this).removeClass('unavailable_day');
				$(this).addClass('reservable_day');
			});
			$('p#res_instructions').html('Now, click an end date on the calendar. This is the date you will return your bike or it will be picked up from you.'); // instructions
		} else if (res_field == "end") {                              
			res_end = $(this).attr('rel'); // telling script the end doy
			// check for skipping of unavailable days
			var skips_unavailable = false;
			for (i = res_start; i <= res_end; i++ ) {
				if ($('div[rel=' + i + ']').hasClass('unavailable_day')) {
					skips_unavailable = true;
				}
			}
			if (skips_unavailable == true) {
				alert("There are no bikes available on one or more of the days between your start and end dates. Do not choose a range that includes grayed-out days.");
			// check all the dates between 			
			} else if ((parseInt(res_end) >= parseInt(res_start) + min_days) && (parseInt(res_end) <= parseInt(res_start) + 14)) { // reservation minimum
				$('#res_end_display').val(getDate($(this).attr('id'))); // pretty date for display field
				$('#res_end').val($(this).attr('id')); // system format for form
				res_field = "finished" // telling script we're done
				$(this).addClass('reservable_day_on'); // highlighting end day
				for (i = parseInt(res_start) + 1; i < parseInt(res_end) + 1; i++) { 
					$('div[rel=' + i + ']').addClass('reservable_day_on'); // highlighting days between	
				}
				$('#res_end_display').removeClass('on'); // removing end field highlight
				$('p#res_instructions').html('Click the \"continue\" button to go on to the next step, or \"clear\" to pick dates again.'); // instructions				
				refreshFeeBox();
			} else {
				alert(str_min_max_days);
			}			
		}
	});
	
	$('.reservable_day').livequery('mouseover', function () { 
		$(this).addClass('reservable_day_over');
	});
	
	$('.reservable_day').livequery('mouseout', function () {
		$(this).removeClass('reservable_day_over');
	});
	
	$('form#res_calendar').submit(function(event){ 
		if (calendarValidated == false) {
			event.preventDefault();
			validating = setTimeout(function() {
				formValidation = validateSearchForm();				
				if (formValidation[0] == false) { 
				} else {
					calendarValidated = true;
					$('form#res_calendar').submit();					
				}

			}, 10);
		}
	});
	
	$('form#res_rider').submit(function(event){ 
		if (riderValidated == false) {
			event.preventDefault();
			validating = setTimeout(function() {
				formValidation = validateSearchForm();				
				if (formValidation[0] == false) { 
				} else {
					riderValidated = true;
					$('form#res_rider').submit();					
				}

			}, 10);
		}
	});
	
	$('form#res_location').submit(function(event){ 
		if (locationValidated == false) {
			event.preventDefault();
			validating = setTimeout(function() {
				formValidation = validateSearchForm();				
				if (formValidation[0] == false) { 
				} else {
					locationValidated = true;
					$('form#res_location').submit();					
				}

			}, 10);
		}
	});
	
	$('form#res_billing').submit(function(event){ 
		if (billingValidated == false) {
			event.preventDefault();
			validating = setTimeout(function() {
				formValidation = validateSearchForm();				
				if (formValidation[0] == false) { 
				} else {
					billingValidated = true;
					$('form#res_billing').submit();					
				}

			}, 10);
		}
	});
	
	$('form#res_finalize').submit(function(event){ 
		if (finalizeValidated == false) {
			event.preventDefault();
			validating = setTimeout(function() {
				formValidation = validateSearchForm();				
				if (formValidation[0] == false) { 
				} else {
					finalizeValidated = true;
					$('form#res_finalize').submit();					
				}

			}, 10);
		}
	});
	
	$('input#helmet').bind('change', function() {
		refreshFeeBox();
	});
		
});

function refreshFeeBox() {
	$.ajax({
		url: '/ajax_fee_box.php',
		type: "POST",
		data: ({
			start_date : $('input#res_start').val(),
			end_date : $('input#res_end').val(),
			helmet : ($('input#helmet').attr('checked') || $('input#helmet_requested').val() == "1")
		}),
		success: function(data) {
			$('#res_fee_box').html(data);
		}
	});
}

function submitResForm() { 
	$('form#res_calendar').submit();
}

function submitRiderForm() { 
	$('form#res_rider').submit();
} 

function submitLocationForm() { 
	$('form#res_location').submit();
} 

function submitBillingForm() { 
	$('form#res_billing').submit();
} 

function submitFinalizeForm() { 
	$('form#res_finalize').submit();
}

function getDate(dateString) {
	dateArray = dateString.split('-');
	var date = new Date();
	date.setFullYear(dateArray[0], dateArray[1] - 1, dateArray[2], 0, 0, 0);
	return date.format('ddd mmm d');
}


function clearResForm() {
	$('#res_start').val(''); 
	$('#res_start_display').val('');
	$('#res_start_display').addClass('on');
	$('#res_end').val('');
	$('#res_end_display').val('');  
	$('#res_end_display').removeClass('on');
	$('#res_instructions').html('First, click a start date from the calendar below. This is the date you will pick up your bike or it will be delivered to you.');
	
	$('.reservable_day_on').removeClass('reservable_day_on');
	
	$('.unavailable_day_hold').each(function(intIndex){
		$(this).removeClass('reservable_day');
		$(this).addClass('unavailable_day');
		$(this).removeClass('unavailable_day_hold');
	});
	
	res_field = "start";
	res_start = 0;
	res_end = 0;
	
}



function updatePrices() {
	period = $F('period');
	new Ajax.Updater('extras_container', '_extras_table.php', {
		method: 'get',
		evalScripts: true,
	 	parameters: { 
			period: period
		}
	});
	new Ajax.Updater('prices_container', '_prices_table.php', {
		method: 'get',
		evalScripts: true,
	 	parameters: { 
			period: period
		}
	});
	
}

function validateFirstName(event) {
	var name = $F(event.element());
	if (name.length < 2 || name.length > 100) {
		$('v_first_name').removeClassName('valid');
		$('v_first_name').addClassName('invalid');
		$('v_first_name').innerHTML = "Pleae enter first name.";
	} else {
		$('v_first_name').removeClassName('invalid');
		$('v_first_name').addClassName('valid');
		$('v_first_name').innerHTML = "";
	}
}

function validateLastName(event) {
	var name = $F(event.element());
	if (name.length < 2 || name.length > 100) {
		$('v_last_name').removeClassName('valid');
		$('v_last_name').addClassName('invalid');
		$('v_last_name').innerHTML = "Pleae enter last name.";
	} else {
		$('v_last_name').removeClassName('invalid');
		$('v_last_name').addClassName('valid');
		$('v_last_name').innerHTML = "";
	}
}


function validateEmail(event) {
	var email = $F(event.element());
	var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
	if (email.length < 3 || email.length > 100) {
		$('v_email_address').removeClassName('valid');
		$('v_email_address').addClassName('invalid');
		$('v_email_address').innerHTML = "Enter email address.";
	} else if (!email.match(emailFilter)) { 
		$('v_email_address').removeClassName('valid');
		$('v_email_address').addClassName('invalid');
		$('v_email_address').innerHTML = "Invalid email address.";
	} else {
		new Ajax.Request('validate_email.php', {
		 	onComplete: function(transport) {
				if (200 == transport.status) {
					$('v_email_address').removeClassName('invalid');
					$('v_email_address').addClassName('valid');
					$('v_email_address').innerHTML = "";
				} else {
					$('v_email_address').removeClassName('valid');
					$('v_email_address').addClassName('invalid');
					$('v_email_address').innerHTML = "Email address already registered.";
				}
			},
			parameters: { 
				email: $F('email_address')
			}
		});
	}
}

function validateEmailFormat(event) {
	var email = $F(event.element());
	var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
	if (email.length < 3 || email.length > 100) {
		$('v_email_address').removeClassName('valid');
		$('v_email_address').addClassName('invalid');
		$('v_email_address').innerHTML = "Enter email address.";
	} else if (!email.match(emailFilter)) { 
		$('v_email_address').removeClassName('valid');
		$('v_email_address').addClassName('invalid');
		$('v_email_address').innerHTML = "Invalid email address.";
	} else {
		$('v_email_address').removeClassName('invalid');
		$('v_email_address').addClassName('valid');
		$('v_email_address').innerHTML = "";
	}
}

function validatePassword(event) {
	var password = $F(event.element());
	var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/;
	if (password.length < 6 || password.length > 20) {
		$('v_password').removeClassName('valid');
		$('v_password').addClassName('invalid');
		$('v_password').innerHTML = "Must be between 6 and 20 characters.";
	} else if (password.match(illegalChars)) { 
		$('v_password').removeClassName('valid');
		$('v_password').addClassName('invalid');
		$('v_password').innerHTML = "Contains illegal characters.";
	} else {
		$('v_password').removeClassName('invalid');
		$('v_password').addClassName('valid');
		$('v_password').innerHTML = "";
	}
}

function validatePasswordNotBlank(event) {
	var password = $F(event.element());
	var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/;
	if (password.length == 0) {
		$('v_password').removeClassName('valid');
		$('v_password').addClassName('invalid');
		$('v_password').innerHTML = "Invalid password.";
	} else if (password.match(illegalChars)) { 
		$('v_password').removeClassName('valid');
		$('v_password').addClassName('invalid');
		$('v_password').innerHTML = "Invalid password.";
	} else {
		$('v_password').removeClassName('invalid');
		$('v_password').addClassName('valid');
		$('v_password').innerHTML = "";
	}
}

function validatePasswordMatch(event) {
	var password = $F('password');
	var passwordCheck = $F('password_check');
	if (password != passwordCheck) {
		$('v_password_check').removeClassName('valid');
		$('v_password_check').addClassName('invalid');
		$('v_password_check').innerHTML = "Passwords must match.";
	} else {
		$('v_password_check').removeClassName('invalid');
		$('v_password_check').addClassName('valid');
		$('v_password_check').innerHTML = "";
	}
}

function validateHeight(event) {
	var feet = $F('height_feet');
	var inches = $F('height_inches');
	var heightFilter = /^\d{0,2}(\.\d{1,2})?$/;
	
	if (!feet.match(heightFilter) || feet < 5 || feet > 6) {
		$('v_height').removeClassName('valid');
		$('v_height').addClassName('invalid');
		$('v_height').innerHTML = "Please enter a valid height.";
	} else {
		$('v_height').removeClassName('invalid');
		$('v_height').addClassName('valid');
		$('v_height').innerHTML = "";
	}
	
	if ((!inches.match(heightFilter) || parseInt(inches) < 0 || parseInt(inches) > 11)) { 
		$('v_height').removeClassName('valid');
		$('v_height').addClassName('invalid');
		$('v_height').innerHTML = "Please enter a valid height.";
	} else {
		$('v_height').removeClassName('invalid');
		$('v_height').addClassName('valid');
		$('v_height').innerHTML = "";
	}
}

function validatePhone(event) {
	var area = $F('phone_area');
	var prefix = $F('phone_prefix');
	var four = $F('phone_four');
	var phoneThreeFilter = /^\d{3}(\.\d{1,3})?$/;
	var phoneFourFilter = /^\d{4}(\.\d{1,4})?$/;
	
	if (!area.match(phoneThreeFilter) || !prefix.match(phoneThreeFilter) || !four.match(phoneFourFilter)) { 
		$('v_phone').removeClassName('valid');
		$('v_phone').addClassName('invalid');
		$('v_phone').innerHTML = "Please enter a phone number.";
	} else {
		$('v_phone').removeClassName('invalid');
		$('v_phone').addClassName('valid');
		$('v_phone').innerHTML = "";
	}
}


function emailClear(event) {
	var element = event.element();
	element.value = "";
	element.removeClassName('grayed');
}

function sendSignup() {
	new Ajax.Updater('email_signup', 'save_signup.php', {
	  parameters: { email: $F('email_field') }
	});
}

function sendRegister() {
	$form_valid = true;
	$form_complete = true;
	$w('v_email_address v_password v_password_check v_first_name v_last_name').each(function(field){
		if ($(field).hasClassName('invalid')) {
			$form_valid = false;
		} else if(!$(field).hasClassName('valid')) {
			$form_complete = false;
		}
	})

	if (!$form_valid) {
		alert('Oops! There are some things in the form you need to fix before submitting. Look for the ones marked in red.');
	} else if (!$form_complete) {
		alert('Oops! You have not filled out all the required fields (marked with an *).');
	} else {
		document.account_form.submit();
	}
}

function checkSignin() {
	$form_valid = true;
	$form_complete = true;
	$w('v_email_address v_password').each(function(field){
		if ($(field).hasClassName('invalid')) {
			$form_valid = false;
		} else if(!$(field).hasClassName('valid')) {
			$form_complete = false;
		}
	})

	if (!$form_valid) {
		alert('Please check username and password');
	} else if (!$form_complete) {
		alert('Please check username and password.');
	} else {
		document.login_form.action = "do_login.php";
		document.login_form.submit();
	}
	
}

function swapPhoto(which) {
	if (which != currentPhoto) {
		product_details_top = $(which).getHeight() + 13;
		$('product_details').morph('top: ' + product_details_top + 'px;');
		$(currentPhoto).fade(); 
		$(which).appear(); 
		currentPhoto = which;
	}
	return false;
}

function show(menu) {
	divPointer = "submenu" + menu;
	document.getElementById(divPointer).style.visibility="visible";
}

function hide(menu) {
	divPointer = "submenu" + menu;
	document.getElementById(divPointer).style.visibility="hidden";
}

function nzDoNothing() {
	return false;
}
