function ShowFixInfo(infoType, buttonID, root)
{
	var centerColumn = GetElementById(buttonID + "_centerColumn");
	var rightColumn = GetElementById(buttonID + "_rightColumn");
	var selfHelpArrowImage = GetElementById(buttonID + "_selfHelpArrowImage");
	var proHelpArrowImage = GetElementById(buttonID + "_proHelpArrowImage");
	var selfHelpInfoDiv = GetElementById(buttonID + "_selfHelpInfoDiv");
	var showSelfHelp = false;
	var showProHelp = false;

	if (infoType == "SelfHelp")
	{
		showSelfHelp = (GetElementById(buttonID + "_selfHelpInfoDiv").style.display == "none");
	}
	else
	{
		showProHelp = (GetElementById(buttonID + "_proHelpInfoDiv").style.display == "none");
	}

	centerColumn.className = showSelfHelp ? "CenterColumnNoBottomBorder" : "CenterColumn";
	rightColumn.className = showProHelp ? "RightColumnNoBottomBorder" : "RightColumn";
	selfHelpArrowImage.src = showSelfHelp ? root + "/Images/DiagnosticReport/ArrowDownButton.gif" : root + "/Images/DiagnosticReport/ArrowRightButton.gif";
	proHelpArrowImage.src = showProHelp ? root + "/Images/DiagnosticReport/ArrowDownButton.gif" : root + "/Images/DiagnosticReport/ArrowRightButton.gif";
	var success = UITools.ToggleDisplay(buttonID + "_selfHelpInfoDiv", !showSelfHelp);
	success = UITools.ToggleDisplay(buttonID + "_proHelpInfoDiv", !showProHelp);
}

function MakeUpperCase(element, forceZero)
{
	element.value = element.value.toUpperCase();
	
	if(forceZero)
	{
		element.value = element.value.replace("O", "0");
	}
}

function ToggleElementDisplay(element)
{
	element = GetElementById(element);
	
	if(element.style.display == "")
	{
		element.style.display = "none";
	}
	else
	{
		element.style.display = "";
	}
}

function ShowScheduledMaintenance(root, vehicleId)
{
	window.open(root + "/DiagnosticReports/ScheduledMaintenancePopup.aspx?Id=" + escape(vehicleId),"smpopup","status=0,toolbar=0,menubar=0,resizable=1,scrollbars=yes,height=500,width=518");
}

function ShowWarranty(root, warrantyId)
{
	window.open(root + "/DiagnosticReports/WarrantyPopup.aspx?Id=" + escape(warrantyId), "wpopup", "status=0,toolbar=0,menubar=0,resizable=1,scrollbars=yes,height=500,width=518");
}

function IsDTCOBD1(dtcValue, manufacturerName, year)
{
	var isCodeValid = false;
	var validationExpression = "";
	
	if(!manufacturerName)
	{
		manufacturerName = "";
	}

	if(!year || year <= 1995)
	{
		switch(manufacturerName.toLowerCase())
		{
			case "gm":
			case "isuzu":
			case "chrysler":
			case "jeep":
			case "nissan":
			case "infinity":
				validationExpression = "^[0-9]{2,2}$";
				break;

			case "ford":
			case "lincoln":
			case "mercury":
				validationExpression = "^[0-9]{2,3}$";
				break;
				
			case "honda":
			case "acura":
			case "toyota":
			case "lexus":
				validationExpression = "^[0-9]{1,2}$";
				break;
				
			default:
				validationExpression = "^[0-9]{1,3}$";
				break;
		}
	}

	if(validationExpression != "")
	{
		isCodeValid = (dtcValue == "" || dtcValue.match(validationExpression));
	}

	return isCodeValid;
}

function IsDTCOBD2(dtcValue, manufacturerName, year)
{
	var isCodeValid = false;
	var validationExpression = "^[bcpuBCPU]{1}[0-9]{1}[0-9a-fA-F]{3}$";
	
	if(!manufacturerName)
	{
		manufacturerName = "";
	}

	switch(manufacturerName.toLowerCase())
	{
		case "gm":
		case "ford":
		case "chrysler":
		case "toyota":
			if(year)
			{
				if(year < 1994)
				{
					validationExpression = "";
				}
			}
			break;

		default:
			if(year)
			{
				if(year && year < 1996)
				{
					validationExpression = "";
				}
			}
			break;
	}

	if(validationExpression != "")
	{
		isCodeValid = (dtcValue == "" || dtcValue.match(dtcValue, validationExpression));
	}

	return isCodeValid;
}

