var bModelGroupChanged = false;
var iFormCompletionStep = 6;




function buildSelectedString(oForm)
{
	var pvsStr = '';
	
	//Loops through all form elements
	for(i=0; i < oForm.length; i++)
	{
		if(oForm.elements[i].type == 'select-one' && oForm.elements[i].disabled == false)
		{
			pvsStr =  pvsStr + oForm.elements[i].options[oForm.elements[i].selectedIndex].value;
		
		}
		else if(oForm.elements[i].type == 'select-one')
		{
			break;
		}
	}
	
	return pvsStr;
}


function getNextSelect(sel)
{
	var oForm = sel.form;
	var bFound = false;
	
	//Loops through all form elements
	for(i=0; i < oForm.length; i++)
	{
		if(oForm.elements[i].id == sel.id)
		{
			bFound = true;
		}
		else 
		{
			if(bFound == true && oForm.elements[i].type == 'select-one')
			{
				return oForm.elements[i];
			}
		}
	}
	return null;
}



function SelectValue(sel, bDontSubmit)
{

	var bFound = false;
	var NextSel;
	var pvsStr = '';
	var bFormCompleted = false;
	
	changeLabels(sel.form);
	clearSubsequentSelects(sel);
	
	if(sel.options[sel.selectedIndex].value.length > 0)
	{
		pvsStr = buildSelectedString(sel.form);
		NextSel = getNextSelect(sel);
		bFormCompleted = FormIsCompleted(sel.form);
																					
		if(sel.options[sel.selectedIndex].value.length > 0)
		{
			if(!bFormCompleted)
			{		
				//The next sel will now be enabled
				enableSelect(NextSel);
			}
		}	
		
		if(isModelGroupSelected(sel.form))
		{
			if(bModelGroupChanged || (bDontSubmit != true && !areTrimOrColorsSelected(sel.form)))
			{
				disableSelect(NextSel);
				
				//ModelGroup IS selected, trim/color are NOT selected, so submit the first half of the form
				return submitForm(sel);
				
			}
			else	//IF check to see if final selector is chosen and should submit form to final destination
			{
				if(!bFormCompleted)
					//Find the option lists that corresponds to the pvsStr list and set it into the next select control
					SyncOptionsToSelect(eval('opts' + pvsStr), NextSel);
				else
				{
				
					if(FormIsCompleted(sel.form))
						ShowSubmitButton();
					else
						HideSubmitButton();					
				}
			}
		}
		else
		{
			if(!bFormCompleted)
				//Find the option lists that corresponds to the pvsStr list and set it into the next select control
				SyncOptionsToSelect(eval('opts' + pvsStr), NextSel);
		}
	}
	else
	{
		HideSubmitButton();
	}
	
	return false;
}




function encodeString(s)
{
	s = s.replace(/-/g, '_DASH');
	s = s.replace(/\./g, '_DOT');
	s = s.replace(/\057/g, '_FSLASH');
	s = s.replace(/\(/g, '_LPRN');
	s = s.replace(/\)/g, '_RPRN');
	s = s.replace(/\s/g, '_');
	return s;
}


function decodeString(s)
{
	s = s.replace(/_DASH/g, '-');
	s = s.replace(/_DOT/g, '.');
	s = s.replace(/_FSLASH/g, '/');
	s = s.replace(/_LPRN/g, '(');
	s = s.replace(/_RPRN/g, ')');
	s = s.replace(/_/g, ' ');
	return s;
}


function ShowSubmitButton()
{
	var oElem = document.getElementById('SubmitImage');
	
	if(oElem)
	{
		oElem.style.visibility = "visible";
		oElem.style.position = "absolute";
	}
}


function HideSubmitButton()
{
	
	var oElem = document.getElementById('SubmitImage');
	
	if(oElem)
	{
		oElem.style.visibility = "hidden";
		oElem.style.position = "absolute";
	}
}


function disableSelect(sel)
{
	sel.selectedIndex = 0;
	sel.disabled = true;
}


function enableSelect(sel)
{
	sel.disabled = false;
}

function myUnescape(val)
{
	val = unescape(val);
	val = "" + val;
	while (true)
	{
		var i = val.indexOf('+');
		if (i < 0)
			break;
		val = val.substring(0, i) + ' ' +
			val.substring(i + 1, val.length);
	}
	
	return val;
}


