	var review = 0;	// in review process?
	var current_step = 1; // current step
	var type_changed = 0; // checks to see if type changed
	var max_viewed_step = 1; // highest step that has been completed
	var total_steps = 7; // total steps in process
	var started = 0; // has application been started
	var waiting = 0; // lets links/buttons know you are still waiting on an ajax call so it doesn't double submit
	var caps = 0; // whether or note caps have been enforced yet
	var signup_page = 1; // ** not used
	var username_validated = false;

	function leavePageWarning() // warning for leaving page
	{
		if (started == 1)
		{
			return 'You have already started working on the signup process.\n\nIf you need to change previously entered information, use the navigation buttons provided.';
		}
	}
	
	window.onbeforeunload = leavePageWarning; // add leave page warning to page unload
	
	window.addEvent('domready',function() // window on ready funciton 
	{		
		update_links();
		
		createCaptcha();
		
		$$('.phonefield').addEvent('keyup',function() // Phone field function
		{
			var orig = this;
			var found = false;
			if (this.value.length >= this.getProperty('maxlength'))
			{
				orig.getParent().getChildren().each(function(item)
				{
					if (found)
					{
						item.focus();
						found = false;
					}
					if (item == orig)
					{
						found = true;
					}
				});		
			}
		});
		
		$$('.edit_link').addEvent('click',function() // edit link
		{
			loadStep(parseInt(this.getProperty('id').replace("step",""),10));
		});
		
		$("Username").addEvent("change", function() { username_validated = false; });
		
		$('referred').addEvent('change',function() // referred
		{
			$('referred_option').style.display = 'none';
			$('referral_option').style.display = 'none';
			$('other_option').style.display = 'none';
			$('letter_option').style.display = 'none';
			
			if (this.value == 'other')
				$('other_option').style.display = '';
			else if (this.value == 'referred')	
				$('referred_option').style.display = '';			
			else if (this.value == 'referral')	
				$('referral_option').style.display = '';			
			else if (this.value == 'letter')
				$('letter_option').style.display = '';
		});
		
		$("step1_continue").addEvent('click',function() // step 1 continue
		{
			started = 1;
			
			if ($('username_error')) {
				$('username_error').dispose(); // clear error message
			}
			
			if (validate(1)) {
				if ($('companyname_intro')) {
					$('Companyname').value = $('companyname_intro').value;
				}
				checkAlreadyStarted();
			}
			return false;
			
		});

		$("sp_continue").addEvent('click',function()	{ 		    
			spContinue(); return false;
		});
		$("step2_continue").addEvent('click', function() { gotoStep(3); return false; });
		$("step3_continue").addEvent('click',function()	{ gotoStep(4,3); return false; });
		$("step4_continue").addEvent('click',function()	{ gotoStep(5,4); return false; });
		$("step5_continue").addEvent('click',function()	{ gotoStep(6,5); return false; });
		$("step6_continue").addEvent('click',function() { gotoStep(7,6); return false; });

		$$('.app_submit').addEvent('click',function() {	
		    
		    if ($('agree_terms').checked == false) {
			    alert("You must agree to the terms of service before you can submit your application.");
			    return;
			}
			
			if ($('submission_error'))
				$('submission_error').dispose();

			if (waiting)
				return;				
				
			waiting = 1;
			var appSubmission = new Request(	
			{
				onComplete: function(res)
				{
					waiting = 0;
					if (res == '')
					{
						started = 0; // so we can skip the warning
						window.location = "/signup_complete.htm";
					}
					else
					{
						add_error("submission_error",$("step7_continue_top"),res);
						$('submission_error').setStyle('height','auto');
						$('submission_error').setStyle('width','100%');
						$('submission_error').setStyle('margin-top: 15px');
						var val = $('steps').getCoordinates()['top'];
						window.scrollTo(0,val);		
					}
				},
				url:'/ajax/signup.php'
			}).post($('_form')); 					
		});
		
		$$(".skip_post_vehicle").addEvent("click", function() {

			$("post_vehicle").value = "0";
			gotoStep(4);
		
		});
		
		// hide all optional sections
		appHideAll();
		
		
		// show ones to be used
		_optional.each( function(e) { showClass(e, 1, 0); });
		_required.each( function(e) { showClass(e, 1, 1); });
		
		// set up some FatLocation options
		//FatLocationFieldset.prototype.toRight = false;

		// After page loads and JS initializes, save global reference to the FatManager object
		//var FatManager;

		// queue autoLoad function to run with callback
		//FatLocationFieldset.prototype.autoLoad(function(manager) {
		//	FatManager = manager;					// save manager
		//});
		FatLocationFieldset.prototype.toRight = true;
		FatLocationFieldset.prototype.toRightLeftOffset = -140;
		FatLocationFieldset.prototype.toRightTopOffset = 50;
		FatLocationFieldset.prototype.autoLoad();
		
		// Hack - move suggestions div to somewhere visible
		$$(".FatSuggestions").inject($("container"));
		$$(".FatSuggestionsIefix").inject($("container"));

		/*
		initMultiBox = new multiBox({
			showControls: false,
			mbClass: '.mbLink',//class you need to add links that you want to trigger multiBox with (remember and update CSS files)
			container: $(document.body),//where to inject multiBox
			descClassName: 'multiBoxDesc',//the class name of the description divs
			path: './Files/',//path to mp3 and flv players
			useOverlay: true,//use a semi-transparent background. default: false;
			maxSize: {w:800, h:600},//max dimensions (width,height) - set to null to disable resizing
			addRollover: true,//add rollover fade to each multibox link
			addOverlayIcon: true,//adds overlay icons to images within multibox links
			addChain: true,//cycle through all images fading them out then in
			recalcTop: true,//subtract the height of controls panel from top position
			addTips: true//adds MooTools built in 'Tips' class to each element (see: http://mootools.net/docs/Plugins/Tips)
		});
		if (initMultiBox.overlay) {
			initMultiBox.overlay.options.opacity = 0.4;
		}
		*/
		
		$("referred").fireEvent("change"); // trigger for refer-a-friend

		new CdPostFormController();
		
	});
	
	// Advance first step
	function firstStepContinue() {
		
		var user_type = userType();
		var next_step = (user_type === "carrier") ? 4 : 2;
		if(user_type === "carrier") { $("post_vehicle").value = 0; }
		
		gotoStep(next_step,1);
		
	}
	
	// Update links at top of page
	function update_links() // update look of links
	{
		$$('.link_button').each(function(button) // loop over each link button
		{
			button.removeEvents(); // clear events			
			var step_num = button.getProperty('id'); // determine step by id

			var li_classes = ['on', 'complete', 'first', 'first-on'];
			var div_classes = ['loo', 'og', 'gg', 'oo', 'lolo', 'olo', 'log', 'eo', 'eg', 'elo'];

			for(var i=0; i < li_classes.length; i++) { // remove li classes
				button.removeClass(li_classes[i]);
			}

			var button_div = button.getChildren()[0];
			for(var i=0; i < div_classes.length; i++) { // remove div classes
				button_div.removeClass(div_classes[i]);
			}
			
			if(userType() === "carrier") { // do not show steps 2 and 3 for carrier-only type
				
				if(step_num === "2" || step_num === "3") {
					
					button.setStyle("display", "none");
					
				}
				
			} else {
				
				if(step_num === "2" || step_num === "3") {
					
					button.setStyle("display", "");
					
				}
				
			}

			applyButtonClass(button, button_div, step_num); // add class to button
			if (step_num > max_viewed_step)	{ return; } // do not add events

			addButtonEvent(button); // add click events to button
				
		});
	}
	
	// Sample prices continue
	function spContinue() {
		
		// Ajax captcha
		var request = new Request.JSON(
				{
					"url":"/ajax/captchaVerification.php",
					"onSuccess": function(data) {
					
						if(data.valid) { // captcha was entered correctly
							
							$("captcha_error").setStyle("display", "none");
							if(validate(2)) { // other fields valid
								copyStep2Fields();
								showSamplePrices();
							}
							
						} else { // captcha was not entered correctly
							
							$("captcha_error").setStyle("display", "");

						}
						
						// Recreate captcha - only one validation per captcha
						Recaptcha.reload('t');
							
					}
				}
		).send("response="+Recaptcha.get_response()+"&challenge="+Recaptcha.get_challenge());
			
	}

	function addButtonEvent(button) {

		button.addEvent('click',function(e) // add events
				{
					var clicked_step = parseInt(this.getProperty('id'), 10);
				    // need to validate the current step before we allow them to move on.					
					if (current_step == 1)
					{
						// annoying but necessary
						if ($('username_error'))
							$('username_error').dispose();							
						if (validate(1)) {
							if (waiting) { return; }
							
							if(username_validated) { 
								gotoStep(clicked_step, null, true); 
							} else {
								checkAlreadyStarted();
							}
							
							return;			
						} else {
							return;
						}
					} else {
					    // if they want to go back, dont worry about validating the step they're on first
                        if (current_step > clicked_step && current_step == max_viewed_step) {
                          gotoStep(clicked_step, null, true);
                        }
                        else {
						  gotoStep(clicked_step, current_step, true);
                        }
					
					}
				});	

	}

	function applyButtonClass(button, button_div, step) { // apply button class

		// apply any new ones
		if (step > max_viewed_step)	{ // not an active link yet
			
			button_div.addClass(step == total_steps ? 'eg' : 'gg');
			
		} else { // active link
			
			if (step == 1) {
				button.addClass(step == current_step ? "first-on" : "first");
			} else { // all other steps
				button.addClass(step == current_step ? "on" : "complete");
			}
			
			if (step == total_steps) { // last step
				button_div.addClass(current_step == step ? "eo" : "elo");
			} else if (step == max_viewed_step)	{
				button_div.addClass(current_step == step ? "og" : "log");
			} else {
			
				var previous_step = (current_step == 4 && userType() === "carrier") ? 1 : current_step - 1; 
				//var next = step == current_step-1 ? 'o' : 'lo';
				var next = step == previous_step ? 'o' : 'lo';
				button_div.addClass(current_step == step ? 'o'+next : 'lo'+next);
				
			}

		}

	}

	function gotoStep(step, step_check, skip_review) { // go to step and check_step (if present)
		
		if(step_check) {
			if(!check_step(step_check)) { return; }
			if(step_check == 3) { $("post_vehicle").value = 1; $("post_vehicle_review").setStyle("display", ""); } // if we check step 3, then planning to post vehicle
		}

		if (max_viewed_step == 1) { // just finished first step
			$('Companyname').value = $('companyname_intro').value;
			// $('Email').value = $('email_intro').value;
			$('user_info_legend').innerHTML = 'User Information';
			$('companyname_intro_li').dispose();
			// $('email_intro_li').dispose();									
			// show the steps now
			$('steps').setStyle('display','block');									
			// show help number
			//$('help_number').style.display = '';
		}

		if(!skip_review && review && current_step != 7) { step = 7; }
		
		loadStep(step);
		saveFormData(max_viewed_step);
	}
	
	function check_caps(str)
	{
		// only fix caps if they capitalize every letter
		if (str == str.toUpperCase() || str == str.toLowerCase())
			return capFirstLetters(str);
		else
			return str;
	}
	
	function capFirstLetters(str)
	{
        var newVal = '';
        var val = str.split(' ');
        for(var c=0; c < val.length; c++) 
        {
			if (c == val.length-1)
				newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length).toLowerCase();
			else
				newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length).toLowerCase() + ' ';
        }
        return newVal;
	}
	
	function validate(vstep) {

	    var step_valid = true;
		var stepname = 'step' + vstep;
		
		// Step 1
		if (vstep == 1) {
			
			if (!validateEmail($("Email"), $("EmailAgain"), $("email_mismatch"), $("email_invalid"))) step_valid = false;
			
			var unchecked = true;
			$$('.usertype_checkboxes').each(function(item)
			{
				if (item.checked)
					unchecked = false;
			});	
			if (unchecked)
			{
				add_error('usertypes_error','usertypes_table','Please select one or more types of business done by your company.',40);
				step_valid = false;				
			}
			else
			{
				if ($('usertypes_error'))
						$('usertypes_error').dispose();						
			}
		}	
		
		// The current step
		$(stepname).getElements('input, select').each(function(item) {	
			
			if (
					(undefined !== item.getProperty('name') && item.getProperty('name') != 'null') // make sure that name or id are defined
					|| (undefined !== item.getProperty('id') && item.getProperty('id') != 'null')
			) {
				
				var id = '';
				var field_valid = true; // ??
				if (undefined !== item.name && item.name != 'null') { // use id if it exists, otherwise name
					id = item.getProperty('id');
				} else {
					id = item.name;
				}
				
				if (id == 'URL') { // URL
					if (item.value.length) { // something
						if (item.value.indexOf('@') != -1) {
							item.addClass('required');
							step_valid = false;
							field_valid = false;
							add_error(id + '_error',$(id),'Websites cannot contain a \'@\'.',135);								
						} else if (item.value.indexOf('.') == -1) {
							item.addClass('required');
							step_valid = false;
							field_valid = false;
							add_error(id + '_error',$(id),'Websites must contain at least one \'.\'',135);											
						} else {
							item.removeClass('required');
							if ($(id + '_error'))
								$(id + '_error').dispose();										
						}
					} else { // nothing
						item.removeClass('required');
						if ($(id + '_error'))
							$(id + '_error').dispose();										
					}					
				}
					
				if (item.hasClass('first_last')) { // first/last
					var val = item.value.indexOf(' ');
					if (val == -1 || val == item.value.length-1) {
						item.addClass('required');
						step_valid = false;
						field_valid = false;
						add_error(id + '_error',$(id),'Must include both a first and last name',135);
					} else {
						item.removeClass('required');
						if ($(id + '_error'))
							$(id + '_error').dispose();		
					}
				}
					
				if (item.hasClass('phone_number')) { // phone
					
					// phone number validation, put into hyphens ###-###-####
					var numstr = $(id+'_areacode').value + '-' + $(id+'_prefix').value + '-' + $(id+'_num').value;
					numstr = numstr.replace(/[^0-9]*/g,"");
					if ($(id + '_required') && numstr.length < 10) {
						$(id + '_div').getChildren().each(function(phone)
						{
							phone.addClass('required');
						});
						add_error(id + '_error',$(id), 'Phone numbers require at least 10 digits.', 135);					
						step_valid = false;
						field_valid = false;
					} else if (numstr.length && numstr.length < 10) { // even if it's not required, show an error if they had the wrong amount and tried to enter
						$(id + '_div').getChildren().each(function(phone)
						{
							phone.addClass('required');
						});
						add_error(id + '_error',$(id), 'Phone numbers require at least 10 digits.', 135);					
						step_valid = false;
						field_valid = false;			
					} else {
						$(id + '_div').getChildren().each(function(phone)
						{
							phone.removeClass('required');
						});						
						if ($(id + '_error'))
							$(id + '_error').dispose();							
					}
					
					if (numstr.length) {
						item.value = $(id+'_areacode').value + '-' + $(id+'_prefix').value + '-' + $(id+'_num').value;
					} else {
						item.value = ''; // don't add slashes to empty numbers
					}
					
					if ($(id + '_extension') && $(id + '_extension').value.length) {
						item.value += ' x' + $(id+'_extension').value;
					}
				}				
				
				var req_id = id + '_required';
				if ($(req_id)) {
					if (item.value == '' && field_valid) {
						$(req_id).style.display = '';
						item.addClass('required');
						step_valid = false;
					} else {
						if (field_valid) {			
							$(req_id).style.display = 'none';
							item.removeClass('required');
						}
					}
				}
			}			
		});
		
		if(vstep == 2) {
		
			if($("Originationvalid_pre").value !== "1") {
			
				$("Originationvalid_pre_error").setStyle("display", "");
				step_valid = false;
				
			} else {
				
				$("Originationvalid_pre_error").setStyle("display", "none");
				
			}
			
			if($("Destinationvalid_pre").value !== "1") {
				
				$("Destinationvalid_pre_error").setStyle("display", "");
				step_valid = false;
				
			} else {
				
				$("Destinationvalid_pre_error").setStyle("display", "none");
				
			}
			
		}
		
		if(vstep == 3) {
		
			if($("quickpay_check").checked && $("comchek_check").checked) {
			
				$("quickcom_error").setStyle("display", "");
				step_valid = false;
				
			} else {
				
				$("quickcom_error").setStyle("display", "none");
				
			}
			
			if($("Originationvalid").value === "0") {
				$("Originationvalid_error").setStyle("display", "");
				step_valid = false;
			} else {
				$("Originationvalid_error").setStyle("display", "none");
			}
			
			if($("Destinationvalid").value === "0") {
				$("Destinationvalid_error").setStyle("display", "");
				step_valid = false;
			} else {
				$("Destinationvalid_error").setStyle("display", "none");
			}
			
			if ($('cod').value > 0) {
				if ($('cod_payment_method').value == '') {
					$('cod_payment_method').addClass('required');
					step_valid = false;
				}
			}	
			
			$("shipDate_error").setStyle("display", "none");
			if (!$('today').checked) {
				var shipBeginDate = $('Shipbegindate').value;
				var parts = shipBeginDate.split('/');
				var today = new Date();
				if (parts.length !== 3 || convertSqlDateToObject(parts[2]+'-'+parts[0]+'-'+parts[1]) <= today) {
					$("shipDate_error").setStyle("display", "");
					step_valid = false;
				}
			}
			
		}
		
		if (vstep == 4)
		{
			if (!validateEmail($("dispatch_email"), $("dispatch_email_again"), $("dispatch_email_mismatch"), $("dispatch_email_invalid"))) step_valid = false;
		}		
				
		return step_valid;
	}
	
	function add_error(id, where, error, left)
	{
		if (undefined === left) { left = 20; }
			
		if ($(id)) {
			var errorMsg = $(id);
			errorMsg.innerHTML = error;
		} else {
			
			if (!$defined($(where))) {
				return;		
			}
		
			var errorMsg = new Element('div',
			{
				'id'		:	id,
				'class'		:	'error_msg',
				'style'		: 	'height: auto; float: left; margin-left: ' + left + 'px;'
			});
			errorMsg.innerHTML = error;
			errorMsg.inject($(where),'after');						
		}
	}
	
	function check_step(cstep)	
	{
		// this handles anything that isn't handled by validate
		if (cstep != 1 && cstep != 6) // step 1 is handled before the ajax call
		{
			if (!validate(cstep)) {
				return false;
			}
		}			
		
		if(cstep == 2) {
			
			if(!Recaptcha.get_response()) {
				Recaptcha.get_challenge();
				return false;
			}	
			
		}
			
		if (cstep == 4) 
		{
			// fix up whoreferred
			var ref = $('referred').value;
			if (ref == 'other')
				$('Whoreferred').value = $('whoreferred_other').value;
			else if (ref == 'referred')	
				$('Whoreferred').value = $('whoreferred_referby').value;
			else if (ref == 'referral')	
				$('Whoreferred').value = $('whoreferred_referral').value;
			else if (ref == 'letter')
			{
				$('Whoreferred').value = 'Letter/Postcard';
				if ($('whoreferred_code').value.length)
					$('Whoreferred').value += ': ' + $('whoreferred_code').value;
			}
			else
				$('Whoreferred').value = ref;			
		}
		if (cstep == 6) // step 6 is handled based off of usertypes
		{	
			var failed = 0;
			var frm = $('_form');
			
			if (!isRequiredOptionalMark(frm.ICCMC,'ICCMC #')) failed = 1;
			if (!isRequiredOptionalMark(frm.dealer_license,'Dealer License #')) failed = 1;
			if (!isRequiredOptionalMark(frm.state_license,'Towing or Terminal License #')) failed = 1;
			if (!isRequiredOptionalMark(frm.fmc_license,'Federal Maritime Commission License #')) failed = 1;
		
			if (!isRequiredMark(frm.vehicle_per_month,'Vehicles per Month')) { failed = 1; }
			if (!isRequiredMark(frm.Aboutcompany,'Company Description')) { failed = 1; }
			if (frm.Aboutcompany.value.length > 200) { $('about_full').style.display = ''; failed = 1; } else { $('about_full').style.display = 'none'; }
		
			if (!frm.Suretyagent.optional && !isRequiredMark(frm.Suretyagent,"Surety Bonding Agent"))
				 failed = 1;
			
			var ye = $('Yearestablished');
			if (ye.value.length && (ye.value.length != 4 || !is_numeric(ye.value))) {
				ye.addClass('required');
				add_error('Yearestablished_error',ye, 'Year must be 4 digits.', 135);					
				failed = 1;
			}
			else {
				ye.removeClass('required');
				if ($('Yearestablished_error')) {
					$('Yearestablished_error').dispose();
				}
			}
				 
			var addphones = new Array(frm.Insurancephone, frm.Bondphone);
			
			addphones.each(function(item)
			{		
				var id = '';
				if (item.disabled) 
					return;
				if (undefined !== item.name && item.name != 'null')
					id = item.name;
				else
					id = item.getProperty('id');
					
				var numstr = $(id+'_areacode').value + '-' + $(id+'_prefix').value + '-' + $(id+'_num').value;
				numstr = numstr.replace(/[^0-9]*/g,"");
				if (!item.optional && !item.disabled && numstr.length < 10) 
				{
					$(id + '_div').getChildren().each(function(phone)
					{
						phone.addClass('required');
					});
					add_error(id + '_error',$(id), 'Phone numbers require at least 10 digits.', 135);
					failed = 1;
				}
				else if (numstr.length && numstr.length < 10) // even if it's not required, show an error if they had the wrong amount and tried to enter
				{
					$(id + '_div').getChildren().each(function(phone)
					{
						phone.addClass('required');
					});
					add_error(id + '_error',$(id), 'Phone numbers require at least 10 digits.', 135);					
					failed = 1;
				}
				else
				{
					$(id + '_div').getChildren().each(function(phone)
					{
						phone.removeClass('required');
					});						
					if ($(id + '_error'))
						$(id + '_error').dispose();							
				}
				if (numstr.length)
					item.value = $(id+'_areacode').value + '-' + $(id+'_prefix').value + '-' + $(id+'_num').value;
				else
					item.value = ''; // don't add slashes to empty numbers
				if ($(id + '_extension') && $(id + '_extension').value.length)
					item.value += ' x' + $(id+'_extension').value;
			});
			
			// #2703 - insurance fields
			if (!isRequiredOptionalMark(frm.Insurancecompany2,'Cargo Insurance Company (Canal, Northland, etc.)')) failed = 1;
			if (!isRequiredOptionalMark(frm.Insurancecompany,'Cargo Insurance Company (Agent)')) failed = 1;
			if (!isRequiredOptionalMark(frm.Insurancecitystate,'Cargo Insurance City/State (Agent)')) failed = 1;			
			if (!isRequiredOptionalMark(frm.Insurancedamage,'Cargo Insurance Limit')) failed = 1;
			if (!isRequiredOptionalMark(frm.Insurancedeductible,'Cargo Insurance Deductible')) failed = 1;
		
			if (!isRequiredOptionalMark(frm.Numtrucks,'Number of Trucks')) failed = 1;
			if (!isRequiredOptionalMark(frm.Equipdescription,'Equipment Description')) failed = 1;
			if (frm.Equipdescription.value.length > 500) { $('equip_full').style.display = ''; failed = 1; } else { $('equip_full').style.display = 'none'; }
			if (!isRequiredOptionalMark(frm.Routedescription,'Route Description')) failed = 1;
			if (frm.Routedescription.value.length > 200) { $('route_full').style.display = ''; failed = 1; } else { $('route_full').style.display = 'none'; }
			
			if (failed)
				return false;
		}	
		return true;
	}

	function loadStep(step) {
		
		current_step = step;
		if(step > max_viewed_step) { max_viewed_step = step; }
		var val = $('steps').getCoordinates()['top'];
		window.scrollTo(0,val);
		if ($('submission_error'))
			$('submission_error').dispose();		
		//$('help_number').style.display = '';		
		$('step7_continue_top').style.display = 'none';
		update_links();
		$$('.steps').setStyle('display','none');	
		$('step'+step).setStyle('display','block');	

		// special handling for steps
		switch(step) {
		case 1:	break;
		case 2:
			$("sp").style.display = "none";
			break;
		case 3: break;
		case 6:
			appUsertypeChanged();
			type_changed = 0;	
			// mark the required fields on this page required
			$('step4').getElements('input, select, textarea').each(function(item) {			
				var id = '';
				
				if (item.getProperty('id'))
					id = item.getProperty('id');
				else if (item.name)
					id = item.name
				else 
					return;
					
				if (!item.optional && !item.disabled) //required!
				{
					if ($(id + '_em'))
					{
						$(id + '_em').innerHTML = '*';
					}
				}
				else
				{					
					if ($(id + '_em'))
					{
						$(id + '_em').innerHTML = '';
					}
				}
			});
			break;
		case 7:
			if (type_changed == 1 && !check_step(6)) // if they changed their type and haven't reviewed yet
			{
				loadStep(6);
				return;
			}
			
			type_changed = 0;
			review = 1;
			
			// lower case to match email
		    $("EmailAgain").value = $("EmailAgain").value.toLowerCase();

			$$(".to_review").each(function(item)
			{		
				var id = item.id ? item.id : item.name;
				if (id == 'null' || id == '')
					id = item.getProperty('id');
				var show_id = id + "_show";
				if ($(show_id))	{
					
					if (!caps && item.type != 'select-one')	{			
						if (id != 'Hoursoperation' && !item.hasClass('phone_number')) // don't fix these caps
							item.value = check_caps(item.value);			
					}
					
					if (id == 'Username' || id == 'Email' || id == 'URL') {
						item.value = item.value.toLowerCase();
					}

					if (item.value == '') {
						$(show_id).innerHTML = '<span class="none_text">None</span>';
					} else {
						var val = formatReviewValue(id, item.value);
						$(show_id).innerHTML = val; //item.value;
					}
				}
			});		
			caps = 1;
					
			// do the checkboxes manually
			var usertypes = '';
			$$(".usertype_checkboxes").each(function(item)
			{
				if (item.checked)
					usertypes += item.value + ", ";			
			});
			usertypes = usertypes.substring(0,usertypes.length-2);
			$("Usertypes_show").innerHTML = usertypes;
			
			if($("today").checked) { $("Shipbegindate_show").innerHTML = "Today"; }
					
			$$('.steps').setStyle('display','none');
			$('steps').setStyle('display','block');
			$('step7').setStyle('display','block');	
			break;
			
		}
			

	}
	
	function formatReviewValue(id, val) {
	
		switch(id) {
		case "Vehicleoperable":
			val = (val === "1") ? "Yes" : "No";
			break;
		case 'cod_where':
			val = (val === 'P') ? 'on Pickup' : 'on Delivery';
			break;
		}
		
		return val;
	}
		
	function is_numeric(value) {
		  if (value == null || !value.toString().match(/^[-]?\d*\.?\d*$/)) return false;
  			return true;

	}

	/**
	 * Save form data for later retrieval
	 */
  	function saveFormData(step, include_sp, callback) {

  		$("step").value = step;
  		var url = "/ajax/signupPending.php";
  		if(typeof(include_sp) === "boolean" && include_sp) { url += "?include_sp=1"; }
  		
  		var options = {"url": url};
  		if(typeof(callback) === "function" && callback) { options.onComplete = callback; }
  		var request = new Request.JSON(options).post($('_form'));

  	}

  	/**
  	 * Populate form with JSON data - callback
  	 */
  	function populateFormData(data) {
  		
  		$("populated").setStyle("display", "");
		if ($("companyname_intro")) {
			$("companyname_intro").value = data.Companyname;
		}
		
		// $("email_intro").value = data.Email;
		for(k in data) {
			if(typeof(k) === "string") {
				if($(k) && data[k]) {
					var val = data[k];
					switch(k) {
					case 'comchek_check': // ignore
					case 'quickpay_check': // ignore
					case 'today':
						break;
					case "Shipbegindate": // continue to default
						val = convertSqlDate(data[k]);
					case 'Vehicleyear': // continue to default
						if(val === "0") { val = ""; }
					default:
						$(k).value = val;
					}
				}
			}
		}

		var types = data.Usertype.split(" / ");
		if(types.length > 0) {
			for(var i=0; i < types.length; i++) {
				$("_"+types[i]).checked = true;
			}
		}
		
		// Copy additional fields
		// Copy some of the pre-fields (duplicated fields that appear twice in form)
		var fields = ["Originationcity", "Originationstate", "Originationzip", "Destinationcity", "Destinationstate", "Destinationzip",
		              	"vehicle_types", "Vehicleoperable", "Shipmethod", "Originationvalid", "Destinationvalid"];
		for(var i=0, c=fields.length; i < c; i++) {
			var field = fields[i];
			$(field+"_pre").value = $(field).value;
		}
		
		if (data.Email) { $("EmailAgain").value = data.Email; }
		if (data.dispatch_email) { $("dispatch_email_again").value = data.dispatch_email; }
		
		//$("step1_continue").fireEvent("click");
		$("referred").fireEvent("change");

		var last_step = data.step ? parseInt(data.step, 10) : 1; 
		
		// $("post_vehicle_review").setStyle("display", $("post_vehicle").value == 1 ? "" : "none"); fixed for post vehicle remove #7531

		$('steps').setStyle('display','block');		// show steps
		type_changed = 0;
		
		var o_background = $("Originationvalid").value === "0" ? "#ffc0c0" : "#ffffff";
		$("Originationcity").setStyle("background-color", o_background);
		$("Originationstate").setStyle("background-color", o_background);
		$("Originationzip").setStyle("background-color", o_background);
		
		var d_background = $("Destinationvalid").value === "0" ? "#ffc0c0" : "#ffffff";
		$("Destinationcity").setStyle("background-color", d_background);
		$("Destinationstate").setStyle("background-color", d_background);
		$("Destinationzip").setStyle("background-color", d_background);
		
		var o_background = $("Originationvalid").value === "0" ? "#ffc0c0" : "#ffffff";
		$("Originationcity_pre").setStyle("background-color", o_background);
		$("Originationstate_pre").setStyle("background-color", o_background);
		$("Originationzip_pre").setStyle("background-color", o_background);
		
		var d_background = $("Destinationvalid").value === "0" ? "#ffc0c0" : "#ffffff";
		$("Destinationcity_pre").setStyle("background-color", d_background);
		$("Destinationstate_pre").setStyle("background-color", d_background);
		$("Destinationzip_pre").setStyle("background-color", d_background);
		
		$("quickpay_check").checked = data.quickpay_check === "1" ? true : false;
		$("comchek_check").checked = data.comchek_check === "1" ? true : false;	
		$("today").checked = data.today === "1" ? true : false;
		
		// Update post vehicle date with today's date, if necessary
		if(data.Shipbegindate.length > 0) {
			
			var tomorrow = new Date();
			tomorrow.setDate(tomorrow.getDate()+1);
			var ship_date = convertSqlDateToObject(data.Shipbegindate);
			if(ship_date < tomorrow) {
				$("Shipbegindate").value = (tomorrow.getMonth()+1) + "/" + tomorrow.getDate() + "/" + tomorrow.getFullYear();
			}
			
		}
		
		gotoStep(4); // was last_step, now always should be 4 for returning users
		/*
		for(var i=2; i < last_step; i++) {

			$("step"+i+"_continue").fireEvent("click");
		}
		*/
		/*
		if(last_step >= 2) {
			var gstep = last_step - 1;
			$("step"+gstep).fireEvent("click");
		}
		*/
		
	}
  	
  	function convertSqlDateToObject(sql_date) {
  		
  		var date = new Date();
  		if(!sql_date.length) { return date; }
  		var parts = sql_date.split("-");
  		if(parts.length !== 3) { return date; }
  		date.setFullYear(parts[0]);
  		date.setDate(parts[2]);
  		date.setMonth(parts[1]-1);
  		
  		return date;
  		
  	}
		
	function convertSqlDate(sql_date) {
		
		var str = "";
		if(sql_date.length > 0 && sql_date !== "0000-00-00") {
			var sql_date_parts = sql_date.split("-");
			str = sql_date_parts[1] + "/" + sql_date_parts[2] + "/" + sql_date_parts[0];
		}
		return str;
		
	}

	function showSamplePrices() {

		$$(".sp_tr_clear").dispose();
		$("step2").style.display = "none";
		$("sp").style.display = "";
		
		saveFormData(2, true, showSamplePricesDone);
		return;

	}
	
	function showSamplePricesDone(data) {

		var tr = $("sp_row");

		var sp = data.sp;
		
		var samples = sp.samples;
		
		var table = $("sp_table");
		var tbody = table.getElement("tbody");
		if (sp.miles) { $("sp_miles").set("html", sp.miles); }
		
		if(samples && samples.length > 0) {
		
			for (var i=0, e=samples.length; i < e; i++) {
				
				var sample = samples[i];
				var tr_copy = tr.clone();
				var vehicle = sample.vehicle_types;
				if(sample.inop === "1") { vehicle += " (inop)"; }
				var comp_pm = Math.round((sample.your_dollars/sp.miles)*100)/100;
				comp_pm.toFixed(2);
				tr_copy.getElement("td.sp_vehicle").set("html", vehicle);
				tr_copy.getElement("td.sp_shipper_price").set("html", "$" + sample.price + " ($" + sample.mile_dollars + "/mi)");
				tr_copy.getElement("td.sp_accepted").set("html", sample.dispatched === "YES" ? "Yes" : "Not yet");
				tr_copy.getElement("td.sp_comp_price").set("html", "$" + sample.your_dollars + " ($" + comp_pm + "/mi)");
				tr_copy.style.display = "";
				tr_copy.addClass("sp_tr_clear");
				tr_copy.inject(tbody);
				
			}
			
		} else {
		
			var td_none = new Element("td", {"html":"No similar shipments found.", "colspan":"99", "style": "padding: 5px"});
			var tr_none = new Element("tr", {"class":"sp_tr_clear"});
			td_none.inject(tr_none);
			tr_none.inject(tbody);
			
		}
	}
	
	function userType() {
		
		var carrier_checked = false;
		var broker_checked = false;
		
		$each($$(".usertype_checkboxes"), function(item) { 
			if(item.checked) {
				if(item.id === "_Carrier") {
					carrier_checked = true; 
				} else {
					broker_checked = true;
				}
			}
		});
		
		var type = "";
		if(carrier_checked && broker_checked) {
			type = "carrier"; // "both"; fix for removing post vehicle #7531
		} else if (carrier_checked) {
			type = "carrier";
		} else if (broker_checked) {
			type = "carrier"; // "broker"; fix for removing post vehicle #7531
		} else {
			type = "none";
		}
		
		return type;
		
	}
	
	function copy_info() {
		if ($('bill_copy').checked) {
			$('billing_city').value = $('City').value;
			$('billing_state').value = $('State').value;
			$('billing_street').value = $('Street').value;
			$('billing_zip').value = $('Zip').value;
			$('billing_phone_areacode').value = $('Localphone_areacode').value;
			$('billing_phone_prefix').value = $('Localphone_prefix').value;
			$('billing_phone_num').value = $('Localphone_num').value;
			$('billing_phone_extension').value = $('Localphone_extension').value;
		}
	}

	function disableAndValidate(frm)
	{
		$('submit_button').disable();
		if (!validateForm(frm)) {
			$('submit_button').enable();
			return false;
		} else {
			return true;
		}
	}

	function validateForm(frm) {
		/*{$cdappValidateUser}*/
		
		var failed = 0;

		if (!validateUsernameMark(frm.Username,'Username')) failed = 1; // Username
		if (!isRequiredMark(frm.Companyname,'Company Name')) failed = 1;
		if (!isRequiredMark(frm.Contactnames,'Dispatch Contact Person')) failed = 1; // Dispatch Contact Person
		if (!isRequiredMark(frm.Principalcontact,'Owner or Manager')) failed = 1; // Owner or manager
		if (!isFirstLastMark(frm.Principalcontact,'Owner or Manager')) failed = 1;
		if (!isRequiredMark(frm.Street,'Street Address')) failed = 1;
		if (!isRequiredMark(frm.City,'City')) failed = 1;
		if (!isRequiredMark(frm.State,'State')) failed = 1;
		if (!isRequiredMark(frm.Zip,'Zip')) failed = 1;
		if (!isRequiredMark(frm.Listingphone,'Phone to List')) failed = 1;
		if (!isRequiredMark(frm.Localphone,'Local Phone')) failed = 1;
		if (!isRequiredMark(frm.Fax,'Fax')) failed = 1;
		if (!isRequiredMark(frm.dispatch_mail,'Dispatch Email')) failed = 1;
		if (!isRequiredMark(frm.dispatch_email_again,'Re-enter Email')) failed = 1;
		if (!isRequiredMark(frm.Email,'Email')) failed = 1;
		if (!isRequiredMark(frm.EmailAgain,'Re-enter Email')) failed = 1;
		if (!isRequiredMark(frm.Contactmethod,'Contact Method')) failed = 1;
		if (!isRequiredMark(frm.Hoursoperation,'Hours of Operation')) failed = 1;
		if (!isRequiredMark(frm.Hqtimezone,'Timezone')) failed = 1;
		if (!isRequiredMark(frm.billing_contact,'Billing Contact')) failed = 1;
		if (!isRequiredMark(frm.billing_street,'Billing Address')) failed = 1;
		if (!isRequiredMark(frm.billing_city,'Billing City')) failed = 1;
		if (!isRequiredMark(frm.billing_state,'Billing State')) failed = 1;
		if (!isRequiredMark(frm.billing_zip,'Billing Zip')) failed = 1;
		if (!isRequiredMark(frm.billing_phone,'Billing Phone')) failed = 1;	

		if ($('cod_payment_method').value > 0) {
			if (!isRequiredSelect(frm.cod_payment_method, 'COD/COP Payment Method')) failed = 1;
		}
		
		if (!validateEmail(frm.Email, frm.EmailAgain, $("email_mismatch"), $("email_invalid"))) failed = 1;
		if (!validateEmail(frm.dispatch_email, frm.dispatch_email_again, $("dispatch_email_mismatch"), $("dispatch_email_invalid"))) failed = 1;

		if (!isRequiredMark(frm.Hoursoperation,'Hours of Operation')) failed = 1;
		if (!isRequiredMark(frm.Hqtimezone,'Timezone')) failed = 1;

		if (!isRequiredOptionalMark(frm.ICCMC,'ICCMC #')) failed = 1;
		if (!isRequiredOptionalMark(frm.dealer_license,'Dealer License #')) failed = 1;
		if (!isRequiredOptionalMark(frm.state_license,'Towing or Terminal License #')) failed = 1;
		if (!isRequiredOptionalMark(frm.fmc_license,'Federal Maritime Commission License #')) failed = 1;

		if (!isRequiredMark(frm.Yearestablished,'Year Established')) failed = 1;
		if (!isRequiredMark(frm.Aboutcompany,'Company Description')) failed = 1;
		if (frm.Aboutcompany.value.length > 200) { $('about_full').style.display = ''; failed = 1; } else { $('about_full').style.display = 'none'; }
		re = /[0-9]/;
		if (!isRequiredMark(frm.Businessref1,'Business Reference #1')) failed = 1;
		if (!re.test(frm.Businessref1.value)) { $('bus_phone1_num').style.display = ''; failed = 1; } else { $('bus_phone1_num').style.display = 'none';}
		if (!isRequiredMark(frm.Businessref2,'Business Reference #2')) failed = 1;
		if (!re.test(frm.Businessref2.value)) { $('bus_phone2_num').style.display = ''; failed = 1; } else { $('bus_phone2_num').style.display = 'none';}
		if (!isRequiredMark(frm.Businessref3,'Business Reference #3')) failed = 1;
		if (!re.test(frm.Businessref3.value)) { $('bus_phone3_num').style.display = ''; failed = 1; } else { $('bus_phone3_num').style.display = 'none';}

		if (!frm.Suretyagent.optional && !isRequiredMark(frm.Suretyagent,"Surety Bonding Agent"))
			 failed = 1;
		if (!isRequiredOptionalMark(frm.Bondphone,'Bonding Company Phone')) failed = 1;
		
		// #2703 - insurance fields
		if (!isRequiredOptionalMark(frm.Insurancecompany2,'Cargo Insurance Company (Canal, Northland, etc.)')) failed = 1;
		if (!isRequiredOptionalMark(frm.Insurancecompany,'Cargo Insurance Company (Agent)')) failed = 1;
		if (!isRequiredOptionalMark(frm.Insurancecitystate,'Cargo Insurance City/State (Agent)')) failed = 1;
		if (!isRequiredOptionalMark(frm.Insurancephone,'Cargo Insurance Phone (Agent)')) failed = 1;
		if (!isRequiredOptionalMark(frm.Insurancedamage,'Cargo Insurance Limit')) failed = 1;
		if (!isRequiredOptionalMark(frm.Insurancedeductible,'Cargo Insurance Deductible')) failed = 1;

		if (!isRequiredOptionalMark(frm.Numtrucks,'Number of Trucks')) failed = 1;
		if (!isRequiredOptionalMark(frm.Equipdescription,'Equipment Description')) failed = 1;
		if (frm.Equipdescription.value.length > 500) { $('equip_full').style.display = ''; failed = 1; } else { $('equip_full').style.display = 'none'; }
		if (!isRequiredOptionalMark(frm.Routedescription,'Route Description')) failed = 1;
		if (frm.Routedescription.value.length > 200) { $('route_full').style.display = ''; failed = 1; } else { $('route_full').style.display = 'none'; }
		
		if (failed)
			return false;

		return true;
	}
	
	function validateEmail(email_el, email_again_el, mismatch_el, invalid_el) {
		
		var failed = 0;
		
		// #3361 enhance email validation
		email_el.value = email_el.value.replace(/^\s+|\s+$/g,"");
		email_again_el.value = email_again_el.value.replace(/^\s+|\s+$/g,"");
		if (email_el.value != email_again_el.value) {
			mismatch_el.style.display = '';
			failed = 1;
		}
		else {
			mismatch_el.style.display = 'none';		
		}
		if (!isEmailMark(email_el,'Email')) 
			failed = 1;
		else 
		{
			if (!email_el.value.match(/^[^<>, \[\]"]+@[^<>, \[\]"]+\.[^<>, \[\]"][^<>, \[\]"]+$/)) {
				invalid_el.style.display = '';
				failed = 1;
			}
			else {
				invalid_el.style.display = 'none';
			}
		}
		re = /www/;
		if (re.test(email_el.value)) {

			if (frm.wwwokay.value == 0) {
				if (confirm("Warning: most email addresses do not begin with 'www'.\\n\\nClick 'Okay' to keep the 'www' or 'Cancel' to change it.")) {
					frm.wwwokay.value = 1;
				} else {
					email_el.focus();
					email_el.select();
					failed = 1;
				}
			}

		}
		
		return (failed === 0) ? true : false;
		
	}
	
	// Show form
	function showForm()
	{
		$("_form").setStyle("display", "");
		$("loading_data").setStyle("display", "none");
		// $("already_started").setStyle("display", "none");
	}
	
	// Show loading
	function showLoading()
	{
		$("_form").setStyle("display", "none");
		$("loading_data").setStyle("display", "");
		// $("already_started").setStyle("display", "none"); TODO - need this?
	}
	
	// Step 1 Continue is clicked
	function checkAlreadyStarted() {
		
		var valid = true;
		var frm = $("_form");

		showLoading();

		waiting = 1;
		var request = new Request.JSON({
				"url":"/ajax/signupPending.php?pending_method=load", 
				"onSuccess": function(data) { checkAlreadyStartedDone(data); }}
		).post($("_form"));

	}
	
	function checkAlreadyStartedDone(json) {
		
		// If data is returned, pending client existed and data loaded
		if (json.data) {
			
			username_validated = true;
			populateFormData(json.data);
			
		// Otherwise, no pending client existed
		} else {
			
			if (json.username_available) { // username was available
				
				firstStepContinue();
				
			} else { // username was not available, show error
				
				errorStr = json.errors && json.errors.length 
					? json.errors.join("<br/>\n") 
					: "Username not available";
				add_error('username_error', $('Username_info_text'), errorStr, 60);
				
			}
			
		}
		
		showForm();
		waiting = 0;
		
	}
	
	function copyStep2Fields() {
	
		// Copy some of the pre-fields (duplicated fields that appear twice in form)
		var fields = ["Originationcity", "Originationstate", "Originationzip", "Destinationcity", "Destinationstate", "Destinationzip",
		              	"vehicle_types", "Vehicleoperable", "Shipmethod"];
		for(var i=0, c=fields.length; i < c; i++) {
			var field = fields[i];
			$(field).value = $(field+"_pre").value;
		}
		
	}
	
	function createCaptcha() {
		
		Recaptcha.create("6LdCTQgAAAAAAEiknJXGFXdPESr0ayldfWxUFKye", $("captcha_div"), {
		      tabindex: 0,
		      callback: createCaptchaDone
		});
		
	}
	
	function createCaptchaDone() {

		$$(".recaptcha_input_area_text").setStyle("float", "none");

	}
