/*
	functions.quickquote.js
	DOM Interactivity Functions for Quick Quote
	Created: 2.12.08
	Creator: Matt Kircher, Mainline Media LLC
*/

function setupQuickQuoteForm(){
	
	$('#startQuickQuote')
	.css({ margin:'10px 0px' })
	.bind('click', function(){
		$('#preamble p:lt(3), #startQuickQuote').slideUp(500, function(){
			if(BrowserDetect.browser != "Explorer"){ 
				$('#qq_step1').fadeTo(100, 0, function(){ $(this).show().fadeTo(500, 1); });
			} else {
				$('#qq_step1').show();
			}
		});
		$('#required_notice').show();
	});
	$('#required_notice').hide();
	
	
	/** STEP 1 
	*********************************************************************************/
	$('#submit_step1').bind('click', function(){
		if(validateStep1()){
			//ajax: send info
			
			$('#qq_step1').hide(); $('#qq_step2').show(); setupHeights(); //next step
		}
	});
	$('#reset_step1').bind('click', function(){ resetStep(1); });
	
	//combine phone fields into 1 value;
	$('#contact_phone1, #contact_phone2, #contact_phone3, #contact_phone_ext')
	.numeric()
	.bind('keyup', function(){
		var number = "("+$('#contact_phone1').val()+") "+$('#contact_phone2').val()+"-"+$('#contact_phone3').val()+' x'+$('#contact_phone_ext').val();
		$('#BidRequestContactNumber').attr('value', number);
	});
	
	/** STEP 2 
	*********************************************************************************/
	$('#goback_step2').bind('click', function(){ $('#qq_step2').hide(); $('#qq_step1').show(); setupHeights(); });
	$('#submit_step2').bind('click', function(){
		if(validateStep2()){
			//ajax: send info
			
			$('#qq_step2').hide(); $('#qq_step3').show(); setupHeights(); //next step
		}
	});
	$('#reset_step2').bind('click', function(){ resetStep(2); });
	
	$('#BidRequestSampleProvided_1').bind('click', function(){
		if($(this).is(':checked')){
			if(BrowserDetect.browser != "Explorer"){ $('#client-sample-options').slideDown(500, function(){ setupHeights(); });
			} else { $('#client-sample-options').show(); setupHeights(); }
		}
			
	});
	$('#BidRequestSampleProvided_2, #BidRequestSampleProvided_3').bind('click', function(){
		if($(this).is(':checked')){
			if(BrowserDetect.browser != "Explorer"){ $('#client-sample-options').slideUp(500, function(){ setupHeights(); }); } 
			else { $('#client-sample-options').hide(); setupHeights(); }
		}
	});
	
	/** STEP 3 
	*********************************************************************************/
	$('#goback_step3').bind('click', function(){ $('#qq_step3').hide(); $('#qq_step2').show(); setupHeights(); });
	$('#submit_step3').bind('click', function(){
		if(validateStep3()){
			//ajax: send info
			
			$('#qq_step3').hide(); $('#qq_step4').show(); setupHeights(); //next step
		}
	});
	$('#reset_step3').bind('click', function(){ resetStep(3); });
	
	$('#qq_step3 colgroup:eq(0), #qq_step3 colgroup:eq(2)').addClass('highlight');
	$('#qq_step3 th:eq(3)').css({ paddingRight:'10px', paddingLeft:'10px' });
	
	$('#qq_step3 tbody input[@disabled="disabled"]').addClass('disabled');
	
	//quotas
	$('#qq_step3 tbody tr').find('td:eq(2) input[@type="text"]').each(function(){
		$(this)
		.numeric()
		.bind('keyup', function(){
			updateQuotaTotal();			   
		})
	});
	
	//incident samples
	$('#qq_step3 tbody tr').find('td:eq(3) input[@type="text"]').numeric();
	$('#qq_step3 tbody tr').find('td:eq(3) input[@type="checkbox"]').each(function(){
		$(this)
		.bind('click', function(){
			if($(this).is(':checked')){
				$(this).parent().find('input[@type="text"]').attr('disabled', 'disabled').addClass('disabled');
			} else {
				$(this).parent().find('input[@type="text"]').removeAttr('disabled').removeClass('disabled');
			}
		});										   
	});
	
	//pre-test reqs
	$('#qq_step3 tbody tr').find('td:eq(5) input[@type="text"]').numeric();
	$('#qq_step3 tbody tr').find('td:eq(4) input[@type="checkbox"]').each(function(){
		$(this)
		.bind('click', function(){
			if($(this).is(':checked')){
				$(this).parent().parent().find('td:eq(5) input[@type="text"]').removeAttr('disabled').removeClass('disabled');
			} else {
				$(this).parent().parent().find('td:eq(5) input[@type="text"]').attr('disabled', 'disabled').addClass('disabled');
			}
		});
	});

	/** STEP 4 
	*********************************************************************************/
	$('#goback_step4').bind('click', function(){ $('#qq_step4').hide(); $('#qq_step3').show(); setupHeights(); });
	$('#submit_step4').bind('click', function(){
		if(validateStep4()){
			//ajax: send info
			$('#qq_step4').parent().submit();
		}
	});
	$('#reset_step4').bind('click', function(){ resetStep(4); });
	
	//coding
	$('#BidRequestOpenEndCoding_1').bind('click', function(){
		if($(this).is(':checked')){
			if(BrowserDetect.browser != "Explorer"){ $('#openend-coding-options').slideDown(500, function(){ setupHeights(); }); } 
			else { $('#openend-coding-options').show(); setupHeights(); }
		}
			
	});
	$('#BidRequestOpenEndCoding_2').bind('click', function(){
		if($(this).is(':checked')){
			if(BrowserDetect.browser != "Explorer"){ $('#openend-coding-options').slideUp(500, function(){ setupHeights(); }); } 
			else { $('#openend-coding-options').hide(); setupHeights(); }
		}
	});
	$('#BidRequestOpenEndNumberToCode, #BidRequestOpenEndOthersToCode, #BidRequestRequestedTurnaroundNumber').numeric();
	
	//timeline
	$('#BidRequestTimelineNotSure').bind('click', function(){
		if($(this).is(':checked')){
			$('#BidRequestTimelineStartMonth, #BidRequestTimelineStartYear').attr('disabled', true);
		} else {
			$('#BidRequestTimelineStartMonth, #BidRequestTimelineStartYear').removeAttr('disabled');
		}
	});
}

