/**
 * Configurator form functions
 *
 */

var cp = new cpaint();
cp.set_response_type('TEXT');

// Handle onload without body
var func = window.onload;
if (func != null) {
	window.onload = function() {
		func(); 
		populateYearDropDown();
	};
} else {
	window.onload = function() {
		populateYearDropDown();
	};
}

/**
 * populates the year dropdown with the current year and forward
 * pre-condition: boolean js variable called default year which has cv value for defaulting year for clients
 */
function populateYearDropDown() {
	var selectYear = document.getElementById('modelYear');
	
    var date = new Date();
    var currentYear = date.getFullYear();
    var nextYear = currentYear++;
    
    selectYear.options[1] = new Option(currentYear, currentYear);
    selectYear.options[2] = new Option(nextYear, nextYear);
    
    if(defaultYear) {
    	selectYear.selectedIndex = 2;
    } else {
    	selectYear.selectedIndex = 0;
    }
    
    if (selectYear.selectedIndex > 0) {
        createMakeDropDown();
	} 
}

function createMakeDropDown() {
	document.getElementById('make')[0].text = 'Loading...';
	cp.call('/autos/Configurator/Controllers/Ajax/ajaxStepOne.php', 'makeList', populateMakeDropDown,
		document.getElementById('modelYear').value);
	document.getElementById('make').disabled = false;
}

function createModelDropDown() {
	document.getElementById('modelId').options.length = 1;
	document.getElementById('modelId')[0].text = 'Loading...';
	cp.call('/autos/Configurator/Controllers/Ajax/ajaxStepOne.php', 'modelList', populateModelDropDown,
		document.getElementById('modelYear').value, document.getElementById('make').value);
	document.getElementById('modelId').disabled = false;
}

function populateMakeDropDown(list) {

	// Setup Vars
	var selectMake = document.getElementById('make');
	var selectModel = document.getElementById('modelId');
	var makeList = eval(list);

	// Reset Makes and Models
	selectMake.options.length = 1;
	selectModel.options.length = 1;

	// Dynamically Create Options
	for (var i=0; i < makeList.length; i++) {
		selectMake.options[selectMake.options.length] = new Option(makeList[i].value, makeList[i].id, false, false);
	}
	
	document.getElementById('make')[0].text = 'Select a Make...';
}

function populateModelDropDown(list) {

	// Setup Vars
	var selectModel = document.getElementById('modelId');
	var modelList = eval(list);

	// Reset Makes 
	selectModel.options.length = 1;

	// Dynamically Create Options
	for (var i=0; i < modelList.length; i++) {
		selectModel.options[selectModel.options.length] = new Option(modelList[i].value, modelList[i].id, false, false);
	}
	
	document.getElementById('modelId')[0].text = 'Select a Model...';
}

/**
 * Validates the configurator form.
 * pre-condition: a boolean js variable named zipRequired is defined based on the cv value for the client
 */
function validateConfiguratorForm() {
	var configYear = document.getElementById('modelYear');
	var configMake = document.getElementById('make');
	var configModel = document.getElementById('modelId');
	var configZip = document.getElementById('zip');

	var errorText = 'Please correct the following errors in your submission:\n\n';
	var hasErrors = false;

	if(configYear.value == '') {
		errorText += "Year is a required field.\n";
		hasErrors = true;
	}

	if(configMake.selectedIndex == 0) {
		errorText += "Make is a required field.\n";
		hasErrors = true;
	}

	if(configModel.selectedIndex == 0) {
		errorText += "Model is a required field.\n";
		hasErrors = true;
	}

	if(configZip.value == "Enter a Zip") {
		configZip.value = "";
	}
	
	if(zipRequired && !isValidZip(configZip.value)) {
		errorText += "Please enter a valid zip code.\n";
		hasErrors = true;
	} else if(configZip.value != '' && !isValidZip(configZip.value)) {
		errorText += "Please enter a valid zip code.\n";
		hasErrors = true;
	}
	
	if(hasErrors) {
		alert(errorText);
		return false;
	}

	//Get make value from form and create hidden element for make targetting on step two of the configurator
	var textMake = document.createElement('input');
	textMake.type = 'hidden';
	textMake.name = 'vehicle_make';
	textMake.value = configMake.options[configMake.selectedIndex].text;
	configForm = document.getElementById('stepOneForm');
	configForm.appendChild(textMake);

	return true;
}

/* Deprecated. Use validateConfiguratorForm instead. */
function validateForm(f) {

	if (f.modelYear.selectedIndex < 1) {
		document.getElementById("errorMessage").innerHTML = "Please Select a Year";
		return false;
	}

	if (f.make.selectedIndex < 1) {
		document.getElementById("errorMessage").innerHTML = "Please Select a Make";
		return false;
	}	

	if (f.modelId.selectedIndex < 1) {
		document.getElementById("errorMessage").innerHTML = "Please Select a Model";
		return false;
	}
	
	if(zipRequired) {
		if(f.zip.value == ''){
			document.getElementById('errorMessage').innerHTML = "Please Enter a Zip";
			return false;
		}
	}

	f.submit(); 
}
