var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;

var FormStartsExpanded = false;
var ShowCarFields = true;
var ShowNameFields = true;
var ShowMoreContactFields = true;
var overrideFormExpand = false;
var ShowConfirmEmail = true;

// On document ready:
$(document).ready(function () {

	// Initial State = expanded or contracted?
	if ($('#app_form_starts_expanded').val() == 1 || overrideFormExpand == true) {
		FormStartsExpanded = true;
		set_expanded_state('fast');
		$('.for_extended').each(function(){
			$(this).removeClass('for_extended');
		});
	}
	
	// Full Name fields vs FName + LName fields:
	if ($('#app_form_use_full_name').val() == 1) {
		if (ShowNameFields == true) { $('#full_name_li').show(); }
		$('#app_form_fname, #app_form_lname').each(function(){$(this).addClass('ignore')});
		$('#split_name_li').hide();
		$('#flag_using_fullname').val('1');
	} else {
		$('#full_name_li').hide();
		$('#app_form_full_name').addClass('ignore');
		if (ShowNameFields == true) { $('#split_name_li').show(); }
		$('#flag_using_fullname').val('0');
	}
	
	
	// Horizontal vs Vertical Form
	if ($('#app_form_is_horizontal').val() == 1) {
		$('#heading_getstarted').hide();
		$('#some_more_contact_info').hide();
		$('#tell_us_about_your_car').hide();
		
		// Reformat layout
		var personal_fields = $('#personal_fields_ul').detach();
		personal_fields.appendTo('#horiz_form_table_left_td');
		
		var car_fields = $('#car_fields_ul').detach();
		car_fields.appendTo('#horiz_form_table_right_td');
		
		var amount_requested_li = $('#amount_requested_li').detach();
		amount_requested_li.appendTo('#personal_fields_ul');
		
		var form_terms = $('#form_terms').detach();
		form_terms.appendTo('#horiz_form_table_bottom_td');		
		$('#form_terms br').detach();
		
		var second_button = $('#second_button').detach();
		second_button.appendTo('#horiz_form_table_bottom_td');
		$('#second_button').html('Apply');
		$('#go_button_text').html('Apply');

		$('#app_form_promo_code_li').remove();
		$('#app_form_fieldset').remove();
		$('#table_for_horizontal_form').show();
	
	} else {
		$('#heading_getstarted').show();
		if (ShowMoreContactFields == true) { $('#some_more_contact_info').show(); }
		if (ShowCarFields == true) { $('#tell_us_about_your_car').show(); }
	
	}



	// Fun with inputs
	$('#app_form input').live('focus', function() {
		if ( $(this).val() == $(this).attr('title')) {
			 $(this).val('');
			}
	});
	$('#app_form input').live('blur', function() {
		if ( $(this).val() == '') {
			$(this).val($(this).attr('title'));
			$(this).css('fontWeight','normal');
			$(this).css('color','');
		} else {
			$(this).css('fontWeight','bold');
			$(this).css('color',AppInputDefaultColor);
			$(this).removeClass('error')
		}
	});
	$('select').live('change', function() {
		if ($(this).val() != '') {
			$(this).removeClass('error');
		}
	});
	$('.for_extended').live('change', function() {
		$(this).removeClass('for_extended');
	});
	
	
	
	// Make sure things that were hidden are visible,
	// in case the user clicked the back button:
	$('#start_button').show();
	$('#form_terms').show();

	
	// Disable normal form submit:
	$('#app_form').live('submit', firstStepProcess);
	
	// On 'Click' Submit:
	$('#start_button').live('click', firstStepProcess);

	// Second button process
	$('#second_button').live('click',secondStepProcess);

});


function set_expanded_state(speed) {
	
	$('div.blog').hide();
	$('div.categories').hide();
	$('#start_button').hide();
	$('#go_button_text').html('Apply');
	$('#second_button').show();		
	$('#app_form_extension').show(speed);
	$('.show_in_extended').show();
	if (ShowCarFields == true) {
		fillSelect('app_form_car_year');
		}
	$('#app_form').die('submit');
	$('#app_form').live('submit', secondStepProcess);
}