function IsDTCValid(dtcValue, manufacturerName, year)
{
	return (IsDTCOBD1(dtcValue, manufacturerName, year) || IsDTCOBD2(dtcValue, manufacturerName, year));
}

function ValidatePostalCode(source, arguments)
{
	if(arguments.Value != null && arguments.Value != "")
	{
		//Check for Canadian zip codes
		if (arguments.Value.match(/^[\da-zA-Z]{3}[ -]{0,1}[\da-zA-Z]{3}$/))
		{
			arguments.IsValid = true;
		}
		//Check for U.S. zip codes
		else if (arguments.Value.match(/^\d{5}(-{1}\d{4}){0,1}$/))
		{
			arguments.IsValid = true;
		}
		//Check for Japanese zip codes
		else if (arguments.Value.match(/^[\da-zA-Z]{3}-[\da-zA-Z]{4}$/))
		{
			arguments.IsValid = true;
		}
		else
		{
			arguments.IsValid = false;
		}
	}
	else
	{
		//evaluate to true since the required validator will get this error.
		arguments.IsValid = true;
	}
}

function PopulateStates(countryDropDown)
{
	var prefix = countryDropDown.id;
	prefix = prefix.replace("Country","");
	
	var selectedCountry		= FormTools.GetFormElementValue(countryDropDown);
	var stateDropDown		= GetElementById(prefix + "State");
	var otherStateTextbox	= GetElementById(prefix + "StateOther");
	var otherStateValidator	= GetElementById(prefix + "StateOther_rfv");
	var isDropDownVisible	= true;
	
	stateDropDown.options.length = 0;
	
	switch(selectedCountry)
	{
		case "US":
			stateDropDown.options[0] = new Option("Select...","");
			stateDropDown.options[1] = new Option("AL","AL");
			stateDropDown.options[2] = new Option("AK","AK");
			stateDropDown.options[3] = new Option("AZ","AZ");
			stateDropDown.options[4] = new Option("AR","AR");
			stateDropDown.options[5] = new Option("CA","CA");
			stateDropDown.options[6] = new Option("CO","CO");
			stateDropDown.options[7] = new Option("CT","CT");
			stateDropDown.options[8] = new Option("DE","DE");
			stateDropDown.options[9] = new Option("DC","DC");
			stateDropDown.options[10] = new Option("FL","FL");
			stateDropDown.options[11] = new Option("GA","GA");
			stateDropDown.options[12] = new Option("HI","HI");
			stateDropDown.options[13] = new Option("ID","ID");
			stateDropDown.options[14] = new Option("IL","IL");
			stateDropDown.options[15] = new Option("IN","IN");
			stateDropDown.options[16] = new Option("IA","IA");
			stateDropDown.options[17] = new Option("KS","KS");
			stateDropDown.options[18] = new Option("KY","KY");
			stateDropDown.options[19] = new Option("LA","LA");
			stateDropDown.options[20] = new Option("ME","ME");
			stateDropDown.options[21] = new Option("MD","MD");
			stateDropDown.options[22] = new Option("MA","MA");
			stateDropDown.options[23] = new Option("MI","MI");
			stateDropDown.options[24] = new Option("MN","MN");
			stateDropDown.options[25] = new Option("MS","MS");
			stateDropDown.options[26] = new Option("MO","MO");
			stateDropDown.options[27] = new Option("MT","MT");
			stateDropDown.options[28] = new Option("NE","NE");
			stateDropDown.options[29] = new Option("NV","NV");
			stateDropDown.options[30] = new Option("NH","NH");
			stateDropDown.options[31] = new Option("NJ","NJ");
			stateDropDown.options[32] = new Option("NM","NM");
			stateDropDown.options[33] = new Option("NY","NY");
			stateDropDown.options[34] = new Option("NC","NC");
			stateDropDown.options[35] = new Option("ND","ND");
			stateDropDown.options[36] = new Option("OH","OH");
			stateDropDown.options[37] = new Option("OK","OK");
			stateDropDown.options[38] = new Option("OR","OR");
			stateDropDown.options[39] = new Option("PA","PA");
			stateDropDown.options[40] = new Option("RI","RI");
			stateDropDown.options[41] = new Option("SC","SC");
			stateDropDown.options[42] = new Option("SD","SD");
			stateDropDown.options[43] = new Option("TN","TN");
			stateDropDown.options[44] = new Option("TX","TX");
			stateDropDown.options[45] = new Option("UT","UT");
			stateDropDown.options[46] = new Option("VT","VT");
			stateDropDown.options[47] = new Option("VA","VA");
			stateDropDown.options[48] = new Option("WA","WA");
			stateDropDown.options[49] = new Option("WV","WV");
			stateDropDown.options[50] = new Option("WI","WI");
			stateDropDown.options[51] = new Option("WY","WY");
			break;
		
		case "CA":
			stateDropDown.options[0] = new Option("Select...","");
			stateDropDown.options[1] = new Option("AB","AB");
			stateDropDown.options[2] = new Option("BC","BC");
			stateDropDown.options[3] = new Option("MB","MB");
			stateDropDown.options[4] = new Option("NB","NB");
			stateDropDown.options[5] = new Option("NL","NL");
			stateDropDown.options[6] = new Option("NT","NT");
			stateDropDown.options[7] = new Option("NS","NS");
			stateDropDown.options[8] = new Option("NU","NU");
			stateDropDown.options[9] = new Option("ON","ON");
			stateDropDown.options[10] = new Option("PE","PE");
			stateDropDown.options[11] = new Option("QC","QC");
			stateDropDown.options[12] = new Option("SK","SK");
			stateDropDown.options[13] = new Option("YT","YT");
			break;
		
		case "JP":
			isDropDownVisible = false;
			stateDropDown.options[0] = new Option("OTHER","OTHER");
			break;
	}
	
	stateDropDown.style.display		= isDropDownVisible ? "" : "none";
	otherStateTextbox.style.display	= isDropDownVisible ? "none" : "";
	ValidatorEnable(otherStateValidator, !isDropDownVisible);
}