function TurnOnAndFormatSelect(oForm, sId, sName)
{
	var ImgHTML = document.getElementById('RequiredFieldImageURL');
	if(ImgHTML)
	{
		ImgHTML = myUnescape(ImgHTML.innerHTML);
		
		var iID = sId.substr(3);
		ImgHTML = ImgHTML.replace(/{id}/g, iID);
	}

	var sel = document.getElementById(sId);
	sel.style.visibility = 'visible';
	sel.style.position = 'relative';

	var lbl = document.getElementById(sId + '-label');
	if(lbl)
	{
		//if(lbl.style.visibility != 'visible')
		{
			//lbl.innerHTML = HTMLBefore + sName + HTMLBetween;
			lbl.innerHTML = ImgHTML + sName + '<BR>';
			lbl.style.visibility = 'visible';
			lbl.style.position = 'relative';	
					
		}
	}
	
	lbl = document.getElementById(sId + '-labelBR');
	if(lbl)
	{
		if(lbl.visibility == 'hidden')
		{
			lbl.style.visibility = 'visible';
			lbl.style.position = 'relative';			
		}
	}
}


function TurnOffAndFormatSelect(oForm, sId)
{
	var sel = document.getElementById(sId);
	sel.style.visibility = 'hidden';
	sel.style.position = 'absolute';
	
	var lbl = document.getElementById(sId + '-label');
	lbl.style.visibility = 'hidden';
	lbl.style.position = 'absolute';			
	
	lbl = document.getElementById(sId + '-labelBR');
	if(lbl)
	{
		lbl.style.visibility = 'hidden';
		lbl.style.position = 'absolute';			
	}
}


function changeLabels(oForm)
{
	var sVal = document.getElementById('sel1').options[document.getElementById('sel1').selectedIndex].value;
	var lbl;
	var sel;
	
	switch(sVal)
	{
		case 'A':
		case 'B':
			iFormCompletionStep = 6;
			TurnOnAndFormatSelect(oForm, 'sel3', 'Model');
			TurnOnAndFormatSelect(oForm, 'sel4', 'Trim');
			TurnOnAndFormatSelect(oForm, 'sel5', 'Exterior Color');
			TurnOnAndFormatSelect(oForm, 'sel6', 'Interior Color');
			break;
			
		case 'MC':
			iFormCompletionStep = 5;
			TurnOnAndFormatSelect(oForm, 'sel3', 'Category');
			TurnOnAndFormatSelect(oForm, 'sel4', 'Model');
			TurnOnAndFormatSelect(oForm, 'sel5', 'Color');
			TurnOffAndFormatSelect(oForm, 'sel6');
			break;
			
		case 'PW':
		case 'MS':
		case 'AT':
		case 'MUV':
			iFormCompletionStep = 4;
			TurnOnAndFormatSelect(oForm, 'sel3', 'Model');
			TurnOnAndFormatSelect(oForm, 'sel4', 'Color');
			TurnOffAndFormatSelect(oForm, 'sel5');
			TurnOffAndFormatSelect(oForm, 'sel6');
			break;
	
	}
}


function NewOptionsList(SelObj)
{
	var	arr = new Array();
	var sVal;
	var sTxt;
	var iSplitPos;
	
	
	if (arguments.length > 0) {
			
		for (var i=0; i<arguments.length; i++) {
			sTxt = arguments[i].toString();
			
			iSplitPos = sTxt.indexOf("^");
			if(iSplitPos > -1)
			{
				sVal = sTxt.substr(iSplitPos + 1);
				sTxt = decodeString(sTxt.substr(0, iSplitPos));
			}
			else
			{
				
				sVal = sTxt;
				sTxt = decodeString(sTxt);
			}
			
			arr[arr.length] = new Option(sTxt, sVal); 
		}
	}
	return arr;
}	