/* --------------------------------*/ 
/* --------- Check Form 1 ---------*/ 
/* --------------------------------*/ 
function firstStepProcess() {

	typvr120='off';
	do_leavebehind = "N";
	
	$('#app_form input').each(function() { $(this).removeClass('error') });
	
	var errors = [];
	
	$('#app_form input:text').not('.for_extended, .optional, .ignore').each(function(){
		if ( ($(this).val() == '') || ($(this).val() == $(this).attr('title')) ) {
			$(this).addClass('error');
			errors[errors.length] = "* Missing " + $(this).attr('title');
		}
	});

	if ( ($('#app_form_email').val() != '') && ($('#app_form_email').val() != $('#app_form_email').attr('title')) ) {
		if (! emailRegEx.test( $('#app_form_email').val() ) ) {
			$('#app_form_email').addClass('error');
			errors[errors.length] = "* Invalid email address";	
		}
	}
	
	if ($('#app_form_state').val() == '') {
		$('#app_form_state').addClass('error');
		errors[errors.length] = "* Missing State";	
	}

	if ( ($('#app_form_zip').val() != '')  && ($('#app_form_zip').val() != $('#app_form_zip').attr('title')) && (! /^\d{5}$/.test($('#app_form_zip').val())) ) {
		$('#app_form_zip').addClass('error');
		errors[errors.length] = "* Zipcode format must be 5 digits";
	}
	
// 	if (! $('#app_form_agree_terms').is(':checked')) {
// 		$('#app_form_agree_terms').addClass('error');
// 		errors[errors.length] = "* You must Agree to the Terms and Conditions";
// 		$('#app_form_agree_terms').focus();
// 	}

	if (errors.length > 0) {
		alert ("Please correct the following errors:\n\n" + errors.join("\n") + "\n");
		return false;
	}

	/* -------------------*/ 
	/* -- PreFlight Check --*/
	/* -------------------*/ 
	var url = DocStudioFormActionPath + 'application_ajax';
	var data = 'a=process_form&zip=' + $('#app_form_zip').val() + '&email=' + $('#app_form_email').val() + '&entry_page=' + $('#entry_page').val() + '&flag_using_fullname=' + $('#flag_using_fullname').val();
		data += '&app_form_state=' + capture_form_state();
	
	$('#loading_1').show();
	$('#start_button').hide();
	$('#form_terms').hide();
	
	$.get(url, data, function(preflight) {
		var count = new Array();
		count = preflight.split(',');
		if (count[1] != '') { $("#app_form_state").attr('selectedIndex', count[1]); } // adjust the state selection if it didn't match the zip
		if (count[0] == 'OK') {
		
			$('#loading_1').hide();
			$('#form_terms').hide();
			set_expanded_state('slow');

		} else {
			// denied app
			$('#reason_code').val(count[0]);
			$('#a_code').val('qualify_results');
			// Release the callback to this function, else it creates a loop.
			$('#app_form').die('submit');
			$('#app_form').submit();

//			$('#not_qualify1').html('<p>Thank you for your application.<br>Unfortunately we currently do not provide loans in your area, but will be soon!<br><br>To obtain immediate cash in your area please visit<a href="http://www.topfinancepicks.com" target="_blank"> www.topfinancepicks.com<\/a>.<\/p>');
// 			$('#not_qualify1').html(count);
// 			$('#loading_1').hide();
// 			$('#not_qualify1').slideDown();
// 			$('#form_terms').show();
// 			$('#start_button').show();
		}
	});

	return false
}


