/*
	BOJ.JS
	@author Randall Haney
	@since 07-01-2009
	

	REVISIONS:
	01-05-2010 - Added makeSlider method to initiate the KO-SLIDER.js inclusion.
*/

var boj = {
	
	
	settings: {
		url: "index.php",
		modalContainer: "#order_wizard",
		formContainer: "#order_form_1",
		form: "#frm_delivery",
		gender: [700,400,600,275],
		baby:[700,580,600,465],
		family:[700,530,600,410],
		delivery:[700,730,600,615],
		customer:[700,590,600,460],
		payment:[700,490,600,380],
		confirm:[700,690,600,580],
		error_msg: "",
		has_error_msg: false
	},
	
	init: function(){
		this.makeSlider("slideshow");
	},
	
	makeSlider: function(id){
		if($('#' + id)){
			slideshow.init(false);
 		}
	},
	
	clearErrors: function(){
		this.settings.has_error_msg = false;
		$('input.ui-state-error').removeClass('ui-state-error');
		$('select.ui-state-error').removeClass('ui-state-error');
		$('textarea.ui-state-error').removeClass('ui-state-error');
		$('.error_msg').remove();
	},
	
	handlePackages: function(){
		if( ! $('input:radio:checked').length > 0 ){
			this.clearErrors();
			$("#packages").animate({'height':'400px'});
			this.settings.error_msg = 'Please choose a rental package.';
  			this.showError('#stork_packages #error_msg');
  			$("#error_msg").css("margin-top","25px");
		}else{	
			this.clearErrors();
			$("#packages").animate({'height':'317px'});
			this.handleOrderForm();
		}
	},
	
	handleDelivery: function(){
	
		this.clearErrors();
			
		if($("#delivery_month").val() == "0" || $("#delivery_day").val() == "0" || $("#delivery_year").val() == "0"){		

			this.handleError('#delivery_month','You must provide a valid delivery date.');
							
			if($("#delivery_month").val() == "0"){
				$('select#delivery_month').addClass('ui-state-error');

			}
			if( $("#delivery_day").val() == "0"){
				$('select#delivery_day').addClass('ui-state-error');
			}
			if($("#delivery_year").val() == "0"){
				$('select#delivery_year').addClass('ui-state-error');
			}
			
		}
		
		if($("#delivery_name").val() == ""){
			this.handleError('#delivery_name','You must provide a delivery name.');
			$('#delivery_name').addClass('ui-state-error');
		}
		
		if($("#delivery_address1").val() == ""){
			this.handleError('#delivery_address1','You must provide a delivery address.');
			$('#delivery_address1').addClass('ui-state-error');
		}
		
		if($("#delivery_city").val() == ""){
			this.handleError('#delivery_city','You must provide a delivery city.');
			$('#delivery_city').addClass('ui-state-error');
		}
		
		var delivery_state	=	$("#delivery_state").val().trim();

		if(delivery_state != "CA"){
			this.handleError('#delivery_state','Sorry we only deliver to the Sacramento, California area.');
			$('#delivery_state').addClass('error');
		}
		
		if($("#delivery_zip").val() == ""){
			this.handleError('#delivery_zip','You must provide a delivery zip code');
			$('#delivery_zip').addClass('ui-state-error');
		}
		
		if($("#delivery_phone").val() == ""){
			this.handleError('#delivery_phone','You must provide a delivery phone number.');
			$('#delivery_phone').addClass('ui-state-error');
		}
		
		if(this.settings.has_error_msg == false){
			this.processDelivery();
		}		
	},
	
	processDelivery: function(){
		$.ajax({
			type:"GET",
			url: boj.settings.url,
			data: ({cmd: 'reserve.delivery',
					delivery_month: $("#delivery_month").val(),
					delivery_day: $("#delivery_day").val(),
					delivery_year: $("#delivery_year").val(),
					delivery_name: $("#delivery_name").val(),
					delivery_address1: $("#delivery_address1").val(),
					delivery_city: $("#delivery_city").val(),
					delivery_state: $("#delivery_state").val(),
					delivery_zip: $("#delivery_zip").val(),
					delivery_phone: $("#delivery_phone").val(),
					delivery_email: $("#delivery_email").val(),
					special_instructions: $("#special_instructions").val()}),
			success: function(html){
				$(boj.settings.formContainer).html(html);
			}
		});

	},
	
	showDelivery: function(){
		this.navigateModal('reserve.showDelivery');
	},
	
	handleGender: function(){
		this.clearErrors();
		
		var genderVal = $('#gender :selected').val();
		var genderText = $('#gender :selected').text();
		
				
		if(genderText == 'Please Select'){	
			this.handleError('#gender','Please tell us what gender the baby is so that we can choose the correct colored bundle.');
			$('select#gender').addClass('ui-state-error');
		}
		
		if(this.settings.has_error_msg == false){
			this.processGender();
		}
	},
	
	processGender: function(){
		$.ajax({
			type:"GET",
			url: boj.settings.url,
			data: ({cmd: 'reserve.gender',
					gender: $('#gender :selected').val()}),
			success: function(html){
				$(boj.settings.formContainer).html(html);
			}
		});
	},
	
	showGender: function(){
		this.navigateModal('reserve.showGender');
	},
	
	handleDisplayMultipleBabyFields: function(gender){
		if(gender == 'boy-boy' || gender == 'boy-girl' || gender == 'girl-girl'){
			this.showSecondBabyInfo();
		}
		
		if(gender == 'boy-boy-boy' || gender == 'boy-boy-girl' || gender == 'boy-girl-girl' || gender == 'girl-girl-girl'){
			this.showSecondBabyInfo();
			this.showThirdBabyInfo();
		}
	},
	
	showSecondBabyInfo: function(){
		$('#sbfn').show();
		$('#sbmn').show();
		$('#sbwl').show();
		$('#sbwo').show();
		$('#sbl').show();
	},
	
	showThirdBabyInfo: function(){
		$('#tbfn').show();
		$('#tbmn').show();
		$('#tbwl').show();
		$('#tbwo').show();
		$('#tbl').show();
	},
	
	handleBaby: function(){
		this.clearErrors();
	
		if($('#baby_first_name').val() == ""){
			this.settings.error_msg += "Please tell us the baby's first name.<BR>";
			$('#baby_first_name').addClass("error");
		}
		
		if($('#sbfn').is(':visible')){
			if($('#second_baby_first_name').val() == ""){
				this.settings.error_msg += "Please tell us the second baby's first name.<BR>";
				$('#second_baby_first_name').addClass("error");
			}
		}
				
		if($('#tbfn').is(':visible')){
			if($('#third_baby_first_name').val() == ""){
				this.settings.error_msg += "Please tell us the third baby's first name.<BR>";
				$('#third_baby_first_name').addClass("error");
			}
		}
		
		
		if($('#baby_last_name').val() == ""){
			this.settings.error_msg += "Please tell us the baby's last name.<BR>";
			$('#baby_last_name').addClass("error");
		}
		
		
		if($("#baby_birth_month").val() == "0" || $("#baby_birth_day").val() == "0" || $("#baby_birth_year").val() == "0"){		
			
			this.settings.error_msg += "Please tell us the baby's date of birth.<BR>";

			if($("#baby_birth_month").val() == "0"){
				$('select#baby_birth_month').addClass('error');
			}
			if( $("#baby_birth_day").val() == "0"){
				$('select#baby_birth_day').addClass('error');
			}
			if($("#baby_birth_year").val() == "0"){
				$('select#baby_birth_year').addClass('error');
			}
			
		}
		
		if($('#baby_weight_lbs').val() == ""){
			this.settings.error_msg += "Please tell us the baby's birth weight in pounds.<BR>";
			$('#baby_weight_lbs').addClass("error");
		}
		
		
		if($('#sbwl').is(':visible')){
			if($('#second_baby_weight_lbs').val() == ""){
				this.settings.error_msg += "Please tell us the second baby's birth weight in pounds.<BR>";
				$('#second_baby_weight_lbs').addClass("error");
			}
		}
		
		if($('#tbwl').is(':visible')){
			if($('#third_baby_weight_lbs').val() == ""){
				this.settings.error_msg += "Please tell us the third baby's birth weight in pounds.<BR>";
				$('#third_baby_weight_lbs').addClass("error");
			}
		}
		
		if($('#baby_weight_oz').val() == ""){
			this.settings.error_msg += "Please tell us the baby's birth weight in ounces.<BR>";
			$('#baby_weight_oz').addClass("error");
		}
		
		if($('#sbwo').is(':visible')){
			if($('#second_baby_weight_oz').val() == ""){
				this.settings.error_msg += "Please tell us the second baby's birth weight in ounces.<BR>";
				$('#second_baby_weight_oz').addClass("error");
			}
		}
		
		if($('#tbwo').is(':visible')){
			if($('#third_baby_weight_oz').val() == ""){
				this.settings.error_msg += "Please tell us the third baby's birth weight in ounces.<BR>";
				$('#third_baby_weight_oz').addClass("error");
			}
		}
		
		
		if($('#baby_length').val() == ""){
			this.settings.error_msg += "Please tell us the baby's birth length in inches.<BR>";
			$('#baby_length').addClass("error");
		}
		
		if($('#sbl').is(':visible')){
			if($('#second_baby_length').val() == ""){
				this.settings.error_msg += "Please tell us the second baby's birth length in inches.<BR>";
				$('#second_baby_length').addClass("error");
			}
		}
		
		if($('#tbl').is(':visible')){
			if($('#third_baby_length').val() == ""){
				this.settings.error_msg += "Please tell us the third baby's birth length in inches.<BR>";
				$('#third_baby_length').addClass("error");
			}
		}
		
		if(this.settings.error_msg == ""){
			this.processBaby();
		}else{
			this.showError('#frm_baby #error_msg');
		}
		
	},
	
	processBaby: function(){
		$.ajax({
			type:"POST",
			url: boj.settings.url,
			data: ({cmd: 'reserve.baby',
					baby_birth_month: $("#baby_birth_month").val(),
					baby_birth_day: $("#baby_birth_day").val(),
					baby_birth_year: $("#baby_birth_year").val(),
					baby_first_name: $("#baby_first_name").val(),
					second_baby_first_name: $("#second_baby_first_name").val(),
					third_baby_first_name: $("#third_baby_first_name").val(),
					baby_middle_name: $("#baby_middle_name").val(),
					second_baby_middle_name: $("#second_baby_middle_name").val(),
					third_baby_middle_name: $("#third_baby_middle_name").val(),
					baby_last_name: $("#baby_last_name").val(),
					baby_weight_lbs: $("#baby_weight_lbs").val(),
					second_baby_weight_lbs: $("#second_baby_weight_lbs").val(),
					third_baby_weight_lbs: $("#third_baby_weight_lbs").val(),
					baby_weight_oz: $("#baby_weight_oz").val(),
					second_baby_weight_oz: $("#second_baby_weight_oz").val(),
					third_baby_weight_oz: $("#third_baby_weight_oz").val(),
					baby_length: $('#baby_length').val(),
					second_baby_length: $('#second_baby_length').val(),
					third_baby_length: $('#third_baby_length').val()
					}),
			success: function(html){
				$(boj.settings.formContainer).html(html);
			}
		});
	},
	
	showBaby: function(){
		this.navigateModal('reserve.showBaby');
	},
	
	handleFamily: function(){
		$.ajax({
			type:"POST",
			url: boj.settings.url,
			data: ({cmd: 'reserve.family',
					parent_1_name: $("#parent_1_name").val(),
					parent_2_name: $("#parent_2_name").val(),
					siblings_name: $("#siblings_name").val(),
					gift_card: $("gift_card").val()
					}),
			success: function(html){
				$(boj.settings.formContainer).html(html);
			}
		});
	},
	
	
	showFamily: function(){
		this.navigateModal('reserve.showFamily');
	},
	
	handleCustomer: function(){
		if($("#customer_name").val() == ""){
			this.settings.error_msg += 'You must provide a customer name.<BR>';
			$('#customer_name').addClass('error');
		}
		
		if($("#customer_address1").val() == ""){
			this.settings.error_msg += 'You must provide a customer address.<BR>';
			$('#customer_address1').addClass('error');
		}
		
		if($("#customer_city").val() == ""){
			this.settings.error_msg += 'You must provide a customer city.<BR>';
			$('#customer_city').addClass('error');
		}
		

		if($("#customer_state").val() == ""){
			this.settings.error_msg += 'You must provide a customer state.<BR>';
			$('#customer_state').addClass('error');
		}
		
		if($("#customer_zip").val() == ""){
			this.settings.error_msg += 'You must provide a customer zip code.<BR>';
			$('#customer_zip').addClass('error');
		}
		
		if($("#customer_phone").val() == ""){
			this.settings.error_msg += 'You must provide a customer phone number.<BR>';
			$('#customer_phone').addClass('error');
		}
		
		if($("#customer_email").val() == ""){
			this.settings.error_msg += 'You must provide a customer email address.<BR>';
			$('#customer_email').addClass('error');
		}
		
		if(this.settings.error_msg == ""){
			this.processCustomer();
		}else{
			this.showError('#frm_customer #error_msg');
		}	
	},
	
	
	processCustomer: function(){
		$.ajax({
			type:"POST",
			url: boj.settings.url,
			data: ({cmd: 'reserve.customer',
					customer_name: $("#customer_name").val(),
					customer_address1: $("#customer_address1").val(),
					customer_city: $("#customer_city").val(),
					customer_state: $("#customer_state").val(),
					customer_zip: $("#customer_zip").val(),
					customer_phone: $("#customer_phone").val(),
					customer_email: $("#customer_email").val()
				}),
			success: function(html){
				$(boj.settings.formContainer).html(html);
			}
		});

	},
	
	populateCustomerWithDelivery: function(deliveryData){
		$("#customer_name").attr('value',deliveryData.delivery_name);
		$("#customer_address1").attr('value',deliveryData.delivery_address1);
		$("#customer_city").attr('value',deliveryData.delivery_city);
		$("#customer_state").attr('value',deliveryData.delivery_state);
		$("#customer_zip").attr('value',deliveryData.delivery_zip);
		$("#customer_phone").attr('value',deliveryData.delivery_phone);
	},
	
	showCustomer: function(){
		this.navigateModal('reserve.showCustomer');
	},
	
	navigateModal: function(frm_data){
		$.ajax({
			type:"GET",
			url: boj.settings.url,
			data: ({cmd: ''+frm_data+''}),
			success: function(html){
				$(boj.settings.formContainer).html(html);
			}
		});
	},
	
	setBreadCrumbLevel: function(el){
		$(el).addClass("current_step");
	},
	
	unsetBreadCrumbLevel: function(el){
		$(el).removeClass("current_step");
	},
	
	handleOrderForm: function(){
		$.ajax({
			type:"GET",
			url: boj.settings.url,
			data: ({cmd: 'reserve.begin',packaging: $("input[name='rental_package']:checked").val()}),
			success: function(html){
				$("body").append(html);
			}
		});

		modalControl.openModal(this.settings.modalContainer);
	},
	
	handleCancelOrder:function(){
		modalControl.closeModal(this.settings.modalContainer);
	},
	
	handleError:function(el, msg){
		this.settings.has_error_msg = true;
		$(el).parent().append('<div class="error_msg ui-corner-all"><span class="ui-icon ui-icon-alert">Alert:</span><span>'+ msg +'</span></div>');
	},
	
	handleErrorModal: function(pContainer){
		$(pContainer).hide();
		$(pContainer).append('<div class="ui-widget"><div class="ui-state-error ui-corner-all"><p><span class=".ui-state-error .ui-icon">Alert:</span><span class="ui-state-error-text">An Error has been encountered!</span></p>'+ this.settings.error_msg +'</div></div>');
		$(pContainer).fadeIn();
	},
	
	showError:function(el){
		$(el).html("");
		$(el).append("<h5>Sorry but we encountered an error while processing your request.</h5>");
		$(el).append(this.settings.error_msg);
		$(el).show();
	}

	
};

var modalControl = {
	
	openOverlay: function(){
		var overlayHeight	=	$(document).height();
		var overlayWidth	=	$(window).width();

		
		$('body').append('<div id="modal-overlay"></div>')
		$('#modal-overlay').css({'display': 'none'});
		
		$('#modal-overlay').css({'width':overlayWidth, 'height':overlayHeight});
		$('#modal-overlay').fadeIn("fast");
		$('#modal-overlay').fadeTo("fast",0.8);
	},
	
	
	closeOverlay: function(el){
		$(el).fadeOut(1000);
	},
	
	
	openModal: function (el) {				
		this.openOverlay();
		$(el).css({'display':'none'});
		$(el).fadeIn("slow");
		
	},
	
	closeModal:function(el){
		$(el).fadeOut("slow");
		$('#modal-overlay').hide();
		$(el).remove();
	},
	
	animateModal: function(w,h,el){
		alert(w + ' ' + h + ' ' + el);
		$(el).animate({height:h+'px',width:w+'px'});
	}	
};

$(function(){
	
	boj.init();
});