function updateQuotaTotal(){
	var total = 0;
	$('#qq_step3 tbody tr').find('td:eq(2) input[@type="text"]').each(function(){
		total += Number($(this).val());
	});
	$('#BidRequestQuota').attr('value', total);
}

/** RESET 
***************************************************************************/
function resetStep(step_num){
	
	if(confirm("Are you sure you want to reset step "+step_num+"?")){
		
		//remove classes, go through and check for non-values
		$('#qq_step'+step_num+' .required').removeClass('required_attention');
		$('#qq_step'+step_num+' .select_required_attention').remove();
		
		$('#qq_step'+step_num)
		.find('input[@type="text"]').each(function(){ $(this).val(''); }).end()
		.find('input[@type="checkbox"], input[@type="radio"]').each(function(){ if($(this).is(':checked')){ $(this).attr('checked', false); } }).end()
		.find('select').each(function(){ $(this)[0].options[0].selected = true; }).end()
		.find('textarea').each(function(){ $(this).val(''); });
		
		//reset dynamic elements
		if(step_num == 2){ $('#qq_step2 #client-sample-options').hide(); setupHeights(); }
		if(step_num == 3){
			$('#qq_step3 table tbody tr').find('td:eq(3) input[@type="text"]').each(function(){ $(this).removeAttr('disabled').removeClass('disabled'); });
			$('#qq_step3 table tbody tr').find('td:eq(5) input[@type="text"]').each(function(){ $(this).attr('disabled', true).addClass('disabled'); });
		}
		if(step_num == 4){
			$('#qq_step4 #openend-coding-options').hide(); setupHeights();
			$('#qq_step4 #BidRequestTimelineStartMonth, #qq_step4 #BidRequestTimelineStartYear').removeAttr('disabled');
		}
	}
}