function capture_form_state(doAlert) {
	
	var Pieces = [];

	// Text Inputs:
	$('#app_form input:text').each(function() {
		if (($(this).val() != '') && ($(this).val() != $(this).attr('title'))) {
			Pieces[Pieces.length] = $(this).attr('name') +','+ $(this).val()	
		}
	});
	
	// Selects
	$('#app_form select').each(function() {
		if (($(this).val() != '')) {
			Pieces[Pieces.length] = $(this).attr('name') +','+ $(this).val()	
		}
	});

	// Checkboxes
	$('#app_form input:checkbox').each(function() {
		if ($(this).is(':checked')) {
			Pieces[Pieces.length] = $(this).attr('name') +','+ $(this).val()	
		}
	});

	//Hidden
	$.each(['O_CODE','TRANSACTION_ID','origin_name'], function(index, id) {
		if ($('#'+ id).val() != '') {
			Pieces[Pieces.length] = $('#'+id).attr('name') +','+ $('#'+id).val()	
		}
	});


	var state = Pieces.join(';');

	if (doAlert) {alert (state) }
	
	return state;
}



/* --------------------------------*/ 
/* --------- Check Form 2 ---------*/ 
/* --------------------------------*/ 

function secondStepProcess() {	

	typvr120='off';
	do_leavebehind = "N";
	
	$('#app_form_extension input').each(function() { $(this).removeClass('error') });
	
	var errors = [];
	
	$('#app_form input:text').not('.optional, .ignore').each(function(){
		if ( ($(this).val() == '') || ($(this).val() == $(this).attr('title')) ) {
			$(this).addClass('error');
			errors[errors.length] = "* Missing " + $(this).attr('title');
		}
	});

	if ( ($('#app_form_email').val() != '') && ($('#app_form_email').val() != $('#app_form_email').attr('title')) ) {
		if (! emailRegEx.test( $('#app_form_email').val() ) ) {
				$('#app_form_email').addClass('error');
				errors[errors.length] = "* Invalid email address";	
			}
			else {
				if ($('#app_form_email').val() != $('#app_form_confirm_email_address').val() && $('#app_form_omit_extra_contact_fields').val() != 1 && ShowConfirmEmail == true) {
					$('#app_form_confirm_email_address').addClass('error');
					errors[errors.length] = "* Email and Retype Email fields do not match";
					}
			}
		}

	if ($('#app_form_state').val() == '') {
		$('#app_form_state').addClass('error');
		errors[errors.length] = "* Missing State";	
	}

	if ( ($('#app_form_zip').val() != '')  && ($('#app_form_zip').val() != $('#app_form_zip').attr('title')) && (! /^\d{5}$/.test($('#app_form_zip').val())) ) {
		$('#app_form_zip').addClass('error');
		errors[errors.length] = "* Zipcode format must be 5 digits";
	}
	
	if ($('#app_form_best_time_call').val() == '') {
		$('#app_form_best_time_call').addClass('error');
		errors[errors.length] = "* Missing Best time to call";	
	}
	
	if (ShowCarFields == true) {
		$.each(['year','make','model','trim','style','mileage'], function(index, id) { 
			if ($('#app_form_car_'+id).val() == '') {
				$('#app_form_car_'+id).addClass('error');
				errors[errors.length] = "* Missing Car " + $('#app_form_car_'+id).attr('name').toUpperCase();
			}
		});
	}

	if ($('#app_form_amount_requested').val() == '') {
		$('#app_form_amount_requested').addClass('error');
		errors[errors.length] = "* Missing Amount requested";	
	}

	if ($('#app_form_still_owe').val() == '') {
		if (! $('#vehiclepaidoff').is(':checked')) {
			$('#app_form_still_owe').addClass('error');
			errors[errors.length] = "* Missing Amount still owed (which can be $0)";
			}
	}

// 	if ($('#app_form_hear_about_us').val() == '') {
// 		$('#app_form_hear_about_us').addClass('error');
// 		errors[errors.length] = "* Please tell us how you heard about us";	
// 	}

// 	if (! $('#app_form_agree_terms').is(':checked')) {
// 		$('#app_form_agree_terms').addClass('error');
// 		errors[errors.length] = "* You must Agree to the Terms and Conditions";
// 		$('#app_form_agree_terms').focus();
// 	}

	if (errors.length > 0) {
		alert ("Please correct the following errors:\n\n" + errors.join("\n") + "\n");
		return false;
	}

	
	$('#loading_1').show();
	$('#second_button').hide();

	// Set value of sales_force_lead_source
	$('#sales_force_lead_source').val($('option:selected', '#app_form_hear_about_us').html());

	// Get the forms state:	
	var finalState = capture_form_state();
	
	$('#app_form_current_state').val(finalState);
	
	// Release the callback to this function, else it creates a loop.
	$('#app_form').die('submit');
	
	$('#app_form').submit();
}