function SyncOptionsToSelect(opts, sel, sSelected)
{
	if(!sSelected) 
	{
		sSelected = '';
	}
		
	InitializeSelectOptions(sel); //Clears all options, Makes "Select One" as first option, and disables selector
	
	//loop through all options, appending them to the sel's option list
	for(i=0; i<opts.length; i++)
	{
		sel.options[i + 1] = opts[i];		//append
		
		//if we have a selected value passed in, and it matches this option, then set this option in the sel list to be "selected"
		if((sSelected && sSelected.length > 0 && opts[i].value == sSelected) || opts.length == 1)	
		{
			sel.options[i+1].selected = true;
		}

	}
	
	//Enable the select
	sel.disabled = false;
	
	//
	clearSubsequentSelects(sel);
	
	if(opts.length == 1 && sSelected.length == 0)
	{
		if((getModelGroupSelectorCtrlID(sel.form) == sel.id) && (infiniteLoopCheckValueGet() == 0))
		{
			infiniteLoopCheckValueSet(1);
			SelectValue(sel, false);
		}
		else
		{
			SelectValue(sel, true);
		}
	}


	if(FormIsCompleted(sel.form))
		ShowSubmitButton();
	else
		HideSubmitButton();	

}

function infiniteLoopCheckValueGet()
{
	return document.getElementById('HDN_Resubmit_Forced').value;
}

function infiniteLoopCheckValueSet(val)
{
	document.getElementById('HDN_Resubmit_Forced').value = val;
}




function clearSubsequentSelects(sel)
{
	//Clears all subsequent select option lists and disables the select
	var bFound = false;
	
	for(i=0; i< sel.form.length; i++)
	{
		//check for a match
		if(sel.form.elements[i].name == sel.name)
		{
			bFound = true;
		}
		else	//wasn't a match, but if we found a match previously, then disable the select
		{
			if(bFound == true && sel.form.elements[i].type == 'select-one')
			{
				//Clears options, inserts 'Select one' as first option and disables it
				InitializeSelectOptions(sel.form.elements[i]);
				
				disableSelect(sel.form.elements[i]);
			}
		}
	}
}


function InitializeSelectOptions(sel)
{
	//Clears options, inserts 'Select one' as first option and disables it
	sel.options.length = 0;
	sel.options[0] = new Option(' - Select One - ', '');
	disableSelect(sel);
}


function submitForm(sel)
{
	if(sel.options[sel.selectedIndex].value != '')
	{
		sel.form.submit();
		return true;
	}
	return false;
}


function getModelGroupSelectorCtrlID(oForm)
{	
	if(getSelectedValue(document.getElementById('sel1')) == 'MC')
	{
		return 'sel4';
	}
	else
	{
		return 'sel3';
	}
}


function isModelGroupSelected(oForm)
{


	//Are all of first 3 selected?
	if( getSelectedValue(document.getElementById('sel1')).length > 0 && 
		getSelectedValue(document.getElementById('sel2')).length > 0 && 
		getSelectedValue(document.getElementById('sel3')).length > 0)
	{
		//If MC is selected as first select, then the 4th must also be selected
		if(getSelectedValue(document.getElementById('sel1')) == 'MC')
		{
			//Is 4th selected?
			if(getSelectedValue(document.getElementById('sel4')).length > 0)
			{
				return true;
			}
			else	//MC selected, but 4th pull down is not selected
			{
				return false;
			}
		}
		else	//Not MC, and all of first 3 are selected, so we're good to go
		{
			return true;
		}
	}
	else	//one of first 3 isn't selected
	{
		return false;
	}
}


function areTrimOrColorsSelected(oForm)	//returns true if anything after the ModelGroup is selected, false otherwise
{
	var bFound = false;
	var oMGSel = document.getElementById(getModelGroupSelectorCtrlID(oForm));
	
	if(oMGSel)
	{
		for(i = 0; i < oForm.length; i++)
		{
			if(oForm.elements[i].name == oMGSel.name)
			{
				bFound = true;
			}	
			else
			{
				if(bFound == true)
				{
					if(oForm.elements[i].type == 'select-one')
					{
						if(oForm.elements[i].selectedIndex > 0)
						{
							return true;
						}
					}
				}
			}
		}
	}
	
	return false;
}


function FormIsCompleted(oForm)
{
	var TheName = '';
	var bRet = false;
	
	var s = 'sel' + iFormCompletionStep.toString();
	var selector2 = document.getElementById(s);
	
	if(selector2.options[selector2.selectedIndex].value.length > 0 && selector2.disabled == false)
	{
		oForm.action = oForm.hdnAction.value;
		bRet = true;
		
		finalizeForm(oForm);
	}
	else
	{
		oForm.action = '';
	}
	
	return bRet;
}


