/**
 * Dealers
 */

var radios     = new Array();
var frameRate  = 10;
var changeRate = 8.5;

function initHighlighting() {	
	var stepsDiv = document.getElementById('steps');
	var inputs   = stepsDiv.getElementsByTagName('input');
	
	radios[0] = null;        // undefined
	radios[1] = new Array(); // industry
	radios[2] = new Array(); // region
	radios[3] = new Array(); // subregion
	
	for (var i=0; i < inputs.length; i++) {
		if (inputs[i].type == 'radio') {
			var stepNumber = getStepNumber(inputs[i]);
			radios[stepNumber].push(inputs[i]);
		}
	}
}

function isPrefixedBy(prefix, id) {
	var prefixLength = prefix.length;
	
	if (id.substr(0, prefixLength) == prefix) {
		return true;
	}
	
	return false;
}

function getStepNumber(input) {
	return input.parentNode.parentNode.getAttribute('id').substr((input.parentNode.parentNode.getAttribute('id').lastIndexOf('_') + 1));
}

function getPrefix(string) {
	if (string.indexOf('_') == -1) {
		return;	
	}
	
	return string.substr(0, string.indexOf('_'));
}

function stepOne(element) {
	var stepTwoBox    = document.getElementById('step_2');
	var stepThreeBox  = document.getElementById('step_3');
	
	slideBox([stepTwoBox, stepThreeBox], 210);
	highlight(element);
}

function stepTwo(element) {
	var stepThreeBox = document.getElementById('step_3');
	var stepTwoValue;
	
	for (var i=0; i < radios[2].length; i++) {
		if (radios[2][i].checked) {
			stepTwoValue = radios[2][i].value;
			break;
		}
	}
	
	updateStepThreeContent(stepTwoValue, i);
	
	slideBox([stepThreeBox], 420);
	highlight(element);
}

function stepThree(element, selection) {
	var subregionArray = subRegions[selection];
	var resultStepOne;
	var resultStepTwo;
	var resultStepThree;
	
	for (var i=0; i < subregionArray.length; i++) {
		var thisRadio = document.getElementById('subreg_' + formatName(subregionArray[i]));
		
		if (thisRadio.checked == true) {
			thisRadio.parentNode.className = 'option_on';
			resultStepThree = thisRadio.value;
			continue;
		}
		
		thisRadio.parentNode.className = 'option_off';
	}
	
	// get values of first two steps
	resultStepOne = getSelectedValue(1);
	resultStepTwo = getSelectedValue(2);
	
	var url = '';
	url = url + '/dealers/index.php?page_function=list&industry=' + formatName(resultStepOne);
	url = url + '&region=' + formatName(resultStepTwo);
	url = url + '#' + formatName(resultStepThree);
	
	window.location = url;
}

function getSelectedValue(id) {
	for (var i=0; i < radios[id].length; i++) {
		if (radios[id][i].checked == true) {
			return radios[id][i].value;	
		}
	}
	
	return null;
}

function validateForm() {
	var inputs = new Array();
	var errors = new Array();
	var form   = document.getElementById('eaa_form');
	var otherError = '';
	
	inputs.push(document.getElementById('eaa_name'));
	inputs.push(document.getElementById('eaa_email'));
	inputs.push(document.getElementById('eaa_country'));
	inputs.push(document.getElementById('eaa_comments'));
	
	for (var i=0; i < inputs.length; i++) {
		
		// check for field filled in
		if (isDefault(inputs[i]) == true) {
			var fieldFirstLetter = inputs[i].name.substr(0, 1);
			var fieldRestOfName  = inputs[i].name.substr(1);
			
			errors.push('  - ' + fieldFirstLetter.toUpperCase() + fieldRestOfName);
			
			// change color
			inputs[i].parentNode.style.color = '#f00';
			continue;
		} else if (inputs[i].name.indexOf('email') > -1) {
			if (isValidEmailAddress(inputs[i].value) == false) {
				otherError = "Please use a valid email address.";
			
				// change color
				inputs[i].parentNode.style.color = '#f00';
				continue;
			}
		}
		
		// reset coloring
		inputs[i].parentNode.style.color = 'inherit';	
		
	}
	
	var message = new Array();
	if (errors.length > 0) {
		message.push("Please fill in the following fields: \n" + errors.join("\n"));
	}
			
	if (otherError.length > 0) {
		message.push(otherError);
	}
	
	if (message.length > 0) {
		alert(message.join("\n\n"));
	} else {
		// all is well		
		// first update hidden field with industry
		for (var i=0; i < radios[1].length; i++) {
			if (radios[1][i].checked == false) {
				continue;	
			}
						
			document.getElementById('hidden_industry').value = radios[1][i].value;
		}
		
		form.submit();
	}
	
}