/* ----------------------------------------*/ 
/* -- Populate Selects / Query Blackbook --*/ 
/* ----------------------------------------*/ 

var QueryVars = {'sCountryCode':'U'};

function fillSelect(target_id, pass_key, pass_value) {
	
	$('#'+target_id+'_li').empty().html('<img src="'+DocStudioImagePath+'loading.gif">');
	
	if (pass_value) {
		QueryVars[pass_key] = pass_value;
	}

	var actionMap = {
		'app_form_car_year':'get_car_year_select',
		'app_form_car_make':'get_car_make_select',
		'app_form_car_model':'get_car_model_select',
		'app_form_car_trim':'get_car_trim_select',
		'app_form_car_style':'get_car_style_select'
	};
	
	var url = DocStudioFormActionPath + 'application_ajax';
	var data = 'a=' + actionMap[target_id] + '&args=' + encode_args();

	$.ajax({
		url:url,
		data:data,
		success: function(return_data){
			var resultarray = new Array();
			resultarray = return_data.split(";");
			if (resultarray[0] == 'NOTAPPLICABLE') {
				$('#'+target_id+'_li').empty().html(resultarray[1]);
				if (resultarray[2] == 'app_form_car_mileage') {
					document.getElementById('app_form_car_mileage').focus();
					} else {
					fillSelect(resultarray[2], resultarray[3], 'notapplicable'); // 'next id',the pass key for the current select, value of hidden n/a select
					$("#" + resultarray[2]).hide();
					}
				} else {
				$('#'+target_id+'_li').empty().html(return_data);
				$('#'+target_id).attr('disabled', false);
				if ( ! (FormStartsExpanded == true && target_id == 'app_form_car_year') ) { $('#'+target_id).focus() }
				}
		},
		error:function(errstring){
// 			$('#error_console').text(errstring);
// 			$('#error_console').show();
// 			$('#'+target_id+'_li').empty();
// 			$('#app_form_extension').slideUp('slow');
// 			$('#second_button').hide();
			// blackbook has crapped out so just default everything
			$('#app_form_car_year').hide();
			$('#app_form_car_year').empty().html("<input type='hidden' name='year' value='notapplicable'>");			
			$('#app_form_car_make').hide();
			$('#app_form_car_make').empty().html("<input type='hidden' name='make' value='notapplicable'>");			
			$('#app_form_car_model').hide();
			$('#app_form_car_model').empty().html("<input type='hidden' name='model' value='notapplicable'>");			
			$('#app_form_car_trim').hide();
			$('#app_form_car_trim').empty().html("<input type='hidden' name='trim' value='notapplicable'>");			
			$('#app_form_car_style').hide();
			$('#app_form_car_style').empty().html("<input type='hidden' name='style' value='notapplicable'>");			
		}
	});
	
}



function encode_args() {
	var theString;
	var theParts = [];
	for (k in QueryVars) {
		theParts[theParts.length] = k + ',' + QueryVars[k];
	}
	var theStr = theParts.join(';');	
	return theStr;
}

function test() {
	$('#sales_force_lead_source').val($('option:selected', '#app_form_hear_about_us').html());
	alert ($('#sales_force_lead_source').val());
}

function set_still_owes_on_car() {

	if ($('#vehiclepaidoff').attr('checked')) {
		document.getElementById('app_form_still_owe').selectedIndex = 1; 
		$("#app_form_still_owe").hide();
		} else {
		document.getElementById('app_form_still_owe').selectedIndex = 0; 
    	$("#app_form_still_owe").show();
		}
	document.getElementById('hastitle').focus();
}