function finalizeForm(oForm)
{
	var Division, ParentSeriesGroupCd, Year, ModelGroup, AutoTrimAndTrans, ModelID, ExtColorName, ExtColodCode, IntColorName, IntColorCode;
	var iPos;
	
	Division = decodeString(getSelectedValue(oForm.sel1));
	Year = decodeString(getSelectedValue(oForm.sel2));
	
	switch(Division)
	{
		case 'A':
		case 'B':
			ParentSeriesGroupCd = '';
			ModelGroup = decodeString(getSelectedValue(oForm.sel3));
			AutoTrimAndTrans = decodeString(getSelectedOptionDisplayText(oForm.sel4));
			ModelID = decodeString(getSelectedValue(oForm.sel4));
			ExtColorName = decodeString(getSelectedOptionDisplayText(oForm.sel5));
			ExtColodCode = decodeString(getSelectedValue(oForm.sel5));
			IntColorName = decodeString(getSelectedOptionDisplayText(oForm.sel6));
			IntColorCode = decodeString(getSelectedValue(oForm.sel6));
			break;
			
		case 'MC':
			ParentSeriesGroupCd = Division;
			Division = 'M';
			ModelGroup = decodeString(getSelectedValue(oForm.sel4));
			AutoTrimAndTrans = '';
			ExtColorName = decodeString(getSelectedOptionDisplayText(oForm.sel5));
			IntColorName = '';
			IntColorCode = '';
			
			iPos = getSelectedValue(oForm.sel5).search(/\|/);
			ModelID = decodeString(getSelectedValue(oForm.sel5));
			ModelID = ModelID.substr(iPos + 1);
			
			ExtColodCode = decodeString(getSelectedValue(oForm.sel5));
			ExtColodCode = ExtColodCode.substr(0, iPos);
			break;
			
		case 'PW':
		case 'MS':
		case 'AT':
		case 'MUV':
			ParentSeriesGroupCd = Division;
			Division = 'M';
			ModelGroup = decodeString(getSelectedValue(document.getElementById('sel3')));
			AutoTrimAndTrans = '';
			ExtColorName = decodeString(getSelectedOptionDisplayText(document.getElementById('sel4')));
			IntColorName = '';
			IntColorCode = '';
			
			iPos = getSelectedValue(oForm.sel4).search(/\|/);
			ModelID = decodeString(getSelectedValue(oForm.sel4));
			ModelID = ModelID.substr(iPos + 1);
			
			ExtColodCode = decodeString(getSelectedValue(oForm.sel4));
			ExtColodCode = ExtColodCode.substr(0, iPos);
			break;
	}
	
	setFinalHiddenInputValues(oForm, Division, ParentSeriesGroupCd, Year, ModelGroup, AutoTrimAndTrans, ModelID, ExtColorName, ExtColodCode, IntColorName, IntColorCode);
}



function getSelectedValue(sel)
{
	return sel.options[sel.options.selectedIndex].value;
}


function getSelectedOptionDisplayText(sel)
{
	return sel.options[sel.options.selectedIndex].text;
}


function setFinalHiddenInputValues(oForm, Division, ParentSeriesGroupCd, Year, 
	ModelGroup, AutoTrimAndTrans, ModelID, ExtColorName, 
	ExtColodCode, IntColorName, IntColorCode)
{
	oForm.elements['Division'].value = Division;
	oForm.elements['ParentSeriesGroupCd'].value = ParentSeriesGroupCd;
	oForm.elements['Year'].value = Year;
	oForm.elements['ModelGroup'].value = ModelGroup;
	oForm.elements['AutoTrimAndTrans'].value = AutoTrimAndTrans;
	oForm.elements['ModelID'].value = ModelID;
	oForm.elements['ExtColorName'].value = ExtColorName;
	oForm.elements['ExtColorCode'].value = ExtColodCode;
	oForm.elements['IntColorName'].value = IntColorName;
	oForm.elements['IntColorCode'].value = IntColorCode;
}



if (/Mozilla\/5\.0/.test(navigator.userAgent))
   document.write('<script type="text/javascript" src="/js/Mozilla-InnerHTML.js"></sc' + 'ript>');