function FormatPhoneNumber(localEvent, textboxElement)
{
	var keyCode = 0;
	
	if(navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 4)
	{	
		if(localEvent.which)
		{
			keyCode = localEvent.which;
		}
	}
	else
	{
		if(!localEvent)
		{
			localEvent = window.event;
		}
		
		keyCode = localEvent.keyCode;
	}
	
	//textboxElement.value.length <= 11 && 
	if(keyCode >= 48 && keyCode <= 57)
	{
		if(textboxElement.value.length == 2)
		{
			textboxElement.value = textboxElement.value + String.fromCharCode(keyCode) + "-";
			localEvent.returnValue = false;
		}
		else if(textboxElement.value.length == 6)
		{
			textboxElement.value = textboxElement.value + String.fromCharCode(keyCode) + "-";
			localEvent.returnValue = false;
		}
		else
		{	
			var regex = new RegExp(/\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})/);
		
			var phoneNumber		= textboxElement.value + String.fromCharCode(keyCode);
			var matches			= phoneNumber.match(regex);
		
			if(matches && matches.length == 4)
			{
				textboxElement.value = matches[1] + "-" + matches[2] + "-" + matches[3];
				localEvent.returnValue = false;
			}
		}
	}
	else
	{
		localEvent.returnValue = false;
	}
}


function GetLeftPosition(obj)
{
	var currentLeft = 0;

	if(obj.offsetParent)
	{
		while(obj.offsetParent)
		{
			currentLeft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if(obj.x)
	{
		currentLeft += obj.x;
	}
	
	return currentLeft;
}


function GetTopPosition(obj)
{
	var currentTop = 0;
	
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			currentTop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if(obj.y)
	{
		currentTop += obj.y;
	}
	
	return currentTop;
}