/** VALIDATION 
***************************************************************************/
function validateStep1(){
	
	//setup validate object
	var valid = { status:true, response:'', element:null };
	
	//remove classes, go through and check for non-values
	$('#qq_step1 .required').removeClass('required_attention');
	$('#qq_step1 .select_required_attention').remove();
	$('#qq_step1 .required').each(function(){
		if(($(this).val() == "" || $(this).val() == null)){
			$(this).addClass('required_attention');
			valid.status = false;
			valid.response = 'One or more required fields has not been completed. Please complete them and resubmit the form.';
			if(valid.element == null){ valid.element = $(this); }
			
			if($(this).get(0).nodeName == "SELECT"){
				$(this).after('<span class="select_required_attention">&lsaquo;&mdash;</span>');
			}
		}
	});
	
	if(valid.status){
		
		var email 	   = $('#qq_step1 #BidRequestContactEmail');
		var email_verify = $('#qq_step1 #BidRequestContactEmailVerify');
		
		var phone1 = $('#qq_step1 #contact_phone1');
		var phone2 = $('#qq_step1 #contact_phone2');
		var phone3 = $('#qq_step1 #contact_phone3');
		
		//if email is not of the form 'name@email.com', don't validate
		if(!validateEmail(email.val())){
			email.addClass('required_attention');
			valid.status = false;
			valid.response = 'Please supply a valid email address.';	
			valid.element = email;
		}
		//if email is not verified, don't validate
		else if(!validateEmail(email_verify.val()) ||
			 email_verify.val() != email.val()){
			
			email_verify.addClass('required_attention');
			valid.status = false;
			valid.response = 'Your email address and verified email address do not match.';	
			valid.element = email_verify;
		}
		//if phone is not of the form 'xxx xxx xxxx', don't validate
		else if(
			  phone1.val().length < Number(phone1.attr('maxlength')) ||
			  phone2.val().length < Number(phone2.attr('maxlength')) ||
			  phone3.val().length < Number(phone3.attr('maxlength'))){
			
			phone1.addClass('required_attention');
			phone2.addClass('required_attention');
			phone3.addClass('required_attention');
			
			valid.status = false;
			valid.response = 'Please supply a valid phone number.';	
			valid.element = phone1;
		}
	}
	
	//display alert, focus on first non-valued field
	if(!valid.status){ alert(valid.response); $(valid.element).focus(); }
	return valid.status;
	
}
function validateStep2(){
	
	//setup validate object
	var valid = { status:true, response:'', element:null };
	
	//study method
	if(!$('#BidRequestMethodOfStudy_1').is(':checked') &&
	   !$('#BidRequestMethodOfStudy_2').is(':checked') && 
	   !$('#BidRequestMethodOfStudy_3').is(':checked')){
		valid.status = false;
		valid.response = 'Please select a method of study.';
	}
	//length
	else if($('#BidRequestQuestionnaireLength').val() == ""){
		valid.status = false;
		valid.response = 'Please select a questionnaire length.';
	}
	//client samples
	else if(!$('#BidRequestSampleProvided_1').is(':checked') &&
	   !$('#BidRequestSampleProvided_2').is(':checked') && 
	   !$('#BidRequestSampleProvided_3').is(':checked')){
		valid.status = false;
		valid.response = 'Please select if a client sample will be provided.';
	}
	else if($('#BidRequestSampleProvided_1').is(':checked')){
		
		//if yes, they must select restricted or not
		if(!$('#BidRequestRestrictedToSample_1').is(':checked') &&
		   !$('#BidRequestRestrictedToSample_2').is(':checked') && 
		   !$('#BidRequestRestrictedToSample_3').is(':checked')){
			valid.status = false;
			valid.response = 'Please select if the project will be restricted to recruiting from the client sample.';
		}
	}
	
	//display alert, focus on first non-valued field
	if(!valid.status){ alert(valid.response); }
	return valid.status;
}
function validateStep3(){
	
	//setup validate object
	var valid = { status:true, response:'', hash:null };
	
	$('#qq_step3 tbody tr').each(function(){
		var segment		= Number($(this).find('td:eq(0) label').text());
		var specialty 	= $(this).find('td:eq(1) input[@type="text"]');
		var quota 		= $(this).find('td:eq(2) input[@type="text"]');
		var incidents_num 	= $(this).find('td:eq(3) input[@type="text"]');
		var incidents_check	= $(this).find('td:eq(3) input[@type="checkbox"]');
		var pretest_check   	= $(this).find('td:eq(4) input[@type="checkbox"]');
		var pretest_num 	= $(this).find('td:eq(5) input[@type="text"]');
		
		//if this is the 1st segment, or
		//if this is a partially filled out other segment
		if(segment == 1 || (segment > 1 && 
		    	($.trim(specialty.val()) != "" ||
			 $.trim(quota.val()) != "" || 
			 $.trim(incidents_num.val()) != "" || 
			 pretest_check.is(':checked'))
		  )){
			
			if(segment == 1 && $.trim(specialty.val()) == "" && $.trim(quota.val()) == ""){
				
				valid.response = 'Please complete segment #'+segment+' before continuing.';
				valid.status = false; alert(valid.response); return valid.status;
				
			} else if(($.trim(specialty.val()) == "" && $.trim(quota.val()) != "") || 
			   ($.trim(specialty.val()) != "" && $.trim(quota.val()) == "")){
				
				valid.response = 'Please complete segment #'+segment+' before continuing.';
				valid.status = false; alert(valid.response); return valid.status;
				
			} else if(!incidents_check.is(':checked') && $.trim(incidents_num.val()) == ""){
				
				valid.response = 'Please specify the estimated incidents you expect for segement #'+segment+'.';
				valid.status = false; alert(valid.response); return valid.status;
				
			} else if(pretest_check.is(':checked') && $.trim(pretest_num.val()) == ""){
				
				valid.response = 'Please specify the number of pre-tests required for segement #'+segment+'.';
				valid.status = false; alert(valid.response); return valid.status;
				
			} else if(pretest_check.is(':checked') && Number($.trim(pretest_num.val())) < 1){
				
				valid.response = 'Please specify a larger number of pre-tests for segement #'+segment+' if pre-tests are to be required.';
				valid.status = false; alert(valid.response); return valid.status;
				
			}
		}
	});
	
	return valid.status;
}
function validateStep4(){
	
	//setup validate object
	var valid = { status:true, response:'', element:null };
	
	//deliverables
	if(!$('#BidRequestDeliverableAscii').is(':checked') &&
	   !$('#BidRequestDeliverableSpss').is(':checked') && 
	   !$('#BidRequestDeliverableOpenEnd').is(':checked') && 
	   !$('BidRequestDeliverableTabels').is(':checked')){
		valid.status = false;
		valid.response = 'Please select at least one (1) deliverable type.';
	}
	
	//coding
	else if(!$('#BidRequestOpenEndCoding_1').is(':checked') &&
	   	 !$('#BidRequestOpenEndCoding_2').is(':checked')){
		valid.status = false;
		valid.response = 'Please specify if you will need open-ended coding.';
	}
	else if($('#BidRequestOpenEndCoding_1').is(':checked') &&
		($.trim($('#BidRequestOpenEndNumberToCode').val()) == "" || 
		$.trim($('#BidRequestOpenEndOthersToCode').val()) == "")){
		
		//if yes, they must select restricted or not
		if($.trim($('#BidRequestOpenEndNumberToCode').val()) == ""){
			valid.status = false;
			valid.response = 'Please specify the number of open-ends to code.';
			
		} else if($.trim($('#BidRequestOpenEndOthersToCode').val()) == ""){
			valid.status = false;
			valid.response = 'Please specify the number of other specifics to codes.';
		}
		
	}
	//timeline
	else if(($('#BidRequestTimelineStartMonth').val() == "" ||
		   $('#BidRequestTimelineStartYear').val() == "") && 
		   !$('#BidRequestTimelineNotSure').is(':checked')){
		valid.status = false;
		valid.response = 'Please specify an approximate starting time for fielding.';
		
	} else if($('#BidRequestRequestedTurnaroundInterval option:selected').val() == "" ||
		   $.trim($('#BidRequestRequestedTurnaroundNumber').val()) == ""){
		valid.status = false;
		valid.response = 'Please specify your requested turnaround time.';
	}
	
	//display alert, focus on first non-valued field
	if(!valid.status){ alert(valid.response); }
	return valid.status;
}

/** SUBMISSION
***************************************************************************/

//DOM loaded
$(document).ready(function(){
	setupQuickQuoteForm();
});