function isDefault(element) {
	if (element.defaultValue != element.value) {
		return false;	
	}
	
	return true;
}

function isValidEmailAddress(email) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if (filter.test(email) == false) {
		return false;	
	}
	
	return true;
}

function updateStepThreeContent(value, selection) {
	var stepThreeBox = document.getElementById('step_3');
	
	// clear stepThree
	if (stepThreeBox.hasChildNodes() == true) {
		for (var i=0; i < stepThreeBox.childNodes; i++) {
			stepThreeBox.removeChild(stepThreeBox.childNodes[i]);
		}
	}
	
	stepThreeBox.innerHTML = '';

	
		var subs = subRegions[selection];
		
		// h3
		var header = document.createElement('h3');
		
		var headerText = document.createTextNode('Step 3: Subregion');
		header.appendChild(headerText);
		
		stepThreeBox.appendChild(header);
		
		for (var i=0; i < subs.length; i++) {
			var id = 'subreg_' + formatName(subs[i]);
			
			// label
			var label = document.createElement('label');
			label.setAttribute('for', id);
			label.className = 'option_off';
			label.onclick = function() {
				var innerRadios = this.getElementsByTagName('input');
				
				for (var i=0; i < innerRadios.length; i++) {
					if (innerRadios[i].type != 'radio') {
						continue;
					}
					
					innerRadios[i].checked = true;
					stepThree(innerRadios[i], selection);
				}
			}
			
			// radio button
			var radio = document.createElement('input');
			radio.type = 'radio';
			radio.name = 'subregion';
			radio.value = subs[i];
			radio.setAttribute('id', id);
			label.appendChild(radio);
			
			// text
			var radioText = document.createTextNode(subs[i]);
			label.appendChild(radioText);
			
			stepThreeBox.appendChild(label);

	}
}

function formatName(text) {
	text = text.replace(/[ \/\-,]+/g, '_');
	text = text.toLowerCase();
	
	return text;
}

function highlight(radioElement) {
	var stepNumber  = getStepNumber(radioElement);
	
	for (i=0; i < radios[stepNumber].length; i++) {
		if (radios[stepNumber][i].checked) {
			radios[stepNumber][i].parentNode.className = 'option_on';
		} else {
			radios[stepNumber][i].parentNode.className = 'option_off';
		}
	}
}

function slideBox(elementArray, endPos) {
	var currentPos = (isNaN(parseInt(elementArray[0].style.left))) ? 0 : parseInt(elementArray[0].style.left);
	
	if (currentPos == endPos) {
		return;	
	}
	
	// move box
	moveBox(elementArray, currentPos, endPos);
}

function moveBox(elementArray, currentPos, endPos) {
	var newPos  = getNextValue(currentPos, endPos, changeRate);
	
	if (newPos != endPos && elementArray != undefined) {
		for (var i=0; i < elementArray.length; i++) {
			elementArray[i].style.left = newPos + 'px';
		}
		setTimeout(function() { moveBox(elementArray, newPos, endPos); }, frameRate);
	}
}
	
function getNextValue(current, end, rate) {
	var totalDistance = parseInt(end) - parseInt(current);
	
	if (totalDistance != 0) {
		delta = (totalDistance < 2 && totalDistance > -2) ? totalDistance : roundAwayFromZero(totalDistance / rate);
		return (parseInt(current) + parseInt(delta));
	}
}

function roundAwayFromZero(number) {
		number = parseFloat(number);
	
	if (number != 0) {
		number = (number > 0) ? Math.ceil(number) : Math.floor(number);
	}
	
	return number;
}
